From 2d7c193e34941b76cb4de2932e347710b0389cba Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 18 Jan 2018 14:42:43 +0000 Subject: [PATCH] Skip adding usage for huge descriptor table ranges (Over 1000 slots) --- renderdoc/driver/d3d12/d3d12_commands.cpp | 36 ++++++++++++++++++----- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/renderdoc/driver/d3d12/d3d12_commands.cpp b/renderdoc/driver/d3d12/d3d12_commands.cpp index 7a1c2012f..3613caf60 100644 --- a/renderdoc/driver/d3d12/d3d12_commands.cpp +++ b/renderdoc/driver/d3d12/d3d12_commands.cpp @@ -1115,6 +1115,8 @@ void D3D12CommandData::AddUsage(D3D12DrawcallTreeNode &drawNode) if(!(d.flags & DrawMask)) return; + static bool hugeRangeWarned = false; + const D3D12RenderState::RootSignature *rootdata = NULL; if((d.flags & DrawFlags::Dispatch) && state.compute.rootsig != ResourceId()) @@ -1243,14 +1245,23 @@ void D3D12CommandData::AddUsage(D3D12DrawcallTreeNode &drawNode) { EventUsage usage(e, cb); - for(UINT i = 0; i < num; i++) + if(num > 1000) { - ResourceId id = - WrappedID3D12Resource::GetResIDFromAddr(desc->nonsamp.cbv.BufferLocation); + if(!hugeRangeWarned) + RDCWARN("Skipping large, most likely 'bindless', descriptor range"); + hugeRangeWarned = true; + } + else + { + for(UINT i = 0; i < num; i++) + { + ResourceId id = + WrappedID3D12Resource::GetResIDFromAddr(desc->nonsamp.cbv.BufferLocation); - AddUsage(drawNode, id, e, cb); + AddUsage(drawNode, id, e, cb); - desc++; + desc++; + } } } else if(range.RangeType == D3D12_DESCRIPTOR_RANGE_TYPE_SRV || @@ -1258,11 +1269,20 @@ void D3D12CommandData::AddUsage(D3D12DrawcallTreeNode &drawNode) { ResourceUsage usage = range.RangeType == D3D12_DESCRIPTOR_RANGE_TYPE_SRV ? ro : rw; - for(UINT i = 0; i < num; i++) + if(num > 1000) { - AddUsage(drawNode, GetResID(desc->nonsamp.resource), e, usage); + if(!hugeRangeWarned) + RDCWARN("Skipping large, most likely 'bindless', descriptor range"); + hugeRangeWarned = true; + } + else + { + for(UINT i = 0; i < num; i++) + { + AddUsage(drawNode, GetResID(desc->nonsamp.resource), e, usage); - desc++; + desc++; + } } } }