From 945a64252db464be479e60df82bd2958ea4ffaa8 Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Thu, 5 Dec 2019 13:08:35 +0100 Subject: [PATCH] [d3d11] Determine exclusive fullscreen mode based on swap chain flags --- src/d3d11/d3d11_swapchain.cpp | 14 +++++++++++--- src/d3d11/d3d11_swapchain.h | 2 ++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/d3d11/d3d11_swapchain.cpp b/src/d3d11/d3d11_swapchain.cpp index 7065136e6..e4794163e 100644 --- a/src/d3d11/d3d11_swapchain.cpp +++ b/src/d3d11/d3d11_swapchain.cpp @@ -127,7 +127,8 @@ namespace dxvk { m_dirty |= m_desc.Format != pDesc->Format || m_desc.Width != pDesc->Width || m_desc.Height != pDesc->Height - || m_desc.BufferCount != pDesc->BufferCount; + || m_desc.BufferCount != pDesc->BufferCount + || m_desc.Flags != pDesc->Flags; m_desc = *pDesc; CreateBackBuffer(); @@ -389,7 +390,7 @@ namespace dxvk { presenterDesc.imageCount = PickImageCount(m_desc.BufferCount + 1); presenterDesc.numFormats = PickFormats(m_desc.Format, presenterDesc.formats); presenterDesc.numPresentModes = PickPresentModes(Vsync, presenterDesc.presentModes); - presenterDesc.fullScreenExclusive = VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT; + presenterDesc.fullScreenExclusive = PickFullscreenMode(); if (m_presenter->recreateSwapChain(presenterDesc) != VK_SUCCESS) throw DxvkError("D3D11SwapChain: Failed to recreate swap chain"); @@ -420,7 +421,7 @@ namespace dxvk { presenterDesc.imageCount = PickImageCount(m_desc.BufferCount + 1); presenterDesc.numFormats = PickFormats(m_desc.Format, presenterDesc.formats); presenterDesc.numPresentModes = PickPresentModes(false, presenterDesc.presentModes); - presenterDesc.fullScreenExclusive = VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT; + presenterDesc.fullScreenExclusive = PickFullscreenMode(); m_presenter = new vk::Presenter(m_window, m_device->adapter()->vki(), @@ -836,4 +837,11 @@ namespace dxvk { return option > 0 ? uint32_t(option) : uint32_t(Preferred); } + + VkFullScreenExclusiveEXT D3D11SwapChain::PickFullscreenMode() { + return m_desc.Flags & DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH + ? VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT + : VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT; + } + } \ No newline at end of file diff --git a/src/d3d11/d3d11_swapchain.h b/src/d3d11/d3d11_swapchain.h index 55b1c18f4..f85044285 100644 --- a/src/d3d11/d3d11_swapchain.h +++ b/src/d3d11/d3d11_swapchain.h @@ -185,6 +185,8 @@ namespace dxvk { uint32_t PickImageCount( UINT Preferred); + VkFullScreenExclusiveEXT PickFullscreenMode(); + }; } \ No newline at end of file