]> git.cworth.org Git - apitrace/blobdiff - retrace/d3d9retrace.py
d3dretrace: Dump D3D8 images too.
[apitrace] / retrace / d3d9retrace.py
index 0ddcf277e1117df1f9c12f5e6785cf3642d58997..db92377e624b8895d0aed87f057352902119bc0b 100644 (file)
@@ -62,6 +62,11 @@ class D3DRetracer(Retracer):
                 print r'    d3d9Dumper.unbindDevice(_this);'
             else:
                 print r'    d3d9Dumper.bindDevice(_this);'
+        if interface.name in ('IDirect3DDevice8', 'IDirect3DDevice8Ex'):
+            if method.name == 'Release':
+                print r'    d3d8Dumper.unbindDevice(_this);'
+            else:
+                print r'    d3d8Dumper.bindDevice(_this);'
 
         # create windows as neccessary
         if method.name in ('CreateDevice', 'CreateDeviceEx', 'CreateAdditionalSwapChain'):
@@ -69,6 +74,31 @@ class D3DRetracer(Retracer):
             print r'    pPresentationParameters->hDeviceWindow = hWnd;'
             if 'hFocusWindow' in method.argNames():
                 print r'    hFocusWindow = hWnd;'
+        
+        if method.name in ('CreateDevice', 'CreateDeviceEx'):
+            print r'    switch (retrace::driver) {'
+            print r'    case retrace::DRIVER_HARDWARE:'
+            print r'        DeviceType = D3DDEVTYPE_HAL;'
+            print r'        break;'
+            print r'    case retrace::DRIVER_SOFTWARE:'
+            print r'    case retrace::DRIVER_REFERENCE:'
+            print r'        DeviceType = D3DDEVTYPE_REF;'
+            print r'        break;'
+            print r'    case retrace::DRIVER_NULL:'
+            if interface.name.startswith('IDirect3D9'):
+                print r'        DeviceType = D3DDEVTYPE_NULLREF;'
+            else:
+                print r'        retrace::warning(call) << "null driver not supported\n";'
+            print r'        break;'
+            print r'    case retrace::DRIVER_MODULE:'
+            print r'        retrace::warning(call) << "driver module not supported\n";'
+            print r'        break;'
+            print r'    default:'
+            print r'        assert(0);'
+            print r'        /* fall-through */'
+            print r'    case retrace::DRIVER_DEFAULT:'
+            print r'        break;'
+            print r'    }'
 
         if method.name in ('Reset', 'ResetEx'):
             print r'    if (pPresentationParameters->Windowed) {'
@@ -91,6 +121,7 @@ class D3DRetracer(Retracer):
         # process events after presents
         if method.name == 'Present':
             print r'    d3dretrace::processEvents();'
+            print r'    Sleep(500);'
 
         if method.name in ('Lock', 'LockRect', 'LockBox'):
             print '    VOID *_pbData = NULL;'
@@ -120,7 +151,7 @@ def main():
     print
 
     moduleName = sys.argv[1]
-    support = bool(sys.argv[2])
+    support = int(sys.argv[2])
 
     api = API()
     
@@ -135,12 +166,11 @@ def main():
             print
         elif moduleName == 'd3d8':
             from specs.d3d8 import d3d8
-            print r'#include <windows.h>'
-            print r'#include <d3d8.h>'
+            print r'#include "d3d8imports.hpp"'
             print r'#include "d3d8size.hpp"'
             api.addModule(d3d8)
             print
-            #print '''static d3dretrace::D3DDumper<IDirect3DDevice8> d3d8Dumper;'''
+            print '''static d3dretrace::D3DDumper<IDirect3DDevice8> d3d8Dumper;'''
             print
         else:
             assert False