Expanded KRSurface::m_imageAvailableSemaphores and m_renderFinishedSemaphores to have one semaphore per frame in flight.

This commit is contained in:
2022-09-14 23:59:52 -07:00
parent 5b70ce077d
commit 478669ed81

View File

@@ -44,8 +44,8 @@ KRSurface::KRSurface(KRContext& context)
#endif #endif
, m_deviceHandle(VK_NULL_HANDLE) , m_deviceHandle(VK_NULL_HANDLE)
, m_surface(VK_NULL_HANDLE) , m_surface(VK_NULL_HANDLE)
, m_imageAvailableSemaphore(VK_NULL_HANDLE) , m_imageAvailableSemaphores{VK_NULL_HANDLE}
, m_renderFinishedSemaphore(VK_NULL_HANDLE) , m_renderFinishedSemaphores{VK_NULL_HANDLE}
, m_frameIndex(0) , m_frameIndex(0)
{ {
m_forwardOpaquePass = std::make_unique<KRRenderPass>(context); m_forwardOpaquePass = std::make_unique<KRRenderPass>(context);
@@ -78,12 +78,14 @@ KrResult KRSurface::initialize()
VkSemaphoreCreateInfo semaphoreInfo{}; VkSemaphoreCreateInfo semaphoreInfo{};
semaphoreInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; semaphoreInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
if (vkCreateSemaphore(device->m_logicalDevice, &semaphoreInfo, nullptr, &m_imageAvailableSemaphore) != VK_SUCCESS) { for(int i = 0; i < KRENGINE_MAX_FRAMES_IN_FLIGHT; i++) {
if (vkCreateSemaphore(device->m_logicalDevice, &semaphoreInfo, nullptr, &m_imageAvailableSemaphores[i]) != VK_SUCCESS) {
return KR_ERROR_VULKAN; return KR_ERROR_VULKAN;
} }
if (vkCreateSemaphore(device->m_logicalDevice, &semaphoreInfo, nullptr, &m_renderFinishedSemaphore) != VK_SUCCESS) { if (vkCreateSemaphore(device->m_logicalDevice, &semaphoreInfo, nullptr, &m_renderFinishedSemaphores[i]) != VK_SUCCESS) {
return KR_ERROR_VULKAN; return KR_ERROR_VULKAN;
} }
}
return createSwapChain(); return createSwapChain();
} }
@@ -106,14 +108,16 @@ void KRSurface::destroy()
m_deferredOpaquePass->destroy(*device); m_deferredOpaquePass->destroy(*device);
} }
if (device && m_renderFinishedSemaphore != VK_NULL_HANDLE) { for (int i=0; i < KRENGINE_MAX_FRAMES_IN_FLIGHT; i++) {
vkDestroySemaphore(device->m_logicalDevice, m_renderFinishedSemaphore, nullptr); if (device && m_renderFinishedSemaphores != VK_NULL_HANDLE) {
m_renderFinishedSemaphore = VK_NULL_HANDLE; vkDestroySemaphore(device->m_logicalDevice, m_renderFinishedSemaphores[i], nullptr);
m_renderFinishedSemaphores[i] = VK_NULL_HANDLE;
} }
if (device && m_imageAvailableSemaphore != VK_NULL_HANDLE) { if (device && m_imageAvailableSemaphores != VK_NULL_HANDLE) {
vkDestroySemaphore(device->m_logicalDevice, m_imageAvailableSemaphore, nullptr); vkDestroySemaphore(device->m_logicalDevice, m_imageAvailableSemaphores[i], nullptr);
m_imageAvailableSemaphore = VK_NULL_HANDLE; m_imageAvailableSemaphores[i] = VK_NULL_HANDLE;
}
} }
if (m_surface != VK_NULL_HANDLE) { if (m_surface != VK_NULL_HANDLE) {