在主命令缓冲区中更新推送常量但在辅助中使用?

时间:2018-06-07 08:52:04

标签: vulkan

我有多个辅助命令缓冲区,负责不同的几何渲染。但相机矩阵显然应该保持不变。我想通过推送常量来更新相机矩阵,但我无法理解 - 我应该为每个辅助命令缓冲区执行此操作,还是只能在主命令缓冲区中执行一次?

一方面,推送常量是管道状态的一部分(在管道状态布局中指定),它不会被辅助命令缓冲区继承。但另一方面,有一个所谓的“管道布局兼容性”,我并不完全理解,但看起来它允许更新一次推送常量并在后续命令中使用更新的值。

1 个答案:

答案 0 :(得分:1)

一般情况下(如您所知),状态不会在命令缓冲区之间继承。这意味着您需要分别在每个命令缓冲区中设置状态(与绘图或计算操作相关)。此规则有一些例外,但它们与您在此处讨论的问题无关。

所以是的,您需要分别在每个命令缓冲区中设置推送常量的值

对于管道布局兼容性您指的是,这意味着当您为给定管道设置某个管道状态时,然后当您使用兼容布局绑定另一个管道时,你不必再次设置相同的状态。它在具有兼容布局的管道之间保留。所以,是的,您可以"更新推送常量一次,并在后续命令中使用更新的值" 但这必须在同一个命令缓冲区中发生。您可以在绑定到同一命令缓冲区的管道中使用更新的值。但是如果您在另一个命令缓冲区中,则需要再次设置相关状态。还有什么 - 在从主命令缓冲区执行辅助命令缓冲区之后,您还需要再次在此主命令缓冲区中设置状态。换句话说,主命令缓冲区在执行辅助命令缓冲区后会忘记其状态。