]> git.cworth.org Git - apitrace/commitdiff
Merge branch 'modules'
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Wed, 14 Nov 2012 07:23:22 +0000 (07:23 +0000)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Wed, 14 Nov 2012 07:23:22 +0000 (07:23 +0000)
63 files changed:
common/os_dl.hpp [new file with mode: 0644]
dispatch/dispatch.py
dispatch/glproc.py
gui/imageviewer.cpp
helpers/d3d9size.hpp
helpers/glsize.hpp
retrace/CMakeLists.txt
retrace/d3d10_1retrace.py [deleted file]
retrace/d3d10retrace.py [deleted file]
retrace/d3d11retrace.py [deleted file]
retrace/d3d9retrace.py
retrace/d3dcommonretrace.py
retrace/d3dretrace.hpp
retrace/d3dretrace_main.cpp
retrace/dllretrace.py
retrace/glretrace.py
retrace/retrace.py
retrace/retrace_swizzle.cpp
retrace/retrace_swizzle.hpp
specs/cglapi.py
specs/d2d1.py
specs/d3d10.py
specs/d3d10_1.py
specs/d3d11.py
specs/d3d8.py
specs/d3d9.py
specs/d3d9types.py
specs/ddraw.py
specs/dwrite.py
specs/dxgi.py
specs/eglapi.py
specs/glapi.py
specs/glesapi.py
specs/glxapi.py
specs/stdapi.py
specs/wglapi.py
specs/winapi.py
wrappers/.gitignore
wrappers/CMakeLists.txt
wrappers/cgltrace.py
wrappers/d2d1.def
wrappers/d2d1trace.py
wrappers/d3d10.def
wrappers/d3d10_1.def
wrappers/d3d10_1trace.py
wrappers/d3d10trace.py
wrappers/d3d11.def
wrappers/d3d11trace.py
wrappers/d3d8.def
wrappers/d3d8trace.py
wrappers/d3d9.def
wrappers/d3d9trace.py
wrappers/ddrawtrace.py
wrappers/dlltrace.py
wrappers/dwrite.def
wrappers/dwritetrace.cpp [new file with mode: 0644]
wrappers/dwritetrace.py [deleted file]
wrappers/egltrace.py
wrappers/gltrace.py
wrappers/glxtrace.py
wrappers/opengl32.def
wrappers/trace.py
wrappers/wgltrace.py

diff --git a/common/os_dl.hpp b/common/os_dl.hpp
new file mode 100644 (file)
index 0000000..da51d41
--- /dev/null
@@ -0,0 +1,89 @@
+/**************************************************************************
+ *
+ * Copyright 2012 Jose Fonseca
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ **************************************************************************/
+
+/*
+ * Dynamic library linking abstraction.
+ */
+
+#ifndef _OS_DL_HPP_
+#define _OS_DL_HPP_
+
+
+#if defined(_WIN32)
+#include <windows.h>
+#else
+#include <dlfcn.h>
+#endif
+
+
+#if defined(_WIN32)
+#define OS_LIBRARY_EXTENSION ".dll"
+#elif defined(__APPLE__)
+#define OS_LIBRARY_EXTENSION ".dylib"
+#else
+#define OS_LIBRARY_EXTENSION ".so"
+#endif
+
+
+namespace os {
+
+    // TODO: Wrap in a class
+#if defined(_WIN32)
+    typedef HMODULE Library;
+#else
+    typedef void * Library;
+#endif
+
+    inline Library
+    openLibrary(const char *filename) {
+#if defined(_WIN32)
+        return LoadLibraryA(filename);
+#else
+        return dlopen(filename, RTLD_LOCAL | RTLD_LAZY);
+#endif
+    }
+
+    inline void *
+    getLibrarySymbol(Library library, const char *symbol) {
+#if defined(_WIN32)
+        return (void *)GetProcAddress(library, symbol);
+#else
+        return dlsym(library, symbol);
+#endif
+    }
+
+    inline void
+    closeLibrary(Library library) {
+#if defined(_WIN32)
+        FreeLibrary(library);
+#else
+        dlclose(library);
+#endif
+    }
+
+
+} /* namespace os */
+
+#endif /* _OS_DL_HPP_ */
index 4580166b18a25cff806a2dbaea61bda02bfa283a..60f95073b76d829c773b3dc653e6fadde895cfb0 100644 (file)
@@ -58,20 +58,20 @@ class Dispatcher:
         #
         raise NotImplementedError
 
-    def dispatchApi(self, api):
-        for function in api.functions:
-            self.dispatchFunction(api, function)
+    def dispatchModule(self, module):
+        for function in module.functions:
+            self.dispatchFunction(module, function)
         
         # define standard name aliases for convenience, but only when not
         # tracing, as that would cause symbol clashing with the tracing
         # functions
         print '#ifdef RETRACE'
-        for function in api.functions:
+        for function in module.functions:
             print '#define %s _%s' % (function.name, function.name)
         print '#endif /* RETRACE */'
         print
 
-    def dispatchFunction(self, api, function):
+    def dispatchFunction(self, module, function):
         ptype = function_pointer_type(function)
         pvalue = function_pointer_value(function)
         print 'typedef ' + function.prototype('* %s' % ptype) + ';'
@@ -83,24 +83,24 @@ class Dispatcher:
             ret = ''
         else:
             ret = 'return '
-        self.invokeGetProcAddress(api, function)
+        self.invokeGetProcAddress(module, function)
         print '    %s%s(%s);' % (ret, pvalue, ', '.join([str(arg.name) for arg in function.args]))
         print '}'
         print
 
-    def isFunctionPublic(self, api, function):
+    def isFunctionPublic(self, module, function):
         return True
 
-    def getProcAddressName(self, api, function):
-        if self.isFunctionPublic(api, function):
+    def getProcAddressName(self, module, function):
+        if self.isFunctionPublic(module, function):
             return '_getPublicProcAddress'
         else:
             return '_getPrivateProcAddress'
 
-    def invokeGetProcAddress(self, api, function):
+    def invokeGetProcAddress(self, module, function):
         ptype = function_pointer_type(function)
         pvalue = function_pointer_value(function)
-        getProcAddressName = self.getProcAddressName(api, function)
+        getProcAddressName = self.getProcAddressName(module, function)
         print '    if (!%s) {' % (pvalue,)
         print '        %s = (%s)%s(_name);' % (pvalue, ptype, getProcAddressName)
         print '        if (!%s) {' % (pvalue,)
index abf4f00e20063a824373083f9de4c363694694b7..488f91279da853bd3b4ce3ad45efbcf5733180bc 100644 (file)
@@ -503,7 +503,7 @@ void * _getPublicProcAddress(const char *procName);
 void * _getPrivateProcAddress(const char *procName);
 '''
         
-    def isFunctionPublic(self, api, function):
+    def isFunctionPublic(self, module, function):
         return function.name in public_symbols or function.name.startswith('CGL')
 
 
@@ -519,25 +519,25 @@ if __name__ == '__main__':
     print
     dispatcher.header()
     print
-    dispatcher.dispatchApi(eglapi)
+    dispatcher.dispatchModule(eglapi)
     print
     print '#if defined(_WIN32)'
     print
-    dispatcher.dispatchApi(wglapi)
+    dispatcher.dispatchModule(wglapi)
     print
     print '#elif defined(__APPLE__)'
     print
-    dispatcher.dispatchApi(cglapi)
+    dispatcher.dispatchModule(cglapi)
     print
     print '#elif defined(HAVE_X11)'
     print
-    dispatcher.dispatchApi(glxapi)
+    dispatcher.dispatchModule(glxapi)
     print
     print '#endif'
     print
-    dispatcher.dispatchApi(glapi)
+    dispatcher.dispatchModule(glapi)
     print
-    dispatcher.dispatchApi(glesapi)
+    dispatcher.dispatchModule(glesapi)
     print
 
     print '#endif /* !_GLPROC_HPP_ */'
index 0e0657a3d60e265cd5d20c85815e69f881933e21..1a1fe5aeec63656421a7ab3027a182f2a5fa787f 100644 (file)
@@ -130,7 +130,7 @@ QSize ImageViewer::sizeHint() const
                             m_image.height() + hScrollHeight);
 
     QRect screenRect = QApplication::desktop()->availableGeometry();
-    const float maxPercentOfDesktopSpace = 0.8;
+    const float maxPercentOfDesktopSpace = 0.8f;
     QSize maxAvailableSize(maxPercentOfDesktopSpace * screenRect.width(),
                            maxPercentOfDesktopSpace * screenRect.height());
 
index 0041e256103816c343e6ca9c7163f0b765b88ede..69b2222c067effa030b81d598677a1b7f2860bb1 100644 (file)
@@ -188,10 +188,10 @@ _getLockSize(D3DFORMAT Format, UINT Width, UINT Height, INT RowPitch, UINT Depth
 
 
 static inline void
-_getLockInfo(IDirect3DVertexBuffer9 *pBuffer, UINT OffsetToLock, UINT SizeToLock, void ** ppbData,
-             void * & pLockedData, size_t & LockedSize) {
+_getMapInfo(IDirect3DVertexBuffer9 *pBuffer, UINT OffsetToLock, UINT SizeToLock, void ** ppbData,
+             void * & pLockedData, size_t & MappedSize) {
     pLockedData = *ppbData;
-    LockedSize = 0;
+    MappedSize = 0;
 
     if (SizeToLock == 0) {
         D3DVERTEXBUFFER_DESC Desc;
@@ -199,18 +199,18 @@ _getLockInfo(IDirect3DVertexBuffer9 *pBuffer, UINT OffsetToLock, UINT SizeToLock
         if (FAILED(hr)) {
             return;
         }
-        LockedSize = Desc.Size;
+        MappedSize = Desc.Size;
     } else {
-        LockedSize = SizeToLock;
+        MappedSize = SizeToLock;
     }
 }
 
 
 static inline void
-_getLockInfo(IDirect3DIndexBuffer9 *pBuffer, UINT OffsetToLock, UINT SizeToLock, void ** ppbData,
-             void * & pLockedData, size_t & LockedSize) {
+_getMapInfo(IDirect3DIndexBuffer9 *pBuffer, UINT OffsetToLock, UINT SizeToLock, void ** ppbData,
+             void * & pLockedData, size_t & MappedSize) {
     pLockedData = *ppbData;
-    LockedSize = 0;
+    MappedSize = 0;
 
     if (SizeToLock == 0) {
         D3DINDEXBUFFER_DESC Desc;
@@ -218,18 +218,18 @@ _getLockInfo(IDirect3DIndexBuffer9 *pBuffer, UINT OffsetToLock, UINT SizeToLock,
         if (FAILED(hr)) {
             return;
         }
-        LockedSize = Desc.Size;
+        MappedSize = Desc.Size;
     } else {
-        LockedSize = SizeToLock;
+        MappedSize = SizeToLock;
     }
 }
 
 
 static inline void
-_getLockInfo(IDirect3DSurface9 *pSurface, const D3DLOCKED_RECT *pLockedRect, const RECT *pRect,
-             void * & pLockedData, size_t & LockedSize) {
+_getMapInfo(IDirect3DSurface9 *pSurface, const D3DLOCKED_RECT *pLockedRect, const RECT *pRect,
+             void * & pLockedData, size_t & MappedSize) {
     pLockedData = pLockedRect->pBits;
-    LockedSize = 0;
+    MappedSize = 0;
 
     HRESULT hr;
 
@@ -249,15 +249,15 @@ _getLockInfo(IDirect3DSurface9 *pSurface, const D3DLOCKED_RECT *pLockedRect, con
         Height = Desc.Height;
     }
 
-    LockedSize = _getLockSize(Desc.Format, Width, Height, pLockedRect->Pitch);
+    MappedSize = _getLockSize(Desc.Format, Width, Height, pLockedRect->Pitch);
 }
 
 
 static inline void
-_getLockInfo(IDirect3DTexture9 *pTexture, UINT Level, const D3DLOCKED_RECT *pLockedRect, const RECT *pRect,
-             void * & pLockedData, size_t & LockedSize) {
+_getMapInfo(IDirect3DTexture9 *pTexture, UINT Level, const D3DLOCKED_RECT *pLockedRect, const RECT *pRect,
+             void * & pLockedData, size_t & MappedSize) {
     pLockedData = pLockedRect->pBits;
-    LockedSize = 0;
+    MappedSize = 0;
 
     HRESULT hr;
 
@@ -277,15 +277,15 @@ _getLockInfo(IDirect3DTexture9 *pTexture, UINT Level, const D3DLOCKED_RECT *pLoc
         Height = Desc.Height;
     }
 
-    LockedSize = _getLockSize(Desc.Format, Width, Height, pLockedRect->Pitch);
+    MappedSize = _getLockSize(Desc.Format, Width, Height, pLockedRect->Pitch);
 }
 
 
 static inline void
-_getLockInfo(IDirect3DCubeTexture9 *pTexture, D3DCUBEMAP_FACES FaceType, UINT Level, const D3DLOCKED_RECT *pLockedRect, const RECT *pRect,
-             void * & pLockedData, size_t & LockedSize) {
+_getMapInfo(IDirect3DCubeTexture9 *pTexture, D3DCUBEMAP_FACES FaceType, UINT Level, const D3DLOCKED_RECT *pLockedRect, const RECT *pRect,
+             void * & pLockedData, size_t & MappedSize) {
     pLockedData = pLockedRect->pBits;
-    LockedSize = 0;
+    MappedSize = 0;
 
     HRESULT hr;
 
@@ -307,15 +307,15 @@ _getLockInfo(IDirect3DCubeTexture9 *pTexture, D3DCUBEMAP_FACES FaceType, UINT Le
         Height = Desc.Height;
     }
 
-    LockedSize = _getLockSize(Desc.Format, Width, Height, pLockedRect->Pitch);
+    MappedSize = _getLockSize(Desc.Format, Width, Height, pLockedRect->Pitch);
 }
 
 
 static inline void
-_getLockInfo(IDirect3DVolume9 *pVolume, const D3DLOCKED_BOX *pLockedVolume, const D3DBOX *pBox,
-             void * & pLockedData, size_t & LockedSize) {
+_getMapInfo(IDirect3DVolume9 *pVolume, const D3DLOCKED_BOX *pLockedVolume, const D3DBOX *pBox,
+             void * & pLockedData, size_t & MappedSize) {
     pLockedData = pLockedVolume->pBits;
-    LockedSize = 0;
+    MappedSize = 0;
 
     HRESULT hr;
 
@@ -338,15 +338,15 @@ _getLockInfo(IDirect3DVolume9 *pVolume, const D3DLOCKED_BOX *pLockedVolume, cons
         Depth  = Desc.Depth;
     }
 
-    LockedSize = _getLockSize(Desc.Format, Width, Height, pLockedVolume->RowPitch, Depth, pLockedVolume->SlicePitch);
+    MappedSize = _getLockSize(Desc.Format, Width, Height, pLockedVolume->RowPitch, Depth, pLockedVolume->SlicePitch);
 }
 
 
 static inline void
-_getLockInfo(IDirect3DVolumeTexture9 *pTexture, UINT Level, const D3DLOCKED_BOX *pLockedVolume, const D3DBOX *pBox,
-             void * & pLockedData, size_t & LockedSize) {
+_getMapInfo(IDirect3DVolumeTexture9 *pTexture, UINT Level, const D3DLOCKED_BOX *pLockedVolume, const D3DBOX *pBox,
+             void * & pLockedData, size_t & MappedSize) {
     pLockedData = pLockedVolume->pBits;
-    LockedSize = 0;
+    MappedSize = 0;
 
     HRESULT hr;
 
@@ -369,7 +369,7 @@ _getLockInfo(IDirect3DVolumeTexture9 *pTexture, UINT Level, const D3DLOCKED_BOX
         Depth  = Desc.Depth;
     }
 
-    LockedSize = _getLockSize(Desc.Format, Width, Height, pLockedVolume->RowPitch, Depth, pLockedVolume->SlicePitch);
+    MappedSize = _getLockSize(Desc.Format, Width, Height, pLockedVolume->RowPitch, Depth, pLockedVolume->SlicePitch);
 }
 
 
index 9d39a3b717f6f812aee787d58a3be5a73623ad6d..fe267e1aa8a49d2b0a736368ea4c511ad1ef62f2 100644 (file)
@@ -617,12 +617,12 @@ _align(X x, Y y) {
     return (x + (y - 1)) & ~(y - 1);
 }
 
-static inline size_t
-_gl_image_size(GLenum format, GLenum type, GLsizei width, GLsizei height, GLsizei depth, GLboolean has_unpack_subimage) {
+static inline void
+_gl_format_size(GLenum format, GLenum type,
+                unsigned & bits_per_element, unsigned & bits_per_pixel)
+{
     unsigned num_channels = _gl_format_channels(format);
 
-    unsigned bits_per_element;
-    unsigned bits_per_pixel;
     switch (type) {
     case GL_BITMAP:
         bits_per_pixel = bits_per_element = 1;
@@ -677,6 +677,22 @@ _gl_image_size(GLenum format, GLenum type, GLsizei width, GLsizei height, GLsize
         bits_per_pixel = bits_per_element = 0;
         break;
     }
+}
+
+static inline size_t
+_glClearBufferData_size(GLenum format, GLenum type) {
+    unsigned bits_per_element;
+    unsigned bits_per_pixel;
+    _gl_format_size(format, type, bits_per_element, bits_per_pixel);
+    return (bits_per_pixel + 7)/8;
+}
+
+static inline size_t
+_gl_image_size(GLenum format, GLenum type, GLsizei width, GLsizei height, GLsizei depth, GLboolean has_unpack_subimage) {
+
+    unsigned bits_per_element;
+    unsigned bits_per_pixel;
+    _gl_format_size(format, type, bits_per_element, bits_per_pixel);
 
     GLint alignment = 4;
     GLint row_length = 0;
index 1f260e425dfbb94656c82ed36818643959ad2a48..5a46d3e8c578315dff3d6fb11532ba4f856c1e4e 100644 (file)
@@ -129,6 +129,7 @@ if (ENABLE_EGL AND X11_FOUND AND NOT WIN32 AND NOT APPLE)
 endif ()
 
 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
@@ -144,31 +145,36 @@ if (WIN32 AND DirectX_D3DX9_INCLUDE_DIR)
                 ${CMAKE_SOURCE_DIR}/specs/stdapi.py
     )
 
-    include_directories (SYSTEM ${DirectX_D3DX9_INCLUDE_DIR})
-    add_executable (d3dretrace
-        d3dretrace_main.cpp
-        d3dretrace_d3d9.cpp
-        d3dretrace_ws.cpp
-        d3d9state.cpp
-        d3d9state_images.cpp
-    )
-    target_link_libraries (d3dretrace
-        retrace_common
-    )
+    if (DirectX_D3D10_INCLUDE_DIR)
+        include_directories (SYSTEM ${DirectX_D3D10_INCLUDE_DIR})
+        set (MODULES d3d10)
+        if (DirectX_D3D10_1_INCLUDE_DIR)
+            include_directories (SYSTEM ${DirectX_D3D10_1_INCLUDE_DIR})
+            set (MODULES ${MODULES} d3d10_1)
+        endif ()
+    endif ()
 
-    install (TARGETS d3dretrace RUNTIME DESTINATION bin)
-endif ()
+    if (DirectX_D3D11_INCLUDE_DIR)
+        include_directories (SYSTEM ${DirectX_D3D11_INCLUDE_DIR})
+        set (MODULES ${MODULES} d3d11)
+        if (DirectX_D3D11_1_INCLUDE_DIR)
+            include_directories (SYSTEM ${DirectX_D3D11_1_INCLUDE_DIR})
+            set (MODULES ${MODULES} d3d11_1)
+        endif ()
+    endif ()
 
-if (WIN32 AND DirectX_D3D10_INCLUDE_DIR)
     add_custom_command (
         OUTPUT d3dretrace_d3d10.cpp
-        COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d3d10retrace.py > ${CMAKE_CURRENT_BINARY_DIR}/d3dretrace_d3d10.cpp
+        COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d3dcommonretrace.py ${MODULES} > ${CMAKE_CURRENT_BINARY_DIR}/d3dretrace_d3d10.cpp
         DEPENDS
-                d3d10retrace.py
                 d3dcommonretrace.py
                 dllretrace.py
                 retrace.py
                 ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py
+                ${CMAKE_SOURCE_DIR}/specs/d3d11_1.py
+                ${CMAKE_SOURCE_DIR}/specs/d3d11.py
+                ${CMAKE_SOURCE_DIR}/specs/d3d11sdklayers.py
+                ${CMAKE_SOURCE_DIR}/specs/d3d10_1.py
                 ${CMAKE_SOURCE_DIR}/specs/d3d10.py
                 ${CMAKE_SOURCE_DIR}/specs/d3d10misc.py
                 ${CMAKE_SOURCE_DIR}/specs/d3d10sdklayers.py
@@ -182,89 +188,17 @@ if (WIN32 AND DirectX_D3D10_INCLUDE_DIR)
                 ${CMAKE_SOURCE_DIR}/specs/stdapi.py
     )
 
-    include_directories (SYSTEM ${DirectX_D3D10_INCLUDE_DIR})
-    add_executable (d3d10retrace
+    add_executable (d3dretrace
         d3dretrace_main.cpp
+        d3dretrace_d3d9.cpp
         d3dretrace_d3d10.cpp
         d3dretrace_ws.cpp
         d3d9state.cpp
         d3d9state_images.cpp
     )
-    target_link_libraries (d3d10retrace
-        retrace_common
-    )
-
-    install (TARGETS d3d10retrace RUNTIME DESTINATION bin)
-endif ()
-
-if (WIN32 AND DirectX_D3D10_1_INCLUDE_DIR)
-    add_custom_command (
-        OUTPUT d3dretrace_d3d10_1.cpp
-        COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d3d10_1retrace.py > ${CMAKE_CURRENT_BINARY_DIR}/d3dretrace_d3d10_1.cpp
-        DEPENDS
-                d3d10retrace.py
-                d3dcommonretrace.py
-                dllretrace.py
-                retrace.py
-                ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py
-                ${CMAKE_SOURCE_DIR}/specs/d3d10_1.py
-                ${CMAKE_SOURCE_DIR}/specs/d3d10.py
-                ${CMAKE_SOURCE_DIR}/specs/d3d10sdklayers.py
-                ${CMAKE_SOURCE_DIR}/specs/d3dcommon.py
-                ${CMAKE_SOURCE_DIR}/specs/dxgi.py
-                ${CMAKE_SOURCE_DIR}/specs/dxgitype.py
-                ${CMAKE_SOURCE_DIR}/specs/dxgiformat.py
-                ${CMAKE_SOURCE_DIR}/specs/winapi.py
-                ${CMAKE_SOURCE_DIR}/specs/stdapi.py
-    )
-
-    include_directories (SYSTEM ${DirectX_D3D10_1_INCLUDE_DIR})
-    add_executable (d3d10_1retrace
-        d3dretrace_main.cpp
-        d3dretrace_d3d10_1.cpp
-        d3dretrace_ws.cpp
-        d3d9state.cpp
-        d3d9state_images.cpp
-    )
-    target_link_libraries (d3d10_1retrace
-        retrace_common
-    )
-
-    install (TARGETS d3d10_1retrace RUNTIME DESTINATION bin)
-endif ()
-
-if (WIN32 AND DirectX_D3D11_INCLUDE_DIR)
-    add_custom_command (
-        OUTPUT d3dretrace_d3d11.cpp
-        COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d3d11retrace.py > ${CMAKE_CURRENT_BINARY_DIR}/d3dretrace_d3d11.cpp
-        DEPENDS
-                d3d11retrace.py
-                d3dcommonretrace.py
-                dllretrace.py
-                retrace.py
-                ${CMAKE_SOURCE_DIR}/dispatch/dispatch.py
-                ${CMAKE_SOURCE_DIR}/specs/d3d11_1.py
-                ${CMAKE_SOURCE_DIR}/specs/d3d11.py
-                ${CMAKE_SOURCE_DIR}/specs/d3d11sdklayers.py
-                ${CMAKE_SOURCE_DIR}/specs/d3dcommon.py
-                ${CMAKE_SOURCE_DIR}/specs/dxgi.py
-                ${CMAKE_SOURCE_DIR}/specs/dxgitype.py
-                ${CMAKE_SOURCE_DIR}/specs/dxgiformat.py
-                ${CMAKE_SOURCE_DIR}/specs/winapi.py
-                ${CMAKE_SOURCE_DIR}/specs/stdapi.py
-    )
-
-    include_directories (SYSTEM ${DirectX_D3D11_INCLUDE_DIR})
-    add_executable (d3d11retrace
-        d3dretrace_main.cpp
-        d3dretrace_d3d11.cpp
-        d3dretrace_ws.cpp
-        d3d9state.cpp
-        d3d9state_images.cpp
-    )
-    target_link_libraries (d3d11retrace
+    target_link_libraries (d3dretrace
         retrace_common
     )
 
-    install (TARGETS d3d11retrace RUNTIME DESTINATION bin)
+    install (TARGETS d3dretrace RUNTIME DESTINATION bin)
 endif ()
diff --git a/retrace/d3d10_1retrace.py b/retrace/d3d10_1retrace.py
deleted file mode 100644 (file)
index bb45b82..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-##########################################################################
-#
-# Copyright 2011 Jose Fonseca
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-#
-##########################################################################/
-
-
-"""D3D10 retracer generator."""
-
-
-from d3dcommonretrace import D3DRetracer
-import specs.stdapi as stdapi
-from specs.d3d10_1 import d3d10_1
-
-
-if __name__ == '__main__':
-    print r'''
-#include <string.h>
-
-#include <iostream>
-
-#include "d3d10_1imports.hpp"
-#include "d3d10size.hpp"
-#include "d3dretrace.hpp"
-
-'''
-
-    retracer = D3DRetracer()
-    retracer.retraceApi(d3d10_1)
diff --git a/retrace/d3d10retrace.py b/retrace/d3d10retrace.py
deleted file mode 100644 (file)
index 877b1e4..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-##########################################################################
-#
-# Copyright 2011 Jose Fonseca
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-#
-##########################################################################/
-
-
-"""D3D10 retracer generator."""
-
-
-from d3dcommonretrace import D3DRetracer
-import specs.stdapi as stdapi
-from specs.d3d10 import d3d10
-
-
-if __name__ == '__main__':
-    print r'''
-#include <string.h>
-
-#include <iostream>
-
-#include "d3d10imports.hpp"
-#include "d3d10size.hpp"
-#include "d3dretrace.hpp"
-
-'''
-
-    retracer = D3DRetracer()
-    retracer.retraceApi(d3d10)
diff --git a/retrace/d3d11retrace.py b/retrace/d3d11retrace.py
deleted file mode 100644 (file)
index 8831024..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-##########################################################################
-#
-# Copyright 2011 Jose Fonseca
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-#
-##########################################################################/
-
-
-"""D3D10 retracer generator."""
-
-
-from d3dcommonretrace import D3DRetracer
-import specs.stdapi as stdapi
-from specs.d3d11 import d3d11
-
-
-if __name__ == '__main__':
-    print r'''
-#include <string.h>
-
-#include <iostream>
-
-#include "d3d11imports.hpp"
-#include "d3d11size.hpp"
-#include "d3dretrace.hpp"
-
-'''
-
-    retracer = D3DRetracer()
-    retracer.retraceApi(d3d11)
index 7030f868f17b3a98a27d0e3048f7077f412f640c..4b5853bdd3e2be3e0b987cbe2c9a9daf4b429a61 100644 (file)
 
 
 from dllretrace import DllRetracer as Retracer
-import specs.stdapi as stdapi
+from specs.stdapi import API
 from specs.d3d9 import *
 
 
 class D3DRetracer(Retracer):
 
     def retraceApi(self, api):
+        print '''
+static IDirect3DDevice9 *
+pLastDirect3DDevice9 = NULL;
+
+image::Image *
+retrace::getSnapshot(void) {
+    if (!pLastDirect3DDevice9) {
+        return NULL;
+    }
+    return d3dstate::getRenderTargetImage(pLastDirect3DDevice9);
+}
+
+
+bool
+retrace::dumpState(std::ostream &os)
+{
+    if (!pLastDirect3DDevice9) {
+        return false;
+    }
+    d3dstate::dumpDevice(os, pLastDirect3DDevice9);
+    return true;
+}
+'''
+
         print '// Swizzling mapping for lock addresses'
-        print 'static std::map<void *, void *> _locks;'
+        print 'static std::map<void *, void *> _maps;'
         print
 
-        self.table_name = 'd3dretrace::d3d_callbacks'
+        self.table_name = 'd3dretrace::d3d9_callbacks'
 
         Retracer.retraceApi(self, api)
 
@@ -60,7 +84,7 @@ class D3DRetracer(Retracer):
     def invokeInterfaceMethod(self, interface, method):
         # keep track of the last used device for state dumping
         if interface.name in ('IDirect3DDevice9', 'IDirect3DDevice9Ex'):
-            print r'    d3dretrace::pLastDirect3DDevice9 = _this;'
+            print r'    pLastDirect3DDevice9 = _this;'
 
         # create windows as neccessary
         if method.name in ('CreateDevice', 'CreateDeviceEx', 'CreateAdditionalSwapChain'):
@@ -99,13 +123,13 @@ class D3DRetracer(Retracer):
 
         if method.name in ('Lock', 'LockRect', 'LockBox'):
             print '    VOID *_pbData = NULL;'
-            print '    size_t _LockedSize = 0;'
-            print '    _getLockInfo(_this, %s, _pbData, _LockedSize);' % ', '.join(method.argNames()[:-1])
-            print '    _locks[_this] = _pbData;'
+            print '    size_t _MappedSize = 0;'
+            print '    _getMapInfo(_this, %s, _pbData, _MappedSize);' % ', '.join(method.argNames()[:-1])
+            print '    _maps[_this] = _pbData;'
         
         if method.name in ('Unlock', 'UnlockRect', 'UnlockBox'):
             print '    VOID *_pbData = 0;'
-            print '    _pbData = _locks[_this];'
+            print '    _pbData = _maps[_this];'
             print '    if (_pbData) {'
             print '        retrace::delRegionByPointer(_pbData);'
             print '    }'
@@ -120,8 +144,11 @@ if __name__ == '__main__':
 #include "d3d9imports.hpp"
 #include "d3d9size.hpp"
 #include "d3dretrace.hpp"
+#include "d3d9state.hpp"
 
 '''
 
+    api = API()
+    api.addModule(d3d9)
     retracer = D3DRetracer()
-    retracer.retraceApi(d3d9)
+    retracer.retraceApi(api)
index ea09eb01bab5e475411fde8b76757223d8246e5e..add1a5040a87710615ac02e89e1921ced48524a5 100644 (file)
 """D3D retracer generator."""
 
 
+import sys
 from dllretrace import DllRetracer as Retracer
-import specs.stdapi as stdapi
+from specs.stdapi import API
+from specs.dxgi import dxgi
+from specs.d3d10 import d3d10
+from specs.d3d10_1 import d3d10_1
+from specs.d3d11 import d3d11
 
 
 class D3DRetracer(Retracer):
@@ -38,7 +43,7 @@ class D3DRetracer(Retracer):
         print 'static std::map<void *, void *> _maps;'
         print
 
-        self.table_name = 'd3dretrace::d3d_callbacks'
+        self.table_name = 'd3dretrace::d3d10_callbacks'
 
         Retracer.retraceApi(self, api)
 
@@ -47,8 +52,15 @@ class D3DRetracer(Retracer):
         if function.name in ('D3D10CreateDeviceAndSwapChain', 'D3D10CreateDeviceAndSwapChain1', 'D3D11CreateDeviceAndSwapChain'):
             print r'    pSwapChainDesc->OutputWindow = d3dretrace::createWindow(512, 512);'
 
+        if 'Software' in function.argNames():
+            print r'    if (Software) {'
+            print r'        retrace::warning(call) << "software device\n";'
+            print r'        Software = LoadLibraryA("d3d10warp");'
+            print r'    }'
+
         Retracer.invokeFunction(self, function)
 
+
     def invokeInterfaceMethod(self, interface, method):
         # keep track of the last used device for state dumping
         #if interface.name in ('IDirect3DDevice9', 'IDirect3DDevice9Ex'):
@@ -92,3 +104,42 @@ class D3DRetracer(Retracer):
             print '    if (_pbData) {'
             print '        retrace::delRegionByPointer(_pbData);'
             print '    }'
+
+
+def main():
+    print r'''#include <string.h>'''
+    print
+    print r'#include <iostream>'
+    print
+    print r'#include "d3dretrace.hpp"'
+    print
+
+    moduleNames = sys.argv[1:]
+
+    api = API()
+    if moduleNames:
+        api.addModule(dxgi)
+    if 'd3d10' in moduleNames:
+        if 'd3d10_1' in moduleNames:
+            print r'#include "d3d10_1imports.hpp"'
+            # D3D10CreateBlob is duplicated in d3d10 and d3d10_1
+            d3d10_1.functions = [function for function in d3d10_1.functions if function.name != 'D3D10CreateBlob']
+            api.addModule(d3d10_1)
+        else:
+            print r'#include "d3d10imports.hpp"'
+        print r'#include "d3d10size.hpp"'
+        api.addModule(d3d10)
+    if 'd3d11' in moduleNames:
+        print r'#include "d3d11imports.hpp"'
+        if 'd3d11_1' in moduleNames:
+            print '#include <d3d11_1.h>'
+            import specs.d3d11_1
+        print r'#include "d3d11size.hpp"'
+        api.addModule(d3d11)
+
+    retracer = D3DRetracer()
+    retracer.retraceApi(api)
+
+
+if __name__ == '__main__':
+    main()
index dc174a83bc49c1e233b6404e06ff3bbea847d8e3..5a45d36191b431fe0d5f3c2938781125ac940238 100644 (file)
 #include "retrace.hpp"
 
 
-struct IDirect3DDevice9;
-
-
 namespace d3dretrace {
 
 
-extern IDirect3DDevice9 *pLastDirect3DDevice9;
-
-
-extern const retrace::Entry d3d_callbacks[];
+extern const retrace::Entry d3d9_callbacks[];
+extern const retrace::Entry d3d10_callbacks[];
 
 
 HWND
index a19511a0439e29f8df336c94a36a138faa79411d..440d5b1504fed80a0ea6b72e7abb2e6ac849eee4 100644 (file)
 #include "d3dretrace.hpp"
 
 
-IDirect3DDevice9 *
-d3dretrace::pLastDirect3DDevice9 = NULL;
-
-
 void
 retrace::setUp(void) {
 }
@@ -45,30 +41,8 @@ retrace::setUp(void) {
 void
 retrace::addCallbacks(retrace::Retracer &retracer)
 {
-    retracer.addCallbacks(d3dretrace::d3d_callbacks);
-}
-
-
-image::Image *
-retrace::getSnapshot(void) {
-    if (!d3dretrace::pLastDirect3DDevice9) {
-        return NULL;
-    }
-
-    return d3dstate::getRenderTargetImage(d3dretrace::pLastDirect3DDevice9);
-}
-
-
-bool
-retrace::dumpState(std::ostream &os)
-{
-    if (!d3dretrace::pLastDirect3DDevice9) {
-        return false;
-    }
-
-    d3dstate::dumpDevice(os, d3dretrace::pLastDirect3DDevice9);
-
-    return true;
+    retracer.addCallbacks(d3dretrace::d3d9_callbacks);
+    retracer.addCallbacks(d3dretrace::d3d10_callbacks);
 }
 
 
index 4fd481ca967560d2226a4b15d5c2571e1cf749fb..aa7ed45ada0ffbbd143f7e42b2340828dbaede0e 100644 (file)
 
 from retrace import Retracer
 from dispatch import Dispatcher
+from specs.stdapi import API
 
 
 class DllDispatcher(Dispatcher):
 
-    def dispatchApi(self, api):
-        tag = api.name.upper()
+    def dispatchModule(self, module):
+        tag = module.name.upper()
         print r'const char *g_sz%sDllName = NULL;' % (tag,)
         print r'HMODULE g_h%sModule = NULL;' % (tag,)
         print r''
         print r'static PROC'
-        print r'_getPublicProcAddress(LPCSTR lpProcName) {'
+        print r'_get%sProcAddress(LPCSTR lpProcName) {' % tag
         print r'    if (!g_h%sModule) {' % tag
         print r'        if (g_sz%sDllName) {' % tag
         print r'            g_h%sModule = LoadLibraryA(g_sz%sDllName);' % (tag, tag)
@@ -45,10 +46,10 @@ class DllDispatcher(Dispatcher):
         print r'            }'
         print r'        }'
         print r'        if (!g_h%sModule) {' % tag
-        print r'            g_h%sModule = LoadLibraryA("%s.dll");' % (tag, api.name)
+        print r'            g_h%sModule = LoadLibraryA("%s.dll");' % (tag, module.name)
         print r'        }'
         print r'        if (!g_h%sModule) {' % tag
-        print r'            os::log("error: failed to load %s.dll\n");' % api.name
+        print r'            os::log("error: failed to load %s.dll\n");' % module.name
         print r'            exit(1);'
         print r'        }'
         print r'    }'
@@ -56,14 +57,18 @@ class DllDispatcher(Dispatcher):
         print r'}'
         print r''
 
-        Dispatcher.dispatchApi(self, api)
+        Dispatcher.dispatchModule(self, module)
+
+    def getProcAddressName(self, module, function):
+        assert self.isFunctionPublic(module, function)
+        return '_get%sProcAddress' % (module.name.upper())
 
 
 class DllRetracer(Retracer):
 
     def retraceApi(self, api):
-        dispatcher = DllDispatcher()
-        dispatcher.dispatchApi(api)
+        for module in api.modules:
+            dispatcher = DllDispatcher()
+            dispatcher.dispatchModule(module)
 
         Retracer.retraceApi(self, api)
-
index e2ea3201bf183bd63597a964b11f95bcc101424f..6fdeffe49eaa8c14ed2cedcb820344679d271216 100644 (file)
@@ -528,7 +528,8 @@ if __name__ == '__main__':
 
 static bool _pipelineHasBeenBound = false;
 '''
-    api = glapi.glapi
-    api.addApi(glesapi.glesapi)
+    api = stdapi.API()
+    api.addModule(glapi.glapi)
+    api.addModule(glesapi.glesapi)
     retracer = GlRetracer()
     retracer.retraceApi(api)
index 2dd8e2f12a2ae0d825c9c61f079946a91b1b4699..5b5812faa101feb04c651608c24561bf22d9f0af 100644 (file)
@@ -242,7 +242,7 @@ class SwizzledValueRegistrator(stdapi.Visitor):
         pass
     
     def visitObjPointer(self, pointer, lvalue, rvalue):
-        print r'    retrace::addObj(%s, %s);' % (rvalue, lvalue)
+        print r'    retrace::addObj(call, %s, %s);' % (rvalue, lvalue)
     
     def visitLinearPointer(self, pointer, lvalue, rvalue):
         assert pointer.size is not None
@@ -479,7 +479,7 @@ class Retracer:
                 handle_names.add(handle.name)
         print
 
-        functions = filter(self.filterFunction, api.functions)
+        functions = filter(self.filterFunction, api.getAllFunctions())
         for function in functions:
             if function.sideeffects and not function.internal:
                 self.retraceFunction(function)
index fe0df21c9deceab0dffc8e281edc00d7b8379ce7..b487de184a994cdd9c9bfbec01364704d13a80ef 100644 (file)
@@ -255,8 +255,18 @@ toPointer(trace::Value &value, bool bind) {
 static std::map<unsigned long long, void *> _obj_map;
 
 void
-addObj(trace::Value &value, void *obj) {
+addObj(trace::Call &call, trace::Value &value, void *obj) {
     unsigned long long address = value.toUIntPtr();
+
+    if (!address) {
+        assert(!obj);
+        return;
+    }
+
+    if (!obj) {
+        warning(call) << "got null for object 0x" << std::hex << address << std::dec << "\n";
+    }
+
     _obj_map[address] = obj;
     
     if (retrace::verbosity >= 2) {
@@ -278,7 +288,7 @@ toObjPointer(trace::Call &call, trace::Value &value) {
     if (address) {
         obj = _obj_map[address];
         if (!obj) {
-            warning(call) << "unknown object 0x" << std::hex << address << std::dec << " call\n";
+            warning(call) << "unknown object 0x" << std::hex << address << std::dec << "\n";
         }
     } else {
         obj = NULL;
index bab6d562e077dedbdd875eb181e1dcce51fda56b..42e5bf6484a344e31f4b80d35cf93c3759a3b23d 100644 (file)
@@ -88,7 +88,7 @@ toPointer(trace::Value &value, bool bind = false);
 
 
 void
-addObj(trace::Value &value, void *obj);
+addObj(trace::Call &call, trace::Value &value, void *obj);
 
 void
 delObj(trace::Value &value);
index fbae1b149eecd539d171845a9aac963f868940b6..6cea02887f3f3945bf9b99099a6a2a2b09d21d86 100644 (file)
@@ -180,7 +180,7 @@ CGLError = Enum("CGLError", [
 
 CGLContextObj = Opaque("CGLContextObj")
 
-cglapi = API("CGL")
+cglapi = Module("CGL")
 
 cglapi.addFunctions([
     # CGLCurrent.h, libGL.dylib
index 7fe9b65912fa3c571b4fc6862c184dea4a892868..e532e4688a70122b3027210934c7c5b59881c064 100644 (file)
@@ -622,12 +622,14 @@ ID2D1Factory.methods += [
     StdMethod(HRESULT, "CreateDCRenderTarget", [(Pointer(Const(D2D1_RENDER_TARGET_PROPERTIES)), "renderTargetProperties"), Out(Pointer(ObjPointer(ID2D1DCRenderTarget)), "dcRenderTarget")]),
 ]
 
-d2d1 = API("d2d1")
-d2d1.addInterface(ID2D1Factory)
+d2d1 = Module("d2d1")
+d2d1.addInterfaces([
+    ID2D1Factory
+])
 d2d1.addFunctions([
-    StdFunction(HRESULT, "D2D1CreateFactory", [(D2D1_FACTORY_TYPE, "factoryType"), (REFIID, "riid"), (Pointer(Const(D2D1_FACTORY_OPTIONS)), "pFactoryOptions"), Out(Pointer(OpaquePointer(Void)), "ppIFactory")]),
+    StdFunction(HRESULT, "D2D1CreateFactory", [(D2D1_FACTORY_TYPE, "factoryType"), (REFIID, "riid"), (Pointer(Const(D2D1_FACTORY_OPTIONS)), "pFactoryOptions"), Out(Pointer(ObjPointer(Void)), "ppIFactory")]),
     StdFunction(Void, "D2D1MakeRotateMatrix", [(FLOAT, "angle"), (D2D1_POINT_2F, "center"), Out(Pointer(D2D1_MATRIX_3X2_F), "matrix")]),
     StdFunction(Void, "D2D1MakeSkewMatrix", [(FLOAT, "angleX"), (FLOAT, "angleY"), (D2D1_POINT_2F, "center"), Out(Pointer(D2D1_MATRIX_3X2_F), "matrix")]),
     StdFunction(BOOL, "D2D1IsMatrixInvertible", [(Pointer(Const(D2D1_MATRIX_3X2_F)), "matrix")]),
-    StdFunction(BOOL, "D2D1InvertMatrix", [Out(Pointer(D2D1_MATRIX_3X2_F), "matrix")]),
+    StdFunction(BOOL, "D2D1InvertMatrix", [InOut(Pointer(D2D1_MATRIX_3X2_F), "matrix")]),
 ])
index 48dc2e1816632fddf2ff0bac7b8f4cb6a87a1402..0552575d64e67ac9c370f985936020bc191b3f3f 100644 (file)
@@ -898,7 +898,7 @@ ID3D10Multithread.methods += [
 ]
 
 
-d3d10 = API("d3d10")
+d3d10 = Module("d3d10")
 
 
 from d3d10sdklayers import *
index 60a7656c45c1071295ce4feb94de6c7934a866b1..73d798ec4405cb3e98288035bcbc6952eb2f5611 100644 (file)
@@ -100,7 +100,7 @@ ID3D10Device1.methods += [
     StdMethod(D3D10_FEATURE_LEVEL1, "GetFeatureLevel", [], sideeffects=False),
 ]
 
-d3d10_1 = API("d3d10_1")
+d3d10_1 = Module("d3d10_1")
 d3d10_1.addFunctions([
     StdFunction(HRESULT, "D3D10CreateDevice1", [(ObjPointer(IDXGIAdapter), "pAdapter"), (D3D10_DRIVER_TYPE, "DriverType"), (HMODULE, "Software"), (D3D10_CREATE_DEVICE_FLAG, "Flags"), (D3D10_FEATURE_LEVEL1, "HardwareLevel"), (UINT, "SDKVersion"), Out(Pointer(ObjPointer(ID3D10Device1)), "ppDevice")]),
     StdFunction(HRESULT, "D3D10CreateDeviceAndSwapChain1", [(ObjPointer(IDXGIAdapter), "pAdapter"), (D3D10_DRIVER_TYPE, "DriverType"), (HMODULE, "Software"), (D3D10_CREATE_DEVICE_FLAG, "Flags"), (D3D10_FEATURE_LEVEL1, "HardwareLevel"), (UINT, "SDKVersion"), (Pointer(DXGI_SWAP_CHAIN_DESC), "pSwapChainDesc"), Out(Pointer(ObjPointer(IDXGISwapChain)), "ppSwapChain"), Out(Pointer(ObjPointer(ID3D10Device1)), "ppDevice")]),
index 4566ea15218b539e10ff9e332a7b394a9b6a8cc8..578d2144f855057eccc58247e2aa0156ae7cb31f 100644 (file)
@@ -1213,7 +1213,7 @@ ID3D11Device.methods += [
     StdMethod(UINT, "GetExceptionMode", [], sideeffects=False),
 ]
 
-d3d11 = API("d3d11")
+d3d11 = Module("d3d11")
 
 d3d11.addFunctions([
     StdFunction(HRESULT, "D3D11CreateDevice", [(ObjPointer(IDXGIAdapter), "pAdapter"), (D3D_DRIVER_TYPE, "DriverType"), (HMODULE, "Software"), (D3D11_CREATE_DEVICE_FLAG, "Flags"), (Array(Const(D3D_FEATURE_LEVEL), "FeatureLevels"), "pFeatureLevels"), (UINT, "FeatureLevels"), (UINT, "SDKVersion"), Out(Pointer(ObjPointer(ID3D11Device)), "ppDevice"), Out(Pointer(D3D_FEATURE_LEVEL), "pFeatureLevel"), Out(Pointer(ObjPointer(ID3D11DeviceContext)), "ppImmediateContext")]),
index 9a11ec5244f668c2754af451f5a682bac29d31d0..c835fc5036ee8213b1e0179c17164ef260750327 100644 (file)
@@ -289,7 +289,7 @@ IDirect3DVolume8.methods += [
     StdMethod(HRESULT, "UnlockBox", []),
 ]
 
-d3d8 = API("d3d8")
+d3d8 = Module("d3d8")
 d3d8.addFunctions([
     StdFunction(PDIRECT3D8, "Direct3DCreate8", [(UINT, "SDKVersion")]),
 ])
index 3443feeb971f354e0eb1b882c40e3ef99df54c56..a3b40d119e299c7b530ee61bcdde2c405471a1e5 100644 (file)
@@ -347,13 +347,13 @@ IDirect3DCubeTexture9.methods += [
 ]
 
 IDirect3DVertexBuffer9.methods += [
-    StdMethod(HRESULT, "Lock", [(UINT, "OffsetToLock"), (UINT, "SizeToLock"), Out(Pointer(LinearPointer(Void, "_LockedSize")), "ppbData"), (D3DLOCK, "Flags")]),
+    StdMethod(HRESULT, "Lock", [(UINT, "OffsetToLock"), (UINT, "SizeToLock"), Out(Pointer(LinearPointer(Void, "_MappedSize")), "ppbData"), (D3DLOCK, "Flags")]),
     StdMethod(HRESULT, "Unlock", []),
     StdMethod(HRESULT, "GetDesc", [Out(Pointer(D3DVERTEXBUFFER_DESC), "pDesc")], sideeffects=False),
 ]
 
 IDirect3DIndexBuffer9.methods += [
-    StdMethod(HRESULT, "Lock", [(UINT, "OffsetToLock"), (UINT, "SizeToLock"), Out(Pointer(LinearPointer(Void, "_LockedSize")), "ppbData"), (D3DLOCK, "Flags")]),
+    StdMethod(HRESULT, "Lock", [(UINT, "OffsetToLock"), (UINT, "SizeToLock"), Out(Pointer(LinearPointer(Void, "_MappedSize")), "ppbData"), (D3DLOCK, "Flags")]),
     StdMethod(HRESULT, "Unlock", []),
     StdMethod(HRESULT, "GetDesc", [Out(Pointer(D3DINDEXBUFFER_DESC), "pDesc")], sideeffects=False),
 ]
@@ -418,7 +418,7 @@ IDirect3DSwapChain9Ex.methods += [
     StdMethod(HRESULT, "GetDisplayModeEx", [Out(Pointer(D3DDISPLAYMODEEX), "pMode"), Out(Pointer(D3DDISPLAYROTATION), "pRotation")], sideeffects=False),
 ]
 
-d3d9 = API("d3d9")
+d3d9 = Module("d3d9")
 d3d9.addFunctions([
     StdFunction(PDIRECT3D9, "Direct3DCreate9", [(UINT, "SDKVersion")], fail='NULL'),
     StdFunction(HRESULT, "Direct3DCreate9Ex", [(UINT, "SDKVersion"), Out(Pointer(PDIRECT3D9EX), "ppD3D")], fail='D3DERR_NOTAVAILABLE'),
index 279d6d3c08f21bd715643724f49af2b0727a5992..41b689036216bed84a3ad47b3e72877e4cb1fef1 100644 (file)
@@ -929,7 +929,7 @@ D3DVOLUME_DESC = Struct("D3DVOLUME_DESC", [
 
 D3DLOCKED_RECT = Struct("D3DLOCKED_RECT", [
     (INT, "Pitch"),
-    (LinearPointer(Void, "_LockedSize"), "pBits"),
+    (LinearPointer(Void, "_MappedSize"), "pBits"),
 ])
 
 D3DBOX = Struct("D3DBOX", [
@@ -944,7 +944,7 @@ D3DBOX = Struct("D3DBOX", [
 D3DLOCKED_BOX = Struct("D3DLOCKED_BOX", [
     (INT, "RowPitch"),
     (INT, "SlicePitch"),
-    (LinearPointer(Void, "_LockedSize"), "pBits"),
+    (LinearPointer(Void, "_MappedSize"), "pBits"),
 ])
 
 D3DRANGE = Struct("D3DRANGE", [
index cccbbe57fd73540eee7dfa37291f911469546763..7ca6783c0c6c67f013378e2f74e9cc17464fdb81 100644 (file)
@@ -1632,7 +1632,7 @@ DDCREATE = Flags(DWORD, [
     "DDCREATE_EMULATIONONLY",
 ])
 
-ddraw = API("ddraw")
+ddraw = Module("ddraw")
 ddraw.addFunctions([
     StdFunction(HRESULT, "DirectDrawEnumerateW", [(LPDDENUMCALLBACKW, "lpCallback"), (LPVOID, "lpContext")]),
     StdFunction(HRESULT, "DirectDrawEnumerateA", [(LPDDENUMCALLBACKA, "lpCallback"), (LPVOID, "lpContext")]),
@@ -1641,8 +1641,8 @@ ddraw.addFunctions([
     StdFunction(HRESULT, "DirectDrawCreate", [(Pointer(GUID), "lpGUID"), Out(Pointer(LPDIRECTDRAW), "lplpDD"), (LPUNKNOWN, "pUnkOuter")]),
     StdFunction(HRESULT, "DirectDrawCreateEx", [(Pointer(GUID), "lpGuid"), Out(Pointer(ObjPointer(Void)), "lplpDD"), (REFIID, "iid"), (LPUNKNOWN, "pUnkOuter")]),
     StdFunction(HRESULT, "DirectDrawCreateClipper", [(DWORD, "dwFlags"), Out(Pointer(LPDIRECTDRAWCLIPPER), "lplpDDClipper"), (LPUNKNOWN, "pUnkOuter")]),
-    StdFunction(Void, "AcquireDDThreadLock", []),
-    StdFunction(Void, "ReleaseDDThreadLock", []),
+    StdFunction(Void, "AcquireDDThreadLock", [], internal=True),
+    StdFunction(Void, "ReleaseDDThreadLock", [], internal=True),
     StdFunction(DWORD, "D3DParseUnknownCommand", [(LPVOID, "lpCmd"), Out(Pointer(LPVOID), "lpRetCmd")]),
     StdFunction(HRESULT, "DllCanUnloadNow", []),
     StdFunction(HRESULT, "DllGetClassObject", [(REFCLSID, "rclsid"), (REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppv")]),
index 001d041573e131e2d3e634325533d647c5e9933e..1a8aae0ebaf788ae86d47ce6de78067b701ff03a 100644 (file)
@@ -454,7 +454,7 @@ IDWriteTextFormat.methods += [
     StdMethod(HRESULT, "SetReadingDirection", [(DWRITE_READING_DIRECTION, "readingDirection")]),
     StdMethod(HRESULT, "SetFlowDirection", [(DWRITE_FLOW_DIRECTION, "flowDirection")]),
     StdMethod(HRESULT, "SetIncrementalTabStop", [(FLOAT, "incrementalTabStop")]),
-    StdMethod(HRESULT, "SetTrimming", [(Pointer(Const(DWRITE_TRIMMING)), "trimmingOptions"), (ObjPointer(IDWriteInlineObject), "trimmingSign")]),
+    StdMethod(HRESULT, "SetTrimming", [(Pointer(Const(DWRITE_TRIMMING)), "trimmingOptions"), (OpaquePointer(IDWriteInlineObject), "trimmingSign")]),
     StdMethod(HRESULT, "SetLineSpacing", [(DWRITE_LINE_SPACING_METHOD, "lineSpacingMethod"), (FLOAT, "lineSpacing"), (FLOAT, "baseline")]),
     StdMethod(DWRITE_TEXT_ALIGNMENT, "GetTextAlignment", []),
     StdMethod(DWRITE_PARAGRAPH_ALIGNMENT, "GetParagraphAlignment", []),
@@ -462,7 +462,7 @@ IDWriteTextFormat.methods += [
     StdMethod(DWRITE_READING_DIRECTION, "GetReadingDirection", []),
     StdMethod(DWRITE_FLOW_DIRECTION, "GetFlowDirection", []),
     StdMethod(FLOAT, "GetIncrementalTabStop", []),
-    StdMethod(HRESULT, "GetTrimming", [Out(Pointer(DWRITE_TRIMMING), "trimmingOptions"), Out(Pointer(ObjPointer(IDWriteInlineObject)), "trimmingSign")]),
+    StdMethod(HRESULT, "GetTrimming", [Out(Pointer(DWRITE_TRIMMING), "trimmingOptions"), Out(Pointer(OpaquePointer(IDWriteInlineObject)), "trimmingSign")]),
     StdMethod(HRESULT, "GetLineSpacing", [Out(Pointer(DWRITE_LINE_SPACING_METHOD), "lineSpacingMethod"), Out(Pointer(FLOAT), "lineSpacing"), Out(Pointer(FLOAT), "baseline")]),
     StdMethod(HRESULT, "GetFontCollection", [Out(Pointer(ObjPointer(IDWriteFontCollection)), "fontCollection")]),
     StdMethod(UINT32, "GetFontFamilyNameLength", []),
@@ -654,7 +654,7 @@ DWRITE_HIT_TEST_METRICS = Struct("DWRITE_HIT_TEST_METRICS", [
 ])
 
 IDWriteInlineObject.methods += [
-    StdMethod(HRESULT, "Draw", [(OpaquePointer(Void), "clientDrawingContext"), (ObjPointer(IDWriteTextRenderer), "renderer"), (FLOAT, "originX"), (FLOAT, "originY"), (BOOL, "isSideways"), (BOOL, "isRightToLeft"), (ObjPointer(IUnknown), "clientDrawingEffect")]),
+    StdMethod(HRESULT, "Draw", [(OpaquePointer(Void), "clientDrawingContext"), (OpaquePointer(IDWriteTextRenderer), "renderer"), (FLOAT, "originX"), (FLOAT, "originY"), (BOOL, "isSideways"), (BOOL, "isRightToLeft"), (ObjPointer(IUnknown), "clientDrawingEffect")]),
     StdMethod(HRESULT, "GetMetrics", [Out(Pointer(DWRITE_INLINE_OBJECT_METRICS), "metrics")]),
     StdMethod(HRESULT, "GetOverhangMetrics", [Out(Pointer(DWRITE_OVERHANG_METRICS), "overhangs")]),
     StdMethod(HRESULT, "GetBreakConditions", [Out(Pointer(DWRITE_BREAK_CONDITION), "breakConditionBefore"), Out(Pointer(DWRITE_BREAK_CONDITION), "breakConditionAfter")]),
@@ -704,7 +704,7 @@ IDWriteTextLayout.methods += [
     StdMethod(HRESULT, "GetTypography", [(UINT32, "currentPosition"), Out(Pointer(ObjPointer(IDWriteTypography)), "typography"), Out(Pointer(DWRITE_TEXT_RANGE), "textRange")]),
     StdMethod(HRESULT, "GetLocaleNameLength", [(UINT32, "currentPosition"), Out(Pointer(UINT32), "nameLength"), Out(Pointer(DWRITE_TEXT_RANGE), "textRange")]),
     StdMethod(HRESULT, "GetLocaleName", [(UINT32, "currentPosition"), Out(Pointer(WCHAR), "localeName"), (UINT32, "nameSize"), Out(Pointer(DWRITE_TEXT_RANGE), "textRange")]),
-    StdMethod(HRESULT, "Draw", [(OpaquePointer(Void), "clientDrawingContext"), (ObjPointer(IDWriteTextRenderer), "renderer"), (FLOAT, "originX"), (FLOAT, "originY")]),
+    StdMethod(HRESULT, "Draw", [(OpaquePointer(Void), "clientDrawingContext"), (OpaquePointer(IDWriteTextRenderer), "renderer"), (FLOAT, "originX"), (FLOAT, "originY")]),
     StdMethod(HRESULT, "GetLineMetrics", [Out(Pointer(DWRITE_LINE_METRICS), "lineMetrics"), (UINT32, "maxLineCount"), Out(Pointer(UINT32), "actualLineCount")]),
     StdMethod(HRESULT, "GetMetrics", [Out(Pointer(DWRITE_TEXT_METRICS), "textMetrics")]),
     StdMethod(HRESULT, "GetOverhangMetrics", [Out(Pointer(DWRITE_OVERHANG_METRICS), "overhangs")]),
@@ -769,8 +769,10 @@ IDWriteFactory.methods += [
     StdMethod(HRESULT, "CreateGlyphRunAnalysis", [(Pointer(Const(DWRITE_GLYPH_RUN)), "glyphRun"), (FLOAT, "pixelsPerDip"), (Pointer(Const(DWRITE_MATRIX)), "transform"), (DWRITE_RENDERING_MODE, "renderingMode"), (DWRITE_MEASURING_MODE, "measuringMode"), (FLOAT, "baselineOriginX"), (FLOAT, "baselineOriginY"), Out(Pointer(ObjPointer(IDWriteGlyphRunAnalysis)), "glyphRunAnalysis")]),
 ]
 
-dwrite = API("dwrite")
-dwrite.addInterface(IDWriteFactory)
+dwrite = Module("dwrite")
+dwrite.addInterfaces([
+    IDWriteFactory
+])
 dwrite.addFunctions([
     StdFunction(HRESULT, "DWriteCreateFactory", [(DWRITE_FACTORY_TYPE, "factoryType"), (REFIID, "iid"), Out(Pointer(ObjPointer(IUnknown)), "factory")]),
 ])
index 45af484d138637763ed89d967991666cad32adf3..97aa5dd46b59831e026dfa21a1baa3db7fc010c6 100644 (file)
@@ -282,7 +282,7 @@ IDXGIDevice1.methods += [
     StdMethod(HRESULT, "GetMaximumFrameLatency", [Out(Pointer(UINT), "pMaxLatency")], sideeffects=False),
 ]
 
-dxgi = API('dxgi')
+dxgi = Module('dxgi')
 dxgi.addFunctions([
     StdFunction(HRESULT, "CreateDXGIFactory", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
     StdFunction(HRESULT, "CreateDXGIFactory1", [(REFIID, "riid"), Out(Pointer(ObjPointer(Void)), "ppFactory")]),
index 74584784fac766cd5c3770e1d3326d304564a63a..510e0fab4b2eabbe032ced568598628fd287899c 100644 (file)
@@ -289,7 +289,7 @@ EGLClientPixmapHI = Struct("struct EGLClientPixmapHI", [
 # EGL_NV_system_time
 EGLuint64NV = Alias("EGLuint64NV", UInt64)
 
-eglapi = API("EGL")
+eglapi = Module("EGL")
 
 EGLAttribList = Array(Const(EGLattrib), "_AttribPairList_size(attrib_list, EGL_NONE)")
 
index 3db0739dc3767b5608e350ac00007affcbea6dc9..257fe2efbc3f7a56076a7868984884a5b3b9f537 100644 (file)
@@ -44,7 +44,7 @@ def GlFunction(*args, **kwargs):
     return Function(*args, **kwargs)
 
 
-glapi = API('GL')
+glapi = Module('GL')
 
 
 glapi.addFunctions([
@@ -1357,10 +1357,10 @@ glapi.addFunctions([
     GlFunction(Void, "glGetObjectPtrLabel", [(OpaquePointer(Const(Void)), "ptr"), (GLsizei, "bufSize"), Out(Pointer(GLsizei), "length"), Out(Array(GLchar, "bufSize"), "label")], sideeffects=False),
 
     # GL_ARB_clear_buffer_object
-    GlFunction(Void, "glClearBufferData", [(GLenum, "target"), (GLenum, "internalformat"), (GLenum, "format"), (GLenum, "type"), (OpaqueArray(Const(Void), "_glClearBufferData_size(format, type)"), "data")]),
-    GlFunction(Void, "glClearBufferSubData", [(GLenum, "target"), (GLenum, "internalformat"), (GLintptr, "offset"), (GLsizeiptr, "size"), (GLenum, "format"), (GLenum, "type"), (OpaqueArray(Const(Void), "_glClearBufferSubData_size(format, type)"), "data")]),
-    GlFunction(Void, "glClearNamedBufferDataEXT", [(GLbuffer, "buffer"), (GLenum, "internalformat"), (GLenum, "format"), (GLenum, "type"), (OpaqueArray(Const(Void), "_glClearNamedBufferDataEXT_size(format, type)"), "data")]),
-    GlFunction(Void, "glClearNamedBufferSubDataEXT", [(GLbuffer, "buffer"), (GLenum, "internalformat"), (GLenum, "format"), (GLenum, "type"), (GLsizeiptr, "offset"), (GLsizeiptr, "size"), (OpaqueArray(Const(Void), "_glClearNamedBufferSubDataEXT_size(format, type)"), "data")]),
+    GlFunction(Void, "glClearBufferData", [(GLenum, "target"), (GLenum, "internalformat"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(Void), "_glClearBufferData_size(format, type)"), "data")]),
+    GlFunction(Void, "glClearBufferSubData", [(GLenum, "target"), (GLenum, "internalformat"), (GLintptr, "offset"), (GLsizeiptr, "size"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(Void), "_glClearBufferData_size(format, type)"), "data")]),
+    GlFunction(Void, "glClearNamedBufferDataEXT", [(GLbuffer, "buffer"), (GLenum, "internalformat"), (GLenum, "format"), (GLenum, "type"), (Blob(Const(Void), "_glClearBufferData_size(format, type)"), "data")]),
+    GlFunction(Void, "glClearNamedBufferSubDataEXT", [(GLbuffer, "buffer"), (GLenum, "internalformat"), (GLenum, "format"), (GLenum, "type"), (GLsizeiptr, "offset"), (GLsizeiptr, "size"), (Blob(Const(Void), "_glClearBufferData_size(format, type)"), "data")]),
 
     # GL_ARB_compute_shader
     GlFunction(Void, "glDispatchCompute", [(GLuint, "num_groups_x"), (GLuint, "num_groups_y"), (GLuint, "num_groups_z")]),
index 46c6ef02888e363f5b93aa4633e26c9ed1be9cb8..6d51fe07e4ff8f2294943cdd52cc177ae27875a0 100644 (file)
@@ -40,7 +40,7 @@ def GlFunction(*args, **kwargs):
     return Function(*args, **kwargs)
 
 
-glesapi = API('GLES')
+glesapi = Module('GLES')
 
 
 # OpenGL ES specific functions
index 157752719c87c5692e2f98c5dcd44e268dd67278..f4e544c060cf7f7f9f2f68fd10c810e8d7157462 100644 (file)
@@ -242,7 +242,7 @@ GLXbuffer = Flags(Int, [
     "GLX_PBUFFER_CLOBBER_MASK",
 ])
 
-glxapi = API("GLX")
+glxapi = Module("GLX")
 
 PROC = Opaque("__GLXextFuncPtr")
 
index 846227ef3468fd2f06956476dc29d10bfd27c2b2..1097347f38ce3a97a26b9312c7de183c469e8c0f 100644 (file)
@@ -837,11 +837,8 @@ class Collector(Traverser):
 
 
 
-class API:
-    '''API abstraction.
-
-    Essentially, a collection of types, functions, and interfaces.
-    '''
+class Module:
+    '''A collection of functions.'''
 
     def __init__(self, name = None):
         self.name = name
@@ -849,50 +846,73 @@ class API:
         self.functions = []
         self.interfaces = []
 
+    def addFunctions(self, functions):
+        self.functions.extend(functions)
+
+    def addInterfaces(self, interfaces):
+        self.interfaces.extend(interfaces)
+
+    def mergeModule(self, module):
+        self.headers.extend(module.headers)
+        self.functions.extend(module.functions)
+        self.interfaces.extend(module.interfaces)
+
+    def getFunctionByName(self, name):
+        for function in self.functions:
+            if function.name == name:
+                return function
+        return None
+
+
+class API:
+    '''API abstraction.
+
+    Essentially, a collection of types, functions, and interfaces.
+    '''
+
+    def __init__(self, modules = None):
+        self.modules = []
+        if modules is not None:
+            self.modules.extend(modules)
+
     def getAllTypes(self):
         collector = Collector()
-        for function in self.functions:
-            for arg in function.args:
-                collector.visit(arg.type)
-            collector.visit(function.type)
-        for interface in self.interfaces:
-            collector.visit(interface)
-            for method in interface.iterMethods():
-                for arg in method.args:
+        for module in self.modules:
+            for function in module.functions:
+                for arg in function.args:
                     collector.visit(arg.type)
-                collector.visit(method.type)
+                collector.visit(function.type)
+            for interface in module.interfaces:
+                collector.visit(interface)
+                for method in interface.iterMethods():
+                    for arg in method.args:
+                        collector.visit(arg.type)
+                    collector.visit(method.type)
         return collector.types
 
+    def getAllFunctions(self):
+        functions = []
+        for module in self.modules:
+            functions.extend(module.functions)
+        return functions
+
     def getAllInterfaces(self):
         types = self.getAllTypes()
         interfaces = [type for type in types if isinstance(type, Interface)]
-        for interface in self.interfaces:
-            if interface not in interfaces:
-                interfaces.append(interface)
+        for module in self.modules:
+            for interface in module.interfaces:
+                if interface not in interfaces:
+                    interfaces.append(interface)
         return interfaces
 
-    def addFunction(self, function):
-        self.functions.append(function)
-
-    def addFunctions(self, functions):
-        for function in functions:
-            self.addFunction(function)
-
-    def addInterface(self, interface):
-        self.interfaces.append(interface)
-
-    def addInterfaces(self, interfaces):
-        self.interfaces.extend(interfaces)
-
-    def addApi(self, api):
-        self.headers.extend(api.headers)
-        self.addFunctions(api.functions)
-        self.addInterfaces(api.interfaces)
+    def addModule(self, module):
+        self.modules.append(module)
 
     def getFunctionByName(self, name):
-        for function in self.functions:
-            if function.name == name:
-                return function
+        for module in self.modules:
+            for function in module.functions:
+                if function.name == name:
+                    return function
         return None
 
 
index e3d8b2366f593fd53f4f72cd6902280af92489b7..f4b625ac60fae45a4b56b539a7912c2a83fe436c 100644 (file)
@@ -32,7 +32,7 @@ from winapi import *
 from wglenum import *
 
 
-wglapi = API("WGL")
+wglapi = Module("WGL")
 
 
 HGLRC = Alias("HGLRC", HANDLE)
index 23d6419f36bab0051f025a30f3b195d32233333c..031c83475583176465952bba06576f18d735feae 100644 (file)
@@ -152,7 +152,7 @@ RGNDATA = Struct("RGNDATA", [
 ])
 LPRGNDATA = Pointer(RGNDATA)
 
-HMODULE = DECLARE_HANDLE("HMODULE")
+HMODULE = IntPointer("HMODULE")
 
 FILETIME = Struct("FILETIME", [
     (DWORD, "dwLowDateTime"),
index cc5f074b65f5017f7ec6a52e5d9304c5d3c128a6..e124b5d0740d03dcba90e348d8db2afffb0d8765 100644 (file)
@@ -8,7 +8,6 @@ d3d8trace.cpp
 d3d9trace.cpp
 ddrawtrace.cpp
 dlltrace.cpp
-dwritetrace.cpp
 egltrace.cpp
 gltrace.cpp
 glxtrace.cpp
index 9cb4504e4ce251244fbafd32d369caf636d1ca0f..2cdf458e3a5da2e033738bdf67c857fa869bd55e 100644 (file)
@@ -18,9 +18,12 @@ set_target_properties (common_trace PROPERTIES
     COMPILE_FLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS}"
 )
 
+set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
+
 if (WIN32)
     if (MINGW)
         # Silence warnings about @nn suffix mismatch
+        set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--enable-stdcall-fixup")
         set (CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--enable-stdcall-fixup")
     endif ()
 
@@ -268,49 +271,31 @@ if (WIN32)
                 ${CMAKE_SOURCE_DIR}/specs/winapi.py
                 ${CMAKE_SOURCE_DIR}/specs/stdapi.py
         )
-        add_library (d2d1 MODULE d2d1.def d2d1trace.cpp)
-        target_link_libraries (d2d1
+        add_library (d2d1trace SHARED d2d1.def d2d1trace.cpp)
+        target_link_libraries (d2d1trace
             common_trace
             common
             ${ZLIB_LIBRARIES}
             ${SNAPPY_LIBRARIES}
         )
-        set_target_properties (d2d1
+        set_target_properties (d2d1trace
             PROPERTIES PREFIX ""
             OUTPUT_NAME d2d1
         )
-        install (TARGETS d2d1 LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
-
-        add_custom_command (
-            OUTPUT dwritetrace.cpp
-            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/dwritetrace.py > ${CMAKE_CURRENT_BINARY_DIR}/dwritetrace.cpp
-            DEPENDS
-                dwritetrace.py
-                trace.py
-                ${CMAKE_SOURCE_DIR}/specs/d2d1.py
-                ${CMAKE_SOURCE_DIR}/specs/d2d1.py
-                ${CMAKE_SOURCE_DIR}/specs/d2dbasetypes.py
-                ${CMAKE_SOURCE_DIR}/specs/d2derr.py
-                ${CMAKE_SOURCE_DIR}/specs/dwrite.py
-                ${CMAKE_SOURCE_DIR}/specs/dcommon.py
-                ${CMAKE_SOURCE_DIR}/specs/dxgi.py
-                ${CMAKE_SOURCE_DIR}/specs/dxgitype.py
-                ${CMAKE_SOURCE_DIR}/specs/dxgiformat.py
-                ${CMAKE_SOURCE_DIR}/specs/winapi.py
-                ${CMAKE_SOURCE_DIR}/specs/stdapi.py
-        )
-        add_library (dwrite MODULE dwrite.def dwritetrace.cpp)
-        target_link_libraries (dwrite
-            common_trace
-            common
-            ${ZLIB_LIBRARIES}
-            ${SNAPPY_LIBRARIES}
+        # http://www.cmake.org/pipermail/cmake/2009-March/028221.html
+        install (TARGETS d2d1trace
+            RUNTIME DESTINATION ${WRAPPER_INSTALL_DIR} COMPONENT RUNTIME
+            LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR} COMPONENT RUNTIME
         )
-        set_target_properties (dwrite
+
+        # dwrite.dll is just an empty stub for d2d1.dll
+        add_library (dwritetrace MODULE dwrite.def dwritetrace.cpp)
+        target_link_libraries (dwritetrace d2d1trace)
+        set_target_properties (dwritetrace
             PROPERTIES PREFIX ""
             OUTPUT_NAME dwrite
         )
-        install (TARGETS dwrite LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
+        install (TARGETS dwritetrace LIBRARY DESTINATION ${WRAPPER_INSTALL_DIR})
     endif (DirectX_D2D1_INCLUDE_DIR)
 
     # opengl32.dll
index e7cbd7b123fa6c834e2180f04bcd769071ac2237..c56edf24443911611050747fa9cc0a7fbec2688b 100644 (file)
@@ -28,7 +28,7 @@
 
 
 from gltrace import GlTracer
-from specs.stdapi import API
+from specs.stdapi import Module, API
 from specs.glapi import glapi
 from specs.cglapi import cglapi
 
@@ -93,9 +93,11 @@ if __name__ == '__main__':
     print '#include "glsize.hpp"'
     print
 
+    module = Module()
+    module.mergeModule(cglapi)
+    module.mergeModule(glapi)
     api = API()
-    api.addApi(cglapi)
-    api.addApi(glapi)
+    api.addModule(module)
     tracer = CglTracer()
     tracer.traceApi(api)
 
index 58c897b708168d7ceb7f73ace48802f491faea48..a897bf9d4a8c68390156ee9b0a607647326d9308 100644 (file)
@@ -1,8 +1,10 @@
 LIBRARY "d2d1"
 
 EXPORTS
-       D2D1CreateFactory
-       D2D1InvertMatrix
-       D2D1IsMatrixInvertible
-       D2D1MakeRotateMatrix
-       D2D1MakeSkewMatrix
+    D2D1CreateFactory @1
+    D2D1MakeRotateMatrix @2
+    D2D1MakeSkewMatrix @3
+    D2D1IsMatrixInvertible @4
+    D2D1InvertMatrix @5
+
+    DWriteCreateFactory
index a6142852d094881a9a37ee51f3276a7fb3cdc599..10e14a441b5044c0472da769733e09dfec791908 100644 (file)
 
 
 from dlltrace import DllTracer
+from specs.stdapi import API
+from specs.dwrite import dwrite
 from specs.d2d1 import d2d1
 
 
-class D2D1Tracer(DllTracer):
-
-    def wrapArg(self, function, arg):
-        if function.name == 'D2D1CreateFactory' and arg.output:
-            print '    if (*%s) {' % arg.name
-            for iface in d2d1.interfaces:
-                print '        if (riid == IID_%s) {' % iface.name
-                print '            *%s = (LPVOID) new Wrap%s((%s *)*%s);' % (arg.name, iface.name, iface.name, arg.name)
-                print '        }'
-            print '    }'
-        else:
-            DllTracer.wrapArg(self, function, arg)
-
-
 if __name__ == '__main__':
     print '#define INITGUID'
     print
     print '#include "trace_writer_local.hpp"'
     print '#include "os.hpp"'
     print
+    print '#define DWRITE_EXPORT WINAPI'
+    print
     print '#include "d2dimports.hpp"'
     print
 
-    tracer = D2D1Tracer('d2d1.dll')
-    tracer.traceApi(d2d1)
+    api = API()
+    api.addModule(d2d1)
+    api.addModule(dwrite)
+    tracer = DllTracer()
+    tracer.traceApi(api)
index 65d97863c967380db92e03774f2e008fcafd85d9..4cf0f7d716d8a2b2e9ccc1db42cb93a6da359352 100644 (file)
@@ -1,31 +1,31 @@
-LIBRARY "d3d10.dll"
+LIBRARY "d3d10"
 EXPORTS
-       D3D10CompileEffectFromMemory
-       D3D10CompileShader
-       D3D10CreateBlob
-       D3D10CreateDevice
-       D3D10CreateDeviceAndSwapChain
-       D3D10CreateEffectFromMemory
-       D3D10CreateEffectPoolFromMemory
-       D3D10CreateStateBlock
-       D3D10DisassembleEffect
-       D3D10DisassembleShader
-       D3D10GetGeometryShaderProfile
-       D3D10GetInputAndOutputSignatureBlob
-       D3D10GetInputSignatureBlob
-       D3D10GetOutputSignatureBlob
-       D3D10GetPixelShaderProfile
-       D3D10GetShaderDebugInfo
-       D3D10GetVersion
-       D3D10GetVertexShaderProfile
-       D3D10PreprocessShader
-       D3D10ReflectShader
-       D3D10RegisterLayers
-       D3D10StateBlockMaskDifference
-       D3D10StateBlockMaskDisableAll
-       D3D10StateBlockMaskDisableCapture
-       D3D10StateBlockMaskEnableAll
-       D3D10StateBlockMaskEnableCapture
-       D3D10StateBlockMaskGetSetting
-       D3D10StateBlockMaskIntersect
-       D3D10StateBlockMaskUnion
+    D3D10CompileEffectFromMemory
+    D3D10CompileShader
+    D3D10CreateBlob
+    D3D10CreateDevice
+    D3D10CreateDeviceAndSwapChain
+    D3D10CreateEffectFromMemory
+    D3D10CreateEffectPoolFromMemory
+    D3D10CreateStateBlock
+    D3D10DisassembleEffect
+    D3D10DisassembleShader
+    D3D10GetGeometryShaderProfile
+    D3D10GetInputAndOutputSignatureBlob
+    D3D10GetInputSignatureBlob
+    D3D10GetOutputSignatureBlob
+    D3D10GetPixelShaderProfile
+    D3D10GetShaderDebugInfo
+    D3D10GetVersion
+    D3D10GetVertexShaderProfile
+    D3D10PreprocessShader
+    D3D10ReflectShader
+    D3D10RegisterLayers
+    D3D10StateBlockMaskDifference
+    D3D10StateBlockMaskDisableAll
+    D3D10StateBlockMaskDisableCapture
+    D3D10StateBlockMaskEnableAll
+    D3D10StateBlockMaskEnableCapture
+    D3D10StateBlockMaskGetSetting
+    D3D10StateBlockMaskIntersect
+    D3D10StateBlockMaskUnion
index 48bfe146c7575c7da44c01f4f1be8ed81382c8ad..36dd5947f20c6ee38ade6133f23404a0727c6689 100644 (file)
@@ -1,4 +1,4 @@
-LIBRARY        "d3d10_1"
+LIBRARY "d3d10_1"
 
 EXPORTS
         D3D10CreateDevice1
index 6fa3efc27cf7199b4a99954cccca29e030d11b5d..94bd743cd6fa567fb44b21882497812a8edb55ec 100644 (file)
@@ -25,6 +25,7 @@
 
 
 from d3dcommontrace import D3DCommonTracer
+from specs.stdapi import API
 from specs.d3d10_1 import d3d10_1
 
 
@@ -38,5 +39,8 @@ if __name__ == '__main__':
     print '#include "d3dcommonshader.hpp"'
     print '#include "d3d10size.hpp"'
     print
-    tracer = D3DCommonTracer('d3d10_1.dll')
-    tracer.traceApi(d3d10_1)
+
+    api = API()
+    api.addModule(d3d10_1)
+    tracer = D3DCommonTracer()
+    tracer.traceApi(api)
index 42f6058a9b3a8e14c5ae67ecb4d19a056aa2e469..7a9f3ff0af92e9e270c1e20aa3ba9c0fdac42e54 100644 (file)
@@ -25,6 +25,7 @@
 
 
 from d3dcommontrace import D3DCommonTracer
+from specs.stdapi import API
 from specs.d3d10misc import d3d10
 
 
@@ -38,5 +39,8 @@ if __name__ == '__main__':
     print '#include "d3dcommonshader.hpp"'
     print '#include "d3d10size.hpp"'
     print
-    tracer = D3DCommonTracer('d3d10.dll')
-    tracer.traceApi(d3d10)
+
+    api = API()
+    api.addModule(d3d10)
+    tracer = D3DCommonTracer()
+    tracer.traceApi(api)
index 49333b66ea0e08943f0f0986a19ee9f392d11292..a9d2d4bca99013b7b87f71cce8eb429521f19669 100644 (file)
@@ -1,9 +1,12 @@
-LIBRARY        "d3d11"
+LIBRARY "d3d11"
 
 EXPORTS
-        D3D11CoreCreateDevice
-        D3D11CoreCreateLayeredDevice
-        D3D11CoreGetLayeredDeviceSize
-        D3D11CoreRegisterLayers
-        D3D11CreateDevice
-        D3D11CreateDeviceAndSwapChain
+    D3D11CoreCreateDevice
+    D3D11CoreCreateLayeredDevice
+    D3D11CoreGetLayeredDeviceSize
+    D3D11CoreRegisterLayers
+    D3D11CreateDevice
+    D3D11CreateDeviceAndSwapChain
+
+    CreateDXGIFactory
+    CreateDXGIFactory1
index c504f5e35326fab498f8ed0c86c7a1e14305af7d..d43f14716fb56266fd3c3fe3e1005265f9361f58 100644 (file)
@@ -27,6 +27,8 @@
 import sys
 
 from d3dcommontrace import D3DCommonTracer
+from specs.stdapi import API
+from specs.dxgi import dxgi
 from specs.d3d11 import d3d11
 
 
@@ -47,5 +49,9 @@ if __name__ == '__main__':
     print '#include "d3dcommonshader.hpp"'
     print '#include "d3d11size.hpp"'
     print
-    tracer = D3DCommonTracer('d3d11.dll')
-    tracer.traceApi(d3d11)
+
+    api = API()
+    api.addModule(dxgi)
+    api.addModule(d3d11)
+    tracer = D3DCommonTracer()
+    tracer.traceApi(api)
index 5134cb8f3cc52290d50a5cb4e54b6935c893287c..3e740ebf46c6319738940172dd2957e9e9939b68 100644 (file)
@@ -1,4 +1,4 @@
-LIBRARY        "d3d8"
+LIBRARY "d3d8"
 
 EXPORTS
         Direct3DCreate8 @1
index 0bf4bb80fdd81c70a91d34eb878bc92a7fe02e23..2abaf4e54f27923f45bfa66964ebacfe6a53c624 100644 (file)
@@ -25,6 +25,7 @@
 
 
 from dlltrace import DllTracer
+from specs.stdapi import API
 from specs.d3d8 import d3d8
 
 
@@ -49,6 +50,9 @@ if __name__ == '__main__':
     print '#include "trace_writer_local.hpp"'
     print '#include "os.hpp"'
     print
-    tracer = D3D8Tracer('d3d8.dll')
-    tracer.traceApi(d3d8)
 
+
+    api = API()
+    api.addModule(d3d8)
+    tracer = D3D8Tracer()
+    tracer.traceApi(api)
index dbbb029912b73f0ab1d86a78eebaaab6bb38231f..f52c0c498c865d68c4d04bbe76fbce17ddff959b 100644 (file)
@@ -1,4 +1,4 @@
-LIBRARY        "d3d9"
+LIBRARY "d3d9"
 
 EXPORTS
         Direct3DCreate9
index fc6e65ef2ae86982df2f74f340aea5dfda51e799..2a4c1a93d824503164d15e36b0796a7c105cec59 100644 (file)
@@ -25,6 +25,7 @@
 
 
 from dlltrace import DllTracer
+from specs.stdapi import API
 from specs.d3d9 import d3d9, D3DSHADER9
 
 import specs.d3d9dxva2
@@ -48,7 +49,7 @@ class D3D9Tracer(DllTracer):
            interface.getMethodByName('LockRect') is not None or \
            interface.getMethodByName('LockBox') is not None:
             variables += [
-                ('size_t', '_LockedSize', '0'),
+                ('size_t', '_MappedSize', '0'),
                 ('VOID *', 'm_pbData', '0'),
             ]
 
@@ -56,8 +57,8 @@ class D3D9Tracer(DllTracer):
 
     def implementWrapperInterfaceMethodBody(self, interface, base, method):
         if method.name in ('Unlock', 'UnlockRect', 'UnlockBox'):
-            print '    if (_LockedSize && m_pbData) {'
-            self.emit_memcpy('(LPBYTE)m_pbData', '(LPBYTE)m_pbData', '_LockedSize')
+            print '    if (_MappedSize && m_pbData) {'
+            self.emit_memcpy('(LPBYTE)m_pbData', '(LPBYTE)m_pbData', '_MappedSize')
             print '    }'
 
         DllTracer.implementWrapperInterfaceMethodBody(self, interface, base, method)
@@ -65,10 +66,10 @@ class D3D9Tracer(DllTracer):
         if method.name in ('Lock', 'LockRect', 'LockBox'):
             # FIXME: handle recursive locks
             print '    if (SUCCEEDED(_result) && !(Flags & D3DLOCK_READONLY)) {'
-            print '        _getLockInfo(_this, %s, m_pbData, _LockedSize);' % ', '.join(method.argNames()[:-1])
+            print '        _getMapInfo(_this, %s, m_pbData, _MappedSize);' % ', '.join(method.argNames()[:-1])
             print '    } else {'
             print '        m_pbData = NULL;'
-            print '        _LockedSize = 0;'
+            print '        _MappedSize = 0;'
             print '    }'
 
 
@@ -94,6 +95,8 @@ _declCount(const D3DVERTEXELEMENT9 *pVertexElements) {
     return count;
 }
 '''
-    tracer = D3D9Tracer('d3d9.dll')
-    tracer.traceApi(d3d9)
 
+    api = API()
+    api.addModule(d3d9)
+    tracer = D3D9Tracer()
+    tracer.traceApi(api)
index b575c77092eda1c2af80ad9ede0b18da56fdfd4a..94e39e2d126e3c2d18db984af49a7f946d6c4a58 100644 (file)
 
 
 from dlltrace import DllTracer
+from specs.stdapi import API
 from specs.d3d import ddraw, interfaces
 
 
-class DDrawTracer(DllTracer):
-
-    def traceFunctionImplBody(self, function):
-        if function.name in ('AcquireDDThreadLock', 'ReleaseDDThreadLock'):
-            self.invokeFunction(function)
-            return
-
-        DllTracer.traceFunctionImplBody(self, function)
-
-
 if __name__ == '__main__':
     print '#define INITGUID'
     print '#include <windows.h>'
@@ -66,5 +57,8 @@ if __name__ == '__main__':
     print '#include "trace_writer_local.hpp"'
     print '#include "os.hpp"'
     print
-    tracer = DDrawTracer('ddraw.dll')
-    tracer.traceApi(ddraw)
+
+    api = API()
+    api.addModule(ddraw)
+    tracer = DllTracer()
+    tracer.traceApi(api)
index 8456d5f7a63a4052129e69aef305582ceeb240ad..f7ad20fe8c4a399337fe61313c48d8681a3c5741 100644 (file)
 """Trace code generation for Windows DLLs."""
 
 
+import ntpath
+
 from trace import Tracer
 from dispatch import Dispatcher
+from specs.stdapi import API
 
 
-class DllTracer(Tracer):
+class DllDispatcher(Dispatcher):
 
-    def __init__(self, dllname):
-        self.dllname = dllname
-    
-    def header(self, api):
-        print '''
-static HMODULE g_hDll = NULL;
+    def dispatchModule(self, module):
+        tag = module.name.upper()
+        print r'HMODULE g_h%sModule = NULL;' % (tag,)
+        print r''
+        print r'static PROC'
+        print r'_get%sProcAddress(LPCSTR lpProcName) {' % tag
+        print r'    if (!g_h%sModule) {' % tag
+        print r'        char szDll[MAX_PATH] = {0};'
+        print r'        if (!GetSystemDirectoryA(szDll, MAX_PATH)) {'
+        print r'            return NULL;'
+        print r'        }'
+        print r'        strcat(szDll, "\\\\%s.dll");' % module.name
+        print r'        g_h%sModule = LoadLibraryA(szDll);' % tag
+        print r'        if (!g_h%sModule) {' % tag
+        print r'            return NULL;'
+        print r'        }'
+        print r'    }'
+        print r'    return GetProcAddress(g_h%sModule, lpProcName);' % tag
+        print r'}'
+        print r''
 
-static PROC
-_getPublicProcAddress(LPCSTR lpProcName)
-{
-    if (!g_hDll) {
-        char szDll[MAX_PATH] = {0};
-        
-        if (!GetSystemDirectoryA(szDll, MAX_PATH)) {
-            return NULL;
-        }
-        
-        strcat(szDll, "\\\\%s");
-        
-        g_hDll = LoadLibraryA(szDll);
-        if (!g_hDll) {
-            return NULL;
-        }
-    }
-        
-    return GetProcAddress(g_hDll, lpProcName);
-}
+        Dispatcher.dispatchModule(self, module)
 
-''' % self.dllname
+    def getProcAddressName(self, module, function):
+        assert self.isFunctionPublic(module, function)
+        return '_get%sProcAddress' % (module.name.upper())
 
-        dispatcher = Dispatcher()
-        dispatcher.dispatchApi(api)
 
-        Tracer.header(self, api)
+class DllTracer(Tracer):
 
+    def header(self, api):
+
+        for module in api.modules:
+            dispatcher = DllDispatcher()
+            dispatcher.dispatchModule(module)
+
+        Tracer.header(self, api)
index 4cc67854de9c47c31a5f2e2f77378911f7c924e3..4dcdba1d01a01e26545e67740943748fce009a9e 100644 (file)
@@ -1,4 +1,4 @@
 LIBRARY "d2d1"
 
 EXPORTS
-       DWriteCreateFactory
+    DWriteCreateFactory
diff --git a/wrappers/dwritetrace.cpp b/wrappers/dwritetrace.cpp
new file mode 100644 (file)
index 0000000..9ca69d6
--- /dev/null
@@ -0,0 +1,6 @@
+#include <windows.h>
+
+EXTERN_C BOOL WINAPI
+DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
+    return TRUE;
+}
diff --git a/wrappers/dwritetrace.py b/wrappers/dwritetrace.py
deleted file mode 100644 (file)
index 7fb77e2..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-##########################################################################
-#
-# Copyright 2008-2009 VMware, Inc.
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-#
-##########################################################################/
-
-
-from dlltrace import DllTracer
-from specs.dwrite import dwrite
-from specs.d2d1 import d2d1 # cyclic dependency
-
-
-class DWriteTracer(DllTracer):
-
-    def wrapArg(self, function, arg):
-        if function.name == 'DWriteCreateFactory' and arg.output:
-            print '    if (*%s) {' % arg.name
-            for iface in dwrite.interfaces:
-                print '        if (iid == IID_%s) {' % iface.name
-                print '            *%s = new Wrap%s(static_cast<%s *>(*%s));' % (arg.name, iface.name, iface.name, arg.name)
-                print '        }'
-            print '    }'
-        else:
-            DllTracer.wrapArg(self, function, arg)
-
-
-if __name__ == '__main__':
-    print '#define INITGUID'
-    print
-    print '#include "trace_writer_local.hpp"'
-    print '#include "os.hpp"'
-    print
-    print '#define DWRITE_EXPORT WINAPI'
-    print
-    print '#include "d2dimports.hpp"'
-    print
-
-    tracer = DWriteTracer('dwrite.dll')
-    tracer.traceApi(dwrite)
index a6ff17f8eaa1f37509b6ad094f07e8e2306f02d4..0c7ebb6b1937acedfd657d0bdabdc29e857b5947 100644 (file)
@@ -33,7 +33,7 @@
 
 
 from gltrace import GlTracer
-from specs.stdapi import API
+from specs.stdapi import Module, API
 from specs.glapi import glapi
 from specs.eglapi import eglapi
 from specs.glesapi import glesapi
@@ -125,10 +125,12 @@ if __name__ == '__main__':
     print '#include "eglsize.hpp"'
     print
     
+    module = Module()
+    module.mergeModule(eglapi)
+    module.mergeModule(glapi)
+    module.mergeModule(glesapi)
     api = API()
-    api.addApi(eglapi)
-    api.addApi(glapi)
-    api.addApi(glesapi)
+    api.addModule(module)
     tracer = EglTracer()
     tracer.traceApi(api)
 
index feb96e44276842d515efd79b254946708ad74c6f..3e01e40eb72010e9fae5887509514d3762e0a91e 100644 (file)
@@ -337,7 +337,7 @@ class GlTracer(Tracer):
             print '    if (!procPtr) {'
             print '        return procPtr;'
             print '    }'
-            for function in api.functions:
+            for function in api.getAllFunctions():
                 ptype = function_pointer_type(function)
                 pvalue = function_pointer_value(function)
                 print '    if (strcmp("%s", (const char *)procName) == 0) {' % function.name
index 670f8f39a1785254d3b9d8bc497777e22b846a38..9c0f87dbcb443fba7fd520317368877062550c33 100644 (file)
@@ -29,7 +29,7 @@
 
 
 from gltrace import GlTracer
-from specs.stdapi import API
+from specs.stdapi import Module, API
 from specs.glapi import glapi
 from specs.glxapi import glxapi
 
@@ -101,9 +101,11 @@ if __name__ == '__main__':
     print '#include "glsize.hpp"'
     print
 
+    module = Module()
+    module.mergeModule(glxapi)
+    module.mergeModule(glapi)
     api = API()
-    api.addApi(glxapi)
-    api.addApi(glapi)
+    api.addModule(module)
     tracer = GlxTracer()
     tracer.traceApi(api)
 
index 9e717a79a475ada02bb8ff74fbf188743030ed9a..9a1729a579a800128575803f38d89b456d8adb9a 100644 (file)
 LIBRARY opengl32
 
 EXPORTS
-;      GlmfBeginGlsBlock
-;      GlmfCloseMetaFile
-;      GlmfEndGlsBlock
-;      GlmfEndPlayback
-;      GlmfInitPlayback
-;      GlmfPlayGlsRecord
-       glAccum
-       glAlphaFunc
-       glAreTexturesResident
-       glArrayElement
-       glBegin
-       glBindTexture
-       glBitmap
-       glBlendFunc
-       glCallList
-       glCallLists
-       glClear
-       glClearAccum
-       glClearColor
-       glClearDepth
-       glClearIndex
-       glClearStencil
-       glClipPlane
-       glColor3b
-       glColor3bv
-       glColor3d
-       glColor3dv
-       glColor3f
-       glColor3fv
-       glColor3i
-       glColor3iv
-       glColor3s
-       glColor3sv
-       glColor3ub
-       glColor3ubv
-       glColor3ui
-       glColor3uiv
-       glColor3us
-       glColor3usv
-       glColor4b
-       glColor4bv
-       glColor4d
-       glColor4dv
-       glColor4f
-       glColor4fv
-       glColor4i
-       glColor4iv
-       glColor4s
-       glColor4sv
-       glColor4ub
-       glColor4ubv
-       glColor4ui
-       glColor4uiv
-       glColor4us
-       glColor4usv
-       glColorMask
-       glColorMaterial
-       glColorPointer
-       glCopyPixels
-       glCopyTexImage1D
-       glCopyTexImage2D
-       glCopyTexSubImage1D
-       glCopyTexSubImage2D
-       glCullFace
-;      glDebugEntry
-       glDeleteLists
-       glDeleteTextures
-       glDepthFunc
-       glDepthMask
-       glDepthRange
-       glDisable
-       glDisableClientState
-       glDrawArrays
-       glDrawBuffer
-       glDrawElements
-       glDrawPixels
-       glEdgeFlag
-       glEdgeFlagPointer
-       glEdgeFlagv
-       glEnable
-       glEnableClientState
-       glEnd
-       glEndList
-       glEvalCoord1d
-       glEvalCoord1dv
-       glEvalCoord1f
-       glEvalCoord1fv
-       glEvalCoord2d
-       glEvalCoord2dv
-       glEvalCoord2f
-       glEvalCoord2fv
-       glEvalMesh1
-       glEvalMesh2
-       glEvalPoint1
-       glEvalPoint2
-       glFeedbackBuffer
-       glFinish
-       glFlush
-       glFogf
-       glFogfv
-       glFogi
-       glFogiv
-       glFrontFace
-       glFrustum
-       glGenLists
-       glGenTextures
-       glGetBooleanv
-       glGetClipPlane
-       glGetDoublev
-       glGetError
-       glGetFloatv
-       glGetIntegerv
-       glGetLightfv
-       glGetLightiv
-       glGetMapdv
-       glGetMapfv
-       glGetMapiv
-       glGetMaterialfv
-       glGetMaterialiv
-       glGetPixelMapfv
-       glGetPixelMapuiv
-       glGetPixelMapusv
-       glGetPointerv
-       glGetPolygonStipple
-       glGetString
-       glGetTexEnvfv
-       glGetTexEnviv
-       glGetTexGendv
-       glGetTexGenfv
-       glGetTexGeniv
-       glGetTexImage
-       glGetTexLevelParameterfv
-       glGetTexLevelParameteriv
-       glGetTexParameterfv
-       glGetTexParameteriv
-       glHint
-       glIndexMask
-       glIndexPointer
-       glIndexd
-       glIndexdv
-       glIndexf
-       glIndexfv
-       glIndexi
-       glIndexiv
-       glIndexs
-       glIndexsv
-       glIndexub
-       glIndexubv
-       glInitNames
-       glInterleavedArrays
-       glIsEnabled
-       glIsList
-       glIsTexture
-       glLightModelf
-       glLightModelfv
-       glLightModeli
-       glLightModeliv
-       glLightf
-       glLightfv
-       glLighti
-       glLightiv
-       glLineStipple
-       glLineWidth
-       glListBase
-       glLoadIdentity
-       glLoadMatrixd
-       glLoadMatrixf
-       glLoadName
-       glLogicOp
-       glMap1d
-       glMap1f
-       glMap2d
-       glMap2f
-       glMapGrid1d
-       glMapGrid1f
-       glMapGrid2d
-       glMapGrid2f
-       glMaterialf
-       glMaterialfv
-       glMateriali
-       glMaterialiv
-       glMatrixMode
-       glMultMatrixd
-       glMultMatrixf
-       glNewList
-       glNormal3b
-       glNormal3bv
-       glNormal3d
-       glNormal3dv
-       glNormal3f
-       glNormal3fv
-       glNormal3i
-       glNormal3iv
-       glNormal3s
-       glNormal3sv
-       glNormalPointer
-       glOrtho
-       glPassThrough
-       glPixelMapfv
-       glPixelMapuiv
-       glPixelMapusv
-       glPixelStoref
-       glPixelStorei
-       glPixelTransferf
-       glPixelTransferi
-       glPixelZoom
-       glPointSize
-       glPolygonMode
-       glPolygonOffset
-       glPolygonStipple
-       glPopAttrib
-       glPopClientAttrib
-       glPopMatrix
-       glPopName
-       glPrioritizeTextures
-       glPushAttrib
-       glPushClientAttrib
-       glPushMatrix
-       glPushName
-       glRasterPos2d
-       glRasterPos2dv
-       glRasterPos2f
-       glRasterPos2fv
-       glRasterPos2i
-       glRasterPos2iv
-       glRasterPos2s
-       glRasterPos2sv
-       glRasterPos3d
-       glRasterPos3dv
-       glRasterPos3f
-       glRasterPos3fv
-       glRasterPos3i
-       glRasterPos3iv
-       glRasterPos3s
-       glRasterPos3sv
-       glRasterPos4d
-       glRasterPos4dv
-       glRasterPos4f
-       glRasterPos4fv
-       glRasterPos4i
-       glRasterPos4iv
-       glRasterPos4s
-       glRasterPos4sv
-       glReadBuffer
-       glReadPixels
-       glRectd
-       glRectdv
-       glRectf
-       glRectfv
-       glRecti
-       glRectiv
-       glRects
-       glRectsv
-       glRenderMode
-       glRotated
-       glRotatef
-       glScaled
-       glScalef
-       glScissor
-       glSelectBuffer
-       glShadeModel
-       glStencilFunc
-       glStencilMask
-       glStencilOp
-       glTexCoord1d
-       glTexCoord1dv
-       glTexCoord1f
-       glTexCoord1fv
-       glTexCoord1i
-       glTexCoord1iv
-       glTexCoord1s
-       glTexCoord1sv
-       glTexCoord2d
-       glTexCoord2dv
-       glTexCoord2f
-       glTexCoord2fv
-       glTexCoord2i
-       glTexCoord2iv
-       glTexCoord2s
-       glTexCoord2sv
-       glTexCoord3d
-       glTexCoord3dv
-       glTexCoord3f
-       glTexCoord3fv
-       glTexCoord3i
-       glTexCoord3iv
-       glTexCoord3s
-       glTexCoord3sv
-       glTexCoord4d
-       glTexCoord4dv
-       glTexCoord4f
-       glTexCoord4fv
-       glTexCoord4i
-       glTexCoord4iv
-       glTexCoord4s
-       glTexCoord4sv
-       glTexCoordPointer
-       glTexEnvf
-       glTexEnvfv
-       glTexEnvi
-       glTexEnviv
-       glTexGend
-       glTexGendv
-       glTexGenf
-       glTexGenfv
-       glTexGeni
-       glTexGeniv
-       glTexImage1D
-       glTexImage2D
-       glTexParameterf
-       glTexParameterfv
-       glTexParameteri
-       glTexParameteriv
-       glTexSubImage1D
-       glTexSubImage2D
-       glTranslated
-       glTranslatef
-       glVertex2d
-       glVertex2dv
-       glVertex2f
-       glVertex2fv
-       glVertex2i
-       glVertex2iv
-       glVertex2s
-       glVertex2sv
-       glVertex3d
-       glVertex3dv
-       glVertex3f
-       glVertex3fv
-       glVertex3i
-       glVertex3iv
-       glVertex3s
-       glVertex3sv
-       glVertex4d
-       glVertex4dv
-       glVertex4f
-       glVertex4fv
-       glVertex4i
-       glVertex4iv
-       glVertex4s
-       glVertex4sv
-       glVertexPointer
-       glViewport
-       wglChoosePixelFormat
-       wglCopyContext
-       wglCreateContext
-       wglCreateLayerContext
-       wglDeleteContext
-       wglDescribeLayerPlane
-       wglDescribePixelFormat
-       wglGetCurrentContext
-       wglGetCurrentDC
-       wglGetDefaultProcAddress
-       wglGetLayerPaletteEntries
-       wglGetPixelFormat
-       wglGetProcAddress
-       wglMakeCurrent
-       wglRealizeLayerPalette
-       wglSetLayerPaletteEntries
-       wglSetPixelFormat
-       wglShareLists
-       wglSwapBuffers
-       wglSwapLayerBuffers
-       wglSwapMultipleBuffers
-       wglUseFontBitmapsA
-       wglUseFontBitmapsW
-       wglUseFontOutlinesA
-       wglUseFontOutlinesW
+    ;GlmfBeginGlsBlock
+    ;GlmfCloseMetaFile
+    ;GlmfEndGlsBlock
+    ;GlmfEndPlayback
+    ;GlmfInitPlayback
+    ;GlmfPlayGlsRecord
+    glAccum
+    glAlphaFunc
+    glAreTexturesResident
+    glArrayElement
+    glBegin
+    glBindTexture
+    glBitmap
+    glBlendFunc
+    glCallList
+    glCallLists
+    glClear
+    glClearAccum
+    glClearColor
+    glClearDepth
+    glClearIndex
+    glClearStencil
+    glClipPlane
+    glColor3b
+    glColor3bv
+    glColor3d
+    glColor3dv
+    glColor3f
+    glColor3fv
+    glColor3i
+    glColor3iv
+    glColor3s
+    glColor3sv
+    glColor3ub
+    glColor3ubv
+    glColor3ui
+    glColor3uiv
+    glColor3us
+    glColor3usv
+    glColor4b
+    glColor4bv
+    glColor4d
+    glColor4dv
+    glColor4f
+    glColor4fv
+    glColor4i
+    glColor4iv
+    glColor4s
+    glColor4sv
+    glColor4ub
+    glColor4ubv
+    glColor4ui
+    glColor4uiv
+    glColor4us
+    glColor4usv
+    glColorMask
+    glColorMaterial
+    glColorPointer
+    glCopyPixels
+    glCopyTexImage1D
+    glCopyTexImage2D
+    glCopyTexSubImage1D
+    glCopyTexSubImage2D
+    glCullFace
+    ;glDebugEntry
+    glDeleteLists
+    glDeleteTextures
+    glDepthFunc
+    glDepthMask
+    glDepthRange
+    glDisable
+    glDisableClientState
+    glDrawArrays
+    glDrawBuffer
+    glDrawElements
+    glDrawPixels
+    glEdgeFlag
+    glEdgeFlagPointer
+    glEdgeFlagv
+    glEnable
+    glEnableClientState
+    glEnd
+    glEndList
+    glEvalCoord1d
+    glEvalCoord1dv
+    glEvalCoord1f
+    glEvalCoord1fv
+    glEvalCoord2d
+    glEvalCoord2dv
+    glEvalCoord2f
+    glEvalCoord2fv
+    glEvalMesh1
+    glEvalMesh2
+    glEvalPoint1
+    glEvalPoint2
+    glFeedbackBuffer
+    glFinish
+    glFlush
+    glFogf
+    glFogfv
+    glFogi
+    glFogiv
+    glFrontFace
+    glFrustum
+    glGenLists
+    glGenTextures
+    glGetBooleanv
+    glGetClipPlane
+    glGetDoublev
+    glGetError
+    glGetFloatv
+    glGetIntegerv
+    glGetLightfv
+    glGetLightiv
+    glGetMapdv
+    glGetMapfv
+    glGetMapiv
+    glGetMaterialfv
+    glGetMaterialiv
+    glGetPixelMapfv
+    glGetPixelMapuiv
+    glGetPixelMapusv
+    glGetPointerv
+    glGetPolygonStipple
+    glGetString
+    glGetTexEnvfv
+    glGetTexEnviv
+    glGetTexGendv
+    glGetTexGenfv
+    glGetTexGeniv
+    glGetTexImage
+    glGetTexLevelParameterfv
+    glGetTexLevelParameteriv
+    glGetTexParameterfv
+    glGetTexParameteriv
+    glHint
+    glIndexMask
+    glIndexPointer
+    glIndexd
+    glIndexdv
+    glIndexf
+    glIndexfv
+    glIndexi
+    glIndexiv
+    glIndexs
+    glIndexsv
+    glIndexub
+    glIndexubv
+    glInitNames
+    glInterleavedArrays
+    glIsEnabled
+    glIsList
+    glIsTexture
+    glLightModelf
+    glLightModelfv
+    glLightModeli
+    glLightModeliv
+    glLightf
+    glLightfv
+    glLighti
+    glLightiv
+    glLineStipple
+    glLineWidth
+    glListBase
+    glLoadIdentity
+    glLoadMatrixd
+    glLoadMatrixf
+    glLoadName
+    glLogicOp
+    glMap1d
+    glMap1f
+    glMap2d
+    glMap2f
+    glMapGrid1d
+    glMapGrid1f
+    glMapGrid2d
+    glMapGrid2f
+    glMaterialf
+    glMaterialfv
+    glMateriali
+    glMaterialiv
+    glMatrixMode
+    glMultMatrixd
+    glMultMatrixf
+    glNewList
+    glNormal3b
+    glNormal3bv
+    glNormal3d
+    glNormal3dv
+    glNormal3f
+    glNormal3fv
+    glNormal3i
+    glNormal3iv
+    glNormal3s
+    glNormal3sv
+    glNormalPointer
+    glOrtho
+    glPassThrough
+    glPixelMapfv
+    glPixelMapuiv
+    glPixelMapusv
+    glPixelStoref
+    glPixelStorei
+    glPixelTransferf
+    glPixelTransferi
+    glPixelZoom
+    glPointSize
+    glPolygonMode
+    glPolygonOffset
+    glPolygonStipple
+    glPopAttrib
+    glPopClientAttrib
+    glPopMatrix
+    glPopName
+    glPrioritizeTextures
+    glPushAttrib
+    glPushClientAttrib
+    glPushMatrix
+    glPushName
+    glRasterPos2d
+    glRasterPos2dv
+    glRasterPos2f
+    glRasterPos2fv
+    glRasterPos2i
+    glRasterPos2iv
+    glRasterPos2s
+    glRasterPos2sv
+    glRasterPos3d
+    glRasterPos3dv
+    glRasterPos3f
+    glRasterPos3fv
+    glRasterPos3i
+    glRasterPos3iv
+    glRasterPos3s
+    glRasterPos3sv
+    glRasterPos4d
+    glRasterPos4dv
+    glRasterPos4f
+    glRasterPos4fv
+    glRasterPos4i
+    glRasterPos4iv
+    glRasterPos4s
+    glRasterPos4sv
+    glReadBuffer
+    glReadPixels
+    glRectd
+    glRectdv
+    glRectf
+    glRectfv
+    glRecti
+    glRectiv
+    glRects
+    glRectsv
+    glRenderMode
+    glRotated
+    glRotatef
+    glScaled
+    glScalef
+    glScissor
+    glSelectBuffer
+    glShadeModel
+    glStencilFunc
+    glStencilMask
+    glStencilOp
+    glTexCoord1d
+    glTexCoord1dv
+    glTexCoord1f
+    glTexCoord1fv
+    glTexCoord1i
+    glTexCoord1iv
+    glTexCoord1s
+    glTexCoord1sv
+    glTexCoord2d
+    glTexCoord2dv
+    glTexCoord2f
+    glTexCoord2fv
+    glTexCoord2i
+    glTexCoord2iv
+    glTexCoord2s
+    glTexCoord2sv
+    glTexCoord3d
+    glTexCoord3dv
+    glTexCoord3f
+    glTexCoord3fv
+    glTexCoord3i
+    glTexCoord3iv
+    glTexCoord3s
+    glTexCoord3sv
+    glTexCoord4d
+    glTexCoord4dv
+    glTexCoord4f
+    glTexCoord4fv
+    glTexCoord4i
+    glTexCoord4iv
+    glTexCoord4s
+    glTexCoord4sv
+    glTexCoordPointer
+    glTexEnvf
+    glTexEnvfv
+    glTexEnvi
+    glTexEnviv
+    glTexGend
+    glTexGendv
+    glTexGenf
+    glTexGenfv
+    glTexGeni
+    glTexGeniv
+    glTexImage1D
+    glTexImage2D
+    glTexParameterf
+    glTexParameterfv
+    glTexParameteri
+    glTexParameteriv
+    glTexSubImage1D
+    glTexSubImage2D
+    glTranslated
+    glTranslatef
+    glVertex2d
+    glVertex2dv
+    glVertex2f
+    glVertex2fv
+    glVertex2i
+    glVertex2iv
+    glVertex2s
+    glVertex2sv
+    glVertex3d
+    glVertex3dv
+    glVertex3f
+    glVertex3fv
+    glVertex3i
+    glVertex3iv
+    glVertex3s
+    glVertex3sv
+    glVertex4d
+    glVertex4dv
+    glVertex4f
+    glVertex4fv
+    glVertex4i
+    glVertex4iv
+    glVertex4s
+    glVertex4sv
+    glVertexPointer
+    glViewport
+    wglChoosePixelFormat
+    wglCopyContext
+    wglCreateContext
+    wglCreateLayerContext
+    wglDeleteContext
+    wglDescribeLayerPlane
+    wglDescribePixelFormat
+    wglGetCurrentContext
+    wglGetCurrentDC
+    wglGetDefaultProcAddress
+    wglGetLayerPaletteEntries
+    wglGetPixelFormat
+    wglGetProcAddress
+    wglMakeCurrent
+    wglRealizeLayerPalette
+    wglSetLayerPaletteEntries
+    wglSetPixelFormat
+    wglShareLists
+    wglSwapBuffers
+    wglSwapLayerBuffers
+    wglSwapMultipleBuffers
+    wglUseFontBitmapsA
+    wglUseFontBitmapsW
+    wglUseFontOutlinesA
+    wglUseFontOutlinesW
index bb0f675a547231f3e94d7370d31f3c6fe33cf3c6..e35108b273920561b0c87a950dbd2a41606d2086 100644 (file)
@@ -426,8 +426,9 @@ class Tracer:
         self.header(api)
 
         # Includes
-        for header in api.headers:
-            print header
+        for module in api.modules:
+            for header in module.headers:
+                print header
         print
 
         # Generate the serializer functions
@@ -442,8 +443,10 @@ class Tracer:
         # Function wrappers
         self.interface = None
         self.base = None
-        map(self.traceFunctionDecl, api.functions)
-        map(self.traceFunctionImpl, api.functions)
+        for function in api.getAllFunctions():
+            self.traceFunctionDecl(function)
+        for function in api.getAllFunctions():
+            self.traceFunctionImpl(function)
         print
 
         self.footer(api)
index 317c5422a7d5400e17c9d791c084c630b1ee9d7f..c001cb1a988ffcd54f0b1ad8e8bd2242480d87f1 100644 (file)
@@ -28,7 +28,7 @@
 
 
 from gltrace import GlTracer
-from specs.stdapi import API
+from specs.stdapi import Module, API
 from specs.glapi import glapi
 from specs.wglapi import wglapi
 
@@ -96,8 +96,10 @@ if __name__ == '__main__':
     print '#include "glproc.hpp"'
     print '#include "glsize.hpp"'
     print
+    module = Module()
+    module.mergeModule(glapi)
+    module.mergeModule(wglapi)
     api = API()
-    api.addApi(glapi)
-    api.addApi(wglapi)
+    api.addModule(module)
     tracer = WglTracer()
     tracer.traceApi(api)