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

时间:2011-12-21 07:51:08

标签: opengl glsl shader ati

我正在为带有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]

一切都很好。

似乎是超出最大制服数量的问题。但正如我上面写的那样,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;
}

1 个答案:

答案 0 :(得分:7)

你是对的,你需要将4096除以4而不是乘法。 wiki条目 措辞严厉。