ula*_*ade 5 c++ multithreading vulkan
我正在尝试使用 Vulkan 设置多线程渲染器,但我有一个关于命令池的问题。
在这里https://on-demand.gputechconf.com/siggraph/2016/video/sig1625-tristan-lorach-vulkan-nvidia-essentials.mp4在 13 分钟,他们讨论了如何为每个 FRAME 和周期制作 1 个命令池它们在环形缓冲区中。

为什么为每个线程分配 3 个命令池(3 帧环形缓冲区中的每个帧一个),而不是每个线程只有一个命令池并从中拥有 3 个命令缓冲区?
我认为这里的前提是vkResetCommandPool比重置单个命令缓冲区更好。这也需要VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT标志,它的存在是规范本身的一个小提示,即重置单个 cmdbuffers 的能力可能不是免费的。
实际上,如果您不只是阅读幻灯片而是获得完整的演示文稿,那么演讲者会这么说。
它基本上是关于限制你必须做多少同步和状态跟踪。如果每个线程每帧有一个命令池,那么您只需要跟踪一个事件以完成,然后重置整个命令池,无论您在其中为该帧创建了多少命令缓冲区。
从引擎的角度来看,这对于您不打算多次重用的命令缓冲区来说非常好 - 它们变成无状态火灾并忘记实体,您只需要持续跟踪池。
确切的权衡将因应用程序和应用程序以及驱动程序而异,因此 YMMV 就最佳效果而言。
| 归档时间: |
|
| 查看次数: |
950 次 |
| 最近记录: |