X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=d3d9trace.py;fp=d3d9trace.py;h=a40ae7f5f1eed1bcb189a3ea78ed848ec0e1d88f;hb=48412ffde3dd4710c96d5e8d9cfdf1789e4d703a;hp=c489be6a6f53a2221533acb12e2898d63db82231;hpb=b63c32878eef6a534079ef1664d9b06eaea04023;p=apitrace diff --git a/d3d9trace.py b/d3d9trace.py index c489be6..a40ae7f 100644 --- a/d3d9trace.py +++ b/d3d9trace.py @@ -24,28 +24,69 @@ ##########################################################################/ -from trace import DllTracer +from dlltrace import DllTracer from specs.d3d9 import d3d9 class D3D9Tracer(DllTracer): - def dump_arg_instance(self, function, arg): + def serializeArgValue(self, function, arg): # Dump shaders as strings if function.name in ('CreateVertexShader', 'CreatePixelShader') and arg.name == 'pFunction': - print ' DumpShader(Trace::localWriter, %s);' % (arg.name) + print ' DumpShader(trace::localWriter, %s);' % (arg.name) return - DllTracer.dump_arg_instance(self, function, arg) + DllTracer.serializeArgValue(self, function, arg) + + def declareWrapperInterfaceVariables(self, interface): + DllTracer.declareWrapperInterfaceVariables(self, interface) + + if interface.name == 'IDirect3DVertexBuffer9': + print ' UINT m_OffsetToLock;' + print ' UINT m_SizeToLock;' + print ' VOID *m_pbData;' + + def implementWrapperInterfaceMethodBody(self, interface, base, method): + if interface.name == 'IDirect3DVertexBuffer9' and method.name == 'Unlock': + print ' if (m_pbData) {' + print ' if (!m_SizeToLock) {' + print ' D3DVERTEXBUFFER_DESC Desc;' + print ' m_pInstance->GetDesc(&Desc);' + print ' m_SizeToLock = Desc.Size;' + print ' }' + self.emit_memcpy('(LPBYTE)m_pbData + m_OffsetToLock', '(LPBYTE)m_pbData + m_OffsetToLock', 'm_SizeToLock') + print ' }' + + DllTracer.implementWrapperInterfaceMethodBody(self, interface, base, method) + + if interface.name == 'IDirect3DVertexBuffer9' and method.name == 'Lock': + print ' if (__result == D3D_OK && !(Flags & D3DLOCK_READONLY)) {' + print ' m_OffsetToLock = OffsetToLock;' + print ' m_SizeToLock = SizeToLock;' + print ' m_pbData = *ppbData;' + print ' } else {' + print ' m_pbData = NULL;' + print ' }' if __name__ == '__main__': - print '#include "trace_writer.hpp"' + print '#include "trace_writer_local.hpp"' print '#include "os.hpp"' print print '#include "d3d9imports.hpp"' print '#include "d3dshader.hpp"' print + print ''' +static inline size_t +_declCount(const D3DVERTEXELEMENT9 *pVertexElements) { + size_t count = 0; + if (pVertexElements) { + while (pVertexElements[count++].Stream != 0xff) + ; + } + return count; +} +''' tracer = D3D9Tracer('d3d9.dll') tracer.trace_api(d3d9)