public static extern void CmdPipelineBarrier( VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint memoryBarrierCount, IntPtr pMemoryBarriers, uint bufferMemoryBarrierCount, IntPtr pBufferMemoryBarriers, uint imageMemoryBarrierCount, IntPtr pImageMemoryBarriers );
public void CmdPipelineBarrier( [FromProperty("this")] GenCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, [CountFor("memoryBarriers")] int memoryBarrierCount, [IsArray] GenMemoryBarrier* pMemoryBarriers, [CountFor("bufferMemoryBarriers")] int bufferMemoryBarrierCount, [IsArray] GenBufferMemoryBarrier* pBufferMemoryBarriers, [CountFor("imageMemoryBarriers")] int imageMemoryBarrierCount, [IsArray] GenImageMemoryBarrier* pImageMemoryBarriers) { }
public void CmdPipelineBarrier( [FromProperty("this")] GenCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, [CountFor("memoryBarriers")] int memoryBarrierCount, [IsArray] GenMemoryBarrier *pMemoryBarriers, [CountFor("bufferMemoryBarriers")] int bufferMemoryBarrierCount, [IsArray] GenBufferMemoryBarrier *pBufferMemoryBarriers, [CountFor("imageMemoryBarriers")] int imageMemoryBarrierCount, [IsArray] GenImageMemoryBarrier *pImageMemoryBarriers) { }
public void AddDependency(uint srcSubpass, uint dstSubpass, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkAccessFlags srcAccessMask, VkAccessFlags dstAccessMask, VkDependencyFlags dependencyFlags = VkDependencyFlags.ByRegion) { dependencies.Add(new VkSubpassDependency { srcSubpass = srcSubpass, dstSubpass = dstSubpass, srcStageMask = srcStageMask, dstStageMask = dstStageMask, srcAccessMask = srcAccessMask, dstAccessMask = dstAccessMask, dependencyFlags = dependencyFlags }); }
internal extern static unsafe void vkCmdPipelineBarrier(IntPtr commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, UInt32 memoryBarrierCount, VkMemoryBarrier *pMemoryBarriers, UInt32 bufferMemoryBarrierCount, VkBufferMemoryBarrier *pBufferMemoryBarriers, UInt32 imageMemoryBarrierCount, VkImageMemoryBarrier *pImageMemoryBarriers);
public void PipelineBarrier(VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags flags, List <MemoryBarrier> memoryBarriers, List <BufferMemoryBarrier> bufferMemoryBarriers, List <ImageMemoryBarrier> imageMemoryBarriers) { int mbCount = 0; int bbCount = 0; int ibCount = 0; if (memoryBarriers != null) { mbCount = memoryBarriers.Count; } if (bufferMemoryBarriers != null) { bbCount = bufferMemoryBarriers.Count; } if (imageMemoryBarriers != null) { ibCount = imageMemoryBarriers.Count; } unsafe { var mbNative = stackalloc VkMemoryBarrier[mbCount]; for (int i = 0; i < mbCount; i++) { var mb = memoryBarriers[i]; mbNative[i] = new VkMemoryBarrier(); mbNative[i].sType = VkStructureType.MemoryBarrier; mbNative[i].srcAccessMask = mb.srcAccessMask; mbNative[i].dstAccessMask = mb.dstAccessMask; } var bbNative = stackalloc VkBufferMemoryBarrier[bbCount]; for (int i = 0; i < bbCount; i++) { var bb = bufferMemoryBarriers[i]; bbNative[i] = new VkBufferMemoryBarrier(); bbNative[i].sType = VkStructureType.BufferMemoryBarrier; bbNative[i].srcAccessMask = bb.srcAccessMask; bbNative[i].dstAccessMask = bb.dstAccessMask; bbNative[i].srcQueueFamilyIndex = bb.srcQueueFamilyIndex; bbNative[i].dstQueueFamilyIndex = bb.dstQueueFamilyIndex; bbNative[i].buffer = bb.buffer.Native; bbNative[i].offset = bb.offset; bbNative[i].size = bb.size; } var ibNative = stackalloc VkImageMemoryBarrier[ibCount]; for (int i = 0; i < ibCount; i++) { var ib = imageMemoryBarriers[i]; ibNative[i] = new VkImageMemoryBarrier(); ibNative[i].sType = VkStructureType.ImageMemoryBarrier; ibNative[i].srcAccessMask = ib.srcAccessMask; ibNative[i].dstAccessMask = ib.dstAccessMask; ibNative[i].oldLayout = ib.oldLayout; ibNative[i].newLayout = ib.newLayout; ibNative[i].srcQueueFamilyIndex = ib.srcQueueFamilyIndex; ibNative[i].dstQueueFamilyIndex = ib.dstQueueFamilyIndex; ibNative[i].image = ib.image.Native; ibNative[i].subresourceRange = ib.subresourceRange; } Device.Commands.cmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, flags, (uint)mbCount, (IntPtr)mbNative, (uint)bbCount, (IntPtr)bbNative, (uint)ibCount, (IntPtr)ibNative); } }
public void CmdPipelineBarrier(VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, IReadOnlyList <VkMemoryBarrier> memoryBarriers, IReadOnlyList <VkBufferMemoryBarrier> bufferMemoryBarriers, IReadOnlyList <VkImageMemoryBarrier> imageMemoryBarriers) { var unmanagedSize = memoryBarriers.SizeOfMarshalDirect() + bufferMemoryBarriers.SizeOfMarshalDirect() + imageMemoryBarriers.SizeOfMarshalDirect(); var unmanagedArray = new byte[unmanagedSize]; fixed(byte *unmanagedStart = unmanagedArray) { var unmanaged = unmanagedStart; var _commandBuffer = Handle; var _srcStageMask = srcStageMask; var _dstStageMask = dstStageMask; var _dependencyFlags = dependencyFlags; var _memoryBarrierCount = memoryBarriers?.Count ?? 0; var _pMemoryBarriers = memoryBarriers.MarshalDirect(ref unmanaged); var _bufferMemoryBarrierCount = bufferMemoryBarriers?.Count ?? 0; var _pBufferMemoryBarriers = bufferMemoryBarriers.MarshalDirect(ref unmanaged); var _imageMemoryBarrierCount = imageMemoryBarriers?.Count ?? 0; var _pImageMemoryBarriers = imageMemoryBarriers.MarshalDirect(ref unmanaged); Direct.CmdPipelineBarrier(_commandBuffer, _srcStageMask, _dstStageMask, _dependencyFlags, _memoryBarrierCount, _pMemoryBarriers, _bufferMemoryBarrierCount, _pBufferMemoryBarriers, _imageMemoryBarrierCount, _pImageMemoryBarriers); } }
public void SetMemoryBarrier(VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkAccessFlags srcAccessMask, VkAccessFlags dstAccessMask, VkDependencyFlags dependencyFlags = VkDependencyFlags.ByRegion) { VkMemoryBarrier memoryBarrier = VkMemoryBarrier.New(); memoryBarrier.srcAccessMask = srcAccessMask; memoryBarrier.dstAccessMask = dstAccessMask; Vk.vkCmdPipelineBarrier(Handle, srcStageMask, dstStageMask, dependencyFlags, 1, ref memoryBarrier, 0, IntPtr.Zero, 0, IntPtr.Zero); }
public void PipelineBarrier(VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint memoryBarrierCount, VkMemoryBarrier *memoryBarriers, uint bufferMemoryBarrierCount, VkBufferMemoryBarrier *bufferMemoryBarriers, VkImageMemoryBarrier[] imageMemoryBarriers) { }
public void PipelineBarrier(VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint memoryBarrierCount, VkMemoryBarrier *memoryBarriers, uint bufferMemoryBarrierCount, VkBufferMemoryBarrier *bufferMemoryBarriers, VkImageMemoryBarrier imageMemoryBarriers) { vkCmdPipelineBarrier(handle, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, memoryBarriers, bufferMemoryBarrierCount, null, 1, &imageMemoryBarriers); }
public void CmdPipelineBarrier(VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, IReadOnlyList<VkMemoryBarrier> memoryBarriers, IReadOnlyList<VkBufferMemoryBarrier> bufferMemoryBarriers, IReadOnlyList<VkImageMemoryBarrier> imageMemoryBarriers) { var unmanagedSize = memoryBarriers.SizeOfMarshalDirect() + bufferMemoryBarriers.SizeOfMarshalDirect() + imageMemoryBarriers.SizeOfMarshalDirect(); var unmanagedArray = new byte[unmanagedSize]; fixed (byte* unmanagedStart = unmanagedArray) { var unmanaged = unmanagedStart; var _commandBuffer = Handle; var _srcStageMask = srcStageMask; var _dstStageMask = dstStageMask; var _dependencyFlags = dependencyFlags; var _memoryBarrierCount = memoryBarriers?.Count ?? 0; var _pMemoryBarriers = memoryBarriers.MarshalDirect(ref unmanaged); var _bufferMemoryBarrierCount = bufferMemoryBarriers?.Count ?? 0; var _pBufferMemoryBarriers = bufferMemoryBarriers.MarshalDirect(ref unmanaged); var _imageMemoryBarrierCount = imageMemoryBarriers?.Count ?? 0; var _pImageMemoryBarriers = imageMemoryBarriers.MarshalDirect(ref unmanaged); Direct.CmdPipelineBarrier(_commandBuffer, _srcStageMask, _dstStageMask, _dependencyFlags, _memoryBarrierCount, _pMemoryBarriers, _bufferMemoryBarrierCount, _pBufferMemoryBarriers, _imageMemoryBarrierCount, _pImageMemoryBarriers); } }