aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Vulkan/PipelineBase.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2022-10-26 14:53:11 -0300
committerGitHub <noreply@github.com>2022-10-26 14:53:11 -0300
commit28ba55598df384c4b1e6892c49e95376d2b582fb (patch)
tree3ff086a472d428af80906362bac41867c5672fb1 /Ryujinx.Graphics.Vulkan/PipelineBase.cs
parent9719b6a1129c017d96532ff026e2bb933c0b2d0b (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.cs24
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);
}