gpt4 book ai didi

c++ - SSBO 绑定(bind)点索引可以是任何值吗?

转载 作者:行者123 更新时间:2023-12-01 14:42:10 28 4
gpt4 key购买 nike

在着色器中指定“location = x”来指定着色器存储或统一缓冲区绑定(bind)点时,该数字可以是任何值吗?这个绑定(bind)点是否独立于当前绑定(bind)的着色器?

是否可以在绑定(bind)我的着色器之前绑定(bind)我所有的 ubos 和 ssbos,只要着色器使用的每种缓冲区的数量 <= OpenGL 允许一次在着色器中使用的最大值?

我可以绑定(bind) 20 个缓冲区,然后通过在着色器中指定绑定(bind)点索引来指定着色器当前正在使用哪些缓冲区吗?

最佳答案

每个indexed buffer binding point (以及 OpenGL 中几乎所有类型的绑定(bind))都有一个实现定义的可用绑定(bind)索引的最大数量。这表示在任何一次渲染操作期间硬件可以以这种方式使用的最大缓冲区数。

此外,对于 buffer-backed interface blocks ,有一个实现定义的最大块数,可以由各个着色器阶段使用。请注意,这些最大值是为每个着色器阶段单独指定的。一个渲染操作中可以使用的总数通常(但不是必须)是每个着色器阶段可以使用的数量的总和。

对于 UBO,每个阶段的数量必须至少为 14,组合计数必须为 14 * 6(每个着色器阶段一个)。 Some hardware supports 15 ,但没有硬件支持更多。

对于 SSBO,每个阶段的数量只需为 8,即便如此,也只有片段和计算着色器需要任何这样的绑定(bind)点。也就是说,一个实现可以支持 SSBO,但不需要在每个阶段都支持它们;只是片段和计算阶段。

more variation在 SSBO 绑定(bind)点的数量。但即便如此,它最多也有 64 个绑定(bind)。

所以除非缓冲区的数量非常少,否则没有办法只绑定(bind)所有内容并让着色器选择。这很好,因为绑定(bind)缓冲区的成本通常低于更改着色器的成本。更改缓冲区比更改着色器更好。

关于c++ - SSBO 绑定(bind)点索引可以是任何值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63716806/

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