首页 > 解决方案 > 为什么 Vulkan 有内存分配限制?

问题描述

是否有任何技术原因来限制内存分配的最大数量?

查看vkAllocateMemory 手册页。它说:

VkDevice 中可以同时存在的有效内存分配的最大数量可能受到实现或平台相关限制的限制。如果调用 vkAllocateMemory 会导致分配的总数超过这些限制,那么这样的调用将失败并且必须返回 VK_ERROR_TOO_MANY_OBJECTS。

OpenGL 不限制分配,DirectX 11/12 也不限制。那么为什么 Vulkan 应该这样做呢?

标签: gpuvulkan

解决方案


正如这里所解释的,这主要是一个操作系统限制。

OpenGL 不限制分配,DirectX 11/12 也不

哦,他们有。他们只是不告诉你

OpenGL 和 DX11 驱动程序倾向于在内部进行大型 GPU(虚拟)分配,并在分配内存时执行子分配。因此,它们会造成您可以执行更多硬件分配的错觉。但限制仍然存在。

至于 DX12,我相当肯定,如果您尝试分配超过 4096 个,您会发现CreateHeap返回错误。

Vulkan 只是预先确定存在限制的 API。

使用 Vulkan,这只是一个永远不会出现的问题。如果您正在执行超过一千个单独的内存分配,那么您的内存分配方案是错误的。您应该分配一些大块内存,然后将它们的子部分用于纹理和缓冲区。


推荐阅读