Бранимир Караџић 1 year ago
parent
commit
b66f60cba0
2 changed files with 38 additions and 30 deletions
  1. 35 27
      src/renderer_vk.cpp
  2. 3 3
      src/renderer_vk.h

+ 35 - 27
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;

+ 3 - 3
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];