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

时间:2018-07-18 19:44:36

标签: vulkan

说有一个队列系列,它支持向表面显示和图形。创建一个用于处理演示文稿和图形的命令池是否更好(由于技术原因),还是创建两个命令池更好?(一个应用程序仅用于图形(即使它可以用于演示)也可以);以及另一个应用程序将仅用于演示(即使可以将其用于图形)?

从本质上来说,是否应该减少与特定队列系列关联的命令池的数量?还是可以根据需要创建尽可能多的命令池?更一般而言(无论命令池与哪个队列系列相关联),应用​​程序是否应将其创建的命令池减至最少?

编辑:我在本文的初始版本中写了“队列”而不是“命令池”。此问题已解决。

1 个答案:

答案 0 :(得分:4)

main purpose of a command pool is to be a (mostly) single-threaded allocator用于由该线程填充的一组命令缓冲区使用的存储。您创建池来实现此目的。

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

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

总的来说,您将创建命令池以服务于应用程序的分配和CB构建策略。池与队列的关联仅用于帮助实现更有效地为那些CB生成命令。您不应假定池正在消耗队列中的某种有限资源。