是否应该尽量减少应用程序创建的命令池的数量?

Should one minimize the number of command pools an application creates?

假设有一个队列系列支持呈现到表面和图形。创建一个处理演示和图形的命令池更好(由于技术原因),还是创建两个命令池更好:一个应用程序将仅用于图形(即使它可以用于演示)和另一个应用程序将仅用于演示(即使它可以用于图形)?

从本质上讲,是否应该尽量减少与特定队列系列关联的命令池的数量?或者可以根据需要创建任意数量的命令池吗?更一般地说(无论命令池与哪个队列系列相关联),应用​​程序是否应该尽量减少它创建的命令池数量?

编辑:我在这个post的初始版本中写了"queues"而不是"command pools"。这已得到修复。

用于由该线程填充的一组命令缓冲区使用的存储。您创建池来实现该目的。

因此,如果您有三个线程需要为特定队列生成命令,那么您将创建 3 个池,每个线程一个,并使用它们生成您感兴趣的 CB。

并且根据您的 CB 重置策略,您可能需要多缓冲池。也就是说,当线程从池 A 向 CB 生成命令时,GPU 正在从池 B 读取 CB。这样,当 GPU 完成后,您可以只重置池而不是重置单个 CB。

总的来说,您可以创建命令池来服务于您的应用程序的分配和 CB 构建策略。池与队列族的关联只是为了帮助实施更有效地为这些 CB 生成命令。您不应该假设池正在消耗队列中的某种有限资源。