[][src]Crate nobs_vkmem

Vulkan memory management as extension to nobs-vk.

Buffer and image creation in vulkan is tricky in comparison to e.g. OpenGL, because

  1. We have to create the buffer/image and then later bind it to a vkDeviceMemory that has to be created separately.
  2. Creating a single vkDeviceMemory allocation for every buffer/image is bad practice, in fact it is encouraged to bind esources that are used together on the same allocation.
  3. Another layer of difficulty is introduced with memory types, since not all resources (should) share the same memory properties - which is different for each Driver/Vendor

nobs-vkmem provides convenient and accessible methods for creating buffers and images and binding them to physical memory. This dramatically reduces boiler plate code, while still offers the user considerable control over how resources are bound to memory.

  1. Easy buffer and image creation with builder patterns.
  2. Device memory is allocated in larger pages. The library keeps track of free and used regions in a page.
  3. Offers different allocation strategies for different purposes, including forcing the binding of several resources to a continuous block, or binding resources on private pages.
  4. Easy mapping of host accessible buffers

Interfacing with this library is mainly handled in Allocator, with which buffers and images are bound to device memory.

Buffer and Image provide a convenient way to configure buffers/images and bind them to the allocator in bulk.

See Allocator to get a quick overview on how to use this library.

Structs

Allocator

Allocator for buffer and image resources

AllocatorSizes

Defines meta information for the Allocator

BindInfo

Bundles all information for the Allocator to perform a resource memory binding.

Buffer

Builder pattern for creating buffer resources

Image

Builder pattern for creating image resources

ImageView
Mapped

A mapped memory region

Resource

Generic builder for buffers and images

Enums

BindType

Strategy how resources are bound in the Allocator

Error

Errors that can be occure when using this crate

Handle

Enum defining resource types that can be bound