gl::Error HLSLCompiler::disassembleBinary(ID3DBlob *shaderBinary, std::string *disassemblyOut) { ANGLE_TRY(ensureInitialized()); // Retrieve disassembly UINT flags = D3D_DISASM_ENABLE_DEFAULT_VALUE_PRINTS | D3D_DISASM_ENABLE_INSTRUCTION_NUMBERING; ID3DBlob *disassembly = nullptr; pD3DDisassemble disassembleFunc = reinterpret_cast<pD3DDisassemble>(mD3DDisassembleFunc); LPCVOID buffer = shaderBinary->GetBufferPointer(); SIZE_T bufSize = shaderBinary->GetBufferSize(); HRESULT result = disassembleFunc(buffer, bufSize, flags, "", &disassembly); if (SUCCEEDED(result)) { *disassemblyOut = std::string(reinterpret_cast<const char*>(disassembly->GetBufferPointer())); } else { *disassemblyOut = ""; } SafeRelease(disassembly); return gl::NoError(); }
std::string HLSLCompiler::disassembleBinary(ID3DBlob *shaderBinary) const { // Retrieve disassembly UINT flags = D3D_DISASM_ENABLE_DEFAULT_VALUE_PRINTS | D3D_DISASM_ENABLE_INSTRUCTION_NUMBERING; ID3DBlob *disassembly = NULL; pD3DDisassemble disassembleFunc = reinterpret_cast<pD3DDisassemble>(mD3DDisassembleFunc); LPCVOID buffer = shaderBinary->GetBufferPointer(); SIZE_T bufSize = shaderBinary->GetBufferSize(); HRESULT result = disassembleFunc(buffer, bufSize, flags, "", &disassembly); std::string asmSrc; if (SUCCEEDED(result)) { asmSrc = reinterpret_cast<const char*>(disassembly->GetBufferPointer()); } SafeRelease(disassembly); return asmSrc; }