微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

创建管道后更新 VkGraphicsPipelineCreateInfo 是否会影响当前渲染场景?

如何解决创建管道后更新 VkGraphicsPipelineCreateInfo 是否会影响当前渲染场景?

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

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

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

谢谢!

解决方法

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

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

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

,

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。