Browse Source

Simplify vulkan texture resolve (#2611)

Christophe Dehais 4 years ago
parent
commit
ad8e7eb974
1 changed files with 6 additions and 16 deletions
  1. 6 16
      src/renderer_vk.cpp

+ 6 - 16
src/renderer_vk.cpp

@@ -6153,6 +6153,7 @@ VK_DESTROY
 		const bool needResolve = VK_NULL_HANDLE != m_singleMsaaImage;
 		const bool needResolve = VK_NULL_HANDLE != m_singleMsaaImage;
 
 
 		const bool needMipGen = true
 		const bool needMipGen = true
+			&& !needResolve
 			&& 0 != (m_flags & BGFX_TEXTURE_RT_MASK)
 			&& 0 != (m_flags & BGFX_TEXTURE_RT_MASK)
 			&& 0 == (m_flags & BGFX_TEXTURE_RT_WRITE_ONLY)
 			&& 0 == (m_flags & BGFX_TEXTURE_RT_WRITE_ONLY)
 			&& (_mip + 1) < m_numMips
 			&& (_mip + 1) < m_numMips
@@ -6196,24 +6197,13 @@ VK_DESTROY
 				);
 				);
 		}
 		}
 
 
-		if (needResolve && needMipGen)
-		{
-			setMemoryBarrier(
-				  _commandBuffer
-				, VK_PIPELINE_STAGE_TRANSFER_BIT
-				, VK_PIPELINE_STAGE_TRANSFER_BIT
-				);
-		}
-
 		if (needMipGen)
 		if (needMipGen)
 		{
 		{
-			setImageMemoryBarrier(_commandBuffer, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, needResolve);
+			setImageMemoryBarrier(_commandBuffer, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
 
 
 			int32_t mipWidth  = bx::max<int32_t>(int32_t(m_width)  >> _mip, 1);
 			int32_t mipWidth  = bx::max<int32_t>(int32_t(m_width)  >> _mip, 1);
 			int32_t mipHeight = bx::max<int32_t>(int32_t(m_height) >> _mip, 1);
 			int32_t mipHeight = bx::max<int32_t>(int32_t(m_height) >> _mip, 1);
 
 
-			const VkImage image = needResolve ? m_singleMsaaImage : m_textureImage;
-
 			const VkFilter filter = bimg::isDepth(bimg::TextureFormat::Enum(m_textureFormat) )
 			const VkFilter filter = bimg::isDepth(bimg::TextureFormat::Enum(m_textureFormat) )
 				? VK_FILTER_NEAREST
 				? VK_FILTER_NEAREST
 				: VK_FILTER_LINEAR
 				: VK_FILTER_LINEAR
@@ -6246,7 +6236,7 @@ VK_DESTROY
 
 
 				vk::setImageMemoryBarrier(
 				vk::setImageMemoryBarrier(
 					  _commandBuffer
 					  _commandBuffer
-					, image
+					, m_textureImage
 					, m_aspectMask
 					, m_aspectMask
 					, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
 					, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
 					, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
 					, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
@@ -6258,9 +6248,9 @@ VK_DESTROY
 
 
 				vkCmdBlitImage(
 				vkCmdBlitImage(
 					  _commandBuffer
 					  _commandBuffer
-					, image
+					, m_textureImage
 					, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
 					, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
-					, image
+					, m_textureImage
 					, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
 					, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
 					, 1
 					, 1
 					, &blit
 					, &blit
@@ -6270,7 +6260,7 @@ VK_DESTROY
 
 
 			vk::setImageMemoryBarrier(
 			vk::setImageMemoryBarrier(
 				  _commandBuffer
 				  _commandBuffer
-				, image
+				, m_textureImage
 				, m_aspectMask
 				, m_aspectMask
 				, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
 				, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
 				, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
 				, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL