Skip to content

Commit

Permalink
* Fix bug outputing dxbc assembly (#719)
Browse files Browse the repository at this point in the history
* Make the disassembly methods returns SlangResult and String as last output param so as to make error case clear.
  • Loading branch information
jsmall-zzz committed Nov 13, 2018
1 parent 039c233 commit cfb1f61
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 14 deletions.
27 changes: 16 additions & 11 deletions source/slang/compiler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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))
{
Expand Down Expand Up @@ -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)
{
Expand All @@ -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(
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
4 changes: 1 addition & 3 deletions source/slang/dxc-support.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down

0 comments on commit cfb1f61

Please sign in to comment.