为什么 Vulkan 有内存分配限制?

Les*_*Inc 3 gpu vulkan

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

查看vkAllocateMemory 手册页。它说:

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

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

Nic*_*las 10

如此处所述,这主要是操作系统限制。

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

哦,他们知道。他们只是不告诉你这件事。

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

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

Vulkan 只是预先说明存在限制的 API。

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