Mesa (9.1): glsl: Move all var decls to the front of the IR list in reverse order

Carl Worth cworth at kemper.freedesktop.org
Mon Jul 15 20:40:44 UTC 2013


Module: Mesa
Branch: 9.1
Commit: e8af0576a5cf3cb0bf49d02449042489291c5b2c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e8af0576a5cf3cb0bf49d02449042489291c5b2c

Author: Ian Romanick <ian.d.romanick at intel.com>
Date:   Fri Jun  7 17:05:22 2013 -0700

glsl: Move all var decls to the front of the IR list in reverse order

This has the (intended!) side effect that vertex shader inputs and
fragment shader outputs will appear in the IR in the same order that
they appeared in the shader code.  This results in the locations being
assigned in the declared order.  Many (arguably buggy) applications
depend on this behavior, and it matches what nearly all other drivers
do.

Fixes the (new) piglit test attrib-assignments.

NOTE: This is a candidate for stable release branches (and requires the
previous commit to prevent a regression in OpenGL ES 2.0 conformance
test stencil_plane_operation).

Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
Reviewed-by: Chad Versace <chad.versace at linux.intel.com>
(cherry picked from commit c170c901d0f5384e5ab8b79b827663fa28439b0b)

---

 src/glsl/ast_to_hir.cpp |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index c5197d5..b40ce41 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -94,6 +94,24 @@ _mesa_ast_to_hir(exec_list *instructions, struct _mesa_glsl_parse_state *state)
    detect_conflicting_assignments(state, instructions);
 
    state->toplevel_ir = NULL;
+
+   /* Move all of the variable declarations to the front of the IR list, and
+    * reverse the order.  This has the (intended!) side effect that vertex
+    * shader inputs and fragment shader outputs will appear in the IR in the
+    * same order that they appeared in the shader code.  This results in the
+    * locations being assigned in the declared order.  Many (arguably buggy)
+    * applications depend on this behavior, and it matches what nearly all
+    * other drivers do.
+    */
+   foreach_list_safe(node, instructions) {
+      ir_variable *const var = ((ir_instruction *) node)->as_variable();
+
+      if (var == NULL)
+         continue;
+
+      var->remove();
+      instructions->push_head(var);
+   }
 }
 
 




More information about the mesa-commit mailing list