Exemple #1
0
        /// <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);
        }
Exemple #2
0
 /// <inheritdoc cref="IDisposable.Dispose"/>
 public void Dispose()
 {
     _buffer.Dispose();
     _buffer = null;
 }