小编Joh*_*hke的帖子

Vulkan:为什么每个池有多个命令缓冲区?

我正在使用 Vulkan 1.0 进行开发,通过一步步学习和实现功能来构建渲染系统。我了解了命令记录和提交的要点,但还不足以理解我希望每个池有多个命令缓冲区的用例。正是幻灯片 14 中演示引发了一些问题。

我的理解和目前的设计如下:

  • 最佳情况下,每个线程每帧应该有一个命令池,这样命令缓冲区就不会在运行时在同一内存上进行记录。如果我有 3 个帧,并且每个帧最多可以有 4 个记录线程,则至少有 12 个命令池。
  • 命令缓冲区在创建时与命令池相关联,并将在下一帧重置。为了获得更好的性能,将重置整个池而不是单个缓冲区。
  • 单个命令池可用于创建多个命令缓冲区。这组命令缓冲区将全部在同一帧和线程中使用。
  • 根据“命令重叠”下的这篇文章,命令的重新排序可能发生在命令缓冲区和vkQueueSubmit调用之间。因此,如果我在同一帧和线程中有一组命令缓冲区,我需要的不仅仅是提交顺序来保证我想要的结果。也许我会为每次提交使用独特的信号量?
  • 如果我正在为框架/线程编码,我认为从头到尾提交几次命令与最后一次提交所有内容相比没有任何优势。这是在相同的时间跨度内完成相同的工作量。vkQueueSubmit由于规范中提到的开销,多次提交甚至可能是有害的。

根据上述假设,在什么情况下,每个命令池拥有多个命令缓冲区而不是拥有一个记录给定帧和线程从开始到结束的所有内容的命令缓冲区是必要或有利的?

c multithreading vulkan

2
推荐指数
1
解决办法
1727
查看次数

标签 统计

c ×1

multithreading ×1

vulkan ×1