X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=wrappers%2Fd3d9shader.cpp;h=6dbe06bd737578aabafb440e6055e7d769bff64d;hb=3b18682ec801546fc7b2a1b9593161fa99c5adcd;hp=b2a39f6604969d3dff5d9f347ef52e8632a5fd64;hpb=52cd6f0c427a1345ffeb578c01294bf602f16894;p=apitrace diff --git a/wrappers/d3d9shader.cpp b/wrappers/d3d9shader.cpp index b2a39f6..6dbe06b 100644 --- a/wrappers/d3d9shader.cpp +++ b/wrappers/d3d9shader.cpp @@ -27,78 +27,28 @@ #include +#include "os.hpp" +#include "d3dshader.hpp" + #include "d3d9shader.hpp" #include "d3d9imports.hpp" #include "d3d9size.hpp" -typedef HRESULT -(WINAPI *PD3DXDISASSEMBLESHADER)( - CONST DWORD *pShader, - BOOL EnableColorCode, - LPCSTR pComments, - LPD3DXBUFFER *ppDisassembly -); - - void DumpShader(trace::Writer &writer, const DWORD *tokens) { - static BOOL firsttime = TRUE; - - /* - * TODO: Consider using d3dcompile_xx.dll per - * http://msdn.microsoft.com/en-us/library/windows/desktop/ee663275.aspx - */ - - 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; - } - - LPD3DXBUFFER pDisassembly = NULL; - HRESULT hr = E_FAIL; - - if (pfnD3DXDisassembleShader) { - hr = pfnD3DXDisassembleShader(tokens, FALSE, NULL, &pDisassembly); - } + IDisassemblyBuffer *pDisassembly = NULL; + HRESULT hr = DisassembleShader(tokens, &pDisassembly); if (SUCCEEDED(hr)) { writer.beginRepr(); - writer.writeString((const char *)pDisassembly->GetBufferPointer(), pDisassembly->GetBufferSize()); + writer.writeString((const char *)pDisassembly->GetBufferPointer(), + pDisassembly->GetBufferSize()); + pDisassembly->Release(); } writer.writeBlob(tokens, _shaderSize(tokens)); - if (pDisassembly) { - pDisassembly->Release(); - } - if (SUCCEEDED(hr)) { writer.endRepr(); }