]> git.cworth.org Git - apitrace/blobdiff - wrappers/dxgitrace.py
dxgitrace: Generalize the swapchain size for the entry functions too.
[apitrace] / wrappers / dxgitrace.py
index 640f3562fdbbe8303acb82f0dae6072679d97a07..0ecaed254217ad23c54af84a9043cba3c40cbd4e 100644 (file)
@@ -42,6 +42,36 @@ class D3DCommonTracer(DllTracer):
             print '    DumpShader(trace::localWriter, %s, %s);' % (arg.name, arg.type.size)
             return
 
+        # Serialize the swapchain dimensions
+        if function.name == 'CreateSwapChain' and arg.name == 'pDesc' \
+           or arg.name == 'pSwapChainDesc':
+            print r'    DXGI_SWAP_CHAIN_DESC *_pSwapChainDesc = NULL;'
+            print r'    DXGI_SWAP_CHAIN_DESC _SwapChainDesc;'
+            print r'    if (%s) {' % arg.name
+            print r'        _SwapChainDesc = *%s;' % arg.name
+            if function.name != 'CreateSwapChain' or not self.interface.name.endswith('DWM'):
+                # Obtain size from the window
+                print r'        RECT _rect;'
+                print r'        if (GetClientRect(%s->OutputWindow, &_rect)) {' % arg.name
+                print r'            if (%s->BufferDesc.Width == 0) {' % arg.name
+                print r'                _SwapChainDesc.BufferDesc.Width = _rect.right  - _rect.left;'
+                print r'            }'
+                print r'            if (%s->BufferDesc.Height == 0) {' % arg.name
+                print r'                _SwapChainDesc.BufferDesc.Height = _rect.bottom - _rect.top;'
+                print r'            }'
+                print r'        }'
+            else:
+                # Obtain size from the output
+                print r'        DXGI_OUTPUT_DESC _OutputDesc;'
+                print r'        if (SUCCEEDED(pOutput->GetDesc(&_OutputDesc))) {'
+                print r'            _SwapChainDesc.BufferDesc.Width  = _OutputDesc.DesktopCoordinates.right  - _OutputDesc.DesktopCoordinates.left;'
+                print r'            _SwapChainDesc.BufferDesc.Height = _OutputDesc.DesktopCoordinates.bottom - _OutputDesc.DesktopCoordinates.top;'
+                print r'        }'
+            print r'        _pSwapChainDesc = &_SwapChainDesc;'
+            print r'    }'
+            self.serializeValue(arg.type, '_pSwapChainDesc')
+            return
+
         DllTracer.serializeArgValue(self, function, arg)
     
     def enumWrapperInterfaceVariables(self, interface):
@@ -93,8 +123,6 @@ if __name__ == '__main__':
     if 'd3d10' in moduleNames:
         if 'd3d10_1' in moduleNames:
             print r'#include "d3d10_1imports.hpp"'
-            # D3D10CreateBlob is duplicated in d3d10 and d3d10_1
-            d3d10_1.functions = [function for function in d3d10_1.functions if function.name != 'D3D10CreateBlob']
             api.addModule(d3d10_1)
         else:
             print r'#include "d3d10imports.hpp"'