Skip to content

Commit

Permalink
fix error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
bob80905 committed Jan 10, 2025
1 parent 070d0d5 commit 819f345
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 16 deletions.
25 changes: 10 additions & 15 deletions lib/DxilContainer/DxcContainerBuilder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,9 @@ HRESULT STDMETHODCALLTYPE DxcContainerBuilder::RemovePart(UINT32 fourCC) {
HRESULT STDMETHODCALLTYPE
DxcContainerBuilder::SerializeContainer(IDxcOperationResult **ppResult) {
DxcThreadMalloc TM(m_pMalloc);
if (ppResult == nullptr || *ppResult == nullptr)
return E_INVALIDARG;

try {
// Allocate memory for new dxil container.
uint32_t ContainerSize = ComputeContainerSize();
Expand Down Expand Up @@ -161,6 +164,13 @@ DxcContainerBuilder::SerializeContainer(IDxcOperationResult **ppResult) {
errorHeap.Detach();
}

// Add Hash.
LPVOID PTR = pResult->GetBufferPointer();
if (!IsDxilContainerLike(PTR, pResult->GetBufferSize()))
return E_FAIL;

HashAndUpdate((DxilContainerHeader *)PTR);

IFT(DxcResult::Create(
valHR, DXC_OUT_OBJECT,
{DxcOutputObject::DataOutput(DXC_OUT_OBJECT, pResult, DxcOutNoName),
Expand All @@ -169,21 +179,6 @@ DxcContainerBuilder::SerializeContainer(IDxcOperationResult **ppResult) {
}
CATCH_CPP_RETURN_HRESULT();

if (ppResult == nullptr || *ppResult == nullptr)
return S_OK;

HRESULT HR;
(*ppResult)->GetStatus(&HR);
if (FAILED(HR))
return HR;

CComPtr<IDxcBlob> pObject;
IFR((*ppResult)->GetResult(&pObject));

// Add Hash.
LPVOID PTR = pObject->GetBufferPointer();
if (IsDxilContainerLike(PTR, pObject->GetBufferSize()))
HashAndUpdate((DxilContainerHeader *)PTR);
return S_OK;
}

Expand Down
2 changes: 1 addition & 1 deletion tools/clang/tools/dxclib/dxc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -644,7 +644,7 @@ int DxcContext::VerifyRootSignature() {
IFT(pContainerBuilder->AddPart(hlsl::DxilFourCC::DFCC_RootSignature,
pRootSignature));
CComPtr<IDxcOperationResult> pOperationResult;
pContainerBuilder->SerializeContainer(&pOperationResult);
IFT(pContainerBuilder->SerializeContainer(&pOperationResult));
HRESULT status = E_FAIL;
CComPtr<IDxcBlob> pResult;
IFT(pOperationResult->GetStatus(&status));
Expand Down

0 comments on commit 819f345

Please sign in to comment.