From: José Fonseca Date: Fri, 7 Dec 2012 07:48:10 +0000 (+0000) Subject: Drop API_D3D10/11. X-Git-Url: https://git.cworth.org/git?p=apitrace;a=commitdiff_plain;h=e51e22f4dbeb0851521b68eca1ac4f42f57f5d2c Drop API_D3D10/11. --- diff --git a/README.markdown b/README.markdown index c821495..b1eb083 100644 --- a/README.markdown +++ b/README.markdown @@ -241,6 +241,13 @@ Then run the application as usual. You can specify the written trace filename by setting the `TRACE_FILE` environment variable before running. +For D3D10 and higher you really must use `apitrace trace -a DXGI ...`. This is +because D3D10-11 API span many DLLs which depend on each other, and once a DLL +with a given name is loaded Windows will reuse it for LoadLibrary calls of the +same name, causing internal calls to be traced erroneously. `apitrace trace` +solves this issue by injecting a DLL `dxgitrace.dll` and patching all modules +to hook only the APIs of interest. + Emitting annotations to the trace --------------------------------- diff --git a/cli/cli_retrace.cpp b/cli/cli_retrace.cpp index 062f51b..e4d8f78 100644 --- a/cli/cli_retrace.cpp +++ b/cli/cli_retrace.cpp @@ -76,10 +76,8 @@ executeRetrace(const std::vector & opts, 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: - // Can be used with WINE + case trace::API_DXGI: + // Use prefix so that it can be used with WINE retraceName = "d3dretrace.exe"; break; default: diff --git a/cli/cli_trace.cpp b/cli/cli_trace.cpp index 1d19ed5..2646ffd 100644 --- a/cli/cli_trace.cpp +++ b/cli/cli_trace.cpp @@ -116,9 +116,7 @@ traceProgram(trace::API api, case trace::API_D3D9: wrapperFilename = "d3d9.dll"; break; - case trace::API_D3D10: - case trace::API_D3D10_1: - case trace::API_D3D11: + case trace::API_DXGI: wrapperFilename = "dxgitrace.dll"; useInject = true; break; @@ -270,12 +268,12 @@ command(int argc, char *argv[]) api = trace::API_D3D8; } else if (strcmp(optarg, "d3d9") == 0) { 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 if (strcmp(optarg, "dxgi") == 0 || + strcmp(optarg, "d3d10") == 0 || + strcmp(optarg, "d3d10_1") == 0 || + strcmp(optarg, "d3d11") == 0 || + strcmp(optarg, "d3d11_1") == 0) { + api = trace::API_DXGI; } else { std::cerr << "error: unknown API `" << optarg << "`\n"; usage(); diff --git a/common/trace_api.hpp b/common/trace_api.hpp index 4c896db..3d491fe 100644 --- a/common/trace_api.hpp +++ b/common/trace_api.hpp @@ -48,9 +48,7 @@ enum API { API_D3D7, API_D3D8, API_D3D9, - API_D3D10, - API_D3D10_1, - API_D3D11, + API_DXGI, // D3D10.x, D3D11.x }; diff --git a/gui/retracer.cpp b/gui/retracer.cpp index c6698f7..738367e 100644 --- a/gui/retracer.cpp +++ b/gui/retracer.cpp @@ -271,9 +271,7 @@ void Retracer::run() 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: + case trace::API_DXGI: #ifdef Q_OS_WIN prog = QLatin1String("d3dretrace"); #else