diff options
author | Marek Olšák <[email protected]> | 2016-07-03 14:57:20 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2016-11-15 20:22:52 +0100 |
commit | 68f35005ed9b4ccda2179bff86a511f20cd34f1b (patch) | |
tree | 1a8822d7fb3bc090bcc9f063aeae7428d42680fe | |
parent | a6ff2a3378636f4a261ea32c3dc870b0aeae3c03 (diff) |
glsl/lower_if: move and rename found_control_flow
I'll want to update more variables in check_control_flow, so using
the visitor is convenient.
Reviewed-by: Nicolai Hähnle <[email protected]>
-rw-r--r-- | src/compiler/glsl/lower_if_to_cond_assign.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/compiler/glsl/lower_if_to_cond_assign.cpp b/src/compiler/glsl/lower_if_to_cond_assign.cpp index a948466128d..2875e7902d1 100644 --- a/src/compiler/glsl/lower_if_to_cond_assign.cpp +++ b/src/compiler/glsl/lower_if_to_cond_assign.cpp @@ -73,6 +73,7 @@ public: ir_visitor_status visit_enter(ir_if *); ir_visitor_status visit_leave(ir_if *); + bool found_unsupported_op; bool progress; unsigned max_depth; unsigned depth; @@ -98,14 +99,15 @@ lower_if_to_cond_assign(exec_list *instructions, unsigned max_depth) void check_control_flow(ir_instruction *ir, void *data) { - bool *found_control_flow = (bool *)data; + ir_if_to_cond_assign_visitor *v = (ir_if_to_cond_assign_visitor *)data; + switch (ir->ir_type) { case ir_type_call: case ir_type_discard: case ir_type_loop: case ir_type_loop_jump: case ir_type_return: - *found_control_flow = true; + v->found_unsupported_op = true; break; default: break; @@ -175,18 +177,19 @@ ir_if_to_cond_assign_visitor::visit_leave(ir_if *ir) if (this->depth-- <= this->max_depth) return visit_continue; - bool found_control_flow = false; + this->found_unsupported_op = false; + ir_assignment *assign; /* Check that both blocks don't contain anything we can't support. */ foreach_in_list(ir_instruction, then_ir, &ir->then_instructions) { - visit_tree(then_ir, check_control_flow, &found_control_flow); + visit_tree(then_ir, check_control_flow, this); } foreach_in_list(ir_instruction, else_ir, &ir->else_instructions) { - visit_tree(else_ir, check_control_flow, &found_control_flow); + visit_tree(else_ir, check_control_flow, this); } - if (found_control_flow) - return visit_continue; + if (this->found_unsupported_op) + return visit_continue; /* can't handle inner unsupported opcodes */ void *mem_ctx = ralloc_parent(ir); |