diff --git a/renderdoc/driver/d3d12/d3d12_device_wrap.cpp b/renderdoc/driver/d3d12/d3d12_device_wrap.cpp index 3b465fbf4..b9df5e220 100644 --- a/renderdoc/driver/d3d12/d3d12_device_wrap.cpp +++ b/renderdoc/driver/d3d12/d3d12_device_wrap.cpp @@ -864,7 +864,7 @@ bool WrappedID3D12Device::Serialise_CreateDescriptorHeap( } else { - ret = new WrappedID3D12DescriptorHeap(ret, this, Descriptor); + ret = new WrappedID3D12DescriptorHeap(ret, this, PatchedDesc, Descriptor.NumDescriptors); GetResourceManager()->AddLiveResource(pHeap, ret); @@ -891,8 +891,8 @@ HRESULT WrappedID3D12Device::CreateDescriptorHeap(const D3D12_DESCRIPTOR_HEAP_DE if(SUCCEEDED(ret)) { - WrappedID3D12DescriptorHeap *wrapped = - new WrappedID3D12DescriptorHeap(real, this, *pDescriptorHeapDesc); + WrappedID3D12DescriptorHeap *wrapped = new WrappedID3D12DescriptorHeap( + real, this, *pDescriptorHeapDesc, pDescriptorHeapDesc->NumDescriptors); if(IsCaptureMode(m_State)) { diff --git a/renderdoc/driver/d3d12/d3d12_initstate.cpp b/renderdoc/driver/d3d12/d3d12_initstate.cpp index 7a51dad1b..2807aef8f 100644 --- a/renderdoc/driver/d3d12/d3d12_initstate.cpp +++ b/renderdoc/driver/d3d12/d3d12_initstate.cpp @@ -595,7 +595,7 @@ bool D3D12ResourceManager::Serialise_InitialState(SerialiserType &ser, ResourceI return false; } - copyheap = new WrappedID3D12DescriptorHeap(copyheap, m_Device, desc); + copyheap = new WrappedID3D12DescriptorHeap(copyheap, m_Device, desc, heap->GetNumDescriptors()); D3D12_CPU_DESCRIPTOR_HANDLE handle = copyheap->GetCPUDescriptorHandleForHeapStart(); diff --git a/renderdoc/driver/d3d12/d3d12_resources.cpp b/renderdoc/driver/d3d12/d3d12_resources.cpp index 0e2f5cc73..98dc23f25 100644 --- a/renderdoc/driver/d3d12/d3d12_resources.cpp +++ b/renderdoc/driver/d3d12/d3d12_resources.cpp @@ -347,7 +347,8 @@ rdcarray WrappedID3D12Resource::AddRefBuffersBeforeCapture(D3D WrappedID3D12DescriptorHeap::WrappedID3D12DescriptorHeap(ID3D12DescriptorHeap *real, WrappedID3D12Device *device, - const D3D12_DESCRIPTOR_HEAP_DESC &desc) + const D3D12_DESCRIPTOR_HEAP_DESC &desc, + UINT UnpatchedNumDescriptors) : WrappedDeviceChild12(real, device) { realCPUBase = real->GetCPUDescriptorHandleForHeapStart(); @@ -356,12 +357,12 @@ WrappedID3D12DescriptorHeap::WrappedID3D12DescriptorHeap(ID3D12DescriptorHeap *r SetResident(true); increment = device->GetUnwrappedDescriptorIncrement(desc.Type); - numDescriptors = desc.NumDescriptors; + numDescriptors = UnpatchedNumDescriptors; - descriptors = new D3D12Descriptor[numDescriptors]; + descriptors = new D3D12Descriptor[desc.NumDescriptors]; - RDCEraseMem(descriptors, sizeof(D3D12Descriptor) * numDescriptors); - for(UINT i = 0; i < numDescriptors; i++) + RDCEraseMem(descriptors, sizeof(D3D12Descriptor) * desc.NumDescriptors); + for(UINT i = 0; i < desc.NumDescriptors; i++) descriptors[i].Setup(this, i); } diff --git a/renderdoc/driver/d3d12/d3d12_resources.h b/renderdoc/driver/d3d12/d3d12_resources.h index 1758bdecf..5c8885360 100644 --- a/renderdoc/driver/d3d12/d3d12_resources.h +++ b/renderdoc/driver/d3d12/d3d12_resources.h @@ -402,7 +402,7 @@ public: }; WrappedID3D12DescriptorHeap(ID3D12DescriptorHeap *real, WrappedID3D12Device *device, - const D3D12_DESCRIPTOR_HEAP_DESC &desc); + const D3D12_DESCRIPTOR_HEAP_DESC &desc, UINT UnpatchedNumDescriptors); virtual ~WrappedID3D12DescriptorHeap(); D3D12Descriptor *GetDescriptors() { return descriptors; }