[Gpu] Add Vk synchronization2 helper

This commit is contained in:
ParantezTech 2026-09-22 15:58:36 +03:00
parent 92704490a7
commit f06d2aa1b1
1 changed files with 56 additions and 0 deletions

View File

@ -0,0 +1,56 @@
// Copyright (C) 2026 SharpEmu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
using Silk.NET.Vulkan;
namespace SharpEmu.Libs.Gpu.Vulkan;
internal static unsafe class VulkanSynchronization
{
public static AccessFlags2 Access(AccessFlags access) => (AccessFlags2)(ulong)access;
public static void PipelineBarrier(
Vk vk,
CommandBuffer command,
PipelineStageFlags sourceStages,
PipelineStageFlags destinationStages,
DependencyFlags dependencyFlags,
uint memoryBarrierCount,
MemoryBarrier2* memoryBarriers,
uint bufferMemoryBarrierCount,
BufferMemoryBarrier2* bufferMemoryBarriers,
uint imageMemoryBarrierCount,
ImageMemoryBarrier2* imageMemoryBarriers)
{
var sourceStages2 = (PipelineStageFlags2)(ulong)sourceStages;
var destinationStages2 = (PipelineStageFlags2)(ulong)destinationStages;
for (var index = 0u; index < memoryBarrierCount; index++)
{
memoryBarriers[index].SrcStageMask = sourceStages2;
memoryBarriers[index].DstStageMask = destinationStages2;
}
for (var index = 0u; index < bufferMemoryBarrierCount; index++)
{
bufferMemoryBarriers[index].SrcStageMask = sourceStages2;
bufferMemoryBarriers[index].DstStageMask = destinationStages2;
}
for (var index = 0u; index < imageMemoryBarrierCount; index++)
{
imageMemoryBarriers[index].SrcStageMask = sourceStages2;
imageMemoryBarriers[index].DstStageMask = destinationStages2;
}
var dependencyInfo = new DependencyInfo
{
SType = StructureType.DependencyInfo,
DependencyFlags = dependencyFlags,
MemoryBarrierCount = memoryBarrierCount,
PMemoryBarriers = memoryBarriers,
BufferMemoryBarrierCount = bufferMemoryBarrierCount,
PBufferMemoryBarriers = bufferMemoryBarriers,
ImageMemoryBarrierCount = imageMemoryBarrierCount,
PImageMemoryBarriers = imageMemoryBarriers,
};
vk.CmdPipelineBarrier2(command, &dependencyInfo);
}
}