diff options
| author | azhirnov <zh1dron@gmail.com> | 2021-02-11 20:43:34 +0000 |
|---|---|---|
| committer | assiduous <assiduous@diligentgraphics.com> | 2021-03-19 00:31:36 +0000 |
| commit | b285639d9b96fe48a1fa83f4f6cc23ea5b987fd1 (patch) | |
| tree | b29dfd494bea57819d065f72a959e7beb41494ef /Graphics/GraphicsEngineD3D12 | |
| parent | added debug checks for DXIL resource remapping (diff) | |
| download | DiligentCore-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.cpp | 1 | ||||
| -rw-r--r-- | Graphics/GraphicsEngineD3D12/src/RootSignature.cpp | 16 |
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; } |
