]> git.cworth.org Git - apitrace/blobdiff - retrace/d3d9state.cpp
Cleanup README formatting.
[apitrace] / retrace / d3d9state.cpp
index 73746e7d14c9543ec4e2f91bcd0ad3b78579e876..a90ee6da037de7e12f3dcbb104bb3659acf88e61 100644 (file)
 #include <iostream>
 
 #include "d3d9imports.hpp"
+#include "d3dshader.hpp"
+#include "d3dstate.hpp"
 #include "json.hpp"
 
 
 namespace d3dstate {
 
 
-typedef HRESULT
-(WINAPI *PD3DXDISASSEMBLESHADER)(
-    CONST DWORD *pShader,
-    BOOL EnableColorCode,
-    LPCSTR pComments,
-    LPD3DXBUFFER *ppDisassembly
-);
-
-
-HRESULT
-disassembleShader(const DWORD *tokens, LPD3DXBUFFER *ppDisassembly)
-{
-    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;
-    }
-
-    if (!pfnD3DXDisassembleShader) {
-        return E_FAIL;
-    }
-
-    return pfnD3DXDisassembleShader(tokens, FALSE, NULL, ppDisassembly);
-}
-
-
 template< class T >
 inline void
 dumpShader(JSONWriter &json, const char *name, T *pShader) {
@@ -111,9 +55,8 @@ dumpShader(JSONWriter &json, const char *name, T *pShader) {
         if (pData) {
             hr = pShader->GetFunction(pData, &SizeOfData);
             if (SUCCEEDED(hr)) {
-                LPD3DXBUFFER pDisassembly;
-
-                hr = disassembleShader((const DWORD *)pData, &pDisassembly);
+                IDisassemblyBuffer *pDisassembly = NULL;
+                hr = DisassembleShader((const DWORD *)pData, &pDisassembly);
                 if (SUCCEEDED(hr)) {
                     json.beginMember(name);
                     json.writeString((const char *)pDisassembly->GetBufferPointer() /*, pDisassembly->GetBufferSize() */);
@@ -125,6 +68,8 @@ dumpShader(JSONWriter &json, const char *name, T *pShader) {
             free(pData);
         }
     }
+
+    pShader->Release();
 }
 
 static void
@@ -156,9 +101,20 @@ dumpDevice(std::ostream &os, IDirect3DDevice9 *pDevice)
 {
     JSONWriter json(os);
 
+    /* TODO */
+    json.beginMember("parameters");
+    json.beginObject();
+    json.endObject();
+    json.endMember(); // parameters
+
     dumpShaders(json, pDevice);
 
-    /* TODO */
+    json.beginMember("textures");
+    json.beginObject();
+    json.endObject();
+    json.endMember(); // textures
+
+    dumpFramebuffer(json, pDevice);
 }