From 5afd960c9396ee4ea118de977cfe00d9112f2b48 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 2 Oct 2023 15:48:58 +0100 Subject: [PATCH] Don't crash on new barriers when mid-command buffer state fetching --- renderdoc/driver/d3d12/d3d12_manager.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/d3d12/d3d12_manager.cpp b/renderdoc/driver/d3d12/d3d12_manager.cpp index 13598546a..e24839cc4 100644 --- a/renderdoc/driver/d3d12/d3d12_manager.cpp +++ b/renderdoc/driver/d3d12/d3d12_manager.cpp @@ -689,7 +689,12 @@ void D3D12ResourceManager::ApplyBarriers(BarrierSet &barriers, { const D3D12_RESOURCE_TRANSITION_BARRIER &trans = barriers.barriers[b].Transition; ResourceId id = GetResID(trans.pResource); - SubresourceStateVector &st = states[id]; + + auto it = states.find(id); + if(it == states.end()) + return; + + SubresourceStateVector &st = it->second; // skip non-transitions, or begin-halves of transitions if(barriers.barriers[b].Type != D3D12_RESOURCE_BARRIER_TYPE_TRANSITION || @@ -718,7 +723,12 @@ void D3D12ResourceManager::ApplyBarriers(BarrierSet &barriers, { const D3D12_TEXTURE_BARRIER &trans = barriers.newBarriers[b]; ResourceId id = GetResID(trans.pResource); - SubresourceStateVector &st = states[id]; + + auto it = states.find(id); + if(it == states.end()) + return; + + SubresourceStateVector &st = it->second; // skip begin-halves of split transitions if(trans.SyncBefore == D3D12_BARRIER_SYNC_SPLIT)