glsl/lower_if: check more node types in check_control_flow -> check_ir_node
authorMarek Olšák <marek.olsak@amd.com>
Sun, 3 Jul 2016 13:03:54 +0000 (15:03 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Tue, 15 Nov 2016 19:22:52 +0000 (20:22 +0100)
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/compiler/glsl/lower_if_to_cond_assign.cpp

index 2875e7902d190f2f0ce8cba6f64bef22403a8197..01a73357d456103e3473958347420468b4198d6e 100644 (file)
@@ -97,7 +97,7 @@ lower_if_to_cond_assign(exec_list *instructions, unsigned max_depth)
 }
 
 void
-check_control_flow(ir_instruction *ir, void *data)
+check_ir_node(ir_instruction *ir, void *data)
 {
    ir_if_to_cond_assign_visitor *v = (ir_if_to_cond_assign_visitor *)data;
 
@@ -107,6 +107,9 @@ check_control_flow(ir_instruction *ir, void *data)
    case ir_type_loop:
    case ir_type_loop_jump:
    case ir_type_return:
+   case ir_type_emit_vertex:
+   case ir_type_end_primitive:
+   case ir_type_barrier:
       v->found_unsupported_op = true;
       break;
    default:
@@ -183,10 +186,10 @@ ir_if_to_cond_assign_visitor::visit_leave(ir_if *ir)
 
    /* 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, this);
+      visit_tree(then_ir, check_ir_node, this);
    }
    foreach_in_list(ir_instruction, else_ir, &ir->else_instructions) {
-      visit_tree(else_ir, check_control_flow, this);
+      visit_tree(else_ir, check_ir_node, this);
    }
    if (this->found_unsupported_op)
       return visit_continue; /* can't handle inner unsupported opcodes */