稀疏资源
Vulkan 稀疏资源是一种创建VkBuffer
和VkImage
对象的方法,这些对象可以不连续地绑定到一个或多个VkDeviceMemory
分配上,Vulkan Spec详细说明了稀疏资源的许多功能特性。implementation guidelines指出,大多数驱动使用稀疏资源向应用程序公开内存的线性虚拟地址范围,同时在绑定时将每个稀疏块映射到物理页。
绑定稀疏内存
与调用vkBindBufferMemory()
或vkBindImageMemory()
绑定普通资源不同的是,稀疏内存是通过 queue operation绑定的。这样做的主要优点是,应用程序可以在其整个生命周期内将内存重新绑 定到一个稀疏资源。
注意,应用程序必须使用同步原语来保证其他队列不会在绑定更改的同时访问这块内存。另外应用程序不得访问绑定到已释放内存的资源。
稀疏缓冲区
以下示例展示了稀疏VkBuffer
在内存中的分布。多数驱动实现使用 64 KB 的VkBuffer
稀疏块大小(实际大小在VkMemoryRequirements::alignment
中返回)。
假设有一个 256 KB 的VkBuffer
,应用程序需要单独更新 3 个Section:
- Section A - 64 KB
- Section B - 128 KB
- Section C - 64 KB
应用程序看到的VkBuffer
视图:
稀疏图像
Mip 尾部区域
稀疏图像可用于单独更新 mip levels,从而产生 mip 尾部区域。