From abe1efe3aaa70ee625e210a5dd25640c872f8906 Mon Sep 17 00:00:00 2001 From: Artem Kharytoniuk Date: Sun, 31 Dec 2017 13:13:44 +0100 Subject: [PATCH] Updated swapchain image count selection algorithm. The previous version was correct from Vulkan spec standpoint but due to bug in AMD drivers we can not safely use surface_caps.minImageCount for the number of images in the swapchain for fullscreen window. Now we request at least 2 images for immediate and fifo mode. --- src/engine/renderer/vk.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/engine/renderer/vk.cpp b/src/engine/renderer/vk.cpp index af7f6a9..95ccee8 100644 --- a/src/engine/renderer/vk.cpp +++ b/src/engine/renderer/vk.cpp @@ -198,15 +198,13 @@ static VkSwapchainKHR create_swapchain(VkPhysicalDevice physical_device, VkDevic if (mailbox_supported) { present_mode = VK_PRESENT_MODE_MAILBOX_KHR; image_count = std::max(3u, surface_caps.minImageCount); - if (surface_caps.maxImageCount > 0) { - image_count = std::min(image_count, surface_caps.maxImageCount); - } - } else if (immediate_supported) { - present_mode = VK_PRESENT_MODE_IMMEDIATE_KHR; - image_count = surface_caps.minImageCount; } else { - present_mode = VK_PRESENT_MODE_FIFO_KHR; - image_count = surface_caps.minImageCount; + present_mode = immediate_supported ? VK_PRESENT_MODE_IMMEDIATE_KHR : VK_PRESENT_MODE_FIFO_KHR; + image_count = std::max(2u, surface_caps.minImageCount); + } + + if (surface_caps.maxImageCount > 0) { + image_count = std::min(image_count, surface_caps.maxImageCount); } // create swap chain