Transition MSAA images to general layout without uploading data
This commit is contained in:
		| @@ -118,6 +118,8 @@ public: | ||||
|  | ||||
|     void InsertUploadMemoryBarrier(); | ||||
|  | ||||
|     void TransitionImageLayout(Image& image) {} | ||||
|  | ||||
|     FormatProperties FormatInfo(VideoCommon::ImageType type, GLenum internal_format) const; | ||||
|  | ||||
|     bool HasNativeBgr() const noexcept { | ||||
|   | ||||
| @@ -2013,4 +2013,32 @@ void TextureCacheRuntime::AccelerateImageUpload( | ||||
|     ASSERT(false); | ||||
| } | ||||
|  | ||||
| void TextureCacheRuntime::TransitionImageLayout(Image& image) { | ||||
|     if (!image.ExchangeInitialization()) { | ||||
|         VkImageMemoryBarrier barrier{ | ||||
|             .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, | ||||
|             .pNext = nullptr, | ||||
|             .srcAccessMask = VK_ACCESS_NONE, | ||||
|             .dstAccessMask = VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT, | ||||
|             .oldLayout = VK_IMAGE_LAYOUT_UNDEFINED, | ||||
|             .newLayout = VK_IMAGE_LAYOUT_GENERAL, | ||||
|             .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, | ||||
|             .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, | ||||
|             .image = image.Handle(), | ||||
|             .subresourceRange{ | ||||
|                 .aspectMask = image.AspectMask(), | ||||
|                 .baseMipLevel = 0, | ||||
|                 .levelCount = VK_REMAINING_MIP_LEVELS, | ||||
|                 .baseArrayLayer = 0, | ||||
|                 .layerCount = VK_REMAINING_ARRAY_LAYERS, | ||||
|             }, | ||||
|         }; | ||||
|         scheduler.RequestOutsideRenderPassOperationContext(); | ||||
|         scheduler.Record([barrier = barrier](vk::CommandBuffer cmdbuf) { | ||||
|             cmdbuf.PipelineBarrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, | ||||
|                                    VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, barrier); | ||||
|         }); | ||||
|     } | ||||
| } | ||||
|  | ||||
| } // namespace Vulkan | ||||
|   | ||||
| @@ -92,6 +92,8 @@ public: | ||||
|  | ||||
|     void InsertUploadMemoryBarrier() {} | ||||
|  | ||||
|     void TransitionImageLayout(Image& image); | ||||
|  | ||||
|     bool HasBrokenTextureViewFormats() const noexcept { | ||||
|         // No known Vulkan driver has broken image views | ||||
|         return false; | ||||
|   | ||||
| @@ -1016,6 +1016,7 @@ void TextureCache<P>::RefreshContents(Image& image, ImageId image_id) { | ||||
|  | ||||
|     if (image.info.num_samples > 1 && !runtime.CanUploadMSAA()) { | ||||
|         LOG_WARNING(HW_GPU, "MSAA image uploads are not implemented"); | ||||
|         runtime.TransitionImageLayout(image); | ||||
|         return; | ||||
|     } | ||||
|     if (True(image.flags & ImageFlagBits::AsynchronousDecode)) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Kelebek1
					Kelebek1