mesa: Fix glGetProgramiv(GL_ACTIVE_ATTRIBUTES).
authorJose Fonseca <jfonseca@vmware.com>
Tue, 28 Apr 2015 20:49:36 +0000 (21:49 +0100)
committerJose Fonseca <jfonseca@vmware.com>
Wed, 29 Apr 2015 05:42:12 +0000 (06:42 +0100)
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>
src/mesa/main/shader_query.cpp

index a84ec84090d64f626a16e7d10b8a917165f642af..d2ca49b43a700bb4fa63a9bcc7b668dc25700e70 100644 (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;
 }