- static bool firsttime = true;
-
- if (firsttime) {
- char szFilename[MAX_PATH];
- HMODULE hModule = NULL;
-
- int version;
- for (version = 44; version >= 33; --version) {
- _snprintf(szFilename, sizeof(szFilename), "d3dcompiler_%i.dll", version);
- hModule = LoadLibraryA(szFilename);
- if (hModule) {
- pfnD3DDisassemble = (PFND3DDISASSEMBLE)
- GetProcAddress(hModule, "D3DDisassemble");
- if (pfnD3DDisassemble) {
- break;
- }
- }
- }
-
- if (!pfnD3DDisassemble) {
- /*
- * Fallback to D3D10DisassembleShader, which should be always present.
- */
- if (GetSystemDirectoryA(szFilename, MAX_PATH)) {
- strcat(szFilename, "\\d3d10.dll");
- hModule = LoadLibraryA(szFilename);
- if (hModule) {
- pfnD3D10DisassembleShader = (PFND3D10DISASSEMBLESHADER)
- GetProcAddress(hModule, "D3D10DisassembleShader");
- }
- }
- }
-
- firsttime = false;
- }
-
- LPD3DBLOB pDisassembly = NULL;
- HRESULT hr = E_FAIL;
-
- if (pfnD3DDisassemble) {
- hr = pfnD3DDisassemble(pShaderBytecode, BytecodeLength, 0, NULL, &pDisassembly);
- } else if (pfnD3D10DisassembleShader) {
- hr = pfnD3D10DisassembleShader(pShaderBytecode, BytecodeLength, 0, NULL, &pDisassembly);
- }