]> git.cworth.org Git - apitrace/blobdiff - retrace/d3d9retrace.py
d3dretrace: Make --driver work correctly on DXGI1.1
[apitrace] / retrace / d3d9retrace.py
index 72fc9ef81b6578846ed36bfe8988efdea917cb51..d7f86c4f85b5fd285c2622113d4f6b01fca659ac 100644 (file)
@@ -59,9 +59,18 @@ class D3DRetracer(Retracer):
         # keep track of the last used device for state dumping
         if interface.name in ('IDirect3DDevice9', 'IDirect3DDevice9Ex'):
             if method.name == 'Release':
-                print r'    d3d9Dumper.unbindDevice(_this);'
+                print r'    if (call.ret->toUInt() == 0) {'
+                print r'        d3d9Dumper.unbindDevice(_this);'
+                print r'    }'
             else:
                 print r'    d3d9Dumper.bindDevice(_this);'
+        if interface.name in ('IDirect3DDevice8', 'IDirect3DDevice8Ex'):
+            if method.name == 'Release':
+                print r'    if (call.ret->toUInt() == 0) {'
+                print r'        d3d8Dumper.unbindDevice(_this);'
+                print r'    }'
+            else:
+                print r'    d3d8Dumper.bindDevice(_this);'
 
         # create windows as neccessary
         if method.name in ('CreateDevice', 'CreateDeviceEx', 'CreateAdditionalSwapChain'):
@@ -101,7 +110,7 @@ class D3DRetracer(Retracer):
             print r'    }'
 
         # notify frame has been completed
-        if method.name == 'Present':
+        if method.name in ('Present', 'PresentEx'):
             print r'    retrace::frameComplete(call);'
             print r'    hDestWindowOverride = NULL;'
 
@@ -116,7 +125,6 @@ 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;'
@@ -161,12 +169,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