From 5bb66f67de5a8c78218bf584f2d3b780e1674293 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 23 Jan 2024 10:26:13 +0000 Subject: [PATCH] Don't rely on ReplaceChunk silently doing nothing for missing chunks --- renderdoc/driver/shaders/dxbc/dxbc_bytecode_editor.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/renderdoc/driver/shaders/dxbc/dxbc_bytecode_editor.cpp b/renderdoc/driver/shaders/dxbc/dxbc_bytecode_editor.cpp index 762724533..3bb8334f8 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_bytecode_editor.cpp +++ b/renderdoc/driver/shaders/dxbc/dxbc_bytecode_editor.cpp @@ -56,9 +56,12 @@ ProgramEditor::ProgramEditor(const DXBC::DXBCContainer *container, bytebuf &outB ProgramEditor::~ProgramEditor() { rdcarray encoded = EncodeProgram(); - // only one of these fourcc's will be present, so we just try to replace both - DXBC::DXBCContainer::ReplaceChunk(m_OutBlob, MAKE_FOURCC('S', 'H', 'E', 'X'), encoded); - DXBC::DXBCContainer::ReplaceChunk(m_OutBlob, MAKE_FOURCC('S', 'H', 'D', 'R'), encoded); + // only one of these fourcc's will be present + size_t dummy = 0; + if(DXBC::DXBCContainer::FindChunk(m_OutBlob, DXBC::FOURCC_SHEX, dummy)) + DXBC::DXBCContainer::ReplaceChunk(m_OutBlob, MAKE_FOURCC('S', 'H', 'E', 'X'), encoded); + if(DXBC::DXBCContainer::FindChunk(m_OutBlob, DXBC::FOURCC_SHDR, dummy)) + DXBC::DXBCContainer::ReplaceChunk(m_OutBlob, MAKE_FOURCC('S', 'H', 'D', 'R'), encoded); } /*