Exemplo n.º 1
0
 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
     );
Exemplo n.º 2
0
 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)
 { }
Exemplo n.º 3
0
 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)
 {
 }
Exemplo n.º 4
0
 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
     });
 }
Exemplo n.º 5
0
 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);
Exemplo n.º 6
0
        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);
            }
        }
Exemplo n.º 7
0
        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);
            }
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
 public void PipelineBarrier(VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint memoryBarrierCount, VkMemoryBarrier *memoryBarriers, uint bufferMemoryBarrierCount, VkBufferMemoryBarrier *bufferMemoryBarriers, VkImageMemoryBarrier[] imageMemoryBarriers)
 {
 }
Exemplo n.º 10
0
 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);
 }
Exemplo n.º 11
0
 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);
     }
 }