From 282074f9a45f4c71422b4c1d97bf0ba208b25ee5 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 4 Aug 2025 10:35:12 +0100 Subject: [PATCH] Try to avoid crash after fatal device error --- renderdoc/driver/d3d12/d3d12_debug.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/renderdoc/driver/d3d12/d3d12_debug.cpp b/renderdoc/driver/d3d12/d3d12_debug.cpp index 2cfb45225..eb069baa1 100644 --- a/renderdoc/driver/d3d12/d3d12_debug.cpp +++ b/renderdoc/driver/d3d12/d3d12_debug.cpp @@ -1104,6 +1104,9 @@ ID3D12Resource *D3D12DebugManager::MakeCBuffer(UINT64 size) void D3D12DebugManager::FillBuffer(ID3D12Resource *buf, size_t offset, const void *data, size_t size) { + if(!buf) + return; + D3D12_RANGE range = {offset, offset + size}; byte *ptr = NULL; HRESULT hr = buf->Map(0, &range, (void **)&ptr); @@ -1192,6 +1195,11 @@ rdcpair D3D12DebugManager::PatchExecuteIndirect( { rdcarray argOffsets; + if(!m_EIPatchBufferData) + { + return {argBuf, argBufOffset}; + } + WrappedID3D12CommandSignature *wrappedComSig = (WrappedID3D12CommandSignature *)comSig; uint32_t offset = 0; for(const D3D12_INDIRECT_ARGUMENT_DESC &arg : wrappedComSig->sig.arguments) @@ -2114,15 +2122,16 @@ void D3D12DebugManager::PrepareExecuteIndirectPatching(GPUAddressRangeTracker &o hr = m_pDevice->CreateCommittedResource( &heapProps, D3D12_HEAP_FLAG_NONE, &desc, D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT, NULL, __uuidof(ID3D12Resource), (void **)&m_EIPatchScratchBuffer); - m_pDevice->RemoveReplayResource(GetResID(m_EIPatchScratchBuffer)); - - m_EIPatchScratchBuffer->SetName(L"m_EIPatchScratchBuffer"); if(FAILED(hr)) { RDCERR("Failed to create scratch buffer, HRESULT: %s", ToStr(hr).c_str()); return; } + + m_pDevice->RemoveReplayResource(GetResID(m_EIPatchScratchBuffer)); + + m_EIPatchScratchBuffer->SetName(L"m_EIPatchScratchBuffer"); } }