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 }); }
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); }
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); }
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); }
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); }
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); }
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); } }
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(); }
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); }
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); } }