summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/renderer_vulkan')
-rw-r--r--src/video_core/renderer_vulkan/vk_swapchain.cpp27
1 files changed, 14 insertions, 13 deletions
diff --git a/src/video_core/renderer_vulkan/vk_swapchain.cpp b/src/video_core/renderer_vulkan/vk_swapchain.cpp
index 23bbea7f1..08d82769c 100644
--- a/src/video_core/renderer_vulkan/vk_swapchain.cpp
+++ b/src/video_core/renderer_vulkan/vk_swapchain.cpp
@@ -34,21 +34,22 @@ VkSurfaceFormatKHR ChooseSwapSurfaceFormat(vk::Span<VkSurfaceFormatKHR> formats)
34} 34}
35 35
36VkPresentModeKHR ChooseSwapPresentMode(vk::Span<VkPresentModeKHR> modes) { 36VkPresentModeKHR ChooseSwapPresentMode(vk::Span<VkPresentModeKHR> modes) {
37 // Mailbox (triple buffering) doesn't lock the application like fifo (vsync), 37 // Mailbox (triple buffering) doesn't lock the application like FIFO (vsync)
38 // prefer it if vsync option is not selected 38 // FIFO present mode locks the framerate to the monitor's refresh rate
39 const auto found_mailbox = std::find(modes.begin(), modes.end(), VK_PRESENT_MODE_MAILBOX_KHR); 39 const bool has_mailbox =
40 if (Settings::values.fullscreen_mode.GetValue() == Settings::FullscreenMode::Borderless && 40 std::find(modes.begin(), modes.end(), VK_PRESENT_MODE_MAILBOX_KHR) != modes.end();
41 found_mailbox != modes.end() && !Settings::values.use_vsync.GetValue()) { 41 const bool has_imm =
42 std::find(modes.begin(), modes.end(), VK_PRESENT_MODE_IMMEDIATE_KHR) != modes.end();
43 const Settings::VSyncMode mode = Settings::values.vsync_mode.GetValue();
44
45 if (mode == Settings::VSyncMode::Immediate && has_imm) {
46 LOG_INFO(Render_Vulkan, "Using swap present mode Immediate");
47 return VK_PRESENT_MODE_IMMEDIATE_KHR;
48 } else if (mode == Settings::VSyncMode::Mailbox && has_mailbox) {
49 LOG_INFO(Render_Vulkan, "Using swap present mode Mailbox");
42 return VK_PRESENT_MODE_MAILBOX_KHR; 50 return VK_PRESENT_MODE_MAILBOX_KHR;
43 } 51 }
44 if (!Settings::values.use_speed_limit.GetValue()) { 52 LOG_INFO(Render_Vulkan, "Using swap present mode FIFO");
45 // FIFO present mode locks the framerate to the monitor's refresh rate,
46 // Find an alternative to surpass this limitation if FPS is unlocked.
47 const auto found_imm = std::find(modes.begin(), modes.end(), VK_PRESENT_MODE_IMMEDIATE_KHR);
48 if (found_imm != modes.end()) {
49 return VK_PRESENT_MODE_IMMEDIATE_KHR;
50 }
51 }
52 return VK_PRESENT_MODE_FIFO_KHR; 53 return VK_PRESENT_MODE_FIFO_KHR;
53} 54}
54 55