summaryrefslogtreecommitdiffstats
path: root/Graphics/GraphicsEngineD3D12
diff options
context:
space:
mode:
authorazhirnov <zh1dron@gmail.com>2021-02-11 20:43:34 +0000
committerassiduous <assiduous@diligentgraphics.com>2021-03-19 00:31:36 +0000
commitb285639d9b96fe48a1fa83f4f6cc23ea5b987fd1 (patch)
treeb29dfd494bea57819d065f72a959e7beb41494ef /Graphics/GraphicsEngineD3D12
parentadded debug checks for DXIL resource remapping (diff)
downloadDiligentCore-b285639d9b96fe48a1fa83f4f6cc23ea5b987fd1.tar.gz
DiligentCore-b285639d9b96fe48a1fa83f4f6cc23ea5b987fd1.zip
fixed mem leak in root signature cache in dx12
Diffstat (limited to 'Graphics/GraphicsEngineD3D12')
-rw-r--r--Graphics/GraphicsEngineD3D12/src/RenderDeviceD3D12Impl.cpp1
-rw-r--r--Graphics/GraphicsEngineD3D12/src/RootSignature.cpp16
2 files changed, 8 insertions, 9 deletions
diff --git a/Graphics/GraphicsEngineD3D12/src/RenderDeviceD3D12Impl.cpp b/Graphics/GraphicsEngineD3D12/src/RenderDeviceD3D12Impl.cpp
index b8667f78..fb0f5c43 100644
--- a/Graphics/GraphicsEngineD3D12/src/RenderDeviceD3D12Impl.cpp
+++ b/Graphics/GraphicsEngineD3D12/src/RenderDeviceD3D12Impl.cpp
@@ -855,6 +855,7 @@ DescriptorHeapAllocation RenderDeviceD3D12Impl::AllocateGPUDescriptors(D3D12_DES
void RenderDeviceD3D12Impl::CreateRootSignature(const RefCntAutoPtr<PipelineResourceSignatureD3D12Impl>* ppSignatures, Uint32 SignatureCount, RootSignatureD3D12** ppRootSig)
{
RootSignatureD3D12* pRootSigD3D12(NEW_RC_OBJ(m_RootSignatureAllocator, "RootSignatureD3D12 instance", RootSignatureD3D12)(this, ppSignatures, SignatureCount));
+ pRootSigD3D12->AddRef();
*ppRootSig = pRootSigD3D12;
}
diff --git a/Graphics/GraphicsEngineD3D12/src/RootSignature.cpp b/Graphics/GraphicsEngineD3D12/src/RootSignature.cpp
index acc5042c..e10ee9b3 100644
--- a/Graphics/GraphicsEngineD3D12/src/RootSignature.cpp
+++ b/Graphics/GraphicsEngineD3D12/src/RootSignature.cpp
@@ -287,7 +287,7 @@ RootSignatureCacheD3D12::~RootSignatureCacheD3D12()
RefCntAutoPtr<RootSignatureD3D12> RootSignatureCacheD3D12::GetRootSig(const RefCntAutoPtr<PipelineResourceSignatureD3D12Impl>* ppSignatures, Uint32 SignatureCount)
{
- RootSignatureD3D12* pNewRootSig = nullptr;
+ RefCntAutoPtr<RootSignatureD3D12> pNewRootSig;
m_DeviceD3D12Impl.CreateRootSignature(ppSignatures, SignatureCount, &pNewRootSig);
if (pNewRootSig == nullptr)
@@ -298,19 +298,17 @@ RefCntAutoPtr<RootSignatureD3D12> RootSignatureCacheD3D12::GetRootSig(const RefC
{
std::lock_guard<std::mutex> Lock{m_RootSigCacheGuard};
- auto IterAndFlag = m_RootSigCache.insert(pNewRootSig);
+ auto IterAndFlag = m_RootSigCache.insert(pNewRootSig.RawPtr());
Inserted = IterAndFlag.second;
if (Inserted)
+ {
pNewRootSig->Finalize();
-
- Result = *IterAndFlag.first;
+ Result = std::move(pNewRootSig);
+ }
+ else
+ Result = *IterAndFlag.first;
}
-
- // Destroy outside of mutex scope.
- if (!Inserted)
- pNewRootSig->~RootSignatureD3D12();
-
return Result;
}