From de2d6e7be9aed1b20c5c9f624f1ae790fed387b2 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 17 Nov 2022 18:21:28 +0000 Subject: [PATCH] Clamp/sanitise number of mips or array slices in D3D12 pipeline view --- renderdoc/driver/d3d12/d3d12_replay.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/renderdoc/driver/d3d12/d3d12_replay.cpp b/renderdoc/driver/d3d12/d3d12_replay.cpp index 3158e8df0..00acf5114 100644 --- a/renderdoc/driver/d3d12/d3d12_replay.cpp +++ b/renderdoc/driver/d3d12/d3d12_replay.cpp @@ -940,6 +940,13 @@ void D3D12Replay::FillResourceView(D3D12Pipe::View &view, const D3D12Descriptor if(view.elementByteSize == 0) view.elementByteSize = fmt == DXGI_FORMAT_UNKNOWN ? 1 : GetByteSize(1, 1, 1, fmt, 0); + if(res.MipLevels == 0 && res.Dimension != D3D12_RESOURCE_DIMENSION_BUFFER) + res.MipLevels = (uint16_t)CalcNumMips( + (uint32_t)res.Width, res.Height, + res.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D ? res.DepthOrArraySize : 1); + view.numMips = RDCMIN(view.numMips, uint8_t(res.MipLevels & 0xff)); + view.numSlices = RDCMIN(view.numSlices, res.DepthOrArraySize); + view.viewFormat = MakeResourceFormat(fmt); }