diff options
author | gdkchan <gab.dark.100@gmail.com> | 2022-10-26 14:53:11 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-26 14:53:11 -0300 |
commit | 28ba55598df384c4b1e6892c49e95376d2b582fb (patch) | |
tree | 3ff086a472d428af80906362bac41867c5672fb1 /Ryujinx.Graphics.Vulkan/PipelineBase.cs | |
parent | 9719b6a1129c017d96532ff026e2bb933c0b2d0b (diff) |
Vulkan: Fix indirect buffer barrier (#3798)1.1.328
Diffstat (limited to 'Ryujinx.Graphics.Vulkan/PipelineBase.cs')
-rw-r--r-- | Ryujinx.Graphics.Vulkan/PipelineBase.cs | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/Ryujinx.Graphics.Vulkan/PipelineBase.cs b/Ryujinx.Graphics.Vulkan/PipelineBase.cs index 7c6234b1..2a376261 100644 --- a/Ryujinx.Graphics.Vulkan/PipelineBase.cs +++ b/Ryujinx.Graphics.Vulkan/PipelineBase.cs @@ -228,10 +228,26 @@ namespace Ryujinx.Graphics.Vulkan Gd.Api.CmdClearAttachments(CommandBuffer, 1, &attachment, 1, &clearRect); } - public void CommandBufferBarrier() + public unsafe void CommandBufferBarrier() { - // TODO: More specific barrier? - Barrier(); + MemoryBarrier memoryBarrier = new MemoryBarrier() + { + SType = StructureType.MemoryBarrier, + SrcAccessMask = BufferHolder.DefaultAccessFlags, + DstAccessMask = AccessFlags.AccessIndirectCommandReadBit + }; + + Gd.Api.CmdPipelineBarrier( + CommandBuffer, + PipelineStageFlags.PipelineStageAllCommandsBit, + PipelineStageFlags.PipelineStageDrawIndirectBit, + 0, + 1, + memoryBarrier, + 0, + null, + 0, + null); } public void CopyBuffer(BufferHandle source, BufferHandle destination, int srcOffset, int dstOffset, int size) @@ -824,7 +840,7 @@ namespace Ryujinx.Graphics.Vulkan if (range.Handle != BufferHandle.Null) { - _transformFeedbackBuffers[i] = + _transformFeedbackBuffers[i] = new BufferState(Gd.BufferManager.GetBuffer(CommandBuffer, range.Handle, range.Offset, range.Size, true), range.Offset, range.Size); _transformFeedbackBuffers[i].BindTransformFeedbackBuffer(Gd, Cbs, (uint)i); } |