diff --git a/src/d3d11/d3d11_swapchain.cpp b/src/d3d11/d3d11_swapchain.cpp index a0320d1e4..7d099d37f 100644 --- a/src/d3d11/d3d11_swapchain.cpp +++ b/src/d3d11/d3d11_swapchain.cpp @@ -36,6 +36,10 @@ namespace dxvk { InitShaders(); SetGammaControl(0, nullptr); + + // The present fence seems to introduce stutter on ANV + if (m_device->adapter()->matchesDriver(DxvkGpuVendor::Intel, VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA_KHR, 0, 0)) + m_usePresentFence = false; } @@ -240,7 +244,8 @@ namespace dxvk { } // Wait for image to become actually available - m_presenter->waitForFence(sync.fence); + if (m_usePresentFence) + m_presenter->waitForFence(sync.fence); // Use an appropriate texture filter depending on whether // the back buffer size matches the swap image size diff --git a/src/d3d11/d3d11_swapchain.h b/src/d3d11/d3d11_swapchain.h index a5eeb1765..66d7d1b24 100644 --- a/src/d3d11/d3d11_swapchain.h +++ b/src/d3d11/d3d11_swapchain.h @@ -120,6 +120,8 @@ namespace dxvk { bool m_dirty = true; bool m_vsync = true; + bool m_usePresentFence = true; + void PresentImage(UINT SyncInterval); void FlushImmediateContext();