From b66f60cba0ec49873cfb1cbedffac0eca38250d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=80=D0=B0=D0=BD=D0=B8=D0=BC=D0=B8=D1=80=20=D0=9A?= =?UTF-8?q?=D0=B0=D1=80=D0=B0=D1=9F=D0=B8=D1=9B?= Date: Wed, 5 Jun 2024 20:27:29 -0700 Subject: [PATCH] Cleanup. --- src/renderer_vk.cpp | 62 +++++++++++++++++++++++++-------------------- src/renderer_vk.h | 6 ++--- 2 files changed, 38 insertions(+), 30 deletions(-) diff --git a/src/renderer_vk.cpp b/src/renderer_vk.cpp index 59d54afdc..7b783871c 100644 --- a/src/renderer_vk.cpp +++ b/src/renderer_vk.cpp @@ -1914,9 +1914,9 @@ VK_IMPORT_DEVICE m_textVideoMem.resize(false, _init.resolution.width, _init.resolution.height); m_textVideoMem.clear(); - for (uint8_t ii = 0; ii < BX_COUNTOF(m_swapchainFormats); ++ii) + for (uint8_t ii = 0; ii < BX_COUNTOF(m_swapChainFormats); ++ii) { - m_swapchainFormats[ii] = TextureFormat::Enum(ii); + m_swapChainFormats[ii] = TextureFormat::Enum(ii); } result = m_backBuffer.create(UINT16_MAX, g_platformData.nwh, m_resolution.width, m_resolution.height, m_resolution.format); @@ -2763,12 +2763,14 @@ VK_IMPORT_DEVICE | BGFX_RESET_DEPTH_CLAMP ); - // Note: m_needToRefreshSwapchain is deliberately ignored when deciding whether to recreate the swapchain - // because it can happen several frames before submit is called with the new resolution. - // Instead, vkAcquireNextImageKHR and all draws to the backbuffer are skipped until the window size is updated. - // That also fixes a related issue where VK_ERROR_OUT_OF_DATE_KHR is returned from - // vkQueuePresentKHR when the window doesn't exist anymore, and vkGetPhysicalDeviceSurfaceCapabilitiesKHR - // fails with VK_ERROR_SURFACE_LOST_KHR. + // Note: m_needToRefreshSwapchain is deliberately ignored when deciding whether to + // recreate the swapchain because it can happen several frames before submit is called + // with the new resolution. + // + // Instead, vkAcquireNextImageKHR and all draws to the backbuffer are skipped until + // the window size is updated. That also fixes a related issue where VK_ERROR_OUT_OF_DATE_KHR + // is returned from vkQueuePresentKHR when the window doesn't exist anymore, and + // vkGetPhysicalDeviceSurfaceCapabilitiesKHR fails with VK_ERROR_SURFACE_LOST_KHR. if (false || m_resolution.format != _resolution.format @@ -4431,7 +4433,7 @@ VK_IMPORT_DEVICE bool m_timerQuerySupport; FrameBufferVK m_backBuffer; - TextureFormat::Enum m_swapchainFormats[TextureFormat::Count]; + TextureFormat::Enum m_swapChainFormats[TextureFormat::Count]; uint16_t m_numWindows; FrameBufferHandle m_windows[BGFX_CONFIG_MAX_FRAME_BUFFERS]; @@ -6645,7 +6647,7 @@ VK_DESTROY void SwapChainVK::destroy() { - if (VK_NULL_HANDLE != m_swapchain) + if (VK_NULL_HANDLE != m_swapChain) { releaseFrameBuffer(); releaseAttachments(); @@ -7012,41 +7014,47 @@ VK_DESTROY m_sci.presentMode = s_presentMode[presentModeIdx].mode; m_sci.clipped = VK_FALSE; - result = vkCreateSwapchainKHR(device, &m_sci, allocatorCb, &m_swapchain); + result = vkCreateSwapchainKHR(device, &m_sci, allocatorCb, &m_swapChain); if (VK_SUCCESS != result) { BX_TRACE("Create swapchain error: vkCreateSwapchainKHR failed %d: %s.", result, getName(result) ); return result; } - m_sci.oldSwapchain = m_swapchain; + m_sci.oldSwapchain = m_swapChain; - result = vkGetSwapchainImagesKHR(device, m_swapchain, &m_numSwapchainImages, NULL); + result = vkGetSwapchainImagesKHR(device, m_swapChain, &m_numSwapChainImages, NULL); if (VK_SUCCESS != result) { BX_TRACE("Create swapchain error: vkGetSwapchainImagesKHR failed %d: %s.", result, getName(result) ); return result; } - if (m_numSwapchainImages < m_sci.minImageCount) + BX_TRACE("Create swapchain numSwapChainImages %d, minImageCount %d, BX_COUNTOF(m_backBufferColorImage) %d" + , m_numSwapChainImages + , m_sci.minImageCount + , BX_COUNTOF(m_backBufferColorImage) + ); + + if (m_numSwapChainImages < m_sci.minImageCount) { BX_TRACE("Create swapchain error: vkGetSwapchainImagesKHR: numSwapchainImages %d < minImageCount %d." - , m_numSwapchainImages + , m_numSwapChainImages , m_sci.minImageCount ); return VK_ERROR_INITIALIZATION_FAILED; } - if (m_numSwapchainImages > BX_COUNTOF(m_backBufferColorImage) ) + if (m_numSwapChainImages > BX_COUNTOF(m_backBufferColorImage) ) { BX_TRACE("Create swapchain error: vkGetSwapchainImagesKHR: numSwapchainImages %d > countof(m_backBufferColorImage) %d." - , m_numSwapchainImages + , m_numSwapChainImages , BX_COUNTOF(m_backBufferColorImage) ); return VK_ERROR_INITIALIZATION_FAILED; } - result = vkGetSwapchainImagesKHR(device, m_swapchain, &m_numSwapchainImages, &m_backBufferColorImage[0]); + result = vkGetSwapchainImagesKHR(device, m_swapChain, &m_numSwapChainImages, &m_backBufferColorImage[0]); if (VK_SUCCESS != result && VK_INCOMPLETE != result) { BX_TRACE("Create swapchain error: vkGetSwapchainImagesKHR failed %d: %s." @@ -7072,7 +7080,7 @@ VK_DESTROY ivci.subresourceRange.baseArrayLayer = 0; ivci.subresourceRange.layerCount = 1; - for (uint32_t ii = 0; ii < m_numSwapchainImages; ++ii) + for (uint32_t ii = 0; ii < m_numSwapChainImages; ++ii) { ivci.image = m_backBufferColorImage[ii]; @@ -7129,7 +7137,7 @@ VK_DESTROY release(m_renderDoneSemaphore[ii]); } - release(m_swapchain); + release(m_swapChain); } VkResult SwapChainVK::createAttachments(VkCommandBuffer _commandBuffer) @@ -7231,7 +7239,7 @@ VK_DESTROY return result; } - for (uint32_t ii = 0; ii < m_numSwapchainImages; ++ii) + for (uint32_t ii = 0; ii < m_numSwapChainImages; ++ii) { uint32_t numAttachments = 2; ::VkImageView attachments[3] = @@ -7387,9 +7395,9 @@ VK_DESTROY { selectedFormat = requested; if (0 != ii - && s_renderVK->m_swapchainFormats[_format] != selectedFormat) + && s_renderVK->m_swapChainFormats[_format] != selectedFormat) { - s_renderVK->m_swapchainFormats[_format] = selectedFormat; + s_renderVK->m_swapChainFormats[_format] = selectedFormat; BX_TRACE( "findSurfaceFormat: Surface format %s not found! Defaulting to %s." , bimg::getName(bimg::TextureFormat::Enum(_format) ) @@ -7413,7 +7421,7 @@ VK_DESTROY bool SwapChainVK::acquire(VkCommandBuffer _commandBuffer) { - if (VK_NULL_HANDLE == m_swapchain + if (VK_NULL_HANDLE == m_swapChain || m_needToRefreshSwapchain) { return false; @@ -7432,7 +7440,7 @@ VK_DESTROY BGFX_PROFILER_SCOPE("vkAcquireNextImageKHR", kColorFrame); result = vkAcquireNextImageKHR( device - , m_swapchain + , m_swapChain , UINT64_MAX , m_lastImageAcquiredSemaphore , VK_NULL_HANDLE @@ -7482,7 +7490,7 @@ VK_DESTROY void SwapChainVK::present() { BGFX_PROFILER_SCOPE("SwapChainVk::present", kColorFrame); - if (VK_NULL_HANDLE != m_swapchain + if (VK_NULL_HANDLE != m_swapChain && m_needPresent) { VkPresentInfoKHR pi; @@ -7491,7 +7499,7 @@ VK_DESTROY pi.waitSemaphoreCount = 1; pi.pWaitSemaphores = &m_lastImageRenderedSemaphore; pi.swapchainCount = 1; - pi.pSwapchains = &m_swapchain; + pi.pSwapchains = &m_swapChain; pi.pImageIndices = &m_backBufferColorIdx; pi.pResults = NULL; VkResult result; diff --git a/src/renderer_vk.h b/src/renderer_vk.h index a9f6be8b8..0d1aebfb1 100644 --- a/src/renderer_vk.h +++ b/src/renderer_vk.h @@ -705,7 +705,7 @@ VK_DESTROY_FUNC(DescriptorSet); { SwapChainVK() : m_nwh(NULL) - , m_swapchain(VK_NULL_HANDLE) + , m_swapChain(VK_NULL_HANDLE) , m_lastImageRenderedSemaphore(VK_NULL_HANDLE) , m_lastImageAcquiredSemaphore(VK_NULL_HANDLE) , m_backBufferColorMsaaImageView(VK_NULL_HANDLE) @@ -746,8 +746,8 @@ VK_DESTROY_FUNC(DescriptorSet); TextureFormat::Enum m_depthFormat; VkSurfaceKHR m_surface; - VkSwapchainKHR m_swapchain; - uint32_t m_numSwapchainImages; + VkSwapchainKHR m_swapChain; + uint32_t m_numSwapChainImages; VkImageLayout m_backBufferColorImageLayout[kMaxBackBuffers]; VkImage m_backBufferColorImage[kMaxBackBuffers]; VkImageView m_backBufferColorImageView[kMaxBackBuffers];