X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fdxgiretrace.py;fp=retrace%2Fdxgiretrace.py;h=69bc3bac0966fe27c4cd08a5bacba013dd197ec8;hb=75cbb8c52730680271ce5fe939ff6607ab004eaa;hp=8de3c989efa5f46057c6b04c19cbee22665af4f0;hpb=1eb7673ecc412fa7358750fc3d0bb68bebe09e46;p=apitrace diff --git a/retrace/dxgiretrace.py b/retrace/dxgiretrace.py index 8de3c98..69bc3ba 100644 --- a/retrace/dxgiretrace.py +++ b/retrace/dxgiretrace.py @@ -29,6 +29,7 @@ import sys from dllretrace import DllRetracer as Retracer +import specs.dxgi from specs.stdapi import API from specs.dxgi import dxgi from specs.d3d10 import d3d10 @@ -45,13 +46,11 @@ class D3DRetracer(Retracer): 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); - } + UINT Width = pSwapChainDesc->BufferDesc.Width; + UINT Height = pSwapChainDesc->BufferDesc.Height; + if (!Width) Width = 1024; + if (!Height) Height = 768; + pSwapChainDesc->OutputWindow = d3dretrace::createWindow(Width, Height); } ''' @@ -163,6 +162,16 @@ createWindow(DXGI_SWAP_CHAIN_DESC *pSwapChainDesc) { else: print r' d3d11Dumper.bindDevice(_this);' + if interface.name == 'IDXGIFactory' and method.name == 'QueryInterface': + print r' if (riid == IID_IDXGIFactoryDWM) {' + print r' _this->AddRef();' + print r' *ppvObj = new d3dretrace::CDXGIFactoryDWM(_this);' + print r' _result = S_OK;' + print r' } else {' + Retracer.invokeInterfaceMethod(self, interface, method) + print r' }' + return + # create windows as neccessary if method.name == 'CreateSwapChain': print r' createWindow(pDesc);' @@ -205,7 +214,38 @@ createWindow(DXGI_SWAP_CHAIN_DESC *pSwapChainDesc) { print r' }' return - Retracer.invokeInterfaceMethod(self, interface, method) + if interface.name.startswith('ID3D10Device') and method.name == 'OpenSharedResource': + print r' retrace::warning(call) << "replacing shared resource with checker pattern\n";' + print r' D3D10_TEXTURE2D_DESC Desc;' + print r' memset(&Desc, 0, sizeof Desc);' + print r' Desc.Width = 8;' + print r' Desc.Height = 8;' + print r' Desc.MipLevels = 1;' + print r' Desc.ArraySize = 1;' + print r' Desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;' + print r' Desc.SampleDesc.Count = 1;' + print r' Desc.SampleDesc.Quality = 0;' + print r' Desc.Usage = D3D10_USAGE_DEFAULT;' + print r' Desc.BindFlags = D3D10_BIND_SHADER_RESOURCE | D3D10_BIND_RENDER_TARGET;' + print r' Desc.CPUAccessFlags = 0x0;' + print r' Desc.MiscFlags = 0 /* D3D10_RESOURCE_MISC_SHARED */;' + print r''' + const DWORD Checker[8][8] = { + { 0, ~0, 0, ~0, 0, ~0, 0, ~0, }, + {~0, 0, ~0, 0, ~0, 0, ~0, 0, }, + { 0, ~0, 0, ~0, 0, ~0, 0, ~0, }, + {~0, 0, ~0, 0, ~0, 0, ~0, 0, }, + { 0, ~0, 0, ~0, 0, ~0, 0, ~0, }, + {~0, 0, ~0, 0, ~0, 0, ~0, 0, }, + { 0, ~0, 0, ~0, 0, ~0, 0, ~0, }, + {~0, 0, ~0, 0, ~0, 0, ~0, 0, } + }; + const D3D10_SUBRESOURCE_DATA InitialData = {Checker, sizeof Checker[0], sizeof Checker}; + ''' + print r' _result = _this->CreateTexture2D(&Desc, &InitialData, (ID3D10Texture2D**)ppResource);' + self.checkResult(method.type) + else: + Retracer.invokeInterfaceMethod(self, interface, method) # process events after presents if method.name == 'Present': @@ -239,6 +279,8 @@ createWindow(DXGI_SWAP_CHAIN_DESC *pSwapChainDesc) { def main(): + print r'#define INITGUID' + print print r'#include ' print print r'#include ' @@ -251,6 +293,7 @@ def main(): api = API() if moduleNames: + print r'#include "d3dretrace_dxgi.hpp"' api.addModule(dxgi) if 'd3d10' in moduleNames: