【问题标题】:How does the pipeline know which descriptor layout to use when binding descriptors?管道如何知道绑定描述符时使用哪个描述符布局?
【发布时间】:2021-08-30 23:48:34
【问题描述】:

当调用 vkCmdBindDescriptorSets 时,我必须传递第一个集合的编号和我想要绑定的描述符集合的数组。然后我可以使用 layout(set = X, binding = 0) 在我的着色器中使用我喜欢的任何集合。

我的问题如下。该集的描述符集布局仅在创建描述符集时指定。然而,当我绑定时,我可以使用上述函数将任何描述符集绑定到任何集数。是否由我来保持我的着色器布局和绑定与在管道创建中指定的布局一致?否则,管道/着色器如何“知道”我的特定集正在使用哪个布局?

【问题讨论】:

    标签: vulkan


    【解决方案1】:

    在 Vulkan 中,除非另有说明,否则 始终“由您决定”。这也不例外。

    如果您尝试使用不匹配布局的管道和绑定描述符集进行渲染/调度,则会导致未定义的行为。

    管道通过法令“知道”您正在使用的布局。布局的全部意义在于它“布局”了表示这些描述符如何组织的内部数据的排列。因此,“绑定 2”在实现用于定义的任何内部数据结构中的位置仅由布局确定。

    因此,布局有点像 C 或 C++ 中的结构。您不能将指向B 类型结构的指针传递给需要指向A 类型结构的指针的函数。好吧,可以进行一堆强制转换,但是当函数访问该指针时,会导致未定义的行为。

    管道和绑定描述符集也是如此:它们必须使用兼容的布局或未定义的行为结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-18
      • 2018-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      相关资源
      最近更新 更多