From 3cf71f158aaf8a6cc3dbc95b4b8c56550f675b6e Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 17 Oct 2016 17:11:10 +0200 Subject: [PATCH] Perform copies on wrapped descriptors so internal tracking is updated --- renderdoc/driver/d3d12/d3d12_device_wrap.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/renderdoc/driver/d3d12/d3d12_device_wrap.cpp b/renderdoc/driver/d3d12/d3d12_device_wrap.cpp index 6d225ae04..5c80c967d 100644 --- a/renderdoc/driver/d3d12/d3d12_device_wrap.cpp +++ b/renderdoc/driver/d3d12/d3d12_device_wrap.cpp @@ -1356,10 +1356,18 @@ bool WrappedID3D12Device::Serialise_DynamicDescriptorCopies( if(m_State <= EXECUTING) { - D3D12_CPU_DESCRIPTOR_HANDLE dsthandle = CPUHandleFromPortableHandle(GetResourceManager(), dst); - D3D12_CPU_DESCRIPTOR_HANDLE srchandle = CPUHandleFromPortableHandle(GetResourceManager(), src); + // do a wrapped copy so that internal tracking is also updated + WrappedID3D12DescriptorHeap *srcHeap = + GetResourceManager()->GetLiveAs(src.heap); + WrappedID3D12DescriptorHeap *dstHeap = + GetResourceManager()->GetLiveAs(dst.heap); - m_pDevice->CopyDescriptorsSimple(1, dsthandle, srchandle, type); + D3D12_CPU_DESCRIPTOR_HANDLE srchandle = srcHeap->GetCPUDescriptorHandleForHeapStart(); + srchandle.ptr += src.index * sizeof(D3D12Descriptor); + D3D12_CPU_DESCRIPTOR_HANDLE dsthandle = dstHeap->GetCPUDescriptorHandleForHeapStart(); + dsthandle.ptr += dst.index * sizeof(D3D12Descriptor); + + CopyDescriptorsSimple(1, dsthandle, srchandle, type); } }