]> git.cworth.org Git - apitrace/commitdiff
Use same logic for both Lock and LockRect.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Mon, 30 Apr 2012 22:33:02 +0000 (23:33 +0100)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Mon, 30 Apr 2012 22:33:02 +0000 (23:33 +0100)
helpers/d3dsize.hpp
retrace/d3dretrace.py
specs/d3d9.py
wrappers/d3d9trace.py

index 97fccd3e5d99f5a176042354431d46f775df562a..92503fe8b8daca95164418d9aa7045a0a9156889 100644 (file)
@@ -160,6 +160,36 @@ _formatSize(D3DFORMAT Format, UINT Width, UINT Height, INT Pitch) {
 #if DIRECT3D_VERSION >= 0x0900
 
 
+static inline size_t
+_getLockSize(IDirect3DVertexBuffer9 *pBuffer, UINT OffsetToLock, UINT SizeToLock, void ** ppbData) {
+    if (SizeToLock == 0) {
+        D3DVERTEXBUFFER_DESC Desc;
+        HRESULT hr = pBuffer->GetDesc(&Desc);
+        if (FAILED(hr)) {
+            return 0;
+        } 
+        SizeToLock = Desc.Size;
+    }
+
+    return SizeToLock;
+}
+
+
+static inline size_t
+_getLockSize(IDirect3DIndexBuffer9 *pBuffer, UINT OffsetToLock, UINT SizeToLock, void ** ppbData) {
+    if (SizeToLock == 0) {
+        D3DINDEXBUFFER_DESC Desc;
+        HRESULT hr = pBuffer->GetDesc(&Desc);
+        if (FAILED(hr)) {
+            return 0;
+        } 
+        SizeToLock = Desc.Size;
+    }
+
+    return SizeToLock;
+}
+
+
 static inline size_t
 _getLockSize(IDirect3DSurface9 *pSurface, const D3DLOCKED_RECT *pLockedRect, const RECT *pRect) {
     HRESULT hr;
index 36b75b185d4500630e60ddd17eaf4605dbf0ef28..8af52654cd8da33300995d6c4a9de2001082b4a3 100644 (file)
@@ -60,23 +60,8 @@ class D3DRetracer(Retracer):
             print r'        retrace::warning(call) << "failed\n";'
             print r'    }'
 
-        if interface.name in self.bufferInterfaceNames and method.name == 'Lock' or \
-           method.name == 'LockRect':
-
-            if interface.name in self.bufferInterfaceNames:
-                getDescMethod = interface.getMethodByName('GetDesc')
-                descArg = getDescMethod.args[0]
-                assert descArg.output
-                descType = getDescMethod.args[0].type.type
-                print '        if (!SizeToLock) {'
-                print '            %s Desc;' % descType
-                print '            _this->GetDesc(&Desc);'
-                print '            SizeToLock = Desc.Size;'
-                print '        }'
-            elif method.name == 'LockRect':
-                print '        size_t _LockedSize = _getLockSize(_this, %s);' % ', '.join(method.argNames()[:-1])
-            else:
-                raise NotImplementedError
+        if method.name in ('Lock', 'LockRect'):
+            print '        size_t _LockedSize = _getLockSize(_this, %s);' % ', '.join(method.argNames()[:-1])
 
 
 if __name__ == '__main__':
index 2fd7755d8a972209454c4637115b22b68f0f15d1..78bd7da075650466f71cdd5a75d932055aedec66 100644 (file)
@@ -347,13 +347,13 @@ IDirect3DCubeTexture9.methods += [
 ]
 
 IDirect3DVertexBuffer9.methods += [
-    Method(HRESULT, "Lock", [(UINT, "OffsetToLock"), (UINT, "SizeToLock"), Out(Pointer(LinearPointer(Void, "SizeToLock")), "ppbData"), (D3DLOCK, "Flags")]),
+    Method(HRESULT, "Lock", [(UINT, "OffsetToLock"), (UINT, "SizeToLock"), Out(Pointer(LinearPointer(Void, "_LockedSize")), "ppbData"), (D3DLOCK, "Flags")]),
     Method(HRESULT, "Unlock", []),
     Method(HRESULT, "GetDesc", [Out(Pointer(D3DVERTEXBUFFER_DESC), "pDesc")], sideeffects=False),
 ]
 
 IDirect3DIndexBuffer9.methods += [
-    Method(HRESULT, "Lock", [(UINT, "OffsetToLock"), (UINT, "SizeToLock"), Out(Pointer(LinearPointer(Void, "SizeToLock")), "ppbData"), (D3DLOCK, "Flags")]),
+    Method(HRESULT, "Lock", [(UINT, "OffsetToLock"), (UINT, "SizeToLock"), Out(Pointer(LinearPointer(Void, "_LockedSize")), "ppbData"), (D3DLOCK, "Flags")]),
     Method(HRESULT, "Unlock", []),
     Method(HRESULT, "GetDesc", [Out(Pointer(D3DINDEXBUFFER_DESC), "pDesc")], sideeffects=False),
 ]
index b2afdf9b9dce4e2de92c6ea58aaaa1edf903e694..dbace8fe54ffc07ebaeca84f70f69a46803becf4 100644 (file)
@@ -38,49 +38,30 @@ class D3D9Tracer(DllTracer):
 
         DllTracer.serializeArgValue(self, function, arg)
 
-    bufferInterfaceNames = [
-        'IDirect3DVertexBuffer9',
-        'IDirect3DIndexBuffer9',
-    ]
-
     def declareWrapperInterfaceVariables(self, interface):
         DllTracer.declareWrapperInterfaceVariables(self, interface)
         
-        if interface.name in self.bufferInterfaceNames or \
+        if interface.getMethodByName('Lock') is not None or \
            interface.getMethodByName('LockRect') is not None:
             print '    size_t _LockedSize;'
             print '    VOID *m_pbData;'
 
 
     def implementWrapperInterfaceMethodBody(self, interface, base, method):
-        if interface.name in self.bufferInterfaceNames and method.name == 'Unlock' or \
-           method.name == 'UnlockRect':
+        if method.name in ('Unlock', 'UnlockRect'):
             print '    if (m_pbData) {'
             self.emit_memcpy('(LPBYTE)m_pbData', '(LPBYTE)m_pbData', '_LockedSize')
             print '    }'
 
         DllTracer.implementWrapperInterfaceMethodBody(self, interface, base, method)
 
-        if interface.name in self.bufferInterfaceNames and method.name == 'Lock' or \
-           method.name == 'LockRect':
-
+        if method.name in ('Lock', 'LockRect'):
             print '    if (SUCCEEDED(_result) && !(Flags & D3DLOCK_READONLY)) {'
-            if interface.name in self.bufferInterfaceNames:
+            print '        _LockedSize = _getLockSize(_this, %s);' % ', '.join(method.argNames()[:-1])
+            if method.name == 'Lock':
                 # FIXME: handle recursive locks
-                getDescMethod = interface.getMethodByName('GetDesc')
-                descArg = getDescMethod.args[0]
-                assert descArg.output
-                descType = getDescMethod.args[0].type.type
-                print '        if (SizeToLock) {'
-                print '            _LockedSize = SizeToLock;'
-                print '        } else {'
-                print '            %s Desc;' % descType
-                print '            m_pInstance->GetDesc(&Desc);'
-                print '            _LockedSize = Desc.Size;'
-                print '        }'
                 print '        m_pbData = *ppbData;'
             elif method.name == 'LockRect':
-                print '        _LockedSize = _getLockSize(_this, %s);' % ', '.join(method.argNames()[:-1])
                 print '        m_pbData = pLockedRect->pBits;'
             else:
                 raise NotImplementedError