glsl: Don't resize arrays in uniform blocks.
authorEric Anholt <eric@anholt.net>
Tue, 1 May 2012 21:43:31 +0000 (14:43 -0700)
committerEric Anholt <eric@anholt.net>
Fri, 20 Jul 2012 17:43:59 +0000 (10:43 -0700)
This is a requirement for std140 uniform blocks, and optional for
packed/shared blocks.

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

index 7fbd834ab66cbe635db8329e29db055c0429d961..dd2278545d83329a5048732f16aea5f1866ba672 100644 (file)
@@ -1165,6 +1165,13 @@ update_array_sizes(struct gl_shader_program *prog)
             !var->type->is_array())
            continue;
 
+        /* GL_ARB_uniform_buffer_object says that std140 uniforms
+         * will not be eliminated.  Since we always do std140, just
+         * don't resize arrays in UBOs.
+         */
+        if (var->uniform_block != -1)
+           continue;
+
         unsigned int size = var->max_array_access;
         for (unsigned j = 0; j < MESA_SHADER_TYPES; j++) {
               if (prog->_LinkedShaders[j] == NULL)