繁体   English   中英

GLSL ES 3.0 - 顶点和片段着色器均匀,以及最大顶点/片段均匀向量

[英]GLSL ES 3.0 - uniform in both vertex and fragment shader, and max vertex/fragment uniform vectors

在OpenGL ES 3.0中,我们在顶点和片段着色器中都有最小数量的均匀矢量:

const mediump int gl_MaxVertexUniformVectors = 256;
const mediump int gl_MaxFragmentUniformVectors = 224;

如果我们有一个在顶点和片段着色器中定义相同的统一,它只在编译的程序中存在一次,如果是这样,那么这些限制中的哪一个存储空间否定了?

ES 3.0规范。 不必要地使统一存储的讨论变得复杂(因此,我引用了2.0规范)。 简而言之,这个限制指的是单个阶段保留的统一空间量。 GLSL程序总共可以存储超过256个统一位置,但是不需要单个阶段一次使用超过256个。

OpenGL ES 2.0规范 - 2.10顶点着色器( 统一变量 ) - 第35页

顶点着色器访问的统一变量可用的存储量由依赖于实现的常量MAX_VERTEX_UNIFORM_VECTORS指定 此值表示可以保存在顶点着色器的统一变量存储中的四元素浮点数,整数或布尔矢量的数量。 如果尝试使用超过可用于顶点着色器统一变量的空间,则将生成链接错误。

虽然它是高度特定于实现的,但您可以将一组制服视为整体程序存储,然后在每个阶段内,必须将这些制服从GPU的寄存器文件分配给一组有限的寄存器,然后才能使用它们。 这是在编译/链接时静态地建立活动与非活动制服的一件好事,它可以显着降低具有非活动代码路径的链接程序的每个阶段的存储要求。

顺便说一下,如果这是适用于所有阶段的限制,则遵循正常的GL命名法,极限很可能被命名为: ..._MAX_COMBINED_...并且不包括特定阶段的名称。

简单地说,它们是不同的数字告诉我两件事:

1)如果它们是共享的,那么你不可能有256个顶点向量和224个片段向量(总共480个向量)。 这显然是一个有效的配置。 2)如果它们被共享,我希望它们具有相同的最大值,或者就此而言,为顶点和片段着色器设置单独的最大值是没有意义的。

我知道这不是一个官方的答案,如果你能找到它,一定要张贴一个。 所有最好的三角形玩! :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM