2020/10/14 在文章最后增加了一条Vulkan内存分配信息
2020/10/15 修改原先说明当使用Vulkan 1.2时VMA的行为
2020/10/20 修改结构图,增加VmaDeviceMemoryBlock、VmaBlockMetadata和VmaBlockMetadata_Generic类的结构图
目前正在使用Vulkan搭建引擎,目前处于起步阶段,打算写得差不多了开源出来。当设计VkBuffer、VkImage和VkMemory时当时考虑到自己写一个内存管理分配器,手里也没有什么好的参考材料,查阅Vulkan资料时偶然之间查阅到AMD公司有一个开源的Vulkan内存管理项目:Vulkan® Memory Allocator (VMA)就打算研究研究并将其加入到引擎中,顺便将研究结果分享一下,目前还在同步研究中。
目前VMA并没有包括Vulkan中所有的内存相关操作,比如Transfer,导入导出外部内存等。VMA实现了最常见的内存相关管理。
VMA的在线文档可能要梯子(我是没打开),你可以从VMA的Github中获取文档。
VMA文档说最新版本的VMA支持Vulkan1.0和Vulkan 1.1,我看了一下源码Vulkan1.2也行(内部用的Vulkan1.1,Vulkan1.2内存标准没啥变化)
说明:
1.(修改“Vulkan1.2内存标准没啥变化”这句话)当使用Vulkan 1.2时在创建 VmaAllocator 时可以使用 VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT 用于指定VMA内部获取设备内存地址。VMA内部其实是使用在低于Vulkan 1.1版本为扩展而Vulkan 1.2中成为核心标准的 VK_KHR_buffer_device_address扩展,Vulkan 1.2 标准中为调用如下函数获取:
// Provided by VK_VERSION_1

本文介绍了在Vulkan引擎开发中使用VulkanMemoryAllocator(VMA)进行内存管理的实践。VMA是一个由AMD开源的内存管理库,支持Vulkan1.0和1.1,同时也兼容1.2,特别是利用Vulkan1.2的设备内存地址功能。文章详细阐述了VMA如何进行内存分配,并提供了相关结构图和源码分析,帮助理解其工作原理。同时,作者建议对内存管理不熟悉的读者阅读侯捷的C++内存管理书籍。此外,文章还提及了AMD为DX12提供的类似内存管理项目D3D12MemoryAllocator。
最低0.47元/天 解锁文章
1240

被折叠的 条评论
为什么被折叠?



