首页 > 解决方案 > 更新主要命令缓冲区中的推送常量但在辅助命令缓冲区中使用?

问题描述

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

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

标签: vulkan

解决方案


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

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

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


推荐阅读