diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2018-11-13 17:02:27 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-11-13 17:02:27 -0500 |
| commit | cfb1f61d478c92026718cedca4bfec8c2afc1b00 (patch) | |
| tree | 51c88758572b6990ad0461d011bcc873553fd3da /source | |
| parent | 039c233d9e4617ba9edd702a8275df0837ca8365 (diff) | |
* 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.
Diffstat (limited to 'source')
| -rw-r--r-- | source/slang/compiler.cpp | 27 | ||||
| -rw-r--r-- | source/slang/dxc-support.cpp | 4 |
2 files changed, 17 insertions, 14 deletions
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<ID3DBlob> 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<uint8_t> 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<IDxcBlobEncoding> 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; } |
