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

时间:2019-03-31 19:26:32

标签: gpu vulkan

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

签出vkAllocateMemory manual page。它说:

  

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

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

1 个答案:

答案 0 :(得分:4)

explained here一样,这主要是操作系统限制。

  

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

哦,他们知道。他们只是不告诉您。

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

对于DX12,我非常确定,如果您尝试分配超过4096个,则会发现CreateHeap返回错误。

Vulkan只是存在限制的最先使用的API。

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