X-Git-Url: https://git.notmuchmail.org/git?a=blobdiff_plain;f=retrace%2Fdxgiretrace.py;h=060171b67315dc6bee02d97356ed7e7c8dd7b85e;hb=7bcc96cd6c3d2729e63bf3109996ca367f221bb0;hp=72520c0316c670c7fe857e1db5e4ce0cb1dfffc9;hpb=3b18682ec801546fc7b2a1b9593161fa99c5adcd;p=apitrace diff --git a/retrace/dxgiretrace.py b/retrace/dxgiretrace.py index 72520c0..060171b 100644 --- a/retrace/dxgiretrace.py +++ b/retrace/dxgiretrace.py @@ -74,25 +74,34 @@ createWindow(DXGI_SWAP_CHAIN_DESC *pSwapChainDesc) { if 'pSwapChainDesc' in function.argNames(): print r' createWindow(pSwapChainDesc);' - # Compensate for the fact we don't trace the software renderer - # module LoadLibrary call - if 'Software' in function.argNames(): - print r' if (Software) {' - print r' retrace::warning(call) << "using WARP for software device\n";' - print r' Software = LoadLibraryA("d3d10warp");' - print r' }' - # Compensate for the fact we don't trace DXGI object creation if function.name.startswith('D3D11CreateDevice'): print r' if (DriverType == D3D_DRIVER_TYPE_UNKNOWN && !pAdapter) {' print r' DriverType = D3D_DRIVER_TYPE_HARDWARE;' print r' }' - # Force software renderer if function.name.startswith('D3D10CreateDevice'): - print r' Flags |= D3D10_CREATE_DEVICE_DEBUG;' + # Toggle debugging + print r' Flags &= ~D3D10_CREATE_DEVICE_DEBUG;' + print r' if (retrace::debug) {' + print r' if (LoadLibraryA("d3d10sdklayers")) {' + print r' Flags |= D3D10_CREATE_DEVICE_DEBUG;' + print r' }' + print r' }' + + # Force driver self.forceDriver('D3D10_DRIVER_TYPE') + if function.name.startswith('D3D11CreateDevice'): + # Toggle debugging + print r' Flags &= ~D3D11_CREATE_DEVICE_DEBUG;' + print r' if (retrace::debug) {' + print r' if (LoadLibraryA("d3d11sdklayers")) {' + print r' Flags |= D3D11_CREATE_DEVICE_DEBUG;' + print r' }' + print r' }' + + # Force driver self.forceDriver('D3D_DRIVER_TYPE') Retracer.invokeFunction(self, function) @@ -190,6 +199,14 @@ createWindow(DXGI_SWAP_CHAIN_DESC *pSwapChainDesc) { print ' _maps[_this] = 0;' print ' }' + # Attach shader byte code for lookup + if 'pShaderBytecode' in method.argNames(): + ppShader = method.args[-1] + assert ppShader.output + print r' if (retrace::dumpingState && SUCCEEDED(_result)) {' + print r' (*%s)->SetPrivateData(d3dstate::GUID_D3DSTATE, BytecodeLength, pShaderBytecode);' % ppShader.name + print r' }' + def main(): print r'#include ' @@ -209,8 +226,6 @@ def 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"'