diff --git a/src/d3d11/d3d11_swapchain.cpp b/src/d3d11/d3d11_swapchain.cpp index 8e007e7d..21772d53 100644 --- a/src/d3d11/d3d11_swapchain.cpp +++ b/src/d3d11/d3d11_swapchain.cpp @@ -115,7 +115,18 @@ namespace dxvk { HANDLE STDMETHODCALLTYPE D3D11SwapChain::GetFrameLatencyEvent() { - return m_frameLatencyEvent; + HANDLE result = nullptr; + + if (!m_processHandle) + m_processHandle = GetCurrentProcess(); + + if (!DuplicateHandle(m_processHandle, m_frameLatencyEvent, + m_processHandle, &result, 0, FALSE, DUPLICATE_SAME_ACCESS)) { + Logger::err("DxgiSwapChain::GetFrameLatencyWaitableObject: DuplicateHandle failed"); + return nullptr; + } + + return result; } diff --git a/src/d3d11/d3d11_swapchain.h b/src/d3d11/d3d11_swapchain.h index f4debea1..8a006a15 100644 --- a/src/d3d11/d3d11_swapchain.h +++ b/src/d3d11/d3d11_swapchain.h @@ -109,6 +109,8 @@ namespace dxvk { HANDLE m_frameLatencyEvent = nullptr; Rc m_frameLatencySignal; + HANDLE m_processHandle = nullptr; + bool m_dirty = true; bool m_vsync = true;