bort-vma

MIT APACHE2

This crate provides an FFI layer and idiomatic rust wrappers for the excellent AMD Vulkan Memory Allocator (VMA) C/C++ library.

This is a fork of vk-mem-rs, originally created by @gwihlidal.

Problem

Memory allocation and resource (buffer and image) creation in Vulkan is difficult (comparing to older graphics API-s, like D3D11 or OpenGL) for several reasons:

Features

This crate can help game developers to manage memory allocations and resource creation by offering some higher-level functions:

Additional features:

Example

Basic usage of this crate is very simple; advanced features are optional.

After you create a vk_mem::Allocator instance, very little code is needed to create a buffer:

```rust // Create the buffer (GPU only, 16KiB in this example) let createinfo = vkmem::AllocationCreateInfo { usage: vk_mem::MemoryUsage::GpuOnly, ..Default::default() };

let (buffer, allocation, allocationinfo) = allocator .createbuffer( &ash::vk::BufferCreateInfo::builder() .size(16 * 1024) .usage(ash::vk::BufferUsageFlags::VERTEXBUFFER | ash::vk::BufferUsageFlags::TRANSFERDST) .build(), &create_info, ) .unwrap();

// Do stuff with buffer! (type is ash::vk::Buffer)

// Destroy the buffer allocator.destroy_buffer(buffer, &allocation).unwrap(); ```

With this one function call (vk_mem::Allocator::create_buffer):

MoltenVK

For MoltenVK on macOS, you need to have the proper environment variables set. Something like:

bash export SDK_PATH=/path/to/vulkansdk-macos-1.1.106.0 export DYLD_LIBRARY_PATH=$SDK_PATH/macOS/lib export VK_ICD_FILENAMES=$SDK_PATH/macOS/etc/vulkan/icd.d/MoltenVK_icd.json export VK_LAYER_PATH=$SDK_PATH/macOS/etc/vulkan/explicit_layer.d cargo test

Compiling using MinGW W64

Vulkan Memory Allocator requires C++11 threads. MinGW W64 does not support these by default, so you need to switch to the posix build. For example, on debian you need to run the following:

bash update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix update-alternatives --set i686-w64-mingw32-gcc /usr/bin/i686-w64-mingw32-gcc-posix update-alternatives --set i686-w64-mingw32-g++ /usr/bin/i686-w64-mingw32-g++-posix

License

Licensed under either of

at your option.

Credits and Special Thanks

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Contributions are always welcome; please look at the issue tracker to see what known improvements are documented.