nir: Handle mixed scalar/vector arguments to logical and/or/xor.

Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
This commit is contained in:
Matt Turner
2015-03-23 16:04:41 -07:00
parent c8acbd1bfd
commit 95729d2458
+21 -18
View File
@@ -1210,6 +1210,9 @@ nir_visitor::visit(ir_expression *ir)
case ir_binop_bit_and:
case ir_binop_bit_or:
case ir_binop_bit_xor:
case ir_binop_logic_and:
case ir_binop_logic_or:
case ir_binop_logic_xor:
case ir_binop_lshift:
case ir_binop_rshift:
switch (ir->operation) {
@@ -1270,6 +1273,24 @@ nir_visitor::visit(ir_expression *ir)
case ir_binop_bit_xor:
op = nir_op_ixor;
break;
case ir_binop_logic_and:
if (supports_ints)
op = nir_op_iand;
else
op = nir_op_fand;
break;
case ir_binop_logic_or:
if (supports_ints)
op = nir_op_ior;
else
op = nir_op_for;
break;
case ir_binop_logic_xor:
if (supports_ints)
op - nir_op_ixor;
else
op = nir_op_fxor;
break;
case ir_binop_lshift:
op = nir_op_ishl;
break;
@@ -1444,24 +1465,6 @@ nir_visitor::visit(ir_expression *ir)
}
}
break;
case ir_binop_logic_and:
if (supports_ints)
emit(nir_op_iand, dest_size, srcs);
else
emit(nir_op_fand, dest_size, srcs);
break;
case ir_binop_logic_or:
if (supports_ints)
emit(nir_op_ior, dest_size, srcs);
else
emit(nir_op_for, dest_size, srcs);
break;
case ir_binop_logic_xor:
if (supports_ints)
emit(nir_op_ixor, dest_size, srcs);
else
emit(nir_op_fxor, dest_size, srcs);
break;
case ir_binop_dot:
switch (ir->operands[0]->type->vector_elements) {
case 2: emit(nir_op_fdot2, dest_size, srcs); break;