gpt4 book ai didi

vulkan - vulkan VkPipelineLayoutCreateInfo的多个setLayoutCounts的目的是什么?

转载 作者:行者123 更新时间:2023-12-05 00:47:28 32 4
gpt4 key购买 nike

我想知道为什么可以在 VkPipelineLayoutCreateInfo 中指定多个描述符集布局,因为一个已经包含所有绑定(bind)。

最佳答案

描述符集布局描述了单个描述符集的布局。但是一个管道可以有多个描述符集。这就是 GLSL 中限定符的 layout(set = #) 部分的含义:它指定该特定资源从哪个集合获取其描述符。 setVkPipelineLayoutCreateInfo::pSetLayouts 数组的索引。 descriptor 是该集合的描述符列表的索引。两者结合起来识别流水线布局中的特定描述符。

因此,您认为单个描述符集“已经包含所有绑定(bind)”的假设是不正确的。

如规范中所述,拥有多个描述符集的目的是允许用户更改一组描述符而不更改另一组描述符,并允许管道在部分布局上相互兼容。

例如,您可能拥有每个场景的信息,例如灯光的位置和相机/投影矩阵。但是您可能还拥有每个对象的信息,例如矩阵。如果所有这些信息都在同一个描述符集中,那么如果您希望不同的对象具有不同的每个对象描述符集,那么它们还必须在这些相同的集中具有不同的每个场景信息。

您可以改为将它们拆分为单独的描述符集,在集 0(每个场景)中更改频率较低的信息,在集 1(每个对象)中更改更频繁的数据。这样,您不必为了更改每个对象的数据而更改 每个 描述符。

此外,您可以更改管道,而无需恢复每个场景集。例如,假设您正在从非蒙皮管道切换到蒙皮管道。好吧,显然它们具有根本不同类型的每个对象数据。但他们的每个场景数据相同。如果这些数据位于不同的描述符集中,则不需要为每个场景数据设置另一个描述符集。更改程序绑定(bind)时甚至不需要绑定(bind)新的 set 0。因为 set 0 与这两个程序都兼容,所以 set 0 的绑定(bind)在两者中都有效。

规范甚至有一个专门针对这种情况的符号:

Place the least frequently changing descriptor sets near the start of the pipeline layout, and place the descriptor sets representing the most frequently changing resources near the end. When pipelines are switched, only the descriptor set bindings that have been invalidated will need to be updated and the remainder of the descriptor set bindings will remain in place.

关于vulkan - vulkan VkPipelineLayoutCreateInfo的多个setLayoutCounts的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56928041/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com