diff --git a/renderdoc/driver/d3d12/d3d12_manager.cpp b/renderdoc/driver/d3d12/d3d12_manager.cpp index 138062005..779ca76c2 100644 --- a/renderdoc/driver/d3d12/d3d12_manager.cpp +++ b/renderdoc/driver/d3d12/d3d12_manager.cpp @@ -2357,6 +2357,15 @@ void GPUAddressRangeTracker::GetResIDFromAddr(D3D12_GPU_VIRTUAL_ADDRESS addr, Re return; range = *it; + + // find the largest resource containing this address - not perfect but helps with trivially bad + // aliases where a tiny resource and a large resource are co-situated and the larger resource + // needs to be used for validity + while((it + 1)->start <= addr && (it + 1)->realEnd > range.realEnd) + { + it++; + range = *it; + } } if(addr < range.start || addr >= range.realEnd)