]> git.cworth.org Git - apitrace/blobdiff - wrappers/d3d9shader.cpp
d3dtrace,d3dretrace: Move shader disassembly helpers to common location.
[apitrace] / wrappers / d3d9shader.cpp
index b2a39f6604969d3dff5d9f347ef52e8632a5fd64..6dbe06bd737578aabafb440e6055e7d769bff64d 100644 (file)
 
 #include <stdio.h>
 
+#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();
     }