【问题标题】:Does updating VkGraphicsPipelineCreateInfo after the pipeline creation affect the currently rendering scene?管道创建后更新 VkGraphicsPipelineCreateInfo 会影响当前渲染场景吗?
【发布时间】:2021-02-28 00:06:37
【问题描述】:

我目前正在开发图形引擎,我希望在运行时更新管道状态。在运行时为每个资源更新(即:启用深度钳制、启用颜色混合)创建一个新管道,然后将所有内容重新绑定到命令缓冲区会占用大量性能。

所以我打算做的是,创建一个管道并存储创建它所需的所有属性(即:光栅化状态、多重采样状态、颜色混合状态等)并在运行时更新这些单独的结构。毕竟我们传递的是结构体的地址,而不是值。

这让我想到了我的问题,对在管道创建中传递的结构的更新是否反映了运行时的实际绘图调用,而不需要再次重新创建管道?

谢谢!

【问题讨论】:

标签: c++ vulkan


【解决方案1】:

不,这样不行。指定管道创建状态信息的结构(如混合、多重采样、顶点输入状态等)在管道创建时被消耗并烘焙到管道中。因此,在创建管道后更改这些,根本不会更新管道。

这意味着您必须重建管道并使用它重建所有命令缓冲区。

一个例外是动态状态(请参阅spec),它允许您在创建命令缓冲区期间在运行时更改某些与管道状态相关的值。

【讨论】:

  • 请注意,所有个Vulkan对象都是如此;在创建时间之后更改 CreateInfo 结构不会影响对象本身。
【解决方案2】:

从概念上讲,您不是“传递地址”,而是通过引用借出一个值。在几乎所有 Vulkan 命令中,只要命令返回,所有权就会返回给调用者。之后你可以对它做任何你想做的事情,或者删除\解除分配它,它对 Vulkan 没有影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    相关资源
    最近更新 更多