From: Alan Hourihane Date: Wed, 18 Mar 2009 21:42:14 +0000 (+0000) Subject: slang: redo the last commit for if/break & if/continue tests as it X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=cac1ce09ac52e9bc4aa8d5ba24b6a4d131d8fc69;p=mesa.git slang: redo the last commit for if/break & if/continue tests as it wasn't good enough for deeply nested if's. --- diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c index 753e5c45c44..e98d9d96e3a 100644 --- a/src/mesa/shader/slang/slang_codegen.c +++ b/src/mesa/shader/slang/slang_codegen.c @@ -2642,6 +2642,9 @@ _slang_unroll_for_loop(slang_assemble_ctx * A, const slang_operation *oper) /* do IR codegen for body */ n = _slang_gen_operation(A, body); + if (!n) + return NULL; + root = new_seq(root, n); slang_operation_delete(body); @@ -2783,12 +2786,16 @@ _slang_gen_if(slang_assemble_ctx * A, const slang_operation *oper) if (is_operation_type(&oper->children[1], SLANG_OPER_BREAK) && !haveElseClause) { /* Special case: generate a conditional break */ + if (!A->CurLoop) /* probably trying to unroll */ + return NULL; ifBody = new_break_if_true(A->CurLoop, cond); return ifBody; } else if (is_operation_type(&oper->children[1], SLANG_OPER_CONTINUE) && !haveElseClause) { - /* Special case: generate a conditional break */ + /* Special case: generate a conditional continue */ + if (!A->CurLoop) /* probably trying to unroll */ + return NULL; ifBody = new_cont_if_true(A->CurLoop, cond); return ifBody; }