Mercurial > games > semicongine
comparison semicongine/rendering/swapchain.nim @ 1494:02e869aded5d
fix: issue with presentation-wait semaphores
author | sam <sam@basx.dev> |
---|---|
date | Wed, 24 Sep 2025 21:57:52 +0700 |
parents | 801496756651 |
children | a9c0f899a734 |
comparison
equal
deleted
inserted
replaced
1493:986e37dc76e0 | 1494:02e869aded5d |
---|---|
153 ) | 153 ) |
154 | 154 |
155 # create sync primitives | 155 # create sync primitives |
156 for i in 0 ..< INFLIGHTFRAMES: | 156 for i in 0 ..< INFLIGHTFRAMES: |
157 swapchain.queueFinishedFence[i] = svkCreateFence(signaled = true) | 157 swapchain.queueFinishedFence[i] = svkCreateFence(signaled = true) |
158 swapchain.renderFinishedSemaphore[i] = svkCreateSemaphore() | |
159 | |
160 swapchain.imageAvailableSemaphore.setLen(framebuffers.len) | |
161 for i in 0 ..< framebuffers.len: | |
158 swapchain.imageAvailableSemaphore[i] = svkCreateSemaphore() | 162 swapchain.imageAvailableSemaphore[i] = svkCreateSemaphore() |
159 swapchain.renderFinishedSemaphore[i] = svkCreateSemaphore() | |
160 | 163 |
161 # command buffers | 164 # command buffers |
162 var commandPoolCreateInfo = VkCommandPoolCreateInfo( | 165 var commandPoolCreateInfo = VkCommandPoolCreateInfo( |
163 sType: VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, | 166 sType: VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, |
164 flags: toBits [VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT], | 167 flags: toBits [VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT], |
222 let nextImageResult = vkAcquireNextImageKHR( | 225 let nextImageResult = vkAcquireNextImageKHR( |
223 engine().vulkan.device, | 226 engine().vulkan.device, |
224 swapchain.vk, | 227 swapchain.vk, |
225 # high(uint64), | 228 # high(uint64), |
226 10_000_000'u64, # wait max 10ms | 229 10_000_000'u64, # wait max 10ms |
227 swapchain.imageAvailableSemaphore[swapchain.currentFiF], | 230 swapchain.imageAvailableSemaphore[swapchain.currentFramebufferIndex], |
228 VkFence(0), | 231 VkFence(0), |
229 addr(swapchain.currentFramebufferIndex), | 232 addr(swapchain.currentFramebufferIndex), |
230 ) | 233 ) |
231 | 234 |
232 swapchain.queueFinishedFence[swapchain.currentFiF].svkResetFences() | 235 swapchain.queueFinishedFence[swapchain.currentFiF].svkResetFences() |
234 if nextImageResult != VK_SUCCESS: | 237 if nextImageResult != VK_SUCCESS: |
235 return none(VkFramebuffer) | 238 return none(VkFramebuffer) |
236 return some(swapchain.framebuffers[swapchain.currentFramebufferIndex]) | 239 return some(swapchain.framebuffers[swapchain.currentFramebufferIndex]) |
237 | 240 |
238 proc swap(swapchain: Swapchain, commandBuffer: VkCommandBuffer): bool = | 241 proc swap(swapchain: Swapchain, commandBuffer: VkCommandBuffer): bool = |
242 debugecho "currentFiF: ", swapchain.currentFiF | |
239 var | 243 var |
240 waitStage = VkPipelineStageFlags(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT) | 244 waitStage = VkPipelineStageFlags(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT) |
241 submitInfo = VkSubmitInfo( | 245 submitInfo = VkSubmitInfo( |
242 sType: VK_STRUCTURE_TYPE_SUBMIT_INFO, | 246 sType: VK_STRUCTURE_TYPE_SUBMIT_INFO, |
243 waitSemaphoreCount: 1, | 247 waitSemaphoreCount: 1, |
244 pWaitSemaphores: addr(swapchain.imageAvailableSemaphore[swapchain.currentFiF]), | 248 pWaitSemaphores: addr(swapchain.imageAvailableSemaphore[swapchain.currentFramebufferIndex]), |
245 pWaitDstStageMask: addr(waitStage), | 249 pWaitDstStageMask: addr(waitStage), |
246 commandBufferCount: 1, | 250 commandBufferCount: 1, |
247 pCommandBuffers: addr(commandBuffer), | 251 pCommandBuffers: addr(commandBuffer), |
248 signalSemaphoreCount: 1, | 252 signalSemaphoreCount: 1, |
249 pSignalSemaphores: addr(swapchain.renderFinishedSemaphore[swapchain.currentFiF]), | 253 pSignalSemaphores: addr(swapchain.renderFinishedSemaphore[swapchain.currentFiF]), |