glsl: Assign locations for uniforms in UBOs using the std140 rules.
[profile/ivi/mesa.git] / src / glsl / linker.cpp
index 7fbd834..bfdde40 100644 (file)
@@ -979,6 +979,8 @@ link_intrastage_shaders(void *mem_ctx,
       struct gl_shader *sh = shader_list[i];
 
       for (unsigned j = 0; j < shader_list[i]->NumUniformBlocks; j++) {
+        link_assign_uniform_block_offsets(shader_list[i]);
+
         int index = link_cross_validate_uniform_block(mem_ctx,
                                                       &uniform_blocks,
                                                       &num_uniform_blocks,
@@ -1165,6 +1167,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)