/// <summary> /// Allocates a new memory pool. /// </summary> /// <param name="dev">Device to allocate on</param> /// <param name="blockSize">Memory block size</param> /// <param name="blockCount">Number of blocks to allocate</param> /// <param name="usage">buffer usage</param> /// <param name="flags">buffer creation flags</param> /// <param name="memoryType">Memory to use</param> /// <param name="sharedQueueFamilies">Concurrency mode, or exclusive if empty</param> public BufferPool(Device dev, ulong blockSize, ulong blockCount, VkBufferUsageFlag usage, VkBufferCreateFlag flags, MemoryType memoryType, params uint[] sharedQueueFamilies) { Device = dev; var bitAlignment = (uint)System.Math.Ceiling(System.Math.Log(blockSize) / System.Math.Log(2)); blockSize = (1UL << (int)bitAlignment); _pool = new MemoryPool(blockSize * blockCount, bitAlignment); _buffer = new PooledMemoryBuffer(dev, usage, flags, new MemoryRequirements() { TypeRequirements = new VkMemoryRequirements() { MemoryTypeBits = 1u << (int)memoryType.TypeIndex } }, blockSize * blockCount, sharedQueueFamilies); }
/// <inheritdoc cref="IDisposable.Dispose"/> public void Dispose() { _buffer.Dispose(); _buffer = null; }