mesa: Fix glGetProgramiv(GL_ACTIVE_ATTRIBUTES).

It's returning random values, because RESOURCE_VAR() is casting
different objects into ir_variable pointers.

This updates _mesa_count_active_attribs to filter the resources with the
same logic used in _mesa_longest_attribute_name_length.

https://bugs.freedesktop.org/show_bug.cgi?id=90207

Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
This commit is contained in:
Jose Fonseca 2015-04-28 21:49:36 +01:00
parent c66c158e59
commit 114ac39a88
1 changed files with 4 additions and 2 deletions

View File

@ -302,8 +302,10 @@ _mesa_count_active_attribs(struct gl_shader_program *shProg)
struct gl_program_resource *res = shProg->ProgramResourceList;
unsigned count = 0;
for (unsigned j = 0; j < shProg->NumProgramResourceList; j++, res++) {
if (is_active_attrib(RESOURCE_VAR(res)))
count++;
if (res->Type == GL_PROGRAM_INPUT &&
res->StageReferences & (1 << MESA_SHADER_VERTEX) &&
is_active_attrib(RESOURCE_VAR(res)))
count++;
}
return count;
}