diff --git a/src/d3d10/d3d10_device.cpp b/src/d3d10/d3d10_device.cpp index 3b0eda31e..dfd0bdd08 100644 --- a/src/d3d10/d3d10_device.cpp +++ b/src/d3d10/d3d10_device.cpp @@ -9,7 +9,9 @@ namespace dxvk { D3D11Device* pDevice, D3D11ImmediateContext* pContext) : m_device(pDevice), m_context(pContext) { - + // Respecting the single-threaded flag may improve performance + UINT flags = pDevice->GetCreationFlags(); + m_threadSafe = !(flags & D3D10_CREATE_DEVICE_SINGLETHREADED); } diff --git a/src/d3d10/d3d10_device.h b/src/d3d10/d3d10_device.h index 5f49ca19e..df9d50fd7 100644 --- a/src/d3d10/d3d10_device.h +++ b/src/d3d10/d3d10_device.h @@ -474,7 +474,9 @@ namespace dxvk { UINT* pHeight); D3D10DeviceLock LockDevice() { - return D3D10DeviceLock(m_mutex); + return m_threadSafe + ? D3D10DeviceLock(m_mutex) + : D3D10DeviceLock(); } private: @@ -483,6 +485,8 @@ namespace dxvk { D3D11Device* m_device; D3D11ImmediateContext* m_context; + bool m_threadSafe = true; + }; } \ No newline at end of file