From 1660e129fe0e63dc432be959721d7338fe6c3428 Mon Sep 17 00:00:00 2001 From: Mathew Benson Date: Wed, 28 Jan 2026 01:54:50 +0300 Subject: [PATCH 1/3] Re-Arrange Code flow after swapchainimage count change - The code that relies on the SwapchainImageCount such as the command buffer are re-arranged to ensure that they run after we establish the correct number of Swapchain Images --- ZEngine/ZEngine/Hardwares/VulkanDevice.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ZEngine/ZEngine/Hardwares/VulkanDevice.cpp b/ZEngine/ZEngine/Hardwares/VulkanDevice.cpp index c6b68003..d1d9ddcc 100644 --- a/ZEngine/ZEngine/Hardwares/VulkanDevice.cpp +++ b/ZEngine/ZEngine/Hardwares/VulkanDevice.cpp @@ -409,9 +409,6 @@ namespace ZEngine::Hardwares VmaAllocatorCreateInfo vma_allocator_create_info = {.physicalDevice = PhysicalDevice, .device = LogicalDevice, .instance = Instance, .vulkanApiVersion = VK_API_VERSION_1_3}; ZENGINE_VALIDATE_ASSERT(vmaCreateAllocator(&vma_allocator_create_info, &VmaAllocatorValue) == VK_SUCCESS, "Failed to create VMA Allocator") - m_buffer_manager.Initialize(this); - EnqueuedCommandbuffers.init(Arena, m_buffer_manager.TotalCommandBufferCount, m_buffer_manager.TotalCommandBufferCount); - /* * Creating Swapchain */ @@ -428,6 +425,10 @@ namespace ZEngine::Hardwares PreviousFrameIndex = 0; CurrentFrameIndex = 0; + CreateSwapchain(); + + EnqueuedCommandbuffers.init(Arena, m_buffer_manager.TotalCommandBufferCount, m_buffer_manager.TotalCommandBufferCount); + SwapchainRenderCompleteSemaphores.init(Arena, SwapchainImageCount, SwapchainImageCount); SwapchainAcquiredSemaphores.init(Arena, SwapchainImageCount, SwapchainImageCount); SwapchainSignalFences.init(Arena, SwapchainImageCount, SwapchainImageCount); @@ -438,7 +439,6 @@ namespace ZEngine::Hardwares SwapchainRenderCompleteSemaphores[i] = ZPushStructCtorArgs(Arena, Primitives::Semaphore, this); SwapchainSignalFences[i] = ZPushStructCtorArgs(Arena, Primitives::Fence, this, true); } - CreateSwapchain(); /* * Creating Global Descriptor Pool for : Textures @@ -1242,6 +1242,8 @@ namespace ZEngine::Hardwares SwapchainFramebuffers.init(Arena, SwapchainImageCount, SwapchainImageCount); } + m_buffer_manager.Initialize(this, SwapchainImageCount); + scratch = ZGetScratch(Arena); Array SwapchainImages = {}; From f45be5c0bc6df148a94824d495a2668830239f37 Mon Sep 17 00:00:00 2001 From: Mathew Benson Date: Wed, 28 Jan 2026 21:43:32 +0300 Subject: [PATCH 2/3] Pull Request #495 Requested Changes - Removed Redundant parameter to the CommandBufferManager.Initialize method - Moved the EnquedCommandBuffers.init method to be called right after the m_buffer_manager.Initialize function call --- ZEngine/ZEngine/Hardwares/VulkanDevice.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/ZEngine/ZEngine/Hardwares/VulkanDevice.cpp b/ZEngine/ZEngine/Hardwares/VulkanDevice.cpp index d1d9ddcc..98a96965 100644 --- a/ZEngine/ZEngine/Hardwares/VulkanDevice.cpp +++ b/ZEngine/ZEngine/Hardwares/VulkanDevice.cpp @@ -427,8 +427,6 @@ namespace ZEngine::Hardwares CreateSwapchain(); - EnqueuedCommandbuffers.init(Arena, m_buffer_manager.TotalCommandBufferCount, m_buffer_manager.TotalCommandBufferCount); - SwapchainRenderCompleteSemaphores.init(Arena, SwapchainImageCount, SwapchainImageCount); SwapchainAcquiredSemaphores.init(Arena, SwapchainImageCount, SwapchainImageCount); SwapchainSignalFences.init(Arena, SwapchainImageCount, SwapchainImageCount); @@ -1242,7 +1240,8 @@ namespace ZEngine::Hardwares SwapchainFramebuffers.init(Arena, SwapchainImageCount, SwapchainImageCount); } - m_buffer_manager.Initialize(this, SwapchainImageCount); + m_buffer_manager.Initialize(this); + EnqueuedCommandbuffers.init(Arena, m_buffer_manager.TotalCommandBufferCount, m_buffer_manager.TotalCommandBufferCount); scratch = ZGetScratch(Arena); @@ -2006,10 +2005,10 @@ namespace ZEngine::Hardwares } } - void CommandBufferManager::Initialize(VulkanDevice* device, uint8_t swapchain_image_count, int thread_count) + void CommandBufferManager::Initialize(VulkanDevice* device, int thread_count) { Device = device; - m_total_pool_count = swapchain_image_count * thread_count; + m_total_pool_count = device->SwapchainImageCount * thread_count; TotalCommandBufferCount = m_total_pool_count * MaxBufferPerPool; m_instant_fence = ZPushStructCtorArgs(Device->Arena, Primitives::Fence, device); m_instant_semaphore = ZPushStructCtorArgs(Device->Arena, Primitives::Semaphore, device); From ee312db64d6418cd7dc734f1db1f21043565903e Mon Sep 17 00:00:00 2001 From: Mathew Benson Date: Thu, 29 Jan 2026 08:25:52 +0300 Subject: [PATCH 3/3] Add VulkanDevice.h change left out of previous commit --- ZEngine/ZEngine/Hardwares/VulkanDevice.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ZEngine/ZEngine/Hardwares/VulkanDevice.h b/ZEngine/ZEngine/Hardwares/VulkanDevice.h index c4810f7d..5fdceb71 100644 --- a/ZEngine/ZEngine/Hardwares/VulkanDevice.h +++ b/ZEngine/ZEngine/Hardwares/VulkanDevice.h @@ -479,7 +479,7 @@ namespace ZEngine::Hardwares struct CommandBufferManager { - void Initialize(VulkanDevice* device, uint8_t swapchain_image_count = 3, int thread_count = 1); + void Initialize(VulkanDevice* device, int thread_count = 1); void Deinitialize(); CommandBuffer* GetCommandBuffer(uint8_t frame_index, bool begin = true); CommandBuffer* GetInstantCommandBuffer(Rendering::QueueType type, uint8_t frame_index, bool begin = true);