mirror of
https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator
synced 2024-11-05 04:10:06 +00:00
Minor updates in README.
This commit is contained in:
parent
ff1cf54330
commit
a1bd730379
25
README.md
25
README.md
@ -26,22 +26,23 @@ Memory allocation and resource (buffer and image) creation in Vulkan is difficul
|
|||||||
|
|
||||||
# Features
|
# Features
|
||||||
|
|
||||||
This library can help game developers to manage memory allocations and resource creation by offering some higher-level functions. Features of the library are divided into several layers, low level to high level:
|
This library can help game developers to manage memory allocations and resource creation by offering some higher-level functions:
|
||||||
|
|
||||||
1. Functions that help to choose correct and optimal memory type based on intended usage of the memory.
|
1. Functions that help to choose correct and optimal memory type based on intended usage of the memory.
|
||||||
- Required or preferred traits of the memory are expressed using higher-level description comparing to Vulkan flags.
|
- Required or preferred traits of the memory are expressed using higher-level description comparing to Vulkan flags.
|
||||||
2. Functions that allocate memory blocks, reserve and return parts of them (`VkDeviceMemory` + offset + size) to the user.
|
2. Functions that allocate memory blocks, reserve and return parts of them (`VkDeviceMemory` + offset + size) to the user.
|
||||||
- Library keeps track of allocated memory blocks, used and unused ranges inside them, finds best matching unused ranges for new allocations, takes all the rules of alignment and buffer/image granularity into consideration.
|
- Library keeps track of allocated memory blocks, used and unused ranges inside them, finds best matching unused ranges for new allocations, respects all the rules of alignment and buffer/image granularity.
|
||||||
3. Functions that can create an image/buffer, allocate memory for it and bind them together - all in one call.
|
3. Functions that can create an image/buffer, allocate memory for it and bind them together - all in one call.
|
||||||
|
|
||||||
Additional features:
|
Additional features:
|
||||||
|
|
||||||
|
- Well-documented - description of all functions and structures provided, along with chapters that contain general description and example code.
|
||||||
- Thread-safety: Library is designed to be used by multithreaded code.
|
- Thread-safety: Library is designed to be used by multithreaded code.
|
||||||
- Configuration: Fill optional members of CreateInfo structure to provide custom CPU memory allocator and other parameters.
|
- Configuration: Fill optional members of CreateInfo structure to provide custom CPU memory allocator, pointers to Vulkan functions and other parameters.
|
||||||
- Customization: Predefine appropriate macros to provide your own implementation of all external facilities used by the library, from assert, mutex, and atomic, to vector and linked list.
|
- Customization: Predefine appropriate macros to provide your own implementation of all external facilities used by the library, from assert, mutex, and atomic, to vector and linked list.
|
||||||
- Support memory mapping, reference-counted internally. Support for persistently mapped memory: Just allocate with appropriate flag and you get access to mapped pointer.
|
- Support for memory mapping, reference-counted internally. Support for persistently mapped memory: Just allocate with appropriate flag and you get access to mapped pointer.
|
||||||
- Custom memory pools: Create a pool with desired parameters (e.g. fixed or limited maximum size) and allocate memory out of it.
|
- Custom memory pools: Create a pool with desired parameters (e.g. fixed or limited maximum size) and allocate memory out of it.
|
||||||
- Support for VK_KHR_dedicated_allocation extension: Enable it and it will be used automatically by the library.
|
- Support for VK_KHR_dedicated_allocation extension: Just enable it and it will be used automatically by the library.
|
||||||
- Defragmentation: Call one function and let the library move data around to free some memory blocks and make your allocations better compacted.
|
- Defragmentation: Call one function and let the library move data around to free some memory blocks and make your allocations better compacted.
|
||||||
- Lost allocations: Allocate memory with appropriate flags and let the library remove allocations that are not used for many frames to make room for new ones.
|
- Lost allocations: Allocate memory with appropriate flags and let the library remove allocations that are not used for many frames to make room for new ones.
|
||||||
- Statistics: Obtain detailed statistics about the amount of memory used, unused, number of allocated blocks, number of allocations etc. - globally, per memory heap, and per memory type.
|
- Statistics: Obtain detailed statistics about the amount of memory used, unused, number of allocated blocks, number of allocations etc. - globally, per memory heap, and per memory type.
|
||||||
@ -52,9 +53,9 @@ Additional features:
|
|||||||
|
|
||||||
- Self-contained C++ library in single header file. No external dependencies other than standard C and C++ library and of course Vulkan.
|
- Self-contained C++ library in single header file. No external dependencies other than standard C and C++ library and of course Vulkan.
|
||||||
- Public interface in C, in same convention as Vulkan API. Implementation in C++.
|
- Public interface in C, in same convention as Vulkan API. Implementation in C++.
|
||||||
- Interface documented using Doxygen-style comments.
|
|
||||||
- Platform-independent, but developed and tested on Windows using Visual Studio.
|
|
||||||
- Error handling implemented by returning `VkResult` error codes - same way as in Vulkan.
|
- Error handling implemented by returning `VkResult` error codes - same way as in Vulkan.
|
||||||
|
- Interface documented using Doxygen-style comments.
|
||||||
|
- Platform-independent, but developed and tested on Windows using Visual Studio. Continuous integration setup for Windows and Linux. Tested also on Android and MacOS.
|
||||||
|
|
||||||
# Example
|
# Example
|
||||||
|
|
||||||
@ -79,7 +80,7 @@ With this one function call:
|
|||||||
2. `VkDeviceMemory` block is allocated if needed.
|
2. `VkDeviceMemory` block is allocated if needed.
|
||||||
3. An unused region of the memory block is bound to this buffer.
|
3. An unused region of the memory block is bound to this buffer.
|
||||||
|
|
||||||
`VmaAllocation` is an object that represents memory assigned to this buffer. It can be queried for parameters useful e.g. if you want to map the memory on host.
|
`VmaAllocation` is an object that represents memory assigned to this buffer. It can be queried for parameters like Vulkan memory handle and offset.
|
||||||
|
|
||||||
# Read more
|
# Read more
|
||||||
|
|
||||||
@ -87,12 +88,12 @@ See **[Documentation](https://gpuopen-librariesandsdks.github.io/VulkanMemoryAll
|
|||||||
|
|
||||||
# Software using this library
|
# Software using this library
|
||||||
|
|
||||||
- **[Anvil](https://github.com/GPUOpen-LibrariesAndSDKs/Anvil)** - cross-platform framework for Vulkan
|
- **[Anvil](https://github.com/GPUOpen-LibrariesAndSDKs/Anvil)** - cross-platform framework for Vulkan. License: MIT.
|
||||||
- **[vkDOOM3](https://github.com/DustinHLand/vkDOOM3)** - Vulkan port of GPL DOOM 3 BFG Edition
|
- **[vkDOOM3](https://github.com/DustinHLand/vkDOOM3)** - Vulkan port of GPL DOOM 3 BFG Edition. License: GNU GPL.
|
||||||
- **[Lightweight Java Game Library (LWJGL)](https://www.lwjgl.org/)** - includes binding of the library for Java
|
- **[Lightweight Java Game Library (LWJGL)](https://www.lwjgl.org/)** - includes binding of the library for Java. License: BSD.
|
||||||
|
|
||||||
# See also
|
# See also
|
||||||
|
|
||||||
- **[Awesome Vulkan](https://github.com/vinjn/awesome-vulkan)** - a curated list of awesome Vulkan libraries, debuggers and resources.
|
- **[Awesome Vulkan](https://github.com/vinjn/awesome-vulkan)** - a curated list of awesome Vulkan libraries, debuggers and resources.
|
||||||
- **[PyVMA](https://github.com/realitix/pyvma)** - Python wrapper for this library. Author: Jean-Sébastien B. (@realitix). License: Apache 2.0.
|
- **[PyVMA](https://github.com/realitix/pyvma)** - Python wrapper for this library. Author: Jean-Sébastien B. (@realitix). License: Apache 2.0.
|
||||||
- **[vulkan-malloc](https://github.com/dylanede/vulkan-malloc)** - Vulkan memory allocation library for Rust. Based on version 1 of this library. Author: Dylan Ede (@dylanede). License: MIT / Apache 2.0.
|
- **[vulkan-malloc](https://github.com/dylanede/vulkan-malloc)** - Vulkan memory allocation library for Rust. Based on version 1 of this library. Author: Dylan Ede (@dylanede). License: MIT / Apache 2.0.
|
||||||
|
Loading…
Reference in New Issue
Block a user