Mesa (7.9): glsl: fix lowering conditional returns in subroutines

Ian Romanick idr at kemper.freedesktop.org
Mon Dec 27 21:33:19 UTC 2010


Module: Mesa
Branch: 7.9
Commit: 9d1c6dd79b2f6f16f650b72b96a2e53fac39d4d5
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=9d1c6dd79b2f6f16f650b72b96a2e53fac39d4d5

Author: Fabian Bieler <der.fabe at gmx.net>
Date:   Wed Dec  1 14:44:58 2010 +0100

glsl: fix lowering conditional returns in subroutines

this fix applies to the lower_sub_return 'branch' of the lower_jumps pass

Fixes piglit tests glsl-functions-5 and glsl-functions-6.
(cherry picked from commit ef534f3838f23d757a40426728789183ed36c3bb)

---

 src/glsl/ir_lower_jumps.cpp |    6 +++++-
 1 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/src/glsl/ir_lower_jumps.cpp b/src/glsl/ir_lower_jumps.cpp
index a86417c..965909d 100644
--- a/src/glsl/ir_lower_jumps.cpp
+++ b/src/glsl/ir_lower_jumps.cpp
@@ -481,7 +481,11 @@ lower_continue:
       if(this->loop.may_set_return_flag) {
          assert(this->function.return_flag);
          ir_if* return_if = new(ir) ir_if(new(ir) ir_dereference_variable(this->function.return_flag));
-         return_if->then_instructions.push_tail(new(ir) ir_loop_jump(saved_loop.loop ? ir_loop_jump::jump_break : ir_loop_jump::jump_continue));
+         saved_loop.may_set_return_flag = true;
+         if(saved_loop.loop)
+            return_if->then_instructions.push_tail(new(ir) ir_loop_jump(ir_loop_jump::jump_break));
+         else
+            move_outer_block_inside(ir, &return_if->else_instructions);
          ir->insert_after(return_if);
       }
 




More information about the mesa-commit mailing list