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(); };