From 55bae45915ffe6066fcaba76941a473684d471a4 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Fri, 25 Oct 2019 21:37:18 +0200 Subject: [PATCH] [d3d11] Fix ref counting for D3D11CommandList --- src/d3d11/d3d11_cmdlist.cpp | 16 ++++++++++++++++ src/d3d11/d3d11_cmdlist.h | 8 +++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/d3d11/d3d11_cmdlist.cpp b/src/d3d11/d3d11_cmdlist.cpp index cd8939a5b..25205e73c 100644 --- a/src/d3d11/d3d11_cmdlist.cpp +++ b/src/d3d11/d3d11_cmdlist.cpp @@ -15,6 +15,22 @@ namespace dxvk { } + ULONG STDMETHODCALLTYPE D3D11CommandList::AddRef() { + ULONG refCount = m_refCount++; + if (!refCount) + m_device->AddRef(); + return refCount + 1; + } + + + ULONG STDMETHODCALLTYPE D3D11CommandList::Release() { + ULONG refCount = --m_refCount; + if (!refCount) + m_device->Release(); + return refCount; + } + + HRESULT STDMETHODCALLTYPE D3D11CommandList::QueryInterface(REFIID riid, void** ppvObject) { if (ppvObject == nullptr) return E_POINTER; diff --git a/src/d3d11/d3d11_cmdlist.h b/src/d3d11/d3d11_cmdlist.h index d8437fee3..58d16fe6c 100644 --- a/src/d3d11/d3d11_cmdlist.h +++ b/src/d3d11/d3d11_cmdlist.h @@ -4,7 +4,7 @@ namespace dxvk { - class D3D11CommandList : public D3D11DeviceChild { + class D3D11CommandList : public D3D11DeviceChild { public: @@ -14,6 +14,10 @@ namespace dxvk { ~D3D11CommandList(); + ULONG STDMETHODCALLTYPE AddRef(); + + ULONG STDMETHODCALLTYPE Release(); + HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, void** ppvObject) final; @@ -42,6 +46,8 @@ namespace dxvk { std::atomic m_submitted = { false }; std::atomic m_warned = { false }; + std::atomic m_refCount = { 0u }; + void MarkSubmitted(); };