Example #1
0
        private void CopyBuffer(IVkBuffer srcBuffer, IVkBuffer dstBuffer, ulong size)
        {
            var buffer = device.AllocateCommandBuffers(new VkCommandBufferAllocateInfo
            {
                Level              = VkCommandBufferLevel.Primary,
                CommandPool        = commandPool,
                CommandBufferCount = 1
            }).Object.Single();

            buffer.Begin(new VkCommandBufferBeginInfo
            {
                Flags = VkCommandBufferUsageFlags.OneTimeSubmit
            });

            buffer.CmdCopyBuffer(srcBuffer, dstBuffer, new [] { new VkBufferCopy
                                                                {
                                                                    SrcOffset = 0,
                                                                    DstOffset = 0,
                                                                    Size      = size
                                                                } });

            buffer.End();

            graphicsQueue.Submit(new[] { new VkSubmitInfo
                                         {
                                             CommandBuffers = new[] { buffer }
                                         } }, null);

            graphicsQueue.WaitIdle();
            commandPool.FreeCommandBuffers(new [] { buffer });
        }
Example #2
0
        public void CmdDispatchIndirect(IVkBuffer buffer, ulong offset)
        {
            var _commandBuffer = Handle;
            var _buffer        = buffer?.Handle ?? VkBuffer.HandleType.Null;
            var _offset        = offset;

            Direct.CmdDispatchIndirect(_commandBuffer, _buffer, _offset);
        }
Example #3
0
        public void CmdBindIndexBuffer(IVkBuffer buffer, ulong offset, VkIndexType indexType)
        {
            var _commandBuffer = Handle;
            var _buffer        = buffer?.Handle ?? VkBuffer.HandleType.Null;
            var _offset        = offset;
            var _indexType     = indexType;

            Direct.CmdBindIndexBuffer(_commandBuffer, _buffer, _offset, _indexType);
        }
Example #4
0
        public void CmdDrawIndexedIndirect(IVkBuffer buffer, ulong offset, int drawCount, int stride)
        {
            var _commandBuffer = Handle;
            var _buffer        = buffer?.Handle ?? VkBuffer.HandleType.Null;
            var _offset        = offset;
            var _drawCount     = drawCount;
            var _stride        = stride;

            Direct.CmdDrawIndexedIndirect(_commandBuffer, _buffer, _offset, _drawCount, _stride);
        }
Example #5
0
        public void CmdUpdateBuffer(IVkBuffer dstBuffer, ulong dstOffset, ulong dataSize, IntPtr data)
        {
            var _commandBuffer = Handle;
            var _dstBuffer     = dstBuffer?.Handle ?? VkBuffer.HandleType.Null;
            var _dstOffset     = dstOffset;
            var _dataSize      = dataSize;
            var _pData         = data;

            Direct.CmdUpdateBuffer(_commandBuffer, _dstBuffer, _dstOffset, _dataSize, _pData);
        }
Example #6
0
        public void CmdFillBuffer(IVkBuffer dstBuffer, ulong dstOffset, ulong size, int data)
        {
            var _commandBuffer = Handle;
            var _dstBuffer     = dstBuffer?.Handle ?? VkBuffer.HandleType.Null;
            var _dstOffset     = dstOffset;
            var _size          = size;
            var _data          = data;

            Direct.CmdFillBuffer(_commandBuffer, _dstBuffer, _dstOffset, _size, _data);
        }
Example #7
0
        public void CmdCopyBuffer(IVkBuffer srcBuffer, IVkBuffer dstBuffer, IReadOnlyList <VkBufferCopy> regions)
        {
            var unmanagedSize =
                regions.SizeOfMarshalDirect();
            var unmanagedArray = new byte[unmanagedSize];

            fixed(byte *unmanagedStart = unmanagedArray)
            {
                var unmanaged      = unmanagedStart;
                var _commandBuffer = Handle;
                var _srcBuffer     = srcBuffer?.Handle ?? VkBuffer.HandleType.Null;
                var _dstBuffer     = dstBuffer?.Handle ?? VkBuffer.HandleType.Null;
                var _regionCount   = regions?.Count ?? 0;
                var _pRegions      = regions.MarshalDirect(ref unmanaged);

                Direct.CmdCopyBuffer(_commandBuffer, _srcBuffer, _dstBuffer, _regionCount, _pRegions);
            }
        }
Example #8
0
        private void CreateBuffer(ulong size, VkBufferUsageFlags usage, VkMemoryPropertyFlags properties, out IVkBuffer buffer, out IVkDeviceMemory bufferMemory)
        {
            buffer = device.CreateBuffer(new VkBufferCreateInfo
            {
                Size        = size,
                Usage       = usage,
                SharingMode = VkSharingMode.Exclusive
            }, null).Object;

            var memRequirements = buffer.GetMemoryRequirements();

            bufferMemory = device.AllocateMemory(new VkMemoryAllocateInfo
            {
                AllocationSize  = memRequirements.Size,
                MemoryTypeIndex = FindMemoryType(memRequirements.MemoryTypeBits, properties)
            }, null).Object;

            buffer.BindMemory(bufferMemory, 0).CheckSuccess();
        }
Example #9
0
        public void CmdCopyQueryPoolResults(IVkQueryPool queryPool, int firstQuery, int queryCount, IVkBuffer dstBuffer, ulong dstOffset, ulong stride, VkQueryResultFlags flags)
        {
            var _commandBuffer = Handle;
            var _queryPool     = queryPool?.Handle ?? VkQueryPool.HandleType.Null;
            var _firstQuery    = firstQuery;
            var _queryCount    = queryCount;
            var _dstBuffer     = dstBuffer?.Handle ?? VkBuffer.HandleType.Null;
            var _dstOffset     = dstOffset;
            var _stride        = stride;
            var _flags         = flags;

            Direct.CmdCopyQueryPoolResults(_commandBuffer, _queryPool, _firstQuery, _queryCount, _dstBuffer, _dstOffset, _stride, _flags);
        }
Example #10
0
 public void CmdDrawIndexedIndirect(IVkBuffer buffer, ulong offset, int drawCount, int stride)
 {
     var _commandBuffer = Handle;
     var _buffer = buffer?.Handle ?? VkBuffer.HandleType.Null;
     var _offset = offset;
     var _drawCount = drawCount;
     var _stride = stride;
     Direct.CmdDrawIndexedIndirect(_commandBuffer, _buffer, _offset, _drawCount, _stride);
 }
Example #11
0
 public void CmdDispatchIndirect(IVkBuffer buffer, ulong offset)
 {
     var _commandBuffer = Handle;
     var _buffer = buffer?.Handle ?? VkBuffer.HandleType.Null;
     var _offset = offset;
     Direct.CmdDispatchIndirect(_commandBuffer, _buffer, _offset);
 }
Example #12
0
 public void CmdBindIndexBuffer(IVkBuffer buffer, ulong offset, VkIndexType indexType)
 {
     var _commandBuffer = Handle;
     var _buffer = buffer?.Handle ?? VkBuffer.HandleType.Null;
     var _offset = offset;
     var _indexType = indexType;
     Direct.CmdBindIndexBuffer(_commandBuffer, _buffer, _offset, _indexType);
 }
Example #13
0
 public void CmdCopyImageToBuffer(IVkImage srcImage, VkImageLayout srcImageLayout, IVkBuffer dstBuffer, IReadOnlyList<VkBufferImageCopy> regions)
 {
     var unmanagedSize =
         regions.SizeOfMarshalDirect();
     var unmanagedArray = new byte[unmanagedSize];
     fixed (byte* unmanagedStart = unmanagedArray)
     {
         var unmanaged = unmanagedStart;
         var _commandBuffer = Handle;
         var _srcImage = srcImage?.Handle ?? VkImage.HandleType.Null;
         var _srcImageLayout = srcImageLayout;
         var _dstBuffer = dstBuffer?.Handle ?? VkBuffer.HandleType.Null;
         var _regionCount = regions?.Count ?? 0;
         var _pRegions = regions.MarshalDirect(ref unmanaged);
         Direct.CmdCopyImageToBuffer(_commandBuffer, _srcImage, _srcImageLayout, _dstBuffer, _regionCount, _pRegions);
     }
 }
Example #14
0
 public void CmdUpdateBuffer(IVkBuffer dstBuffer, ulong dstOffset, ulong dataSize, IntPtr data)
 {
     var _commandBuffer = Handle;
     var _dstBuffer = dstBuffer?.Handle ?? VkBuffer.HandleType.Null;
     var _dstOffset = dstOffset;
     var _dataSize = dataSize;
     var _pData = data;
     Direct.CmdUpdateBuffer(_commandBuffer, _dstBuffer, _dstOffset, _dataSize, _pData);
 }
Example #15
0
 public void CmdFillBuffer(IVkBuffer dstBuffer, ulong dstOffset, ulong size, int data)
 {
     var _commandBuffer = Handle;
     var _dstBuffer = dstBuffer?.Handle ?? VkBuffer.HandleType.Null;
     var _dstOffset = dstOffset;
     var _size = size;
     var _data = data;
     Direct.CmdFillBuffer(_commandBuffer, _dstBuffer, _dstOffset, _size, _data);
 }
Example #16
0
 public void CmdCopyQueryPoolResults(IVkQueryPool queryPool, int firstQuery, int queryCount, IVkBuffer dstBuffer, ulong dstOffset, ulong stride, VkQueryResultFlags flags)
 {
     var _commandBuffer = Handle;
     var _queryPool = queryPool?.Handle ?? VkQueryPool.HandleType.Null;
     var _firstQuery = firstQuery;
     var _queryCount = queryCount;
     var _dstBuffer = dstBuffer?.Handle ?? VkBuffer.HandleType.Null;
     var _dstOffset = dstOffset;
     var _stride = stride;
     var _flags = flags;
     Direct.CmdCopyQueryPoolResults(_commandBuffer, _queryPool, _firstQuery, _queryCount, _dstBuffer, _dstOffset, _stride, _flags);
 }