from dlltrace import DllTracer
from specs.d3d9 import d3d9, D3DSHADER9
+import specs.d3d9dxva2
+
class D3D9Tracer(DllTracer):
return variables
def implementWrapperInterfaceMethodBody(self, interface, base, method):
+ if method.name == 'DecodeExecute':
+ print r' _NumCompBuffers = pExecuteParams->NumCompBuffers;'
+
+ if method.name == 'VideoProcessBlt':
+ print r' _NumSrcSurfaces = pData->NumSrcSurfaces;'
+
if method.name in ('Unlock', 'UnlockRect', 'UnlockBox'):
print ' if (_LockedSize && m_pbData) {'
self.emit_memcpy('(LPBYTE)m_pbData', '(LPBYTE)m_pbData', '_LockedSize')
DllTracer.implementWrapperInterfaceMethodBody(self, interface, base, method)
if method.name in ('Lock', 'LockRect', 'LockBox'):
+ # FIXME: handle recursive locks
print ' if (SUCCEEDED(_result) && !(Flags & D3DLOCK_READONLY)) {'
- print ' _LockedSize = _getLockSize(_this, %s);' % ', '.join(method.argNames()[:-1])
- if method.name == 'Lock':
- # FIXME: handle recursive locks
- print ' m_pbData = *ppbData;'
- elif method.name == 'LockRect':
- print ' m_pbData = pLockedRect->pBits;'
- elif method.name == 'LockBox':
- print ' m_pbData = pLockedVolume->pBits;'
- else:
- raise NotImplementedError
+ print ' _getLockInfo(_this, %s, m_pbData, _LockedSize);' % ', '.join(method.argNames()[:-1])
print ' } else {'
print ' m_pbData = NULL;'
+ print ' _LockedSize = 0;'
print ' }'
print
print '#include "d3d9imports.hpp"'
print '#include "d3dsize.hpp"'
- print '#include "d3dshader.hpp"'
+ print '#include "d3d9shader.hpp"'
+ print '#include "dxvaint.h"'
print
print '''
static inline size_t
}
return count;
}
+
+static UINT _NumCompBuffers = 0; /* XXX */
+static UINT _NumSrcSurfaces = 0; /* XXX */
'''
tracer = D3D9Tracer('d3d9.dll')
tracer.traceApi(d3d9)