summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2018-11-13 17:02:27 -0500
committerGitHub <noreply@github.com>2018-11-13 17:02:27 -0500
commitcfb1f61d478c92026718cedca4bfec8c2afc1b00 (patch)
tree51c88758572b6990ad0461d011bcc873553fd3da
parent039c233d9e4617ba9edd702a8275df0837ca8365 (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.
-rw-r--r--source/slang/compiler.cpp27
-rw-r--r--source/slang/dxc-support.cpp4
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;
}