]> git.cworth.org Git - apitrace/commitdiff
d3dretrace: Basic d3d8 support.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Sat, 24 Nov 2012 13:04:42 +0000 (13:04 +0000)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Sat, 24 Nov 2012 13:04:42 +0000 (13:04 +0000)
retrace/CMakeLists.txt
retrace/d3d9retrace.py
retrace/d3dretrace.hpp
retrace/d3dretrace_main.cpp
retrace/dxgiretrace.py

index b3068fc8fb1578860ea4f9b8e8b3052976037c7e..9071998fa29e0764fcb418e1e0e6b7cc5bc66e32 100644 (file)
@@ -133,7 +133,7 @@ if (WIN32 AND DirectX_D3DX9_INCLUDE_DIR)
     include_directories (SYSTEM ${DirectX_D3DX9_INCLUDE_DIR})
     add_custom_command (
         OUTPUT d3dretrace_d3d9.cpp
-        COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d3d9retrace.py > ${CMAKE_CURRENT_BINARY_DIR}/d3dretrace_d3d9.cpp
+        COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d3d9retrace.py d3d9 1 > ${CMAKE_CURRENT_BINARY_DIR}/d3dretrace_d3d9.cpp
         DEPENDS
                 d3d9retrace.py
                 dllretrace.py
@@ -146,6 +146,25 @@ if (WIN32 AND DirectX_D3DX9_INCLUDE_DIR)
                 ${CMAKE_SOURCE_DIR}/specs/stdapi.py
     )
 
+    if (DirectX_D3D8_INCLUDE_DIR) 
+        include_directories (SYSTEM ${DirectX_D3D8_INCLUDE_DIR})
+        set (HAVE_D3D8 1)
+    endif ()
+    add_custom_command (
+        OUTPUT d3dretrace_d3d8.cpp
+        COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d3d9retrace.py d3d8 ${HAVE_D3D8} > ${CMAKE_CURRENT_BINARY_DIR}/d3dretrace_d3d8.cpp
+        DEPENDS
+                d3d9retrace.py
+                dllretrace.py
+                retrace.py
+                ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py
+                ${CMAKE_SOURCE_DIR}/specs/d3d8.py
+                ${CMAKE_SOURCE_DIR}/specs/d3d8types.py
+                ${CMAKE_SOURCE_DIR}/specs/d3d8caps.py
+                ${CMAKE_SOURCE_DIR}/specs/winapi.py
+                ${CMAKE_SOURCE_DIR}/specs/stdapi.py
+    )
+
     if (DirectX_D3D10_INCLUDE_DIR)
         include_directories (SYSTEM ${DirectX_D3D10_INCLUDE_DIR})
         set (DXGI_MODULES d3d10)
@@ -199,6 +218,7 @@ if (WIN32 AND DirectX_D3DX9_INCLUDE_DIR)
 
     add_executable (d3dretrace
         d3dretrace_main.cpp
+        d3dretrace_d3d8.cpp
         d3dretrace_d3d9.cpp
         d3dretrace_dxgi.cpp
         d3dretrace_ws.cpp
index 1b89b68f5e6a159ee8f33184ee1b91b3169a2626..0ddcf277e1117df1f9c12f5e6785cf3642d58997 100644 (file)
 """D3D retracer generator."""
 
 
+import sys
 from dllretrace import DllRetracer as Retracer
 from specs.stdapi import API
-from specs.d3d9 import *
 
 
 class D3DRetracer(Retracer):
 
     def retraceApi(self, api):
-        print '''static d3dretrace::D3DDumper<IDirect3DDevice9> d3d9Dumper;'''
-        print
-
         print '// Swizzling mapping for lock addresses'
         print 'static std::map<void *, void *> _maps;'
         print
 
-        self.table_name = 'd3dretrace::d3d9_callbacks'
-
         Retracer.retraceApi(self, api)
 
     def invokeFunction(self, function):
@@ -101,30 +96,59 @@ class D3DRetracer(Retracer):
             print '    VOID *_pbData = NULL;'
             print '    size_t _MappedSize = 0;'
             print '    _getMapInfo(_this, %s, _pbData, _MappedSize);' % ', '.join(method.argNames()[:-1])
-            print '    _maps[_this] = _pbData;'
+            print '    if (_MappedSize) {'
+            print '        _maps[_this] = _pbData;'
+            print '    } else {'
+            print '        return;'
+            print '    }'
         
         if method.name in ('Unlock', 'UnlockRect', 'UnlockBox'):
             print '    VOID *_pbData = 0;'
             print '    _pbData = _maps[_this];'
             print '    if (_pbData) {'
             print '        retrace::delRegionByPointer(_pbData);'
+            print '        _maps[_this] = 0;'
             print '    }'
 
 
-if __name__ == '__main__':
-    print r'''
-#include <string.h>
-
-#include <iostream>
+def main():
+    print r'#include <string.h>'
+    print
+    print r'#include <iostream>'
+    print
+    print r'#include "d3dretrace.hpp"'
+    print
 
-#include "d3d9imports.hpp"
-#include "d3d9size.hpp"
-#include "d3dretrace.hpp"
-#include "d3dstate.hpp"
-
-'''
+    moduleName = sys.argv[1]
+    support = bool(sys.argv[2])
 
     api = API()
-    api.addModule(d3d9)
+    
+    if support:
+        if moduleName == 'd3d9':
+            from specs.d3d9 import d3d9
+            print r'#include "d3d9imports.hpp"'
+            print r'#include "d3d9size.hpp"'
+            api.addModule(d3d9)
+            print
+            print '''static d3dretrace::D3DDumper<IDirect3DDevice9> d3d9Dumper;'''
+            print
+        elif moduleName == 'd3d8':
+            from specs.d3d8 import d3d8
+            print r'#include <windows.h>'
+            print r'#include <d3d8.h>'
+            print r'#include "d3d8size.hpp"'
+            api.addModule(d3d8)
+            print
+            #print '''static d3dretrace::D3DDumper<IDirect3DDevice8> d3d8Dumper;'''
+            print
+        else:
+            assert False
+
     retracer = D3DRetracer()
+    retracer.table_name = 'd3dretrace::%s_callbacks' % moduleName
     retracer.retraceApi(api)
+
+
+if __name__ == '__main__':
+    main()
index 144a5c454b1dcdf80d24013e175e354433c17b6b..41cc1c51d4ac5c892a3b3403d3f6f3afd12adc79 100644 (file)
@@ -36,8 +36,9 @@
 namespace d3dretrace {
 
 
+extern const retrace::Entry d3d8_callbacks[];
 extern const retrace::Entry d3d9_callbacks[];
-extern const retrace::Entry d3d10_callbacks[];
+extern const retrace::Entry dxgi_callbacks[];
 
 
 template< class Device >
index e62b761fa015c68e12af793af41c8ed989048c17..3de6daa6553b213d1a926a4157ed63b01200a32d 100644 (file)
@@ -41,8 +41,9 @@ retrace::setUp(void) {
 void
 retrace::addCallbacks(retrace::Retracer &retracer)
 {
+    retracer.addCallbacks(d3dretrace::d3d8_callbacks);
     retracer.addCallbacks(d3dretrace::d3d9_callbacks);
-    retracer.addCallbacks(d3dretrace::d3d10_callbacks);
+    retracer.addCallbacks(d3dretrace::dxgi_callbacks);
 }
 
 
index e3eddbb1b62aac4edbd336c21030f55a79cd1434..c7baaf280b701e66f04b3223d97949fd60acd4b1 100644 (file)
@@ -55,7 +55,7 @@ createWindow(DXGI_SWAP_CHAIN_DESC *pSwapChainDesc) {
 }
 '''
 
-        self.table_name = 'd3dretrace::d3d10_callbacks'
+        self.table_name = 'd3dretrace::dxgi_callbacks'
 
         Retracer.retraceApi(self, api)
 
@@ -90,7 +90,6 @@ createWindow(DXGI_SWAP_CHAIN_DESC *pSwapChainDesc) {
 
         Retracer.invokeFunction(self, function)
 
-
     def invokeInterfaceMethod(self, interface, method):
         # keep track of the last used device for state dumping
         if interface.name in ('ID3D10Device', 'ID3D10Device1'):
@@ -144,7 +143,7 @@ createWindow(DXGI_SWAP_CHAIN_DESC *pSwapChainDesc) {
 
 
 def main():
-    print r'''#include <string.h>'''
+    print r'#include <string.h>'
     print
     print r'#include <iostream>'
     print