diff --git a/tests/SharpEmu.Libs.Tests/Gpu/Images/ColorToMultisampleDepthBlitTests.cs b/tests/SharpEmu.Libs.Tests/Gpu/Images/ColorToMultisampleDepthBlitTests.cs index 885dff5..08be8a0 100644 --- a/tests/SharpEmu.Libs.Tests/Gpu/Images/ColorToMultisampleDepthBlitTests.cs +++ b/tests/SharpEmu.Libs.Tests/Gpu/Images/ColorToMultisampleDepthBlitTests.cs @@ -5,6 +5,7 @@ using System.Runtime.InteropServices; using SharpEmu.Libs.Gpu.Buffers; using SharpEmu.Libs.Gpu.Images; using SharpEmu.Libs.Gpu.Scheduling; +using SharpEmu.Libs.Gpu.Vulkan; using SharpEmu.Libs.Tests.Gpu.Scheduling; using SharpEmu.Libs.Tests.Gpu.Vulkan; using SharpEmu.ShaderCompiler.Vulkan; @@ -122,18 +123,18 @@ internal sealed unsafe class MultisampleDepthSampleReader : IDisposable var count = samples; vk.CmdPushConstants(command, _pipelineLayout, ShaderStageFlags.ComputeBit, 0, 4, &count); vk.CmdDispatch(command, 1, 1, 1); - var barrier = new BufferMemoryBarrier + var barrier = new BufferMemoryBarrier2 { - SType = StructureType.BufferMemoryBarrier, - SrcAccessMask = AccessFlags.ShaderWriteBit, - DstAccessMask = AccessFlags.HostReadBit, + SType = StructureType.BufferMemoryBarrier2, + SrcAccessMask = AccessFlags2.ShaderWriteBit, + DstAccessMask = AccessFlags2.HostReadBit, SrcQueueFamilyIndex = Vk.QueueFamilyIgnored, DstQueueFamilyIndex = Vk.QueueFamilyIgnored, Buffer = output.Handle, Offset = 0, Size = output.Size, }; - vk.CmdPipelineBarrier(command, PipelineStageFlags.ComputeShaderBit, PipelineStageFlags.HostBit, 0, 0, null, 1, &barrier, 0, null); + VulkanSynchronization.PipelineBarrier(vk, command, PipelineStageFlags.ComputeShaderBit, PipelineStageFlags.HostBit, 0, 0, null, 1, &barrier, 0, null); _scheduler.Finish(); output.Invalidate(0, output.Size); bytes = output.Mapped[..(int)(samples * 4)].ToArray(); diff --git a/tests/SharpEmu.Libs.Tests/Gpu/Images/ImageCacheTestSupport.cs b/tests/SharpEmu.Libs.Tests/Gpu/Images/ImageCacheTestSupport.cs index d6268b5..d1b29d2 100644 --- a/tests/SharpEmu.Libs.Tests/Gpu/Images/ImageCacheTestSupport.cs +++ b/tests/SharpEmu.Libs.Tests/Gpu/Images/ImageCacheTestSupport.cs @@ -6,6 +6,7 @@ using SharpEmu.HLE.GpuMemory; using SharpEmu.HLE.Host; using SharpEmu.Libs.Gpu.Buffers; using SharpEmu.Libs.Gpu.Images; +using SharpEmu.Libs.Gpu.Vulkan; using SharpEmu.Libs.Tests.Gpu.Buffers; using Silk.NET.Vulkan; using Xunit; @@ -176,22 +177,22 @@ internal static class ImageCacheTestSupport var aligned = (size + 3) & ~3UL; using var download = new GpuBuffer(harness.Vulkan.DeviceInfo, harness.Scheduler, GpuBufferUsage.Download, 0, GpuBuffer.AllFlags, aligned); var command = new CommandBuffer(harness.Scheduler.Current.Handle); - var before = new BufferMemoryBarrier + var before = new BufferMemoryBarrier2 { - SType = StructureType.BufferMemoryBarrier, - SrcAccessMask = AccessFlags.MemoryWriteBit | AccessFlags.ShaderWriteBit | AccessFlags.TransferWriteBit | AccessFlags.HostWriteBit, - DstAccessMask = AccessFlags.TransferReadBit, + SType = StructureType.BufferMemoryBarrier2, + SrcAccessMask = AccessFlags2.MemoryWriteBit | AccessFlags2.ShaderWriteBit | AccessFlags2.TransferWriteBit | AccessFlags2.HostWriteBit, + DstAccessMask = AccessFlags2.TransferReadBit, SrcQueueFamilyIndex = Vk.QueueFamilyIgnored, DstQueueFamilyIndex = Vk.QueueFamilyIgnored, Buffer = source, Offset = offset, Size = aligned, }; - vk.CmdPipelineBarrier(command, PipelineStageFlags.AllCommandsBit | PipelineStageFlags.HostBit, PipelineStageFlags.TransferBit, 0, 0, null, 1, &before, 0, null); + VulkanSynchronization.PipelineBarrier(vk, command, PipelineStageFlags.AllCommandsBit | PipelineStageFlags.HostBit, PipelineStageFlags.TransferBit, 0, 0, null, 1, &before, 0, null); var region = new BufferCopy(offset, 0, aligned); vk.CmdCopyBuffer(command, source, download.Handle, 1, ®ion); - var after = before with { Buffer = download.Handle, Offset = 0, SrcAccessMask = AccessFlags.TransferWriteBit, DstAccessMask = AccessFlags.HostReadBit }; - vk.CmdPipelineBarrier(command, PipelineStageFlags.TransferBit, PipelineStageFlags.HostBit, 0, 0, null, 1, &after, 0, null); + var after = before with { Buffer = download.Handle, Offset = 0, SrcAccessMask = AccessFlags2.TransferWriteBit, DstAccessMask = AccessFlags2.HostReadBit }; + VulkanSynchronization.PipelineBarrier(vk, command, PipelineStageFlags.TransferBit, PipelineStageFlags.HostBit, 0, 0, null, 1, &after, 0, null); harness.Scheduler.Finish(); download.Invalidate(0, aligned); return download.Mapped[..(int)size].ToArray(); diff --git a/tests/SharpEmu.Libs.Tests/Gpu/Images/ImageTestHarness.cs b/tests/SharpEmu.Libs.Tests/Gpu/Images/ImageTestHarness.cs index a9831cc..f1b77c4 100644 --- a/tests/SharpEmu.Libs.Tests/Gpu/Images/ImageTestHarness.cs +++ b/tests/SharpEmu.Libs.Tests/Gpu/Images/ImageTestHarness.cs @@ -9,6 +9,7 @@ using SharpEmu.HLE.Host; using SharpEmu.Libs.Gpu.Buffers; using SharpEmu.Libs.Gpu.Images; using SharpEmu.Libs.Gpu.Scheduling; +using SharpEmu.Libs.Gpu.Vulkan; using SharpEmu.Libs.Tests.Gpu.Buffers; using SharpEmu.Libs.Tests.Gpu.Vulkan; using Silk.NET.Vulkan; @@ -231,22 +232,22 @@ internal sealed unsafe class ImageTestHarness : IDisposable var aligned = (size + 3) & ~3UL; using var download = new GpuBuffer(Device, Scheduler, GpuBufferUsage.Download, 0, GpuBuffer.AllFlags, aligned); var command = new CommandBuffer(Scheduler.Current.Handle); - var before = new BufferMemoryBarrier + var before = new BufferMemoryBarrier2 { - SType = StructureType.BufferMemoryBarrier, - SrcAccessMask = AccessFlags.MemoryWriteBit | AccessFlags.ShaderWriteBit | AccessFlags.TransferWriteBit | AccessFlags.HostWriteBit, - DstAccessMask = AccessFlags.TransferReadBit, + SType = StructureType.BufferMemoryBarrier2, + SrcAccessMask = AccessFlags2.MemoryWriteBit | AccessFlags2.ShaderWriteBit | AccessFlags2.TransferWriteBit | AccessFlags2.HostWriteBit, + DstAccessMask = AccessFlags2.TransferReadBit, SrcQueueFamilyIndex = Vk.QueueFamilyIgnored, DstQueueFamilyIndex = Vk.QueueFamilyIgnored, Buffer = source, Offset = offset, Size = aligned, }; - Vk.CmdPipelineBarrier(command, PipelineStageFlags.AllCommandsBit | PipelineStageFlags.HostBit, PipelineStageFlags.TransferBit, 0, 0, null, 1, &before, 0, null); + VulkanSynchronization.PipelineBarrier(Vk, command, PipelineStageFlags.AllCommandsBit | PipelineStageFlags.HostBit, PipelineStageFlags.TransferBit, 0, 0, null, 1, &before, 0, null); var region = new BufferCopy(offset, 0, aligned); Vk.CmdCopyBuffer(command, source, download.Handle, 1, ®ion); - var after = before with { Buffer = download.Handle, Offset = 0, SrcAccessMask = AccessFlags.TransferWriteBit, DstAccessMask = AccessFlags.HostReadBit }; - Vk.CmdPipelineBarrier(command, PipelineStageFlags.TransferBit, PipelineStageFlags.HostBit, 0, 0, null, 1, &after, 0, null); + var after = before with { Buffer = download.Handle, Offset = 0, SrcAccessMask = AccessFlags2.TransferWriteBit, DstAccessMask = AccessFlags2.HostReadBit }; + VulkanSynchronization.PipelineBarrier(Vk, command, PipelineStageFlags.TransferBit, PipelineStageFlags.HostBit, 0, 0, null, 1, &after, 0, null); Scheduler.Finish(); download.Invalidate(0, aligned); return download.Mapped[..(int)size].ToArray(); @@ -499,14 +500,14 @@ internal sealed unsafe class TilerComputeRunner : IDisposable vk.UpdateDescriptorSets(device, 3, writes, 0, null); var command = new CommandBuffer(_harness.Scheduler.Current.Handle); - var barriers = stackalloc BufferMemoryBarrier[3]; + var barriers = stackalloc BufferMemoryBarrier2[3]; for (var index = 0; index < 3; index++) { - barriers[index] = new BufferMemoryBarrier + barriers[index] = new BufferMemoryBarrier2 { - SType = StructureType.BufferMemoryBarrier, - SrcAccessMask = AccessFlags.HostWriteBit | AccessFlags.MemoryWriteBit, - DstAccessMask = index == 1 ? AccessFlags.ShaderReadBit | AccessFlags.ShaderWriteBit : index == 2 ? AccessFlags.UniformReadBit : AccessFlags.ShaderReadBit, + SType = StructureType.BufferMemoryBarrier2, + SrcAccessMask = AccessFlags2.HostWriteBit | AccessFlags2.MemoryWriteBit, + DstAccessMask = index == 1 ? AccessFlags2.ShaderReadBit | AccessFlags2.ShaderWriteBit : index == 2 ? AccessFlags2.UniformReadBit : AccessFlags2.ShaderReadBit, SrcQueueFamilyIndex = Vk.QueueFamilyIgnored, DstQueueFamilyIndex = Vk.QueueFamilyIgnored, Buffer = infos[index].Buffer, @@ -515,7 +516,7 @@ internal sealed unsafe class TilerComputeRunner : IDisposable }; } - vk.CmdPipelineBarrier(command, PipelineStageFlags.AllCommandsBit | PipelineStageFlags.HostBit, PipelineStageFlags.ComputeShaderBit, 0, 0, null, 3, barriers, 0, null); + VulkanSynchronization.PipelineBarrier(vk, command, PipelineStageFlags.AllCommandsBit | PipelineStageFlags.HostBit, PipelineStageFlags.ComputeShaderBit, 0, 0, null, 3, barriers, 0, null); vk.CmdBindPipeline(command, PipelineBindPoint.Compute, pipeline); vk.CmdBindDescriptorSets(command, PipelineBindPoint.Compute, _pipelineLayout, 0, 1, &set, 0, null); fixed (TileTransferArguments* pointer = &push) @@ -524,8 +525,8 @@ internal sealed unsafe class TilerComputeRunner : IDisposable } vk.CmdDispatch(command, groupsX, groupsY, groupsZ); - var after = barriers[1] with { SrcAccessMask = AccessFlags.ShaderWriteBit, DstAccessMask = AccessFlags.TransferReadBit | AccessFlags.MemoryReadBit }; - vk.CmdPipelineBarrier(command, PipelineStageFlags.ComputeShaderBit, PipelineStageFlags.AllCommandsBit, 0, 0, null, 1, &after, 0, null); + var after = barriers[1] with { SrcAccessMask = AccessFlags2.ShaderWriteBit, DstAccessMask = AccessFlags2.TransferReadBit | AccessFlags2.MemoryReadBit }; + VulkanSynchronization.PipelineBarrier(vk, command, PipelineStageFlags.ComputeShaderBit, PipelineStageFlags.AllCommandsBit, 0, 0, null, 1, &after, 0, null); } public void Dispose() diff --git a/tests/SharpEmu.Libs.Tests/Gpu/Images/PresentationColorTests.cs b/tests/SharpEmu.Libs.Tests/Gpu/Images/PresentationColorTests.cs index d08b93e..6230064 100644 --- a/tests/SharpEmu.Libs.Tests/Gpu/Images/PresentationColorTests.cs +++ b/tests/SharpEmu.Libs.Tests/Gpu/Images/PresentationColorTests.cs @@ -3,6 +3,7 @@ using SharpEmu.Libs.Tests.Gpu.Scheduling; using SharpEmu.Libs.Tests.Gpu.Vulkan; +using SharpEmu.Libs.Gpu.Vulkan; using SharpEmu.Libs.VideoOut; using Silk.NET.Vulkan; using Xunit; @@ -64,13 +65,13 @@ public sealed unsafe class PresentationColorTests : IClassFixture