From 86585b685cfefa56e2aa757a698b0202bd3bd5dc Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 22 Jan 2024 14:08:49 +0000 Subject: [PATCH] Fix some leaks creating root signature blobs --- renderdoc/driver/d3d12/d3d12_postvs.cpp | 6 ++++-- renderdoc/driver/d3d12/d3d12_shader_feedback.cpp | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/d3d12/d3d12_postvs.cpp b/renderdoc/driver/d3d12/d3d12_postvs.cpp index ae07f24c8..41dcbbaa4 100644 --- a/renderdoc/driver/d3d12/d3d12_postvs.cpp +++ b/renderdoc/driver/d3d12/d3d12_postvs.cpp @@ -2206,11 +2206,13 @@ void D3D12Replay::InitPostMSBuffers(uint32_t eventId) ID3D12RootSignature *annotatedSig = NULL; { - ID3DBlob *root = m_pDevice->GetShaderCache()->MakeRootSig(modsig); + ID3DBlob *blob = m_pDevice->GetShaderCache()->MakeRootSig(modsig); HRESULT hr = - m_pDevice->CreateRootSignature(0, root->GetBufferPointer(), root->GetBufferSize(), + m_pDevice->CreateRootSignature(0, blob->GetBufferPointer(), blob->GetBufferSize(), __uuidof(ID3D12RootSignature), (void **)&annotatedSig); + SAFE_RELEASE(blob); + if(annotatedSig == NULL || FAILED(hr)) { ret.ampout.status = ret.meshout.status = StringFormat::Fmt( diff --git a/renderdoc/driver/d3d12/d3d12_shader_feedback.cpp b/renderdoc/driver/d3d12/d3d12_shader_feedback.cpp index 09b2a6f13..d442fb19f 100644 --- a/renderdoc/driver/d3d12/d3d12_shader_feedback.cpp +++ b/renderdoc/driver/d3d12/d3d12_shader_feedback.cpp @@ -1336,9 +1336,12 @@ bool D3D12Replay::FetchShaderFeedback(uint32_t eventId) if(annotatedSig == NULL || FAILED(hr)) { + SAFE_RELEASE(root); RDCERR("Couldn't create feedback modified root signature: %s", ToStr(hr).c_str()); return false; } + + SAFE_RELEASE(root); } ID3D12PipelineState *annotatedPipe = NULL;