X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fd3d9retrace.py;h=d7f86c4f85b5fd285c2622113d4f6b01fca659ac;hb=621d0b3f841872e7d73465a7ec55afebad17bfdb;hp=0ddcf277e1117df1f9c12f5e6785cf3642d58997;hpb=73341c2fc4c5d70ccca9871043edfd588477d8b8;p=apitrace diff --git a/retrace/d3d9retrace.py b/retrace/d3d9retrace.py index 0ddcf27..d7f86c4 100644 --- a/retrace/d3d9retrace.py +++ b/retrace/d3d9retrace.py @@ -59,9 +59,18 @@ 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' if (call.ret->toUInt() == 0) {' + print r' d3d8Dumper.unbindDevice(_this);' + print r' }' + else: + print r' d3d8Dumper.bindDevice(_this);' # create windows as neccessary if method.name in ('CreateDevice', 'CreateDeviceEx', 'CreateAdditionalSwapChain'): @@ -69,6 +78,31 @@ class D3DRetracer(Retracer): print r' pPresentationParameters->hDeviceWindow = hWnd;' if 'hFocusWindow' in method.argNames(): print r' hFocusWindow = hWnd;' + + if method.name in ('CreateDevice', 'CreateDeviceEx'): + print r' switch (retrace::driver) {' + print r' case retrace::DRIVER_HARDWARE:' + print r' DeviceType = D3DDEVTYPE_HAL;' + print r' break;' + print r' case retrace::DRIVER_SOFTWARE:' + print r' case retrace::DRIVER_REFERENCE:' + print r' DeviceType = D3DDEVTYPE_REF;' + print r' break;' + print r' case retrace::DRIVER_NULL:' + if interface.name.startswith('IDirect3D9'): + print r' DeviceType = D3DDEVTYPE_NULLREF;' + else: + print r' retrace::warning(call) << "null driver not supported\n";' + print r' break;' + print r' case retrace::DRIVER_MODULE:' + print r' retrace::warning(call) << "driver module not supported\n";' + print r' break;' + print r' default:' + print r' assert(0);' + print r' /* fall-through */' + print r' case retrace::DRIVER_DEFAULT:' + print r' break;' + print r' }' if method.name in ('Reset', 'ResetEx'): print r' if (pPresentationParameters->Windowed) {' @@ -76,7 +110,7 @@ class D3DRetracer(Retracer): print r' }' # notify frame has been completed - if method.name == 'Present': + if method.name in ('Present', 'PresentEx'): print r' retrace::frameComplete(call);' print r' hDestWindowOverride = NULL;' @@ -120,7 +154,7 @@ def main(): print moduleName = sys.argv[1] - support = bool(sys.argv[2]) + support = int(sys.argv[2]) api = API() @@ -135,12 +169,11 @@ def main(): print elif moduleName == 'd3d8': from specs.d3d8 import d3d8 - print r'#include ' - print r'#include ' + print r'#include "d3d8imports.hpp"' print r'#include "d3d8size.hpp"' api.addModule(d3d8) print - #print '''static d3dretrace::D3DDumper d3d8Dumper;''' + print '''static d3dretrace::D3DDumper d3d8Dumper;''' print else: assert False