On 30/04/15 09:27, Tapani Pälli wrote:
Refactoring done on active attribute queries did not take in to
account special built-in inputs for the vertex stage. This commit
sets them referenced by vertex stage so that they get enumerated
properly.

Fixes Piglit test 'get-active-attrib-returns-all-inputs' failure.

Signed-off-by: Tapani Pälli <tapani.pa...@intel.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=90243
---
  src/glsl/linker.cpp | 7 ++++++-
  1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index 21fde94..6064f2f 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -2556,6 +2556,7 @@ add_interface_variables(struct gl_shader_program *shProg,
  {
     foreach_in_list(ir_instruction, node, sh->ir) {
        ir_variable *var = node->as_variable();
+      uint8_t mask = 0;
if (!var)
           continue;
@@ -2571,6 +2572,10 @@ add_interface_variables(struct gl_shader_program *shProg,
               var->data.location != SYSTEM_VALUE_VERTEX_ID_ZERO_BASE &&
               var->data.location != SYSTEM_VALUE_INSTANCE_ID)
              continue;
+         /* Mark special built-in inputs referenced by the vertex stage so
+          * that they are considered active by the shader queries.
+          */
+         mask = (1 << (MESA_SHADER_VERTEX));

I cringed when I saw that you explicitly set it only for the vertex shader, but this is indeed not a problem because only VertexID and InstanceID can go through here.

Then I wondered why you ignored all the other builtins. The spec is however quite specific about which builtins should be listed. No idea why.

Anyway, you get my R-b!

Reviewed-By: Martin Peres <martin.pe...@linux.intel.com>
           /* FALLTHROUGH */
        case ir_var_shader_in:
           if (programInterface != GL_PROGRAM_INPUT)
@@ -2585,7 +2590,7 @@ add_interface_variables(struct gl_shader_program *shProg,
        };
if (!add_program_resource(shProg, programInterface, var,
-                                build_stageref(shProg, var->name)))
+                                build_stageref(shProg, var->name) | mask))
           return false;
     }
     return true;

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to