Module: Mesa
Branch: master
Commit: 0cea8a56b627cea297e4213266b57b7a1085dcca
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0cea8a56b627cea297e4213266b57b7a1085dcca

Author: Eric Anholt <[email protected]>
Date:   Tue May  1 14:26:09 2012 -0700

glsl: Don't dead-code eliminiate uniforms declared in uniform blocks.

This is a requirement for std140 uniform blocks, and optional for
packed/shared blocks.

Reviewed-by: Ian Romanick <[email protected]>

---

 src/glsl/opt_dead_code.cpp |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/src/glsl/opt_dead_code.cpp b/src/glsl/opt_dead_code.cpp
index 0578f17..de8475f 100644
--- a/src/glsl/opt_dead_code.cpp
+++ b/src/glsl/opt_dead_code.cpp
@@ -95,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();

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to