mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-01-19 05:52:11 +01:00
[d3d11] Determine exclusive fullscreen mode based on swap chain flags
This commit is contained in:
parent
575a267f07
commit
945a64252d
@ -127,7 +127,8 @@ namespace dxvk {
|
|||||||
m_dirty |= m_desc.Format != pDesc->Format
|
m_dirty |= m_desc.Format != pDesc->Format
|
||||||
|| m_desc.Width != pDesc->Width
|
|| m_desc.Width != pDesc->Width
|
||||||
|| m_desc.Height != pDesc->Height
|
|| m_desc.Height != pDesc->Height
|
||||||
|| m_desc.BufferCount != pDesc->BufferCount;
|
|| m_desc.BufferCount != pDesc->BufferCount
|
||||||
|
|| m_desc.Flags != pDesc->Flags;
|
||||||
|
|
||||||
m_desc = *pDesc;
|
m_desc = *pDesc;
|
||||||
CreateBackBuffer();
|
CreateBackBuffer();
|
||||||
@ -389,7 +390,7 @@ namespace dxvk {
|
|||||||
presenterDesc.imageCount = PickImageCount(m_desc.BufferCount + 1);
|
presenterDesc.imageCount = PickImageCount(m_desc.BufferCount + 1);
|
||||||
presenterDesc.numFormats = PickFormats(m_desc.Format, presenterDesc.formats);
|
presenterDesc.numFormats = PickFormats(m_desc.Format, presenterDesc.formats);
|
||||||
presenterDesc.numPresentModes = PickPresentModes(Vsync, presenterDesc.presentModes);
|
presenterDesc.numPresentModes = PickPresentModes(Vsync, presenterDesc.presentModes);
|
||||||
presenterDesc.fullScreenExclusive = VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT;
|
presenterDesc.fullScreenExclusive = PickFullscreenMode();
|
||||||
|
|
||||||
if (m_presenter->recreateSwapChain(presenterDesc) != VK_SUCCESS)
|
if (m_presenter->recreateSwapChain(presenterDesc) != VK_SUCCESS)
|
||||||
throw DxvkError("D3D11SwapChain: Failed to recreate swap chain");
|
throw DxvkError("D3D11SwapChain: Failed to recreate swap chain");
|
||||||
@ -420,7 +421,7 @@ namespace dxvk {
|
|||||||
presenterDesc.imageCount = PickImageCount(m_desc.BufferCount + 1);
|
presenterDesc.imageCount = PickImageCount(m_desc.BufferCount + 1);
|
||||||
presenterDesc.numFormats = PickFormats(m_desc.Format, presenterDesc.formats);
|
presenterDesc.numFormats = PickFormats(m_desc.Format, presenterDesc.formats);
|
||||||
presenterDesc.numPresentModes = PickPresentModes(false, presenterDesc.presentModes);
|
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_presenter = new vk::Presenter(m_window,
|
||||||
m_device->adapter()->vki(),
|
m_device->adapter()->vki(),
|
||||||
@ -836,4 +837,11 @@ namespace dxvk {
|
|||||||
return option > 0 ? uint32_t(option) : uint32_t(Preferred);
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -185,6 +185,8 @@ namespace dxvk {
|
|||||||
uint32_t PickImageCount(
|
uint32_t PickImageCount(
|
||||||
UINT Preferred);
|
UINT Preferred);
|
||||||
|
|
||||||
|
VkFullScreenExclusiveEXT PickFullscreenMode();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user