From f58c1c2d1d931c492c7f2793271d7286bd06fd12 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Wed, 2 Oct 2019 00:01:26 +0200 Subject: [PATCH] [dxgi] Fix SetFullscreenState behaviour with invalid usage Fixes various wine test failures. --- src/dxgi/dxgi_swapchain.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/dxgi/dxgi_swapchain.cpp b/src/dxgi/dxgi_swapchain.cpp index 2e565dedf..16422a910 100644 --- a/src/dxgi/dxgi_swapchain.cpp +++ b/src/dxgi/dxgi_swapchain.cpp @@ -382,6 +382,9 @@ namespace dxvk { IDXGIOutput* pTarget) { std::lock_guard lock(m_lockWindow); + if (!Fullscreen && pTarget) + return DXGI_ERROR_INVALID_CALL; + if (m_descFs.Windowed && Fullscreen) return this->EnterFullscreenMode(pTarget); else if (!m_descFs.Windowed && !Fullscreen) @@ -610,9 +613,6 @@ namespace dxvk { HRESULT DxgiSwapChain::LeaveFullscreenMode() { - if (!IsWindow(m_window)) - return S_OK; - if (FAILED(RestoreDisplayMode(m_monitor))) Logger::warn("DXGI: LeaveFullscreenMode: Failed to restore display mode"); @@ -632,6 +632,9 @@ namespace dxvk { m_monitor = nullptr; m_target = nullptr; + if (!IsWindow(m_window)) + return S_OK; + // Only restore the window style if the application hasn't // changed them. This is in line with what native DXGI does. LONG curStyle = ::GetWindowLongW(m_window, GWL_STYLE) & ~WS_VISIBLE;