在ATI显卡上GLSL着色器的顶点均匀组件的实际数量是多少?



我正在为带有AMD Radeon HD 6970M 2048 MB显卡的iMac编写GLSL顶点着色器:

GL_MAX_VERTEX_ATTRIBS: 16
GL_MAX_VERTEX_UNIFORM_COMPONENTS: 4096
GL_VERSION: 2.1 ATI-7.12.9
GL_SHADING_LANGUAGE_VERSION: 1.20

在我的着色器,我想有一个大数组的统一的mat4s:

uniform mat4 T[65]

但是如果我尝试有65个这样的着色器(秘密地)切换到Apple Software Renderer模式。如果我使用64:

uniform mat4 T[64]

一切都好

似乎是一个问题,超过了最大数量的制服。但正如我上面写的,我得到4096 GL_MAX_VERTEX_UNIFORM_COMPONENTS所以4096/(4*4)= 256不是64…

OpenGL.org wiki说

ATI/AMD注:ATI最大组件值错误。它们是实际组件数除以4。

但是阅读这篇文章,我会认为,如果我查询GL_MAX_VERTEX_UNIFORM_COMPONENTS并得到4096,我实际上有16,384。GL_MAX_VERTEX_UNIFORM_COMPONENTS返回乘以 4的组件的实际数量。这将得到1024/(4*4)= 64。

有人能证实吗?

编辑:

我的着色器很简单:

#version 120
// 65 goes into software render mode
#define MAX_T 64
attribute vec4 indices;
uniform mat4 T[MAX_T];
void main()
{
  gl_Position =  T[int(indices[0])]*gl_Vertex;
}

你是对的,你需要把4096除以4,而不是乘以。wiki条目is用词不当。

最新更新