# 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'):
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) {'
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;'
print
moduleName = sys.argv[1]
- support = bool(sys.argv[2])
+ support = int(sys.argv[2])
api = API()
print
elif moduleName == 'd3d8':
from specs.d3d8 import d3d8
- print r'#include <windows.h>'
- print r'#include <d3d8.h>'
+ print r'#include "d3d8imports.hpp"'
print r'#include "d3d8size.hpp"'
api.addModule(d3d8)
print
- #print '''static d3dretrace::D3DDumper<IDirect3DDevice8> d3d8Dumper;'''
+ print '''static d3dretrace::D3DDumper<IDirect3DDevice8> d3d8Dumper;'''
print
else:
assert False