From 055f27f17e4b80a8fce5d44c33fe2cfc4538310c Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 16 Sep 2016 11:12:56 +0200 Subject: [PATCH] Handle duplicate root signatures coming back from D3D. Refs #325 --- renderdoc/driver/d3d12/d3d12_device_wrap.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/renderdoc/driver/d3d12/d3d12_device_wrap.cpp b/renderdoc/driver/d3d12/d3d12_device_wrap.cpp index 6aa2d409a..4c7d989cb 100644 --- a/renderdoc/driver/d3d12/d3d12_device_wrap.cpp +++ b/renderdoc/driver/d3d12/d3d12_device_wrap.cpp @@ -531,6 +531,16 @@ HRESULT WrappedID3D12Device::CreateRootSignature(UINT nodeMask, const void *pBlo { SCOPED_LOCK(m_D3DLock); + // duplicate signatures can be returned, if Create is called with a previous equivalent blob + if(GetResourceManager()->HasWrapper(real)) + { + real->Release(); + ID3D12RootSignature *existing = (ID3D12RootSignature *)GetResourceManager()->GetWrapper(real); + existing->AddRef(); + *ppvRootSignature = existing; + return ret; + } + WrappedID3D12RootSignature *wrapped = new WrappedID3D12RootSignature(real, this); if(m_State >= WRITING)