Mesa (master): glsl: fix lowering conditional returns in subroutines
Kenneth Graunke
kwg at kemper.freedesktop.org
Thu Dec 9 19:28:51 UTC 2010
Module: Mesa
Branch: master
Commit: ef534f3838f23d757a40426728789183ed36c3bb
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ef534f3838f23d757a40426728789183ed36c3bb
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.
---
src/glsl/lower_jumps.cpp | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/src/glsl/lower_jumps.cpp b/src/glsl/lower_jumps.cpp
index 9cd15ef..d99e0aa 100644
--- a/src/glsl/lower_jumps.cpp
+++ b/src/glsl/lower_jumps.cpp
@@ -512,7 +512,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