From 28463fd7162c640c7166f8820b1fe7fcea4f8ed5 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 21 Sep 2020 18:18:23 +0100 Subject: [PATCH] Ensure view instancing array is properly copied in D3D12 pipeline desc --- renderdoc/driver/d3d12/d3d12_device_wrap2.cpp | 28 +++++++++++++++++++ renderdoc/driver/d3d12/d3d12_resources.h | 1 + 2 files changed, 29 insertions(+) diff --git a/renderdoc/driver/d3d12/d3d12_device_wrap2.cpp b/renderdoc/driver/d3d12/d3d12_device_wrap2.cpp index dd288f008..b444760ad 100644 --- a/renderdoc/driver/d3d12/d3d12_device_wrap2.cpp +++ b/renderdoc/driver/d3d12/d3d12_device_wrap2.cpp @@ -141,6 +141,20 @@ bool WrappedID3D12Device::Serialise_CreatePipelineState(SerialiserType &ser, { wrapped->graphics->StreamOutput.pBufferStrides = NULL; } + + if(wrapped->graphics->ViewInstancing.ViewInstanceCount) + { + wrapped->graphics->ViewInstancing.pViewInstanceLocations = + new D3D12_VIEW_INSTANCE_LOCATION[wrapped->graphics->ViewInstancing.ViewInstanceCount]; + memcpy((void *)wrapped->graphics->ViewInstancing.pViewInstanceLocations, + Descriptor.ViewInstancing.pViewInstanceLocations, + sizeof(D3D12_VIEW_INSTANCE_LOCATION) * + wrapped->graphics->ViewInstancing.ViewInstanceCount); + } + else + { + wrapped->graphics->ViewInstancing.pViewInstanceLocations = NULL; + } } GetResourceManager()->AddLiveResource(pPipelineState, ret); @@ -265,6 +279,20 @@ HRESULT WrappedID3D12Device::CreatePipelineState(const D3D12_PIPELINE_STATE_STRE { wrapped->graphics->StreamOutput.pBufferStrides = NULL; } + + if(wrapped->graphics->ViewInstancing.ViewInstanceCount) + { + wrapped->graphics->ViewInstancing.pViewInstanceLocations = + new D3D12_VIEW_INSTANCE_LOCATION[wrapped->graphics->ViewInstancing.ViewInstanceCount]; + memcpy((void *)wrapped->graphics->ViewInstancing.pViewInstanceLocations, + expandedDesc.ViewInstancing.pViewInstanceLocations, + sizeof(D3D12_VIEW_INSTANCE_LOCATION) * + wrapped->graphics->ViewInstancing.ViewInstanceCount); + } + else + { + wrapped->graphics->ViewInstancing.pViewInstanceLocations = NULL; + } } } diff --git a/renderdoc/driver/d3d12/d3d12_resources.h b/renderdoc/driver/d3d12/d3d12_resources.h index 29eeef9e4..f42115102 100644 --- a/renderdoc/driver/d3d12/d3d12_resources.h +++ b/renderdoc/driver/d3d12/d3d12_resources.h @@ -801,6 +801,7 @@ public: SAFE_DELETE_ARRAY(graphics->InputLayout.pInputElementDescs); SAFE_DELETE_ARRAY(graphics->StreamOutput.pSODeclaration); SAFE_DELETE_ARRAY(graphics->StreamOutput.pBufferStrides); + SAFE_DELETE_ARRAY(graphics->ViewInstancing.pViewInstanceLocations); SAFE_DELETE(graphics); }