From 25ec3789fe6a7835b8c3c189cb93ab7575e18db9 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Sun, 19 Aug 2018 15:34:51 +0300 Subject: [PATCH] rsx: Fix present modes ordering - Newer nvidia drivers are not exposing IMMEDIATE present mode unless you change options in nvidia control panel This can cause severe performance degradation unless the vsync option is set to "off" in control panel --- rpcs3/Emu/RSX/VK/VKHelpers.h | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/rpcs3/Emu/RSX/VK/VKHelpers.h b/rpcs3/Emu/RSX/VK/VKHelpers.h index 9362adc173..e5161f9460 100644 --- a/rpcs3/Emu/RSX/VK/VKHelpers.h +++ b/rpcs3/Emu/RSX/VK/VKHelpers.h @@ -1682,11 +1682,19 @@ public: VkPresentModeKHR swapchain_present_mode = VK_PRESENT_MODE_FIFO_KHR; std::vector preferred_modes; - //List of preferred modes in decreasing desirability - if (g_cfg.video.vsync) - preferred_modes = { VK_PRESENT_MODE_MAILBOX_KHR }; - else if (!g_cfg.video.vk.force_fifo) - preferred_modes = { VK_PRESENT_MODE_IMMEDIATE_KHR, VK_PRESENT_MODE_FIFO_RELAXED_KHR, VK_PRESENT_MODE_MAILBOX_KHR }; + if (!g_cfg.video.vk.force_fifo) + { + // List of preferred modes in decreasing desirability + // NOTE: Always picks "triple-buffered vsync" types if possible + if (g_cfg.video.vsync) + { + preferred_modes = { VK_PRESENT_MODE_MAILBOX_KHR }; + } + else + { + preferred_modes = { VK_PRESENT_MODE_IMMEDIATE_KHR, VK_PRESENT_MODE_MAILBOX_KHR, VK_PRESENT_MODE_FIFO_RELAXED_KHR }; + } + } bool mode_found = false; for (VkPresentModeKHR preferred_mode : preferred_modes)