diff options
Diffstat (limited to 'src/video_core/renderer_vulkan')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_swapchain.cpp | 27 |
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 | ||
| 36 | VkPresentModeKHR ChooseSwapPresentMode(vk::Span<VkPresentModeKHR> modes) { | 36 | VkPresentModeKHR 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 | ||