我正在为Vulkan设备内存实现一个天真的内存管理器,并希望确保我理解内存的对齐要求以及如何满足它们。
因此,假设我使用vkAllocateMemory分配了一个“池”内存,并希望将此池中的内存块分配给各个资源(基于VkMemoryRequirements结构),以下伪代码是否能够分配这个内存的一部分是否具有正确的大小和对齐要求?
换句话说,我们只需要确保Offset是RequiredAlignment的倍数吗?
答案 0 :(得分:2)
换句话说,我们只需要确保Offset是RequiredAlignment的倍数吗?
用于几乎足够的对齐。
<{3>} 有效使用要求中的是:
memoryOffset
必须是alignment
VkMemoryRequirements
结构的vkGetBufferMemoryRequirements
成员的整数倍,该buffer
结构是通过memoryOffset
alignment
调用返回的}}
并且vkBindbufferMemory的有效使用要求中有一个并行语句:
VkMemoryRequirements
必须是vkGetImageMemoryRequirements
image
结构的memoryTypeBits
成员的整数倍,该VkMemoryRequirements
结构是通过{{1}} {{1}}调用返回的}}
如果前一个块包含非线性资源,而当前块是线性的,反之亦然,那么对齐要求是VkMemoryRequirements.alignment和设备的bufferImageGranularity的最大值。这也需要检查内存块的结束。
但是您还需要考虑必须在{{1}}的{{1}}标记中设置池的内存类型。