Module vulkano::buffer
[−]
[src]
Location in memory that contains data.
All buffers are guaranteed to be accessible from the GPU.
High-level wrappers
The low level implementation of a buffer is UnsafeBuffer
. However, the vulkano library
provides high-level wrappers around that type that are specialized depending on the way you
are going to use it:
CpuAccessBuffer
designates a buffer located in RAM and whose content can be directly written by your application.DeviceLocalBuffer
designates a buffer located in video memory and whose content can't be written by your application. Accessing this buffer from the GPU is usually faster than theCpuAccessBuffer
.ImmutableBuffer
designates a buffer in video memory and whose content can only be written once. Compared toDeviceLocalBuffer
, this buffer requires less processing on the CPU because we don't need to keep track of the reads and writes.
If you have data that is modified at every single frame, you are encouraged to use a
CpuAccessibleBuffer
. If you have data that is very rarely modified, you are encouraged to
use an ImmutableBuffer
or a DeviceLocalBuffer
instead.
If you just want to get started, you can use the CpuAccessibleBuffer
everywhere, as it is
the most flexible type of buffer.
Buffers usage
When you create a buffer object, you have to specify its usage. In other words, you have to specify the way it is going to be used. Trying to use a buffer in a way that wasn't specified when you created it will result in an error.
You can use buffers for the following purposes:
- Can contain arbitrary data that can be transferred from/to other buffers and images.
- Can be read and modified from a shader.
- Can be used as a source of vertices and indices.
- Can be used as a source of list of models for draw indirect commands.
Accessing a buffer from a shader can be done in the following ways:
- As a uniform buffer. Uniform buffers are read-only.
- As a storage buffer. Storage buffers can be read and written.
- As a uniform texel buffer. Contrary to a uniform buffer, the data is interpreted by the GPU and can be for example normalized.
- As a storage texel buffer. Additionnally, some data formats can be modified with atomic operations.
Using uniform/storage texel buffers requires creating a buffer view. See the view
module
for how to create a buffer view.
Reexports
pub use self::cpu_access::CpuAccessibleBuffer; |
pub use self::device_local::DeviceLocalBuffer; |
pub use self::immutable::ImmutableBuffer; |
pub use self::sys::BufferCreationError; |
pub use self::sys::Usage as BufferUsage; |
pub use self::traits::Buffer; |
pub use self::traits::TypedBuffer; |
pub use self::view::BufferView; |
Modules
cpu_access |
Buffer whose content is accessible to the CPU. |
device_local |
Buffer whose content is read-written by the GPU only. |
immutable |
Buffer that is written once then read for as long as it is alive. |
sys |
Low level implementation of buffers. |
traits | |
view |
View of a buffer, in order to use it as a uniform texel buffer or storage texel buffer. |
Structs
BufferSlice |
A subpart of a buffer. |