in Source/Core/ShaderConductor.cpp [468:507]
void ConvertDxcResult(Compiler::ResultDesc& result, IDxcOperationResult* dxcResult, ShadingLanguage targetLanguage, bool asModule)
{
HRESULT status;
IFT(dxcResult->GetStatus(&status));
result.target.Reset();
result.errorWarningMsg.Reset();
CComPtr<IDxcBlobEncoding> errors;
IFT(dxcResult->GetErrorBuffer(&errors));
if (errors != nullptr)
{
result.errorWarningMsg.Reset(errors->GetBufferPointer(), static_cast<uint32_t>(errors->GetBufferSize()));
errors = nullptr;
}
result.hasError = true;
if (SUCCEEDED(status))
{
CComPtr<IDxcBlob> program;
IFT(dxcResult->GetResult(&program));
dxcResult = nullptr;
if (program != nullptr)
{
result.target.Reset(program->GetBufferPointer(), static_cast<uint32_t>(program->GetBufferSize()));
result.hasError = false;
}
#ifdef LLVM_ON_WIN32
if ((targetLanguage == ShadingLanguage::Dxil) && !asModule)
{
// Gather reflection information only for ShadingLanguage::Dxil
ShaderReflection(result.reflection, program);
}
#else
SC_UNUSED(targetLanguage);
SC_UNUSED(asModule);
#endif
}
}