2019-01-15 10:45:58 +00:00
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2017-10-17 09:27:14 +00:00
< html xmlns = "http://www.w3.org/1999/xhtml" >
< head >
< meta http-equiv = "Content-Type" content = "text/xhtml;charset=UTF-8" / >
< meta http-equiv = "X-UA-Compatible" content = "IE=9" / >
2019-11-02 14:24:33 +00:00
< meta name = "generator" content = "Doxygen 1.8.16" / >
2017-10-17 09:27:14 +00:00
< meta name = "viewport" content = "width=device-width, initial-scale=1" / >
< title > Vulkan Memory Allocator: Quick start< / title >
< link href = "tabs.css" rel = "stylesheet" type = "text/css" / >
< script type = "text/javascript" src = "jquery.js" > < / script >
< script type = "text/javascript" src = "dynsections.js" > < / script >
< link href = "search/search.css" rel = "stylesheet" type = "text/css" / >
< script type = "text/javascript" src = "search/searchdata.js" > < / script >
< script type = "text/javascript" src = "search/search.js" > < / script >
< link href = "doxygen.css" rel = "stylesheet" type = "text/css" / >
< / head >
< body >
< div id = "top" > <!-- do not remove this div, it is closed by doxygen! -->
< div id = "titlearea" >
< table cellspacing = "0" cellpadding = "0" >
< tbody >
< tr style = "height: 56px;" >
< td id = "projectalign" style = "padding-left: 0.5em;" >
< div id = "projectname" > Vulkan Memory Allocator
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
<!-- end header part -->
2019-11-02 14:24:33 +00:00
<!-- Generated by Doxygen 1.8.16 -->
2017-10-17 09:27:14 +00:00
< script type = "text/javascript" >
2018-09-10 09:14:05 +00:00
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3& dn=gpl-2.0.txt GPL-v2 */
2017-10-17 09:27:14 +00:00
var searchBox = new SearchBox("searchBox", "search",false,'Search');
2018-09-10 09:14:05 +00:00
/* @license-end */
2017-10-17 09:27:14 +00:00
< / script >
< script type = "text/javascript" src = "menudata.js" > < / script >
< script type = "text/javascript" src = "menu.js" > < / script >
< script type = "text/javascript" >
2018-09-10 09:14:05 +00:00
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3& dn=gpl-2.0.txt GPL-v2 */
2017-10-17 09:27:14 +00:00
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
2018-09-10 09:14:05 +00:00
/* @license-end */< / script >
2017-10-17 09:27:14 +00:00
< div id = "main-nav" > < / div >
<!-- window showing the filter options -->
< div id = "MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
< / div >
<!-- iframe showing the search results (closed by default) -->
< div id = "MSearchResultsWindow" >
< iframe src = "javascript:void(0)" frameborder = "0"
name="MSearchResults" id="MSearchResults">
< / iframe >
< / div >
< / div > <!-- top -->
2019-01-15 10:45:58 +00:00
< div class = "PageDoc" > < div class = "header" >
2017-10-17 09:27:14 +00:00
< div class = "headertitle" >
< div class = "title" > Quick start < / div > < / div >
< / div > <!-- header -->
< div class = "contents" >
2018-03-09 16:49:19 +00:00
< div class = "textblock" > < h1 > < a class = "anchor" id = "quick_start_project_setup" > < / a >
2017-11-08 11:52:05 +00:00
Project setup< / h1 >
2018-12-14 10:37:02 +00:00
< p > Vulkan Memory Allocator comes in form of a "stb-style" single header file. You don't need to build it as a separate library project. You can add this file directly to your project and submit it to code repository next to your other source files.< / p >
2018-03-09 16:49:19 +00:00
< p > "Single header" doesn't mean that everything is contained in C/C++ declarations, like it tends to be in case of inline functions or C++ templates. It means that implementation is bundled with interface in a single file and needs to be extracted using preprocessor macro. If you don't do it properly, you will get linker errors.< / p >
< p > To do it properly:< / p >
2017-10-17 09:27:14 +00:00
< ol type = "1" >
2018-03-09 16:49:19 +00:00
< li > Include "vk_mem_alloc.h" file in each CPP file where you want to use the library. This includes declarations of all members of the library.< / li >
< li > In exacly one CPP file define following macro before this include. It enables also internal definitions.< / li >
2017-10-17 09:27:14 +00:00
< / ol >
2019-11-02 14:24:33 +00:00
< div class = "fragment" > < div class = "line" > < span class = "preprocessor" > #define VMA_IMPLEMENTATION< / span > < / div >
< div class = "line" > < span class = "preprocessor" > #include " vk_mem_alloc.h" < / span > < / div >
< / div > <!-- fragment --> < p > It may be a good idea to create dedicated CPP file just for this purpose.< / p >
2018-10-18 10:03:50 +00:00
< p > Note on language: This library is written in C++, but has C-compatible interface. Thus you can include and use < a class = "el" href = "vk__mem__alloc_8h.html" > vk_mem_alloc.h< / a > in C or C++ code, but full implementation with < code > VMA_IMPLEMENTATION< / code > macro must be compiled as C++, NOT as C.< / p >
2018-09-10 09:14:05 +00:00
< p > Please note that this library includes header < code > < vulkan/vulkan.h> < / code > , which in turn includes < code > < windows.h> < / code > on Windows. If you need some specific macros defined before including these headers (like < code > WIN32_LEAN_AND_MEAN< / code > or < code > WINVER< / code > for Windows, < code > VK_USE_PLATFORM_WIN32_KHR< / code > for Vulkan), you must define them before every < code > #include< / code > of this library.< / p >
2018-03-12 14:34:32 +00:00
< h1 > < a class = "anchor" id = "quick_start_initialization" > < / a >
2017-11-08 11:52:05 +00:00
Initialization< / h1 >
< p > At program startup:< / p >
2017-10-17 09:27:14 +00:00
< ol type = "1" >
< li > Initialize Vulkan to have < code > VkPhysicalDevice< / code > and < code > VkDevice< / code > object.< / li >
2019-11-18 14:03:59 +00:00
< li > Fill < a class = "el" href = "struct_vma_allocator_create_info.html" title = "Description of a Allocator to be created." > VmaAllocatorCreateInfo< / a > structure and create < a class = "el" href = "struct_vma_allocator.html" title = "Represents main object of this library initialized." > VmaAllocator< / a > object by calling < a class = "el" href = "vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb" title = "Creates Allocator object." > vmaCreateAllocator()< / a > .< / li >
2017-10-17 09:27:14 +00:00
< / ol >
2019-11-02 14:24:33 +00:00
< div class = "fragment" > < div class = "line" > < a class = "code" href = "struct_vma_allocator_create_info.html" > VmaAllocatorCreateInfo< / a > allocatorInfo = {};< / div >
< div class = "line" > allocatorInfo.< a class = "code" href = "struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156" > physicalDevice< / a > = physicalDevice;< / div >
< div class = "line" > allocatorInfo.< a class = "code" href = "struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500" > device< / a > = device;< / div >
< div class = "line" > < / div >
< div class = "line" > < a class = "code" href = "struct_vma_allocator.html" > VmaAllocator< / a > allocator;< / div >
2019-11-18 14:03:59 +00:00
< div class = "line" > < a class = "code" href = "vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb" > vmaCreateAllocator< / a > (& allocatorInfo, & allocator);< / div >
2019-11-02 14:24:33 +00:00
< / div > <!-- fragment --> < h1 > < a class = "anchor" id = "quick_start_resource_allocation" > < / a >
2017-11-08 11:52:05 +00:00
Resource allocation< / h1 >
< p > When you want to create a buffer or image:< / p >
2017-10-17 09:27:14 +00:00
< ol type = "1" >
< li > Fill < code > VkBufferCreateInfo< / code > / < code > VkImageCreateInfo< / code > structure.< / li >
< li > Fill < a class = "el" href = "struct_vma_allocation_create_info.html" > VmaAllocationCreateInfo< / a > structure.< / li >
2019-11-18 14:03:59 +00:00
< li > Call < a class = "el" href = "vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51" > vmaCreateBuffer()< / a > / < a class = "el" href = "vk__mem__alloc_8h.html#a02a94f25679275851a53e82eacbcfc73" title = "Function similar to vmaCreateBuffer()." > vmaCreateImage()< / a > to get < code > VkBuffer< / code > /< code > VkImage< / code > with memory already allocated and bound to it.< / li >
2017-10-17 09:27:14 +00:00
< / ol >
2019-11-02 14:24:33 +00:00
< div class = "fragment" > < div class = "line" > VkBufferCreateInfo bufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };< / div >
< div class = "line" > bufferInfo.size = 65536;< / div >
< div class = "line" > bufferInfo.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;< / div >
< div class = "line" > < / div >
< div class = "line" > < a class = "code" href = "struct_vma_allocation_create_info.html" > VmaAllocationCreateInfo< / a > allocInfo = {};< / div >
< div class = "line" > allocInfo.< a class = "code" href = "struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910" > usage< / a > = < a class = "code" href = "vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7" > VMA_MEMORY_USAGE_GPU_ONLY< / a > ;< / div >
< div class = "line" > < / div >
< div class = "line" > VkBuffer buffer;< / div >
< div class = "line" > < a class = "code" href = "struct_vma_allocation.html" > VmaAllocation< / a > allocation;< / div >
2019-11-18 14:03:59 +00:00
< div class = "line" > < a class = "code" href = "vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51" > vmaCreateBuffer< / a > (allocator, & bufferInfo, & allocInfo, & buffer, & allocation, < span class = "keyword" > nullptr< / span > );< / div >
2019-11-02 14:24:33 +00:00
< / div > <!-- fragment --> < p > Don't forget to destroy your objects when no longer needed:< / p >
2019-11-18 14:03:59 +00:00
< div class = "fragment" > < div class = "line" > < a class = "code" href = "vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77" > vmaDestroyBuffer< / a > (allocator, buffer, allocation);< / div >
< div class = "line" > < a class = "code" href = "vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d" > vmaDestroyAllocator< / a > (allocator);< / div >
2019-11-02 14:24:33 +00:00
< / div > <!-- fragment --> < / div > < / div > <!-- contents -->
< / div > <!-- PageDoc -->
< div class = "ttc" id = "astruct_vma_allocator_create_info_html_a08230f04ae6ccf8a78150a9e829a7156" > < div class = "ttname" > < a href = "struct_vma_allocator_create_info.html#a08230f04ae6ccf8a78150a9e829a7156" > VmaAllocatorCreateInfo::physicalDevice< / a > < / div > < div class = "ttdeci" > VkPhysicalDevice physicalDevice< / div > < div class = "ttdoc" > Vulkan physical device.< / div > < div class = "ttdef" > < b > Definition:< / b > vk_mem_alloc.h:1982< / div > < / div >
< div class = "ttc" id = "astruct_vma_allocator_html" > < div class = "ttname" > < a href = "struct_vma_allocator.html" > VmaAllocator< / a > < / div > < div class = "ttdoc" > Represents main object of this library initialized.< / div > < / div >
< div class = "ttc" id = "astruct_vma_allocator_create_info_html" > < div class = "ttname" > < a href = "struct_vma_allocator_create_info.html" > VmaAllocatorCreateInfo< / a > < / div > < div class = "ttdoc" > Description of a Allocator to be created.< / div > < div class = "ttdef" > < b > Definition:< / b > vk_mem_alloc.h:1976< / div > < / div >
< div class = "ttc" id = "astruct_vma_allocation_html" > < div class = "ttname" > < a href = "struct_vma_allocation.html" > VmaAllocation< / a > < / div > < div class = "ttdoc" > Represents single memory allocation.< / div > < / div >
2019-11-18 14:03:59 +00:00
< div class = "ttc" id = "avk__mem__alloc_8h_html_aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7" > < div class = "ttname" > < a href = "vk__mem__alloc_8h.html#aa5846affa1e9da3800e3e78fae2305ccac6b5dc1432d88647aa4cd456246eadf7" > VMA_MEMORY_USAGE_GPU_ONLY< / a > < / div > < div class = "ttdef" > < b > Definition:< / b > vk_mem_alloc.h:2254< / div > < / div >
< div class = "ttc" id = "avk__mem__alloc_8h_html_aa8d164061c88f22fb1fd3c8f3534bc1d" > < div class = "ttname" > < a href = "vk__mem__alloc_8h.html#aa8d164061c88f22fb1fd3c8f3534bc1d" > vmaDestroyAllocator< / a > < / div > < div class = "ttdeci" > void vmaDestroyAllocator(VmaAllocator allocator)< / div > < div class = "ttdoc" > Destroys allocator object.< / div > < / div >
2019-11-02 14:24:33 +00:00
< div class = "ttc" id = "astruct_vma_allocator_create_info_html_ad924ddd77b04039c88d0c09b0ffcd500" > < div class = "ttname" > < a href = "struct_vma_allocator_create_info.html#ad924ddd77b04039c88d0c09b0ffcd500" > VmaAllocatorCreateInfo::device< / a > < / div > < div class = "ttdeci" > VkDevice device< / div > < div class = "ttdoc" > Vulkan device.< / div > < div class = "ttdef" > < b > Definition:< / b > vk_mem_alloc.h:1985< / div > < / div >
2019-11-18 14:03:59 +00:00
< div class = "ttc" id = "astruct_vma_allocation_create_info_html_accb8b06b1f677d858cb9af20705fa910" > < div class = "ttname" > < a href = "struct_vma_allocation_create_info.html#accb8b06b1f677d858cb9af20705fa910" > VmaAllocationCreateInfo::usage< / a > < / div > < div class = "ttdeci" > VmaMemoryUsage usage< / div > < div class = "ttdoc" > Intended usage of memory.< / div > < div class = "ttdef" > < b > Definition:< / b > vk_mem_alloc.h:2405< / div > < / div >
< div class = "ttc" id = "avk__mem__alloc_8h_html_ac72ee55598617e8eecca384e746bab51" > < div class = "ttname" > < a href = "vk__mem__alloc_8h.html#ac72ee55598617e8eecca384e746bab51" > vmaCreateBuffer< / a > < / div > < div class = "ttdeci" > VkResult vmaCreateBuffer(VmaAllocator allocator, const VkBufferCreateInfo *pBufferCreateInfo, const VmaAllocationCreateInfo *pAllocationCreateInfo, VkBuffer *pBuffer, VmaAllocation *pAllocation, VmaAllocationInfo *pAllocationInfo)< / div > < / div >
< div class = "ttc" id = "avk__mem__alloc_8h_html_a200692051ddb34240248234f5f4c17bb" > < div class = "ttname" > < a href = "vk__mem__alloc_8h.html#a200692051ddb34240248234f5f4c17bb" > vmaCreateAllocator< / a > < / div > < div class = "ttdeci" > VkResult vmaCreateAllocator(const VmaAllocatorCreateInfo *pCreateInfo, VmaAllocator *pAllocator)< / div > < div class = "ttdoc" > Creates Allocator object.< / div > < / div >
< div class = "ttc" id = "avk__mem__alloc_8h_html_a0d9f4e4ba5bf9aab1f1c746387753d77" > < div class = "ttname" > < a href = "vk__mem__alloc_8h.html#a0d9f4e4ba5bf9aab1f1c746387753d77" > vmaDestroyBuffer< / a > < / div > < div class = "ttdeci" > void vmaDestroyBuffer(VmaAllocator allocator, VkBuffer buffer, VmaAllocation allocation)< / div > < div class = "ttdoc" > Destroys Vulkan buffer and frees allocated memory.< / div > < / div >
< div class = "ttc" id = "astruct_vma_allocation_create_info_html" > < div class = "ttname" > < a href = "struct_vma_allocation_create_info.html" > VmaAllocationCreateInfo< / a > < / div > < div class = "ttdef" > < b > Definition:< / b > vk_mem_alloc.h:2396< / div > < / div >
2017-10-17 09:27:14 +00:00
<!-- start footer part -->
< hr class = "footer" / > < address class = "footer" > < small >
Generated by   < a href = "http://www.doxygen.org/index.html" >
< img class = "footer" src = "doxygen.png" alt = "doxygen" / >
2019-11-02 14:24:33 +00:00
< / a > 1.8.16
2017-10-17 09:27:14 +00:00
< / small > < / address >
< / body >
< / html >