From cfb1f61d478c92026718cedca4bfec8c2afc1b00 Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Tue, 13 Nov 2018 17:02:27 -0500 Subject: * Fix bug outputing dxbc assembly (#719) * Make the disassembly methods returns SlangResult and String as last output param so as to make error case clear. --- source/slang/compiler.cpp | 27 ++++++++++++++++----------- source/slang/dxc-support.cpp | 4 +--- 2 files changed, 17 insertions(+), 14 deletions(-) (limited to 'source') diff --git a/source/slang/compiler.cpp b/source/slang/compiler.cpp index 6b5043fa8..0f0f3c915 100644 --- a/source/slang/compiler.cpp +++ b/source/slang/compiler.cpp @@ -491,12 +491,11 @@ namespace Slang ComPtr codeBlob; SlangResult res = disassembleFunc(data, size, 0, nullptr, codeBlob.writeRef()); - String result; if (codeBlob) { char const* codeBegin = (char const*)codeBlob->GetBufferPointer(); char const* codeEnd = codeBegin + codeBlob->GetBufferSize() - 1; - result.append(codeBegin, codeEnd); + stringOut = String(codeBegin, codeEnd); } if (FAILED(res)) { @@ -576,11 +575,14 @@ SlangResult dissassembleDXILUsingDXC( return 0; } - String dissassembleSPIRV( + SlangResult dissassembleSPIRV( CompileRequest* slangRequest, void const* data, - size_t size) + size_t size, + String& stringOut) { + stringOut = String(); + String output; auto outputFunc = [](void const* data, size_t size, void* userData) { @@ -597,13 +599,13 @@ SlangResult dissassembleDXILUsingDXC( request.outputUserData = &output; int err = invokeGLSLCompiler(slangRequest, request); - if (err) { - String(); + return SLANG_FAIL; } - return output; + stringOut = output; + return SLANG_OK; } List emitSPIRVForEntryPoint( @@ -648,7 +650,8 @@ SlangResult dissassembleDXILUsingDXC( if (spirv.Count() == 0) return String(); - String result = dissassembleSPIRV(entryPoint->compileRequest, spirv.begin(), spirv.Count()); + String result; + dissassembleSPIRV(entryPoint->compileRequest, spirv.begin(), spirv.Count(), result); return result; } #endif @@ -910,9 +913,10 @@ SlangResult dissassembleDXILUsingDXC( case CodeGenTarget::SPIRV: { - String assembly = dissassembleSPIRV(compileRequest, + String assembly; + dissassembleSPIRV(compileRequest, data.begin(), - data.end() - data.begin()); + data.end() - data.begin(), assembly); writeOutputToConsole(compileRequest, assembly); } break; @@ -1135,7 +1139,8 @@ SlangResult dissassembleDXILUsingDXC( case CodeGenTarget::SPIRV: dumpIntermediateBinary(compileRequest, data, size, ".spv"); { - String spirvAssembly = dissassembleSPIRV(compileRequest, data, size); + String spirvAssembly; + dissassembleSPIRV(compileRequest, data, size, spirvAssembly); dumpIntermediateText(compileRequest, spirvAssembly.begin(), spirvAssembly.Length(), ".spv.asm"); } break; diff --git a/source/slang/dxc-support.cpp b/source/slang/dxc-support.cpp index 152710534..b00583f10 100644 --- a/source/slang/dxc-support.cpp +++ b/source/slang/dxc-support.cpp @@ -270,11 +270,9 @@ namespace Slang ComPtr dxcResultBlob; SLANG_RETURN_ON_FAIL(dxcCompiler->Disassemble(dxcSourceBlob, dxcResultBlob.writeRef())); - String result; char const* codeBegin = (char const*)dxcResultBlob->GetBufferPointer(); char const* codeEnd = codeBegin + dxcResultBlob->GetBufferSize() - 1; - result.append(codeBegin, codeEnd); - stringOut = result; + stringOut = String(codeBegin, codeEnd); return SLANG_OK; } -- cgit v1.2.3