i965/nir/vec4: Implement "bool<->int,float" format conversion

Used the same implementation than the vec4_visitor NIR.

Adds NIR ALU operations:
   * nir_op_b2i
   * nir_op_b2f
   * nir_op_f2b
   * nir_op_i2b

Reviewed-by: Jason Ekstrand <jason.ekstrand@intel.com>
This commit is contained in:
Antia Puentes 2015-06-17 09:21:30 +02:00 committed by Jason Ekstrand
parent f14199a8fb
commit fa4731f4a5
1 changed files with 19 additions and 0 deletions

View File

@ -1005,6 +1005,25 @@ vec4_visitor::nir_emit_alu(nir_alu_instr *instr)
emit(AND(dst, op[0], op[1]));
break;
case nir_op_b2i:
emit(AND(dst, op[0], src_reg(1)));
break;
case nir_op_b2f:
op[0].type = BRW_REGISTER_TYPE_D;
dst.type = BRW_REGISTER_TYPE_D;
emit(AND(dst, op[0], src_reg(0x3f800000u)));
dst.type = BRW_REGISTER_TYPE_F;
break;
case nir_op_f2b:
emit(CMP(dst, op[0], src_reg(0.0f), BRW_CONDITIONAL_NZ));
break;
case nir_op_i2b:
emit(CMP(dst, op[0], src_reg(0), BRW_CONDITIONAL_NZ));
break;
default:
unreachable("Unimplemented ALU operation");
}