X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=README.markdown;h=b1eb08397aa4bf1a64d1db5b2e7cf3dd11248599;hb=db3491e272f3754676673d52c89238e9cc43b7ad;hp=68c9c4af378d59e19588fd5e0915a285ff89c75d;hpb=77653bfda5aff9930096d1ca2db9db13eeabe2ac;p=apitrace diff --git a/README.markdown b/README.markdown index 68c9c4a..b1eb083 100644 --- a/README.markdown +++ b/README.markdown @@ -49,12 +49,10 @@ View the trace with Replay an OpenGL trace with - glretrace application.trace + apitrace retrace application.trace -Pass the `-sb` option to use a single buffered visual. Pass `--help` to -`glretrace` for more options. - -EGL traces must be replayed with `eglretrace` instead of `glretrace`. +Pass the `--sb` option to use a single buffered visual. Pass `--help` to +`apitrace retrace` for more options. Basic GUI usage @@ -78,22 +76,22 @@ Call sets Several tools take `CALLSET` arguments, e.g: - apitrace dump --calls CALLSET foo.trace - glretrace -S CALLSET foo.trace + apitrace dump --calls=CALLSET foo.trace + apitrace dump-images --calls=CALLSET foo.trace The call syntax is very flexible. Here are a few examples: * `4` one call - * `1,2,4,5` set of calls + * `0,2,4,5` set of calls - * `"1 2 4 5"` set of calls (commas are optional and can be replaced with whitespace) + * `"0 2 4 5"` set of calls (commas are optional and can be replaced with whitespace) - * `1-100/2` calls 1, 3, 5, ..., 99 + * `0-100/2` calls 1, 3, 5, ..., 99 - * `1-1000/draw` all draw calls between 1 and 1000 + * `0-1000/draw` all draw calls between 0 and 1000 - * `1-1000/fbo` all fbo changes between calls 1 and 1000 + * `0-1000/fbo` all fbo changes between calls 0 and 1000 * `frame` all calls at end of frames @@ -243,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 --------------------------------- @@ -282,8 +287,14 @@ From OpenGL ES applications you can embed annotations in the trace file through extension. -For Direct3D applications you can follow the same procedure used for -[instrumenting an application for PIX](http://technet.microsoft.com/en-us/query/ee417250) +For Direct3D applications you can follow the standard procedure for +[adding user defined events to Visual Studio Graphics Debugger / PIX](http://msdn.microsoft.com/en-us/library/vstudio/hh873200.aspx): + +- `D3DPERF_BeginEvent`, `D3DPERF_EndEvent`, and `D3DPERF_SetMarker` for D3D9 applications. + +- `ID3DUserDefinedAnnotation::BeginEvent`, + `ID3DUserDefinedAnnotation::EndEvent`, and + `ID3DUserDefinedAnnotation::SetMarker` for D3D11.1 applications. Dump GL state at a particular call @@ -291,7 +302,7 @@ Dump GL state at a particular call You can get a dump of the bound GL state at call 12345 by doing: - glretrace -D 12345 application.trace > 12345.json + apitrace retrace -D 12345 application.trace > 12345.json This is precisely the mechanism the GUI obtains its own state. @@ -314,7 +325,7 @@ Recording a video with FFmpeg You can make a video of the output by doing - glretrace -s - application.trace \ + apitrace dump-images -o - application.trace \ | ffmpeg -r 30 -f image2pipe -vcodec ppm -i pipe: -vcodec mpeg4 -y output.mp4 @@ -335,11 +346,11 @@ Profiling a trace You can perform gpu and cpu profiling with the command line options: - * `-pgpu` record gpu times for frames and draw calls. + * `--pgpu` record gpu times for frames and draw calls. - * `-pcpu` record cpu times for frames and draw calls. + * `--pcpu` record cpu times for frames and draw calls. - * `-ppd` record pixels drawn for each draw call. + * `--ppd` record pixels drawn for each draw call. The results from this can then be read by hand or analysed with a script. @@ -348,7 +359,7 @@ table which displays profiling results per shader. For example, to record all profiling data and utilise the per shader script: - ./glretrace -pgpu -pcpu -ppd foo.trace | ./scripts/profileshader.py + apitrace retrace --pgpu --pcpu --ppd foo.trace | ./scripts/profileshader.py Advanced usage for OpenGL implementors @@ -367,17 +378,13 @@ These are the steps to create a regression test-suite around **apitrace**: * obtain reference snapshots, by doing on a reference system: mkdir /path/to/reference/snapshots/ - glretrace -s /path/to/reference/snapshots/ application.trace + apitrace dump-images -o /path/to/reference/snapshots/ application.trace * prune the snapshots which are not interesting -* to do a regression test, do: - - glretrace -c /path/to/reference/snapshots/ application.trace - - Alternatively, for a HTML summary, use `apitrace diff-images`: +* to do a regression test, use `apitrace diff-images`: - glretrace -s /path/to/test/snapshots/ application.trace + apitrace dump-images -o /path/to/test/snapshots/ application.trace apitrace diff-images --output summary.html /path/to/reference/snapshots/ /path/to/test/snapshots/