glsl/linker: Make update_array_sizes apply to just uniforms.
authorPaul Berry <stereotype441@gmail.com>
Mon, 10 Jun 2013 21:01:45 +0000 (14:01 -0700)
committerPaul Berry <stereotype441@gmail.com>
Fri, 2 Aug 2013 03:19:47 +0000 (20:19 -0700)
Commit 586b4b5 (glsl: Also update implicit sizes of varyings at link
time) extended update_array_sizes() to apply to both uniforms and
shader ins/outs.  However, doing creates problems for geometry
shaders, because update_array_sizes() assumes that variables with
matching names in different parts of the pipeline should have the same
sizes.  With the addition of geometry shaders, this is no longer true
(e.g. both vertex and geometry shaders have a gl_ClipDistance output
variable, but there's no reason these variables should have the same
sizes).

The original reason for commit 586b4b5 (avoid problems with
gl_TexCoord being 0 length) has since been addressed by commit 6f53921
(linker: Ensure that unsized arrays have a size after linking).  So go
ahead and switch update_array_sizes() back to only acting on uniforms.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/glsl/linker.cpp

index 82075cbc0e38de0d87ff67d2a02b78e909b6ba42..7fae0b8c47d4920b8f7e47676fa9c3642ed07400 100644 (file)
@@ -1094,9 +1094,7 @@ update_array_sizes(struct gl_shader_program *prog)
       foreach_list(node, prog->_LinkedShaders[i]->ir) {
         ir_variable *const var = ((ir_instruction *) node)->as_variable();
 
-        if ((var == NULL) || (var->mode != ir_var_uniform &&
-                              var->mode != ir_var_shader_in &&
-                              var->mode != ir_var_shader_out) ||
+        if ((var == NULL) || (var->mode != ir_var_uniform) ||
             !var->type->is_array())
            continue;