我正在为Vulkan设备内存实现一个简单的内存管理器,并希望确保我了解内存的对齐要求以及如何满足它们。
因此,假设我已经使用vkAllocateMemory分配了一个“内存池”,并且希望将这个池中的内存块子分配给单个资源(基于VkMemoryRequirements结构),那么下面的伪代码能够按照正确的大小和对齐要求分配内存的一部分吗?
换句话说,我们是否只需要确保偏移量是RequiredAlignment的倍数?
发布于 2017-08-02 11:08:55
换句话说,我们是否只需要确保偏移量是RequiredAlignment的倍数?
对于对齐而言,这几乎足够了。
在vkBindbufferMemory中,有效的使用要求之一是:
memoryOffset必须是从对vkGetBufferMemoryRequirements的buffer调用返回的VkMemoryRequirements结构的alignment成员的整数倍数。
在vkBindImageMemory的有效使用要求中有一个并行语句
memoryOffset必须是从对vkGetImageMemoryRequirements的image调用返回的VkMemoryRequirements结构的alignment成员的整数倍数。
如果前面的块包含一个非线性资源,而当前的资源是线性的,反之亦然,那么对齐要求是VkMemoryRequirements.alignment和设备的bufferImageGranularity的最大值。这也需要检查内存块的结束。
但是,,,您还需要考虑到池的内存类型必须在VkMemoryRequirements的memoryTypeBits标志中设置。
https://stackoverflow.com/questions/45458918
复制相似问题