X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=retrace%2Fd3d9state.cpp;h=a90ee6da037de7e12f3dcbb104bb3659acf88e61;hb=HEAD;hp=73746e7d14c9543ec4e2f91bcd0ad3b78579e876;hpb=2b46364c974c95b8e2568f1e3f13e888c46c9d04;p=apitrace diff --git a/retrace/d3d9state.cpp b/retrace/d3d9state.cpp index 73746e7..a90ee6d 100644 --- a/retrace/d3d9state.cpp +++ b/retrace/d3d9state.cpp @@ -29,70 +29,14 @@ #include #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); }