From 193a9a209d5121e2c20f1d20c61587b1e3d0603d Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Wed, 10 Aug 2011 14:13:23 -0700 Subject: [PATCH] i965/vs: Add support for if(any(bvec)) on gen6. --- src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp index 2a1f003b5ce..d1888579597 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp @@ -564,10 +564,6 @@ vec4_visitor::emit_if_gen6(ir_if *ir) assert(expr->get_num_operands() <= 2); for (unsigned int i = 0; i < expr->get_num_operands(); i++) { - assert(expr->operands[i]->type->is_scalar() || - expr->operation == ir_binop_any_nequal || - expr->operation == ir_binop_all_equal); - expr->operands[i]->accept(this); op[i] = this->result; } @@ -634,6 +630,14 @@ vec4_visitor::emit_if_gen6(ir_if *ir) inst->predicate = BRW_PREDICATE_ALIGN16_ANY4H; return; + case ir_unop_any: + inst = emit(BRW_OPCODE_CMP, dst_null_d(), op[0], src_reg(0)); + inst->conditional_mod = BRW_CONDITIONAL_NZ; + + inst = emit(BRW_OPCODE_IF); + inst->predicate = BRW_PREDICATE_ALIGN16_ANY4H; + return; + default: assert(!"not reached"); inst = emit(BRW_OPCODE_IF, dst_null_d(), op[0], src_reg(0)); -- 2.30.2