[Mesa-dev] [PATCH 7/7] Force break at end of generated loop

Dan McCabe zen3d.linux at gmail.com
Wed Jun 15 09:33:44 PDT 2011


A loop is generated for the wrapper of the switch statement. We need to force
the exit of that loop after all cases are processed. Therefore, generate
an implicit break at the very end of the loop.
---
 src/glsl/ast_to_hir.cpp |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index c409c2d..b4ba5a2 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -3364,9 +3364,17 @@ ir_rvalue *
 ast_switch_body::hir(exec_list *instructions,
 		     struct _mesa_glsl_parse_state *state)
 {
+   void *ctx = state;
+   
    if (stmts != NULL)
       stmts->hir(instructions, state);
       
+   // append break to force loop exit
+   ir_jump *const break_stmt =
+      new(ctx) ir_loop_jump(ir_loop_jump::jump_break);
+
+   instructions->push_tail(break_stmt);
+
    /* Switch bodies do not have r-values.
     */
    return NULL;
-- 
1.7.4.1



More information about the mesa-dev mailing list