From: José Fonseca Date: Sat, 21 May 2011 09:14:01 +0000 (+0100) Subject: Dump D3D8 shaders too. X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=1e5d421e42e2605939cfdb86e4479f7a1b0be8d8;p=apitrace Dump D3D8 shaders too. --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 3a9af27..2f0a83a 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -180,7 +180,7 @@ if (WIN32) COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d3d8.py > ${CMAKE_CURRENT_BINARY_DIR}/d3d8.cpp DEPENDS d3d8.py trace.py d3d8types.py d3d8caps.py winapi.py stdapi.py ) - add_library (d3d8 SHARED d3d8.def d3d8.cpp trace_write.cpp os_win32.cpp) + add_library (d3d8 SHARED d3d8.def d3d8.cpp d3dshader.cpp trace_write.cpp os_win32.cpp) set_target_properties (d3d8 PROPERTIES PREFIX "" RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/wrappers @@ -197,7 +197,7 @@ if (WIN32) COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/d3d9.py > ${CMAKE_CURRENT_BINARY_DIR}/d3d9.cpp DEPENDS d3d9.py trace.py d3d9types.py d3d9caps.py winapi.py stdapi.py ) - add_library (d3d9 SHARED d3d9.def d3d9.cpp trace_write.cpp os_win32.cpp) + add_library (d3d9 SHARED d3d9.def d3d9.cpp d3dshader.cpp trace_write.cpp os_win32.cpp) set_target_properties (d3d9 PROPERTIES PREFIX "" RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/wrappers diff --git a/d3d8.py b/d3d8.py index 73c9c85..07ddc47 100644 --- a/d3d8.py +++ b/d3d8.py @@ -282,12 +282,19 @@ d3d8.add_functions([ class D3D8Tracer(DllTracer): - pass + def dump_arg_instance(self, function, arg): + # Dump shaders as strings + if function.name in ('CreateVertexShader', 'CreatePixelShader') and arg.name == 'pFunction': + print ' DumpShader(%s);' % (arg.name) + return + + DllTracer.dump_arg_instance(self, function, arg) if __name__ == '__main__': print '#include ' print '#include ' + print '#include "d3dshader.hpp"' print print '#include "trace_write.hpp"' print '#include "os.hpp"' diff --git a/d3d9.py b/d3d9.py index 2f8f142..e2d5ba6 100644 --- a/d3d9.py +++ b/d3d9.py @@ -463,7 +463,7 @@ class D3D9Tracer(DllTracer): if __name__ == '__main__': print '#include "d3d9imports.hpp"' - print '#include "d3d9shader.hpp"' + print '#include "d3dshader.hpp"' print print '#include "trace_write.hpp"' print '#include "os.hpp"' diff --git a/d3d9shader.hpp b/d3d9shader.hpp deleted file mode 100644 index 63883f2..0000000 --- a/d3d9shader.hpp +++ /dev/null @@ -1,102 +0,0 @@ -/************************************************************************** - * - * Copyright 2011 Jose Fonseca - * 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. - * - **************************************************************************/ - -#ifndef _D3D9SHADER_HPP_ -#define _D3D9SHADER_HPP_ - - -#include - -#include "d3d9imports.hpp" -#include "trace_write.hpp" - - -typedef HRESULT -(WINAPI *PD3DXDISASSEMBLESHADER)( - CONST DWORD *pShader, - BOOL EnableColorCode, - LPCSTR pComments, - LPD3DXBUFFER *ppDisassembly -); - - -static void DumpShader(const DWORD *tokens) -{ - static BOOL firsttime = TRUE; - static HMODULE hD3DXModule = NULL; - static PD3DXDISASSEMBLESHADER pfnD3DXDisassembleShader = NULL; - - if (firsttime) { - if (!hD3DXModule) { - unsigned release; - int version; - for (release = 0; release <= 1; ++release) { - /* Version 41 corresponds to Mar 2009 version of DirectX Runtime / SDK */ - for (version = 41; version >= 0; --version) { - char filename[256]; - _snprintf(filename, sizeof(filename), - "d3dx9%s%s%u.dll", release ? "" : "d", version ? "_" : "", version); - hD3DXModule = LoadLibraryA(filename); - if (hD3DXModule) - goto found; - } - } -found: - ; - } - - if (hD3DXModule) { - if (!pfnD3DXDisassembleShader) { - pfnD3DXDisassembleShader = (PD3DXDISASSEMBLESHADER)GetProcAddress(hD3DXModule, "D3DXDisassembleShader"); - } - } - - firsttime = FALSE; - } - - if (pfnD3DXDisassembleShader) { - LPD3DXBUFFER pDisassembly = NULL; - HRESULT hr; - - hr = pfnD3DXDisassembleShader( (DWORD *)tokens, FALSE, NULL, &pDisassembly); - if (hr == D3D_OK) { - Trace::LiteralString((const char *)pDisassembly->GetBufferPointer()); - } - - if (pDisassembly) { - pDisassembly->Release(); - } - - if (hr == D3D_OK) { - return; - } - } - - Trace::LiteralOpaque(tokens); -} - - -#endif /* _D3D9SHADER_HPP_ */ diff --git a/d3dshader.cpp b/d3dshader.cpp new file mode 100644 index 0000000..799b35f --- /dev/null +++ b/d3dshader.cpp @@ -0,0 +1,97 @@ +/************************************************************************** + * + * Copyright 2011 Jose Fonseca + * 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. + * + **************************************************************************/ + + +#include + +#include "trace_write.hpp" +#include "d3d9imports.hpp" +#include "d3dshader.hpp" + + +typedef HRESULT +(WINAPI *PD3DXDISASSEMBLESHADER)( + CONST DWORD *pShader, + BOOL EnableColorCode, + LPCSTR pComments, + LPD3DXBUFFER *ppDisassembly +); + + +void DumpShader(const DWORD *tokens) +{ + static BOOL firsttime = TRUE; + static HMODULE hD3DXModule = NULL; + static PD3DXDISASSEMBLESHADER pfnD3DXDisassembleShader = NULL; + + if (firsttime) { + if (!hD3DXModule) { + unsigned release; + int version; + for (release = 0; release <= 1; ++release) { + /* Version 41 corresponds to Mar 2009 version of DirectX Runtime / SDK */ + for (version = 41; version >= 0; --version) { + char filename[256]; + _snprintf(filename, sizeof(filename), + "d3dx9%s%s%u.dll", release ? "" : "d", version ? "_" : "", version); + hD3DXModule = LoadLibraryA(filename); + if (hD3DXModule) + goto found; + } + } +found: + ; + } + + if (hD3DXModule) { + if (!pfnD3DXDisassembleShader) { + pfnD3DXDisassembleShader = (PD3DXDISASSEMBLESHADER)GetProcAddress(hD3DXModule, "D3DXDisassembleShader"); + } + } + + firsttime = FALSE; + } + + if (pfnD3DXDisassembleShader) { + LPD3DXBUFFER pDisassembly = NULL; + HRESULT hr; + + hr = pfnD3DXDisassembleShader( (DWORD *)tokens, FALSE, NULL, &pDisassembly); + if (hr == D3D_OK) { + Trace::LiteralString((const char *)pDisassembly->GetBufferPointer()); + } + + if (pDisassembly) { + pDisassembly->Release(); + } + + if (hr == D3D_OK) { + return; + } + } + + Trace::LiteralOpaque(tokens); +} diff --git a/d3dshader.hpp b/d3dshader.hpp new file mode 100644 index 0000000..fdde4e4 --- /dev/null +++ b/d3dshader.hpp @@ -0,0 +1,36 @@ +/************************************************************************** + * + * Copyright 2011 Jose Fonseca + * 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. + * + **************************************************************************/ + +#ifndef _D3DSHADER_HPP_ +#define _D3DSHADER_HPP_ + + +#include + +void DumpShader(const DWORD *tokens); + + +#endif /* _D3DSHADER_HPP_ */