glsl: Populate built-in types correctly for GLSL 3.00 ES.
[mesa.git] / src / glsl / opt_dead_code.cpp
index 22c7af1c20a73e12eaaca34cd6b1ec6d8f6f8264..de8475f956eb3fd0a3ad8a515862086c78790753 100644 (file)
@@ -78,8 +78,7 @@ do_dead_code(exec_list *instructions, bool uniform_locations_assigned)
          * Don't do so if it's a shader output, though.
          */
         if (entry->var->mode != ir_var_out &&
-            entry->var->mode != ir_var_inout &&
-            !ir_has_call(entry->assign)) {
+            entry->var->mode != ir_var_inout) {
            entry->assign->remove();
            progress = true;
 
@@ -96,9 +95,15 @@ do_dead_code(exec_list *instructions, bool uniform_locations_assigned)
         /* uniform initializers are precious, and could get used by another
          * stage.  Also, once uniform locations have been assigned, the
          * declaration cannot be deleted.
+         *
+         * Also, GL_ARB_uniform_buffer_object says that std140
+         * uniforms will not be eliminated.  Since we always do
+         * std140, just don't eliminate uniforms in UBOs.
          */
         if (entry->var->mode == ir_var_uniform &&
-            (uniform_locations_assigned || entry->var->constant_value))
+            (uniform_locations_assigned ||
+             entry->var->constant_value ||
+             entry->var->uniform_block != -1))
            continue;
 
         entry->var->remove();