From 10345d006361c0b394af83d58e9911e7a6509555 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Wed, 3 Aug 2022 17:09:30 +0200 Subject: [PATCH] [d3d11] Move QueryInterface to D3D11CommonContext --- src/d3d11/d3d11_context.cpp | 40 ----------------------------- src/d3d11/d3d11_context.h | 4 --- src/d3d11/d3d11_context_common.cpp | 41 ++++++++++++++++++++++++++++++ src/d3d11/d3d11_context_common.h | 4 +++ src/d3d11/d3d11_context_imm.cpp | 2 +- 5 files changed, 46 insertions(+), 45 deletions(-) diff --git a/src/d3d11/d3d11_context.cpp b/src/d3d11/d3d11_context.cpp index 9920150cc..6ca5ca272 100644 --- a/src/d3d11/d3d11_context.cpp +++ b/src/d3d11/d3d11_context.cpp @@ -32,46 +32,6 @@ namespace dxvk { } - HRESULT STDMETHODCALLTYPE D3D11DeviceContext::QueryInterface(REFIID riid, void** ppvObject) { - if (ppvObject == nullptr) - return E_POINTER; - - *ppvObject = nullptr; - - if (riid == __uuidof(IUnknown) - || riid == __uuidof(ID3D11DeviceChild) - || riid == __uuidof(ID3D11DeviceContext) - || riid == __uuidof(ID3D11DeviceContext1) - || riid == __uuidof(ID3D11DeviceContext2) - || riid == __uuidof(ID3D11DeviceContext3) - || riid == __uuidof(ID3D11DeviceContext4)) { - *ppvObject = ref(this); - return S_OK; - } - - if (riid == __uuidof(ID3D11VkExtContext) - || riid == __uuidof(ID3D11VkExtContext1)) { - *ppvObject = ref(&m_contextExt); - return S_OK; - } - - if (riid == __uuidof(ID3DUserDefinedAnnotation) - || riid == __uuidof(IDXVKUserDefinedAnnotation)) { - *ppvObject = ref(&m_annotation); - return S_OK; - } - - if (riid == __uuidof(ID3D10Multithread)) { - *ppvObject = ref(&m_multithread); - return S_OK; - } - - Logger::warn("D3D11DeviceContext::QueryInterface: Unknown interface query"); - Logger::warn(str::format(riid)); - return E_NOINTERFACE; - } - - void STDMETHODCALLTYPE D3D11DeviceContext::DiscardResource(ID3D11Resource* pResource) { D3D10DeviceLock lock = LockContext(); diff --git a/src/d3d11/d3d11_context.h b/src/d3d11/d3d11_context.h index 361e0fd6d..9fb3724a7 100644 --- a/src/d3d11/d3d11_context.h +++ b/src/d3d11/d3d11_context.h @@ -32,10 +32,6 @@ namespace dxvk { DxvkCsChunkFlags CsFlags); ~D3D11DeviceContext(); - HRESULT STDMETHODCALLTYPE QueryInterface( - REFIID riid, - void** ppvObject); - void STDMETHODCALLTYPE DiscardResource(ID3D11Resource *pResource); void STDMETHODCALLTYPE DiscardView(ID3D11View* pResourceView); diff --git a/src/d3d11/d3d11_context_common.cpp b/src/d3d11/d3d11_context_common.cpp index 4e4adfdde..ffe4ac16f 100644 --- a/src/d3d11/d3d11_context_common.cpp +++ b/src/d3d11/d3d11_context_common.cpp @@ -20,6 +20,47 @@ namespace dxvk { } + template + HRESULT STDMETHODCALLTYPE D3D11CommonContext::QueryInterface(REFIID riid, void** ppvObject) { + if (ppvObject == nullptr) + return E_POINTER; + + *ppvObject = nullptr; + + if (riid == __uuidof(IUnknown) + || riid == __uuidof(ID3D11DeviceChild) + || riid == __uuidof(ID3D11DeviceContext) + || riid == __uuidof(ID3D11DeviceContext1) + || riid == __uuidof(ID3D11DeviceContext2) + || riid == __uuidof(ID3D11DeviceContext3) + || riid == __uuidof(ID3D11DeviceContext4)) { + *ppvObject = ref(this); + return S_OK; + } + + if (riid == __uuidof(ID3D11VkExtContext) + || riid == __uuidof(ID3D11VkExtContext1)) { + *ppvObject = ref(&m_contextExt); + return S_OK; + } + + if (riid == __uuidof(ID3DUserDefinedAnnotation) + || riid == __uuidof(IDXVKUserDefinedAnnotation)) { + *ppvObject = ref(&m_annotation); + return S_OK; + } + + if (riid == __uuidof(ID3D10Multithread)) { + *ppvObject = ref(&m_multithread); + return S_OK; + } + + Logger::warn("D3D11DeviceContext::QueryInterface: Unknown interface query"); + Logger::warn(str::format(riid)); + return E_NOINTERFACE; + } + + template void STDMETHODCALLTYPE D3D11CommonContext::UpdateSubresource( ID3D11Resource* pDstResource, diff --git a/src/d3d11/d3d11_context_common.h b/src/d3d11/d3d11_context_common.h index 9dedc793a..cc04fe5aa 100644 --- a/src/d3d11/d3d11_context_common.h +++ b/src/d3d11/d3d11_context_common.h @@ -64,6 +64,10 @@ namespace dxvk { ~D3D11CommonContext(); + HRESULT STDMETHODCALLTYPE QueryInterface( + REFIID riid, + void** ppvObject); + void STDMETHODCALLTYPE UpdateSubresource( ID3D11Resource* pDstResource, UINT DstSubresource, diff --git a/src/d3d11/d3d11_context_imm.cpp b/src/d3d11/d3d11_context_imm.cpp index 2ce43e256..c26b4ad3e 100644 --- a/src/d3d11/d3d11_context_imm.cpp +++ b/src/d3d11/d3d11_context_imm.cpp @@ -57,7 +57,7 @@ namespace dxvk { return S_OK; } - return D3D11DeviceContext::QueryInterface(riid, ppvObject); + return D3D11CommonContext::QueryInterface(riid, ppvObject); }