]> git.cworth.org Git - apitrace/commitdiff
Detect/handle more APIs in CLI/GUI.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Mon, 23 Apr 2012 09:18:28 +0000 (10:18 +0100)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Mon, 23 Apr 2012 09:18:28 +0000 (10:18 +0100)
cli/cli_trace.cpp
common/trace_api.hpp
common/trace_parser.cpp
common/trace_tools_trace.cpp
gui/retracer.cpp
gui/tracedialog.cpp

index a67416b151893e099c0067dfa51b423cace8519d..80775090c7b1be79cbce6dc9a8e9e6f6b8c521d2 100644 (file)
@@ -104,6 +104,10 @@ command(int argc, char *argv[])
                 api = trace::API_D3D9;
             } else if (strcmp(optarg, "d3d10") == 0) {
                 api = trace::API_D3D10;
+            } else if (strcmp(optarg, "d3d10_1") == 0) {
+                api = trace::API_D3D10_1;
+            } else if (strcmp(optarg, "d3d11") == 0) {
+                api = trace::API_D3D11;
             } else {
                 std::cerr << "error: unknown API `" << optarg << "`\n";
                 usage();
index 7619f71d1d5d853c98962fda56ba047bb34809fc..4c896dbfaed52cf57f28a1f66cd2ae08545221a2 100644 (file)
@@ -44,10 +44,13 @@ enum API {
     API_UNKNOWN = 0,
     API_GL, // GL + GLX/WGL/CGL
     API_EGL, // GL/GLES1/GLES2/VG + EGL
+    API_DX, // All DirectX
     API_D3D7,
     API_D3D8,
     API_D3D9,
     API_D3D10,
+    API_D3D10_1,
+    API_D3D11,
 };
 
 
index 11ec229405aa53f391c29e09ae8e9b5f5ce0ae5f..0e4fba098db597d4e782251e7149d7c36ee80a0c 100644 (file)
@@ -242,12 +242,16 @@ Parser::parse_function_sig(void) {
          */
         if (api == API_UNKNOWN) {
             const char *n = sig->name;
-            if ((n[0] == 'g' && n[1] == 'l' && n[2] == 'X') || // glX
-                (n[0] == 'w' && n[1] == 'g' && n[2] == 'l' && n[3] >= 'A' && n[3] <= 'Z') || // wgl[A-Z]
-                (n[0] == 'C' && n[1] == 'G' && n[2] == 'L')) { // CGL
+            if ((n[0] == 'g' && n[1] == 'l' && n[2] == 'X') || // glX*
+                (n[0] == 'w' && n[1] == 'g' && n[2] == 'l' && n[3] >= 'A' && n[3] <= 'Z') || // wgl[A-Z]*
+                (n[0] == 'C' && n[1] == 'G' && n[2] == 'L')) { // CGL*
                 api = trace::API_GL;
-            } else if (n[0] == 'e' && n[1] == 'g' && n[2] == 'l' && n[3] >= 'A' && n[3] <= 'Z') { // egl
+            } else if (n[0] == 'e' && n[1] == 'g' && n[2] == 'l' && n[3] >= 'A' && n[3] <= 'Z') { // egl[A-Z]*
                 api = trace::API_EGL;
+            } else if (n[0] == 'D' &&
+                       ((n[1] == 'i' && n[2] == 'r' && n[3] == 'e' && n[4] == 'c' && n[5] == 't') || // Direct*
+                        (n[1] == '3' && n[2] == 'D'))) { // D3D*
+                api = trace::API_DX;
             } else {
                 /* TODO */
             }
index 36fe735466e104c98fcb4a5afe5902c0ed2a793d..ad355abcbf92b1c327d6e9671b6206410a030768 100644 (file)
@@ -129,6 +129,12 @@ traceProgram(API api,
     case API_D3D10:
         wrapperFilename = "d3d10.dll";
         break;
+    case API_D3D10_1:
+        wrapperFilename = "d3d10_1.dll";
+        break;
+    case API_D3D11:
+        wrapperFilename = "d3d11.dll";
+        break;
 #endif
     default:
         std::cerr << "error: unsupported API\n";
index 983cd1a99f21f4f8f70c2c18ac49233afb737d53..69dca6c6b26f542845b5857952177692210f19e7 100644 (file)
@@ -229,11 +229,28 @@ void Retracer::run()
     QString prog;
     QStringList arguments;
 
-    if (m_api == trace::API_GL) {
+    switch (m_api) {
+    case trace::API_GL:
         prog = QLatin1String("glretrace");
-    } else if (m_api == trace::API_EGL) {
+        break;
+    case trace::API_EGL:
         prog = QLatin1String("eglretrace");
-    } else {
+        break;
+    case trace::API_DX:
+    case trace::API_D3D7:
+    case trace::API_D3D8:
+    case trace::API_D3D9:
+    case trace::API_D3D10:
+    case trace::API_D3D10_1:
+    case trace::API_D3D11:
+#ifdef Q_OS_WIN
+        prog = QLatin1String("d3dretrace");
+#else
+        prog = QLatin1String("wine");
+        arguments << QLatin1String("d3dretrace.exe");
+#endif
+        break;
+    default:
         emit finished(QLatin1String("Unsupported API"));
         return;
     }
index 15067077d09aeffac1def5fbdbc276113f0e6259..fcfdf4661241ff30858f0f5332d83fbd30bcc126 100644 (file)
@@ -15,6 +15,8 @@ TraceDialog::TraceDialog(QWidget *parent)
     apiComboBox->addItem("D3D8");
     apiComboBox->addItem("D3D9");
     apiComboBox->addItem("D3D10");
+    apiComboBox->addItem("D3D10_1");
+    apiComboBox->addItem("D3D11");
 #else
     apiComboBox->addItem("EGL");
 #endif