Esempio n. 1
0
 /// <summary>
 /// Sets the region of a buffer at a given slot.
 /// </summary>
 /// <param name="index">Buffer slot</param>
 /// <param name="address">Region virtual address</param>
 /// <param name="size">Region size in bytes</param>
 public void SetBounds(int index, ulong address, ulong size, BufferUsageFlags flags = BufferUsageFlags.None)
 {
     Buffers[index] = new BufferBounds(address, size, flags);
 }
Esempio n. 2
0
        public BufferDescriptor SetFlag(BufferUsageFlags flag)
        {
            Flags |= flag;

            return(this);
        }
Esempio n. 3
0
        /// <summary>
        /// Sets a storage buffer on the graphics pipeline.
        /// Storage buffers can be read and written to on shaders.
        /// </summary>
        /// <param name="stage">Index of the shader stage</param>
        /// <param name="index">Index of the storage buffer</param>
        /// <param name="gpuVa">Start GPU virtual address of the buffer</param>
        /// <param name="size">Size in bytes of the storage buffer</param>
        public void SetGraphicsStorageBuffer(int stage, int index, ulong gpuVa, ulong size, BufferUsageFlags flags)
        {
            size += gpuVa & ((ulong)_context.Capabilities.StorageBufferOffsetAlignment - 1);

            gpuVa = BitUtils.AlignDown(gpuVa, _context.Capabilities.StorageBufferOffsetAlignment);

            ulong address = TranslateAndCreateBuffer(gpuVa, size);

            if (_gpStorageBuffers[stage].Buffers[index].Address != address ||
                _gpStorageBuffers[stage].Buffers[index].Size != size)
            {
                _gpStorageBuffersDirty = true;
            }

            _gpStorageBuffers[stage].SetBounds(index, address, size, flags);
        }
Esempio n. 4
0
        Buffer CreateBuffer(DeviceSize size, BufferUsageFlags flags)
        {
            var bufferCreateInfo = new BufferCreateInfo(size, flags, SharingMode.Exclusive, null);

            return(device.CreateBuffer(bufferCreateInfo));
        }
Esempio n. 5
0
 public InputBindingFloat(BufferUsageFlags bufferUsageFlags, List <float> data, int index) : base(bufferUsageFlags, index)
 {
     BufferWithMemory = VContext.Instance.BufferManager.CreateBuffer(bufferUsageFlags, data.Count() * sizeof(float), data.ToArray());
 }
Esempio n. 6
0
 public InputBindingV3(BufferUsageFlags bufferUsageFlags, List <Vector3> data, int index) : base(bufferUsageFlags, index)
 {
     BufferWithMemory = VContext.Instance.BufferManager.CreateBuffer(bufferUsageFlags, data.Count() * Vector3.SizeInBytes, data.ToArray());
 }
Esempio n. 7
0
 protected UniformBuffer(GraphicsDevice device, ulong size, BufferUsageFlags flags,
                         BufferMemoryUsageHint usageHint, uint location) : base(device, size, flags, usageHint)
 {
     this.location = location;
 }
        public VulkanBuffer CreateBuffer(ulong size, BufferUsageFlags usage, MemoryPropertyFlags properties)
        {
            this.CreateBuffer(size, usage, properties, out var buffer, out var _, out DeviceSize _);

            return(new VulkanBuffer(this, buffer, size));
        }
 public VulkanBuffer CreateBuffer <T>(int count, BufferUsageFlags usage, MemoryPropertyFlags properties)
 {
     return(this.CreateBuffer((uint)(Marshal.SizeOf <T>() * count), usage, properties));
 }
Esempio n. 10
0
 /// <summary>
 /// Creates a new buffer region.
 /// </summary>
 /// <param name="address">Region address</param>
 /// <param name="size">Region size</param>
 /// <param name="flags">Buffer usage flags</param>
 public BufferBounds(ulong address, ulong size, BufferUsageFlags flags = BufferUsageFlags.None)
 {
     Address = address;
     Size    = size;
     Flags   = flags;
 }