10.2.2. 延迟内存分配
若从堆中分配的内存带有VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
标志位, 这个对象对应的内存可能被Vulkan实现延迟分配。 内存真实的提交大小初始的时候可能最小为0(也可能可要求的一样大),当更多的内存被使用时不断的增长。
A memory type with this flag set is only allowed to be bound to a VkImage
whose usage flags include VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT
.
注意 Using lazily allocated memory objects for framebuffer attachments that are not needed once a render pass instance has completed may allow some implementations to never allocate memory for such attachments. |
为了查询当前给一个内存对象提交的延迟分配的内存量,可调用:
void vkGetDeviceMemoryCommitment(
VkDevice device,
VkDeviceMemory memory,
VkDeviceSize* pCommittedMemoryInBytes);
-
device
是拥有内存的逻辑设备。 -
memory
是被查询的内存对象。 -
pCommittedMemoryInBytes
是一个指针,指向一个VkDeviceSize
, 若成功返回,其记录了当前被提交的字节数。
Vulkan实现也许会在任何时刻更新提交的内存,所以这个查询返回的值可能是过期的。
Vulkan实现保证 从内存对象被创建带有的内存类型指示的heapIndex 分配被提交的内存。
正确使用
-
memory
must have been created with a memory type that reportsVK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
Valid Usage (Implicit)
-
device
must be a validVkDevice
handle -
memory
must be a validVkDeviceMemory
handle -
pCommittedMemoryInBytes
must be a pointer to aVkDeviceSize
value -
memory
must have been created, allocated, or retrieved fromdevice