Vulkan® Memory Allocator (VMA)技术剖析计划

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

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值