diff --git a/ZEngine/ZEngine/Hardwares/VulkanDevice.cpp b/ZEngine/ZEngine/Hardwares/VulkanDevice.cpp index 160a352d..876d627b 100644 --- a/ZEngine/ZEngine/Hardwares/VulkanDevice.cpp +++ b/ZEngine/ZEngine/Hardwares/VulkanDevice.cpp @@ -1064,22 +1064,12 @@ namespace ZEngine::Hardwares SwapchainImageHeight = capabilities.currentExtent.height; } - auto min_image_count = std::clamp(capabilities.minImageCount, capabilities.minImageCount + 1, capabilities.maxImageCount); + auto min_image_count = std::clamp(capabilities.minImageCount, capabilities.minImageCount, capabilities.maxImageCount == 0 ? capabilities.minImageCount + 1 : capabilities.maxImageCount); VkSwapchainCreateInfoKHR swapchain_create_info = { .sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR, .pNext = nullptr, .surface = Surface, .minImageCount = min_image_count, .imageFormat = SurfaceFormat.format, .imageColorSpace = SurfaceFormat.colorSpace, .imageExtent = VkExtent2D{.width = SwapchainImageWidth, .height = SwapchainImageHeight}, .imageArrayLayers = 1, .imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT, .preTransform = capabilities.currentTransform, .compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR, .presentMode = PresentMode, .clipped = VK_TRUE }; - if (SwapchainImageViews.capacity() <= 0) - { - SwapchainImageViews.init(Arena, SwapchainImageCount, SwapchainImageCount); - } - - if (SwapchainFramebuffers.capacity() <= 0) - { - SwapchainFramebuffers.init(Arena, SwapchainImageCount, SwapchainImageCount); - } - auto scratch = ZGetScratch(Arena); Array family_indice = {}; @@ -1099,13 +1089,23 @@ namespace ZEngine::Hardwares uint32_t image_count = 0; ZENGINE_VALIDATE_ASSERT(vkGetSwapchainImagesKHR(LogicalDevice, SwapchainHandle, &image_count, nullptr) == VK_SUCCESS, "Failed to get Images count from Swapchain") - if (image_count < SwapchainImageCount) + if (image_count != SwapchainImageCount) { ZENGINE_CORE_WARN("Max Swapchain image count supported is {}, but requested {}", image_count, SwapchainImageCount); SwapchainImageCount = image_count; ZENGINE_CORE_WARN("Swapchain image count has changed from {} to {}", SwapchainImageCount, image_count); } + if (SwapchainImageViews.capacity() <= 0) + { + SwapchainImageViews.init(Arena, SwapchainImageCount, SwapchainImageCount); + } + + if (SwapchainFramebuffers.capacity() <= 0) + { + SwapchainFramebuffers.init(Arena, SwapchainImageCount, SwapchainImageCount); + } + Array SwapchainImages = {}; SwapchainImages.init(scratch.Arena, SwapchainImageCount, SwapchainImageCount); ZENGINE_VALIDATE_ASSERT(vkGetSwapchainImagesKHR(LogicalDevice, SwapchainHandle, &SwapchainImageCount, SwapchainImages.data()) == VK_SUCCESS, "Failed to get VkImages from Swapchain")