diff --git a/src/d3d11/d3d11_context.cpp b/src/d3d11/d3d11_context.cpp index 80671283b..36d79a899 100644 --- a/src/d3d11/d3d11_context.cpp +++ b/src/d3d11/d3d11_context.cpp @@ -15,7 +15,6 @@ namespace dxvk { : D3D11DeviceChild(pParent), m_contextExt(GetTypedContext()), m_annotation(GetTypedContext(), Device), - m_multithread(this, false), m_device (Device), m_flags (ContextFlags), m_staging (Device, StagingBufferSize), @@ -62,11 +61,6 @@ namespace dxvk { 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; diff --git a/src/d3d11/d3d11_context.h b/src/d3d11/d3d11_context.h index a9acbbdce..571871e0c 100644 --- a/src/d3d11/d3d11_context.h +++ b/src/d3d11/d3d11_context.h @@ -756,15 +756,10 @@ namespace dxvk { VkImageLayout OldLayout, VkImageLayout NewLayout); - D3D10DeviceLock LockContext() { - return m_multithread.AcquireLock(); - } - protected: D3D11DeviceContextExt m_contextExt; D3D11UserDefinedAnnotation m_annotation; - D3D10Multithread m_multithread; Rc m_device; @@ -1124,6 +1119,10 @@ namespace dxvk { return static_cast(this); } + D3D10DeviceLock LockContext() { + return GetTypedContext()->LockContext(); + } + }; } diff --git a/src/d3d11/d3d11_context_def.h b/src/d3d11/d3d11_context_def.h index 4a5a41246..869ae09ea 100644 --- a/src/d3d11/d3d11_context_def.h +++ b/src/d3d11/d3d11_context_def.h @@ -79,6 +79,10 @@ namespace dxvk { ID3DDeviceContextState* pState, ID3DDeviceContextState** ppPreviousState); + D3D10DeviceLock LockContext() { + return D3D10DeviceLock(); + } + private: // Command list that we're recording diff --git a/src/d3d11/d3d11_context_imm.cpp b/src/d3d11/d3d11_context_imm.cpp index b9978d91a..e754ca608 100644 --- a/src/d3d11/d3d11_context_imm.cpp +++ b/src/d3d11/d3d11_context_imm.cpp @@ -18,6 +18,7 @@ namespace dxvk { : D3D11CommonContext(pParent, Device, 0, DxvkCsChunkFlag::SingleUse), m_csThread(Device, Device->createContext(DxvkContextType::Primary)), m_maxImplicitDiscardSize(pParent->GetOptions()->maxImplicitDiscardSize), + m_multithread(this, false), m_videoContext(this, Device) { EmitCs([ cDevice = m_device, @@ -54,6 +55,11 @@ namespace dxvk { HRESULT STDMETHODCALLTYPE D3D11ImmediateContext::QueryInterface(REFIID riid, void** ppvObject) { + if (riid == __uuidof(ID3D10Multithread)) { + *ppvObject = ref(&m_multithread); + return S_OK; + } + if (riid == __uuidof(ID3D11VideoContext)) { *ppvObject = ref(&m_videoContext); return S_OK; diff --git a/src/d3d11/d3d11_context_imm.h b/src/d3d11/d3d11_context_imm.h index dce444843..e64c2d620 100644 --- a/src/d3d11/d3d11_context_imm.h +++ b/src/d3d11/d3d11_context_imm.h @@ -79,7 +79,11 @@ namespace dxvk { void SynchronizeCsThread( uint64_t SequenceNumber); - + + D3D10DeviceLock LockContext() { + return m_multithread.AcquireLock(); + } + private: DxvkCsThread m_csThread; @@ -95,6 +99,7 @@ namespace dxvk { dxvk::high_resolution_clock::time_point m_lastFlush = dxvk::high_resolution_clock::now(); + D3D10Multithread m_multithread; D3D11VideoContext m_videoContext; Com m_stateObject;