diff --git a/src/d3d11/d3d11_device.cpp b/src/d3d11/d3d11_device.cpp index 5bfffbde3..34dc50aa0 100644 --- a/src/d3d11/d3d11_device.cpp +++ b/src/d3d11/d3d11_device.cpp @@ -1985,8 +1985,12 @@ namespace dxvk { } - Rc STDMETHODCALLTYPE D3D11DXGIDevice::GetFrameSyncEvent() { + Rc STDMETHODCALLTYPE D3D11DXGIDevice::GetFrameSyncEvent(UINT BufferCount) { uint32_t frameLatency = m_frameLatency; + + if (BufferCount != 0 + && BufferCount <= frameLatency) + frameLatency = BufferCount; if (m_frameLatencyCap != 0 && m_frameLatencyCap <= frameLatency) diff --git a/src/d3d11/d3d11_device.h b/src/d3d11/d3d11_device.h index a8e2df400..62643f651 100644 --- a/src/d3d11/d3d11_device.h +++ b/src/d3d11/d3d11_device.h @@ -500,7 +500,8 @@ namespace dxvk { void STDMETHODCALLTYPE Trim() final; - Rc STDMETHODCALLTYPE GetFrameSyncEvent(); + Rc STDMETHODCALLTYPE GetFrameSyncEvent( + UINT BufferCount); Rc STDMETHODCALLTYPE GetDXVKDevice(); diff --git a/src/d3d11/d3d11_swapchain.cpp b/src/d3d11/d3d11_swapchain.cpp index b74f30ce6..5b9177340 100644 --- a/src/d3d11/d3d11_swapchain.cpp +++ b/src/d3d11/d3d11_swapchain.cpp @@ -200,7 +200,7 @@ namespace dxvk { void D3D11SwapChain::PresentImage(UINT SyncInterval) { // Wait for the sync event so that we // respect the maximum frame latency - Rc syncEvent = m_dxgiDevice->GetFrameSyncEvent(); + Rc syncEvent = m_dxgiDevice->GetFrameSyncEvent(m_desc.BufferCount); syncEvent->wait(); if (m_hud != nullptr)