From 7ccff037e87f82f3461f3e1422235e29800eaa2f Mon Sep 17 00:00:00 2001 From: gdkchan Date: Thu, 14 Sep 2023 14:58:11 -0300 Subject: Fix some Vulkan validation errors (mostly related to barriers) (#5603) * Replace image barriers inside render pass with more generic memory barrier * Remove forceStorage since it was creating images with storage bit for formats that are not StorageImage compatible * Add missing flags on subpass dependency * Don't call vkCmdSetScissor with a scissor count of 0 * One semaphore per swapchain image * Remove compute stage from read to write barriers * Try to improve Pipeline.Barrier nonsense * Set PipelineStateFlags based on supported stages --- src/Ryujinx.Graphics.Vulkan/TextureView.cs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/Ryujinx.Graphics.Vulkan/TextureView.cs') diff --git a/src/Ryujinx.Graphics.Vulkan/TextureView.cs b/src/Ryujinx.Graphics.Vulkan/TextureView.cs index 9fc50f67..09128f00 100644 --- a/src/Ryujinx.Graphics.Vulkan/TextureView.cs +++ b/src/Ryujinx.Graphics.Vulkan/TextureView.cs @@ -435,6 +435,34 @@ namespace Ryujinx.Graphics.Vulkan ImageAspectFlags.ColorBit); } + public static unsafe void InsertMemoryBarrier( + Vk api, + CommandBuffer commandBuffer, + AccessFlags srcAccessMask, + AccessFlags dstAccessMask, + PipelineStageFlags srcStageMask, + PipelineStageFlags dstStageMask) + { + MemoryBarrier memoryBarrier = new() + { + SType = StructureType.MemoryBarrier, + SrcAccessMask = srcAccessMask, + DstAccessMask = dstAccessMask, + }; + + api.CmdPipelineBarrier( + commandBuffer, + srcStageMask, + dstStageMask, + DependencyFlags.None, + 1, + memoryBarrier, + 0, + null, + 0, + null); + } + public static unsafe void InsertImageBarrier( Vk api, CommandBuffer commandBuffer, -- cgit v1.2.3