]> git.cworth.org Git - apitrace/blobdiff - retrace/d3dcommonretrace.py
d3dretrace: Try to match the window size in the dxgi traces.
[apitrace] / retrace / d3dcommonretrace.py
index 4496b2c2376ebfc9cc76f58313bfe0997ed09e01..e3eddbb1b62aac4edbd336c21030f55a79cd1434 100644 (file)
@@ -42,6 +42,18 @@ class D3DRetracer(Retracer):
         print '// Swizzling mapping for lock addresses'
         print 'static std::map<void *, void *> _maps;'
         print
+        print r'''
+static void 
+createWindow(DXGI_SWAP_CHAIN_DESC *pSwapChainDesc) {
+    if (pSwapChainDesc->Windowed) {
+        UINT Width  = pSwapChainDesc->BufferDesc.Width;
+        UINT Height = pSwapChainDesc->BufferDesc.Height;
+        if (!Width)  Width = 1024;
+        if (!Height) Height = 768;
+        pSwapChainDesc->OutputWindow = d3dretrace::createWindow(Width, Height);
+    }
+}
+'''
 
         self.table_name = 'd3dretrace::d3d10_callbacks'
 
@@ -60,7 +72,7 @@ class D3DRetracer(Retracer):
         if function.name in self.createDeviceFunctionNames:
             # create windows as neccessary
             if 'pSwapChainDesc' in function.argNames():
-                print r'    pSwapChainDesc->OutputWindow = d3dretrace::createWindow(512, 512);'
+                print r'    createWindow(pSwapChainDesc);'
 
             # Compensate for the fact we don't trace the software renderer
             # module LoadLibrary call
@@ -81,6 +93,11 @@ class D3DRetracer(Retracer):
 
     def invokeInterfaceMethod(self, interface, method):
         # 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);'
+            else:
+                print r'    d3d10Dumper.bindDevice(_this);'
         if interface.name in ('ID3D11DeviceContext',):
             if method.name == 'Release':
                 print r'    d3d11Dumper.unbindDevice(_this);'
@@ -89,7 +106,7 @@ class D3DRetracer(Retracer):
 
         # create windows as neccessary
         if method.name == 'CreateSwapChain':
-            print r'    pDesc->OutputWindow = d3dretrace::createWindow(512, 512);'
+            print r'    createWindow(pDesc);'
 
         # notify frame has been completed
         if method.name == 'Present':
@@ -137,8 +154,10 @@ def main():
     moduleNames = sys.argv[1:]
 
     api = API()
+    
     if moduleNames:
         api.addModule(dxgi)
+    
     if 'd3d10' in moduleNames:
         if 'd3d10_1' in moduleNames:
             print r'#include "d3d10_1imports.hpp"'
@@ -149,6 +168,10 @@ def main():
             print r'#include "d3d10imports.hpp"'
         print r'#include "d3d10size.hpp"'
         api.addModule(d3d10)
+        print
+        print '''static d3dretrace::D3DDumper<ID3D10Device> d3d10Dumper;'''
+        print
+
     if 'd3d11' in moduleNames:
         print r'#include "d3d11imports.hpp"'
         if 'd3d11_1' in moduleNames: