From 34a8e9050b49a81c12a1c6139b6f0edea7f7fe86 Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Tue, 30 Apr 2019 19:26:28 +0200 Subject: [PATCH] - this should be better for when vsync is off if I read the vulkan spec correctly --- src/rendering/vulkan/system/vk_swapchain.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/rendering/vulkan/system/vk_swapchain.cpp b/src/rendering/vulkan/system/vk_swapchain.cpp index b53d4c71a1..11d4d7143a 100644 --- a/src/rendering/vulkan/system/vk_swapchain.cpp +++ b/src/rendering/vulkan/system/vk_swapchain.cpp @@ -158,7 +158,12 @@ bool VulkanSwapChain::CreateSwapChain(VkSwapchainKHR oldSwapChain) if (surfaceCapabilities.maxImageCount > 0 && imageCount > surfaceCapabilities.maxImageCount) imageCount = surfaceCapabilities.maxImageCount; - imageCount = std::min(imageCount, (uint32_t)2); // Only use two buffers (triple buffering sucks! good for benchmarks, bad for mouse input) + // When vsync is on we only want two images. This creates a slight performance penalty in exchange for reduced input latency (less mouse lag). + // When vsync is off we want three images as it allows us to generate new images even during the vertical blanking period where one entry is being used by the presentation engine. + if (swapChainPresentMode == VK_PRESENT_MODE_MAILBOX_KHR || swapChainPresentMode == VK_PRESENT_MODE_IMMEDIATE_KHR) + imageCount = std::min(imageCount, (uint32_t)3); + else + imageCount = std::min(imageCount, (uint32_t)2); VkSwapchainCreateInfoKHR swapChainCreateInfo = {}; swapChainCreateInfo.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;