]> git.cworth.org Git - apitrace/commitdiff
Only unbind dumpers when objects are truly released.
authorJosé Fonseca <jfonseca@vmware.com>
Thu, 27 Jun 2013 15:15:01 +0000 (16:15 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Thu, 27 Jun 2013 15:15:01 +0000 (16:15 +0100)
retrace/d3d9retrace.py
retrace/dxgiretrace.py

index 9dcde71ea82f9260a7170bfa6ba243b7a4664afb..d7f86c4f85b5fd285c2622113d4f6b01fca659ac 100644 (file)
@@ -59,12 +59,16 @@ 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'    d3d8Dumper.unbindDevice(_this);'
+                print r'    if (call.ret->toUInt() == 0) {'
+                print r'        d3d8Dumper.unbindDevice(_this);'
+                print r'    }'
             else:
                 print r'    d3d8Dumper.bindDevice(_this);'
 
index 7dcc7013a505bac5d29dcd02ee9b3ba9d8abe8e2..2eeb3ca616693dbc42689ab93d5d318cc3a8cbec 100644 (file)
@@ -178,12 +178,16 @@ createWindow(DXGI_SWAP_CHAIN_DESC *pSwapChainDesc) {
         # keep track of the last used device for state dumping
         if interface.name in ('ID3D10Device', 'ID3D10Device1'):
             if method.name == 'Release':
-                print r'    d3d10Dumper.unbindDevice(_this);'
+                print r'    if (call.ret->toUInt() == 0) {'
+                print r'        d3d10Dumper.unbindDevice(_this);'
+                print r'    }'
             else:
                 print r'    d3d10Dumper.bindDevice(_this);'
         if interface.name in ('ID3D11DeviceContext', 'ID3D11DeviceContext1'):
             if method.name == 'Release':
-                print r'    d3d11Dumper.unbindDevice(_this);'
+                print r'    if (call.ret->toUInt() == 0) {'
+                print r'        d3d11Dumper.unbindDevice(_this);'
+                print r'    }'
             else:
                 print r'    if (_this->GetType() == D3D11_DEVICE_CONTEXT_IMMEDIATE) {'
                 print r'        d3d11Dumper.bindDevice(_this);'