[Mesa-dev] [PATCH 16/18] glsl: Don't dead-code eliminiate uniforms declared in uniform blocks.

Eric Anholt eric at anholt.net
Mon Jul 2 17:38:25 PDT 2012


This is a requirement for std140 uniform blocks, and optional for
packed/shared blocks.
---
 src/glsl/opt_dead_code.cpp |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

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();
-- 
1.7.10



More information about the mesa-dev mailing list