void ConvertDxcResult()

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
        }
    }