SSBO绑定点索引可以是任何值吗



当您指定"location=x";在着色器中指定着色器存储或统一缓冲区绑定点,该数字可以是任何值吗?该绑定点是否独立于当前绑定的着色器?

在绑定着色器之前,是否可以绑定所有ubo和ssbos,只要着色器使用的每种类型的缓冲区的数量为<=OpenGL允许在着色器中同时使用的最大值?

我可以绑定20个缓冲区,然后通过指定着色器中的绑定点索引来指定着色器当前使用的缓冲区吗?

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

此外,对于缓冲区支持的接口块,有一个实现定义的各种着色器阶段可以使用的最大块数。请注意,这些最大值是为每个着色器阶段单独指定的。可以在渲染操作中使用的总数通常是(但不要求是(每个着色器阶段中可以使用的数量的总和。

对于UBO,每个阶段的数量要求至少为14,组合计数要求为14*6(每个着色器阶段一个(。有些硬件支持15,但没有任何硬件支持超过15。

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

SSBO结合点的数量有更多的变化。但即使在那里,它的最大绑定数也是64。

因此,除非缓冲区的数量很小,否则无法仅绑定所有内容并让着色器拾取。这很好,因为绑定缓冲区的成本通常低于更改着色器的成本。与其更改着色器,不如更改缓冲区。

相关内容

  • 没有找到相关文章

最新更新