【问题标题】:GLSL packing 4 float attributes into vec4GLSL 将 4 个浮点属性打包到 vec4 中
【发布时间】:2014-02-10 23:37:53
【问题描述】:

我有一个关于 glsl 中属性float 的资源消耗的问题。

是否需要与vec4 一样多的资源,还是不需要?

我问这个,因为制服需要https://stackoverflow.com/a/20775024/1559666(至少,他们可以)

如果不是,那么将 4 个float 打包成一个vec4 属性是否有意义?

【问题讨论】:

  • 驱动程序完全有可能无论如何都会进行优化
  • 每个属性在 GLSL 中必须有自己的唯一位置。这是您在编写着色器时唯一可以依赖的存储限制,您知道 GLSL 提供了 16 个顶点属性槽的最小值(通常是最大值),并且一个槽足够大以存储 vec4 机器类型。驱动程序无法将各个float 属性组合到一个插槽中,每个属性都有自己的位置,float 属性的数据仅占该位置总潜在存储空间的 1/4。所以float,在这种情况下,是相当浪费的。

标签: opengl attributes glsl


【解决方案1】:

是的,所有顶点属性需要4分量向量的某个倍数来存储。

这意味着 float 顶点属性占用 1 个插槽,与 vec2、vec3 或 vec4 相同。并且大于vec4 的类型占用多个插槽。 mat4 顶点属性占用 4 x vec4 多个存储单元。 dvec4(双精度向量)顶点属性需要 2 x vec4。由于实现只需要提供 16 个唯一的顶点属性槽,如果您天真地使用单个 float 属性,您很容易耗尽所有可用存储空间来存储一个 4x4 矩阵。

没有办法解决这个问题。与制服不同(标量 GPU 可能比 vec4 更有效地存储 float 制服),属性始终与 4 组件数据类型相关联。所以对于顶点属性来说,将属性打包成向量是相当重要的。


我已更新我的答案,指出 GL 和 GLSL 规范的相关摘录:

OpenGL 4.4 Core Profile Specification - 10.2.1 当前通用属性 - pp. 307

顶点着色器(参见第 11.1 节)访问 4 分量通用顶点数组 属性。该数组的第一个槽编号为零,数组的大小为 由依赖于实现的常量 GL_MAX_VERTEX_ATTRIBS 指定。

GLSL 4.40 Specification - 4.4.1 输入布局限定符 - 第 60 页

如果顶点着色器输入是任何标量或矢量类型,它将消耗一个位置。如果非顶点着色器输入是 dvec3 或 dvec4 以外的标量或矢量类型,它将消耗单个位置,而类型 @ 987654339@ 或 dvec4 将消耗两个连续的位置。 double 和 dvec2 类型的输入将在所有阶段仅使用一个位置。

诚然,dvec4 描述的行为略有不同。在GL_ARB_vertex_attrib_64bit 形式中,双精度类型可能消耗两倍于浮点的存储空间,因此dvec3 或dvec4 可能会消耗两个属性槽。当它被提升为核心时,这种行为发生了变化......它们仅应该在顶点阶段消耗 1 个位置,在任何其他阶段可能更多。

双精度向量类型的原始(扩展)行为:

姓名

ARB_vertex_attrib_64bit

[...]

此外,一些顶点着色器输入使用更宽的 64 位组件 可能会在与实现相关的数量限制中翻倍 顶点着色器属性向量。 64 位标量或双分量 vector 只消耗一个通用顶点属性;三和 四分量“长”可以算作两个。这种方法类似于 在当前 GL 中使用的一种,其中矩阵属性消耗多个 属性。

【讨论】:

  • 这就是我想听到的。但是,请您提供一些证明链接(供一些opengl参考)吗? :) 哦,废话,我必须写有问题的 glsl(更新):)
【解决方案2】:

属性 vec4 将占用属性 float 的 4 倍内存。 在制服上,由于一些对齐,您可能会丢失一些组件。 (vec4 将对齐到 4 个字节)。

【讨论】:

  • 不,我的意思是,单浮点是否像 vec4 一样占用这么多内存?
  • 作为属性不,因为统一取决于它,我不确定 GLSL 编译器是否会重新排列统一以优化使用的空间。 Uniform 本身不会使用所有空间,但如果下一个 Uniform 变量不适合当前的 4 字节块,它将与接下来的 4 字节对齐。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
相关资源
最近更新 更多