From: José Fonseca Date: Wed, 14 Nov 2012 07:23:22 +0000 (+0000) Subject: Merge branch 'modules' X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=b35ae0df401ff22e3b2dc9b6bfacf1e23baebde0;hp=bce31f64b76d8aa9a933f0f6a1a2d6ff95b63f33;p=apitrace Merge branch 'modules' --- diff --git a/common/os_dl.hpp b/common/os_dl.hpp new file mode 100644 index 0000000..da51d41 --- /dev/null +++ b/common/os_dl.hpp @@ -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 +#else +#include +#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_ */ diff --git a/dispatch/dispatch.py b/dispatch/dispatch.py index 4580166..60f9507 100644 --- a/dispatch/dispatch.py +++ b/dispatch/dispatch.py @@ -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,) diff --git a/dispatch/glproc.py b/dispatch/glproc.py index abf4f00..488f912 100644 --- a/dispatch/glproc.py +++ b/dispatch/glproc.py @@ -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_ */' diff --git a/gui/imageviewer.cpp b/gui/imageviewer.cpp index 0e0657a..1a1fe5a 100644 --- a/gui/imageviewer.cpp +++ b/gui/imageviewer.cpp @@ -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()); diff --git a/helpers/d3d9size.hpp b/helpers/d3d9size.hpp index 0041e25..69b2222 100644 --- a/helpers/d3d9size.hpp +++ b/helpers/d3d9size.hpp @@ -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); } diff --git a/helpers/glsize.hpp b/helpers/glsize.hpp index 9d39a3b..fe267e1 100644 --- a/helpers/glsize.hpp +++ b/helpers/glsize.hpp @@ -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; diff --git a/retrace/CMakeLists.txt b/retrace/CMakeLists.txt index 1f260e4..5a46d3e 100644 --- a/retrace/CMakeLists.txt +++ b/retrace/CMakeLists.txt @@ -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 index bb45b82..0000000 --- a/retrace/d3d10_1retrace.py +++ /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 - -#include - -#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 index 877b1e4..0000000 --- a/retrace/d3d10retrace.py +++ /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 - -#include - -#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 index 8831024..0000000 --- a/retrace/d3d11retrace.py +++ /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 - -#include - -#include "d3d11imports.hpp" -#include "d3d11size.hpp" -#include "d3dretrace.hpp" - -''' - - retracer = D3DRetracer() - retracer.retraceApi(d3d11) diff --git a/retrace/d3d9retrace.py b/retrace/d3d9retrace.py index 7030f86..4b5853b 100644 --- a/retrace/d3d9retrace.py +++ b/retrace/d3d9retrace.py @@ -28,18 +28,42 @@ 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 _locks;' + print 'static std::map _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) diff --git a/retrace/d3dcommonretrace.py b/retrace/d3dcommonretrace.py index ea09eb0..add1a50 100644 --- a/retrace/d3dcommonretrace.py +++ b/retrace/d3dcommonretrace.py @@ -27,8 +27,13 @@ """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 _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 ''' + print + print r'#include ' + 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 ' + import specs.d3d11_1 + print r'#include "d3d11size.hpp"' + api.addModule(d3d11) + + retracer = D3DRetracer() + retracer.retraceApi(api) + + +if __name__ == '__main__': + main() diff --git a/retrace/d3dretrace.hpp b/retrace/d3dretrace.hpp index dc174a8..5a45d36 100644 --- a/retrace/d3dretrace.hpp +++ b/retrace/d3dretrace.hpp @@ -32,16 +32,11 @@ #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 diff --git a/retrace/d3dretrace_main.cpp b/retrace/d3dretrace_main.cpp index a19511a..440d5b1 100644 --- a/retrace/d3dretrace_main.cpp +++ b/retrace/d3dretrace_main.cpp @@ -33,10 +33,6 @@ #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); } diff --git a/retrace/dllretrace.py b/retrace/dllretrace.py index 4fd481c..aa7ed45 100644 --- a/retrace/dllretrace.py +++ b/retrace/dllretrace.py @@ -26,17 +26,18 @@ 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) - diff --git a/retrace/glretrace.py b/retrace/glretrace.py index e2ea320..6fdeffe 100644 --- a/retrace/glretrace.py +++ b/retrace/glretrace.py @@ -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) diff --git a/retrace/retrace.py b/retrace/retrace.py index 2dd8e2f..5b5812f 100644 --- a/retrace/retrace.py +++ b/retrace/retrace.py @@ -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) diff --git a/retrace/retrace_swizzle.cpp b/retrace/retrace_swizzle.cpp index fe0df21..b487de1 100644 --- a/retrace/retrace_swizzle.cpp +++ b/retrace/retrace_swizzle.cpp @@ -255,8 +255,18 @@ toPointer(trace::Value &value, bool bind) { static std::map _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; diff --git a/retrace/retrace_swizzle.hpp b/retrace/retrace_swizzle.hpp index bab6d56..42e5bf6 100644 --- a/retrace/retrace_swizzle.hpp +++ b/retrace/retrace_swizzle.hpp @@ -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); diff --git a/specs/cglapi.py b/specs/cglapi.py index fbae1b1..6cea028 100644 --- a/specs/cglapi.py +++ b/specs/cglapi.py @@ -180,7 +180,7 @@ CGLError = Enum("CGLError", [ CGLContextObj = Opaque("CGLContextObj") -cglapi = API("CGL") +cglapi = Module("CGL") cglapi.addFunctions([ # CGLCurrent.h, libGL.dylib diff --git a/specs/d2d1.py b/specs/d2d1.py index 7fe9b65..e532e46 100644 --- a/specs/d2d1.py +++ b/specs/d2d1.py @@ -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")]), ]) diff --git a/specs/d3d10.py b/specs/d3d10.py index 48dc2e1..0552575 100644 --- a/specs/d3d10.py +++ b/specs/d3d10.py @@ -898,7 +898,7 @@ ID3D10Multithread.methods += [ ] -d3d10 = API("d3d10") +d3d10 = Module("d3d10") from d3d10sdklayers import * diff --git a/specs/d3d10_1.py b/specs/d3d10_1.py index 60a7656..73d798e 100644 --- a/specs/d3d10_1.py +++ b/specs/d3d10_1.py @@ -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")]), diff --git a/specs/d3d11.py b/specs/d3d11.py index 4566ea1..578d214 100644 --- a/specs/d3d11.py +++ b/specs/d3d11.py @@ -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")]), diff --git a/specs/d3d8.py b/specs/d3d8.py index 9a11ec5..c835fc5 100644 --- a/specs/d3d8.py +++ b/specs/d3d8.py @@ -289,7 +289,7 @@ IDirect3DVolume8.methods += [ StdMethod(HRESULT, "UnlockBox", []), ] -d3d8 = API("d3d8") +d3d8 = Module("d3d8") d3d8.addFunctions([ StdFunction(PDIRECT3D8, "Direct3DCreate8", [(UINT, "SDKVersion")]), ]) diff --git a/specs/d3d9.py b/specs/d3d9.py index 3443fee..a3b40d1 100644 --- a/specs/d3d9.py +++ b/specs/d3d9.py @@ -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'), diff --git a/specs/d3d9types.py b/specs/d3d9types.py index 279d6d3..41b6890 100644 --- a/specs/d3d9types.py +++ b/specs/d3d9types.py @@ -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", [ diff --git a/specs/ddraw.py b/specs/ddraw.py index cccbbe5..7ca6783 100644 --- a/specs/ddraw.py +++ b/specs/ddraw.py @@ -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")]), diff --git a/specs/dwrite.py b/specs/dwrite.py index 001d041..1a8aae0 100644 --- a/specs/dwrite.py +++ b/specs/dwrite.py @@ -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")]), ]) diff --git a/specs/dxgi.py b/specs/dxgi.py index 45af484..97aa5dd 100644 --- a/specs/dxgi.py +++ b/specs/dxgi.py @@ -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")]), diff --git a/specs/eglapi.py b/specs/eglapi.py index 7458478..510e0fa 100644 --- a/specs/eglapi.py +++ b/specs/eglapi.py @@ -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)") diff --git a/specs/glapi.py b/specs/glapi.py index 3db0739..257fe2e 100644 --- a/specs/glapi.py +++ b/specs/glapi.py @@ -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")]), diff --git a/specs/glesapi.py b/specs/glesapi.py index 46c6ef0..6d51fe0 100644 --- a/specs/glesapi.py +++ b/specs/glesapi.py @@ -40,7 +40,7 @@ def GlFunction(*args, **kwargs): return Function(*args, **kwargs) -glesapi = API('GLES') +glesapi = Module('GLES') # OpenGL ES specific functions diff --git a/specs/glxapi.py b/specs/glxapi.py index 1577527..f4e544c 100644 --- a/specs/glxapi.py +++ b/specs/glxapi.py @@ -242,7 +242,7 @@ GLXbuffer = Flags(Int, [ "GLX_PBUFFER_CLOBBER_MASK", ]) -glxapi = API("GLX") +glxapi = Module("GLX") PROC = Opaque("__GLXextFuncPtr") diff --git a/specs/stdapi.py b/specs/stdapi.py index 846227e..1097347 100644 --- a/specs/stdapi.py +++ b/specs/stdapi.py @@ -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 diff --git a/specs/wglapi.py b/specs/wglapi.py index e3d8b23..f4b625a 100644 --- a/specs/wglapi.py +++ b/specs/wglapi.py @@ -32,7 +32,7 @@ from winapi import * from wglenum import * -wglapi = API("WGL") +wglapi = Module("WGL") HGLRC = Alias("HGLRC", HANDLE) diff --git a/specs/winapi.py b/specs/winapi.py index 23d6419..031c834 100644 --- a/specs/winapi.py +++ b/specs/winapi.py @@ -152,7 +152,7 @@ RGNDATA = Struct("RGNDATA", [ ]) LPRGNDATA = Pointer(RGNDATA) -HMODULE = DECLARE_HANDLE("HMODULE") +HMODULE = IntPointer("HMODULE") FILETIME = Struct("FILETIME", [ (DWORD, "dwLowDateTime"), diff --git a/wrappers/.gitignore b/wrappers/.gitignore index cc5f074..e124b5d 100644 --- a/wrappers/.gitignore +++ b/wrappers/.gitignore @@ -8,7 +8,6 @@ d3d8trace.cpp d3d9trace.cpp ddrawtrace.cpp dlltrace.cpp -dwritetrace.cpp egltrace.cpp gltrace.cpp glxtrace.cpp diff --git a/wrappers/CMakeLists.txt b/wrappers/CMakeLists.txt index 9cb4504..2cdf458 100644 --- a/wrappers/CMakeLists.txt +++ b/wrappers/CMakeLists.txt @@ -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 diff --git a/wrappers/cgltrace.py b/wrappers/cgltrace.py index e7cbd7b..c56edf2 100644 --- a/wrappers/cgltrace.py +++ b/wrappers/cgltrace.py @@ -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) diff --git a/wrappers/d2d1.def b/wrappers/d2d1.def index 58c897b..a897bf9 100644 --- a/wrappers/d2d1.def +++ b/wrappers/d2d1.def @@ -1,8 +1,10 @@ LIBRARY "d2d1" EXPORTS - D2D1CreateFactory - D2D1InvertMatrix - D2D1IsMatrixInvertible - D2D1MakeRotateMatrix - D2D1MakeSkewMatrix + D2D1CreateFactory @1 + D2D1MakeRotateMatrix @2 + D2D1MakeSkewMatrix @3 + D2D1IsMatrixInvertible @4 + D2D1InvertMatrix @5 + + DWriteCreateFactory diff --git a/wrappers/d2d1trace.py b/wrappers/d2d1trace.py index a614285..10e14a4 100644 --- a/wrappers/d2d1trace.py +++ b/wrappers/d2d1trace.py @@ -25,31 +25,24 @@ 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) diff --git a/wrappers/d3d10.def b/wrappers/d3d10.def index 65d9786..4cf0f7d 100644 --- a/wrappers/d3d10.def +++ b/wrappers/d3d10.def @@ -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 diff --git a/wrappers/d3d10_1.def b/wrappers/d3d10_1.def index 48bfe14..36dd594 100644 --- a/wrappers/d3d10_1.def +++ b/wrappers/d3d10_1.def @@ -1,4 +1,4 @@ -LIBRARY "d3d10_1" +LIBRARY "d3d10_1" EXPORTS D3D10CreateDevice1 diff --git a/wrappers/d3d10_1trace.py b/wrappers/d3d10_1trace.py index 6fa3efc..94bd743 100644 --- a/wrappers/d3d10_1trace.py +++ b/wrappers/d3d10_1trace.py @@ -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) diff --git a/wrappers/d3d10trace.py b/wrappers/d3d10trace.py index 42f6058..7a9f3ff 100644 --- a/wrappers/d3d10trace.py +++ b/wrappers/d3d10trace.py @@ -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) diff --git a/wrappers/d3d11.def b/wrappers/d3d11.def index 49333b6..a9d2d4b 100644 --- a/wrappers/d3d11.def +++ b/wrappers/d3d11.def @@ -1,9 +1,12 @@ -LIBRARY "d3d11" +LIBRARY "d3d11" EXPORTS - D3D11CoreCreateDevice - D3D11CoreCreateLayeredDevice - D3D11CoreGetLayeredDeviceSize - D3D11CoreRegisterLayers - D3D11CreateDevice - D3D11CreateDeviceAndSwapChain + D3D11CoreCreateDevice + D3D11CoreCreateLayeredDevice + D3D11CoreGetLayeredDeviceSize + D3D11CoreRegisterLayers + D3D11CreateDevice + D3D11CreateDeviceAndSwapChain + + CreateDXGIFactory + CreateDXGIFactory1 diff --git a/wrappers/d3d11trace.py b/wrappers/d3d11trace.py index c504f5e..d43f147 100644 --- a/wrappers/d3d11trace.py +++ b/wrappers/d3d11trace.py @@ -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) diff --git a/wrappers/d3d8.def b/wrappers/d3d8.def index 5134cb8..3e740eb 100644 --- a/wrappers/d3d8.def +++ b/wrappers/d3d8.def @@ -1,4 +1,4 @@ -LIBRARY "d3d8" +LIBRARY "d3d8" EXPORTS Direct3DCreate8 @1 diff --git a/wrappers/d3d8trace.py b/wrappers/d3d8trace.py index 0bf4bb8..2abaf4e 100644 --- a/wrappers/d3d8trace.py +++ b/wrappers/d3d8trace.py @@ -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) diff --git a/wrappers/d3d9.def b/wrappers/d3d9.def index dbbb029..f52c0c4 100644 --- a/wrappers/d3d9.def +++ b/wrappers/d3d9.def @@ -1,4 +1,4 @@ -LIBRARY "d3d9" +LIBRARY "d3d9" EXPORTS Direct3DCreate9 diff --git a/wrappers/d3d9trace.py b/wrappers/d3d9trace.py index fc6e65e..2a4c1a9 100644 --- a/wrappers/d3d9trace.py +++ b/wrappers/d3d9trace.py @@ -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) diff --git a/wrappers/ddrawtrace.py b/wrappers/ddrawtrace.py index b575c77..94e39e2 100644 --- a/wrappers/ddrawtrace.py +++ b/wrappers/ddrawtrace.py @@ -25,19 +25,10 @@ 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 ' @@ -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) diff --git a/wrappers/dlltrace.py b/wrappers/dlltrace.py index 8456d5f..f7ad20f 100644 --- a/wrappers/dlltrace.py +++ b/wrappers/dlltrace.py @@ -26,44 +26,49 @@ """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) diff --git a/wrappers/dwrite.def b/wrappers/dwrite.def index 4cc6785..4dcdba1 100644 --- a/wrappers/dwrite.def +++ b/wrappers/dwrite.def @@ -1,4 +1,4 @@ LIBRARY "d2d1" EXPORTS - DWriteCreateFactory + DWriteCreateFactory diff --git a/wrappers/dwritetrace.cpp b/wrappers/dwritetrace.cpp new file mode 100644 index 0000000..9ca69d6 --- /dev/null +++ b/wrappers/dwritetrace.cpp @@ -0,0 +1,6 @@ +#include + +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 index 7fb77e2..0000000 --- a/wrappers/dwritetrace.py +++ /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) diff --git a/wrappers/egltrace.py b/wrappers/egltrace.py index a6ff17f..0c7ebb6 100644 --- a/wrappers/egltrace.py +++ b/wrappers/egltrace.py @@ -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) diff --git a/wrappers/gltrace.py b/wrappers/gltrace.py index feb96e4..3e01e40 100644 --- a/wrappers/gltrace.py +++ b/wrappers/gltrace.py @@ -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 diff --git a/wrappers/glxtrace.py b/wrappers/glxtrace.py index 670f8f3..9c0f87d 100644 --- a/wrappers/glxtrace.py +++ b/wrappers/glxtrace.py @@ -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) diff --git a/wrappers/opengl32.def b/wrappers/opengl32.def index 9e717a7..9a1729a 100644 --- a/wrappers/opengl32.def +++ b/wrappers/opengl32.def @@ -1,371 +1,371 @@ 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 diff --git a/wrappers/trace.py b/wrappers/trace.py index bb0f675..e35108b 100644 --- a/wrappers/trace.py +++ b/wrappers/trace.py @@ -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) diff --git a/wrappers/wgltrace.py b/wrappers/wgltrace.py index 317c542..c001cb1 100644 --- a/wrappers/wgltrace.py +++ b/wrappers/wgltrace.py @@ -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)