nir: Handle mixed scalar/vector arguments to logical and/or/xor.
Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user