]> git.cworth.org Git - apitrace/blobdiff - README.markdown
d3dretrace: Dump D3D8 images too.
[apitrace] / README.markdown
index 6f212f5e94413068cbd209cb4c5ec1c08b854bc4..b1eb08397aa4bf1a64d1db5b2e7cf3dd11248599 100644 (file)
@@ -49,10 +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.
+Pass the `--sb` option to use a single buffered visual.  Pass `--help` to
+`apitrace retrace` for more options.
 
 
 Basic GUI usage
@@ -76,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
 
@@ -112,14 +112,17 @@ or 32 bits.  This can be done by doing
 But beware of wrapper shell scripts -- what matters is the architecture of the
 main process.
 
-Run the application you want to trace as
+Run the GLX application you want to trace as
 
-     LD_PRELOAD=/path/to/apitrace/wrappers/glxtrace.so /path/to/application
+    LD_PRELOAD=/path/to/apitrace/wrappers/glxtrace.so /path/to/application
 
 and it will generate a trace named `application.trace` in the current
 directory.  You can specify the written trace filename by setting the
 `TRACE_FILE` environment variable before running.
 
+For EGL applications you will need to use `egltrace.so` instead of
+`glxtrace.so`.
+
 The `LD_PRELOAD` mechanism should work with the majority applications.  There
 are some applications (e.g., Unigine Heaven, Android GPU emulator, etc.), that
 have global function pointers with the same name as GL entrypoints, living in a
@@ -238,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
 ---------------------------------
@@ -277,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
@@ -286,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.
 
@@ -309,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
 
 
@@ -330,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.
 
@@ -343,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
@@ -362,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/