Vulkan® Memory Allocator

The industry-leading, open source, memory allocation library for the Vulkan® API.

The Vulkan® Memory Allocator (VMA) library provides a simple and easy to integrate API to help you allocate memory for Vulkan® buffer and image storage.

| DOWNLOAD - Latest version 2.3

This release adds the following features:

  • Added support for Vulkan® 1.1 (Vulkan® 1.0 may still be used).
  • Added support for query for memory budget and staying within the budget with optional use of VK_EXT_memory_budget extension.
  • Added support for VK_KHR_bind_memory2 extension.

| BENEFITS

The library is battle-ready, and integrated into a majority of Vulkan® game titles on PC, as well as the Google Filament rendering engine, the official Khronos® Group Vulkan® Samples, and many other open source projects for Android™, Linux, MacOS, and Windows®.

  • Open source with MIT license.
  • Well documented, single header API.
  • Compatible with Vulkan® 1.0 and 1.1.
  • Easy allocation of buffer and image storage.
  • Defragmentation system.
  • Custom memory pools.
  • Easy integration into game engine (no dependency on STL containers, possibility to plug custom CPU allocator).
  • Support for many extensions, including VK_EXT_memory_budget .
  • Linear memory allocator for custom pools.
  • Gather detailed statistics and export them to JSON.
  • Visualization Python script for JSON output.
  • Record and replay allocations, for in-depth analysis of memory usage and resource transitions.
  • Support for non-coherent memory and flushing/invalidating allocations.
  • Sample application demonstrating how to use the library and a suite of tests.

| VERSION HISTORY

  • New, more powerful defragmentation:
    • Added structure VmaDefragmentationInfo2, functions vmaDefragmentationBeginvmaDefragmentationEnd.
    • Added support for defragmentation of GPU memory.
    • Defragmentation of CPU memory now uses memmove, so it can move data to overlapping regions.
    • Defragmentation of CPU memory is now available for memory types that are HOST_VISIBLE but not HOST_COHERENT.
    • Added structure member VmaVulkanFunctions::vkCmdCopyBuffer.
    • Major internal changes in defragmentation algorithm.
    • VmaReplay: added parameters: --DefragmentAfterLine--DefragmentationFlags.
    • Old interface (structure VmaDefragmentationInfo, function vmaDefragment) is now deprecated.
  • Added buddy algorithm, available for custom pools – flag VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT.
  • Added convenience functions for multiple allocations and deallocations at once, intended for sparse binding resources – functions vmaAllocateMemoryPagesvmaFreeMemoryPages.
  • Added function that tries to resize existing allocation in place: vmaResizeAllocation.
  • Added flags for allocation strategy: VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BITVMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT
    VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT, and their aliases: VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT
    VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BITVMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT.
  • Added linear allocation algorithm, accessible for custom pools, that can be used as free-at-once, stack, double stack, or ring buffer. See “Linear allocation algorithm” documentation chapter.
    • Added VMA_POOL_CREATE_LINEAR_ALGORITHM_BITVMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT.
  • Added feature to record sequence of calls to the library to a file and replay it using dedicated application. See documentation chapter “Record and replay”.
    • Recording: added VmaAllocatorCreateInfo::pRecordSettings.
    • Replaying: added VmaReplay project.
    • Recording file format: added document “docs/Recording file format.md”.
  • Improved support for non-coherent memory.
    • Added functions: vmaFlushAllocationvmaInvalidateAllocation.
    • nonCoherentAtomSize is now respected automatically.
    • Added VmaVulkanFunctions::vkFlushMappedMemoryRangesvkInvalidateMappedMemoryRanges.
  • Improved debug features related to detecting incorrect mapped memory usage. See documentation chapter “Debugging incorrect memory usage”.
    • Added debug macro VMA_DEBUG_DETECT_CORRUPTION, functions vmaCheckCorruptionvmaCheckPoolCorruption.
    • Added debug macro VMA_DEBUG_INITIALIZE_ALLOCATIONS to initialize contents of allocations with a bit pattern.
    • Changed behavior of VMA_DEBUG_MARGIN macro – it now adds margin also before first and after last allocation in a block.
  • Changed format of JSON dump returned by vmaBuildStatsString (not backward compatible!).
    • Custom pools and memory blocks now have IDs that don’t change after sorting.
    • Added properties: “CreationFrameIndex”, “LastUseFrameIndex”, “Usage”.
    • Changed VmaDumpVis tool to use these new properties for better coloring.
    • Changed behavior of vmaGetAllocationInfo and vmaTouchAllocation to update allocation.lastUseFrameIndex even if allocation cannot become lost.
  • Introduction of VmaAllocation handle that you must retrieve from allocation functions and pass to deallocation functions next to normal VkBuffer and VkImage.
  • Introduction of VmaAllocationInfo structure that you can retrieve from VmaAllocation handle to access parameters of the allocation (like VkDeviceMemory and offset) instead of retrieving them directly from allocation functions.
  • Support for reference-counted mapping and persistently mapped allocations – see vmaMapMemoryVMA_ALLOCATION_CREATE_MAPPED_BIT.
  • Support for custom memory pools – see VmaPool handle, VmaPoolCreateInfo structure, vmaCreatePool function.
  • Support for defragmentation (compaction) of allocations – see function vmaDefragment and related structures.
  • Support for “lost allocations” – see appropriate chapter on documentation Main Page.
  • Initial release.

| RELATED TO VULKAN® MEMORY ALLOCATOR

Radeon™ Memory Visualizer

Radeon™ Memory Visualizer (RMV) is a tool to allow you to gain a deep understanding of how your application uses memory for graphics resources.

Tools

Analyze, Optimize, Profile, Benchmark. We provide you with the developer tools you need to make sure your game is the best it can be!

Understanding Vulkan® objects

An important part of learning the Vulkan® API is to understand what types of objects are defined in it, what they represent and how they relate to each other.

| OUR OTHER SDKS

Radeon™ ProRender Suite

AMD Radeon™ ProRender is our fast, easy, and incredible physically-based rendering engine built on industry standards that enables accelerated rendering on virtually any GPU, any CPU, and any OS in over a dozen leading digital content creation and CAD applications.

Radeon™ ML

Radeon™ Machine Learning (Radeon™ ML or RML) is an AMD SDK for high-performance deep learning inference on GPUs.

Radeon™ Image Filtering Library

Harness the power of machine learning to enhance images with denoising, enabling your application to produce high quality images in a fraction of the time traditional denoising filters take.

Advanced Media Framework

The Advanced Media Framework SDK provides developers with optimal access to AMD GPUs for multimedia processing.

D3D12 Memory Allocator

The D3D12 Memory Allocator (D3D12MA) is a C++ library that provides a simple and easy to integrate API to help you allocate memory for DirectX®12 buffers and textures.

AMD Display (ADL) Library

The AMD Display Library (ADL) SDK is designed to access display driver functionality for AMD Radeon™ and AMD FirePro™ graphics cards.

AMD GPU Services (AGS) Library

The AMD GPU Services (AGS) library provides software developers with the ability to query AMD GPU software and hardware state information that is not normally available through standard operating systems or graphics APIs.

TrueAudio Next

AMD TrueAudio Next is a software development kit for GPU accelerated and multi-core high-performance audio signal processing.

Radeon™ ProRender

AMD Radeon™ ProRender is a powerful physically-based path traced rendering engine that enables creative professionals to produce stunningly photorealistic images.

Radeon™ Rays

The accelerated ray intersection library for DirectX®12, Vulkan®, HIP and CPU.

GPUPerfAPI

GPUPerfAPI provides access to GPU Performance Counters. It analyzes performance and execution characteristics of applications using a Radeon™ GPU.

Compressonator

Compressonator is a set of tools to allow artists and developers to more easily work with compressed assets and easily visualize the quality impact of various compression technologies.