首页 > 解决方案 > 是否应该尽量减少应用程序创建的命令池的数量?

问题描述

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

本质上,是否应该最小化与特定队列系列相关的命令池的数量?还是可以根据需要创建尽可能多的命令池?更一般地(不管命令池与哪个队列系列相关联),应用​​程序是否应该最小化它创建的命令池的数量?

编辑:我在这篇文章的初始版本中写了“队列”而不是“命令池”。这已得到修复。

标签: vulkan

解决方案


命令池的主要目的是成为(主要是)单线程分配器,用于存储由该线程填充的一组命令缓冲区使用。您创建池来服务于该目的。

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

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

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


推荐阅读