vulkan - 是否应该尽量减少应用程序创建的命令池的数量?
问题描述
假设有一个队列族支持呈现到表面和图形。是创建一个处理演示和图形的单个命令池更好(由于技术原因),还是创建两个命令池更好:一个应用程序仅用于图形(即使它可以用于演示)和另一个应用程序将仅用于演示(即使它可以用于图形)?
本质上,是否应该最小化与特定队列系列相关的命令池的数量?还是可以根据需要创建尽可能多的命令池?更一般地(不管命令池与哪个队列系列相关联),应用程序是否应该最小化它创建的命令池的数量?
编辑:我在这篇文章的初始版本中写了“队列”而不是“命令池”。这已得到修复。
解决方案
命令池的主要目的是成为(主要是)单线程分配器,用于存储由该线程填充的一组命令缓冲区使用。您创建池来服务于该目的。
因此,如果您有 3 个线程需要为特定队列生成命令,那么您创建 3 个池,每个此类线程一个,并使用它们来生成您感兴趣的 CB。
根据您的 CB 重置策略,您可能需要多缓冲池。也就是说,当一个线程从池 A 向 CB 生成命令时,GPU 正在从池 B 中读取 CB。这样,当 GPU 完成时,您可以只重置池而不是重置单个 CB。
总体而言,您创建命令池以服务于应用程序的分配和 CB 构建策略。池与队列族的关联仅仅是为了帮助实现更有效地为这些 CB 生成命令。您不应假设池正在消耗队列中的某种有限资源。
推荐阅读
- r - 从包中外部设置函数的默认参数
- ios - 在 UIView.animate 期间忽略 withDuration
- django - 使用 Docker 时如何在生产环境中设置 ALLOWED_HOSTS Django 设置?
- r - 如何根据ggplot / R中的不同数据源将不同的箱线图添加到同一个图中?
- git - 将影响某些文件的更改拆分到不同的分支
- java - 从默认http客户端设置的openfeign请求中删除标头
- sitecore - 从 Sitecore 9.0 升级到 Sitecore 9.2
- angular8 - Angular 8 - 表单组值始终为空
- spring - Spring Java Config:配置已经存在的bean
- android - 如何以编程方式在 Android 中截取整个 Webview 的屏幕截图?