mesa/program: Translate csel operation from GLSL IR.

This will be used internally by the GLSL front-end in order to
implement some built-in functions. Plumb it through MESA IR for
back-ends that rely on this translation pass.

v2: Add comment.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Juan A. Suarez Romero <jasuarez@igalia.com>
This commit is contained in:
Francisco Jerez 2017-01-23 23:53:03 -08:00
parent 56314f5baf
commit e81130d7a1
1 changed files with 8 additions and 1 deletions

View File

@ -1360,13 +1360,20 @@ ir_to_mesa_visitor::visit(ir_expression *ir)
emit(ir, OPCODE_LRP, result_dst, op[2], op[1], op[0]);
break;
case ir_triop_csel:
/* We assume that boolean true and false are 1.0 and 0.0. OPCODE_CMP
* selects src1 if src0 is < 0, src2 otherwise.
*/
op[0].negate = ~op[0].negate;
emit(ir, OPCODE_CMP, result_dst, op[0], op[1], op[2]);
break;
case ir_binop_vector_extract:
case ir_triop_fma:
case ir_triop_bitfield_extract:
case ir_triop_vector_insert:
case ir_quadop_bitfield_insert:
case ir_binop_ldexp:
case ir_triop_csel:
case ir_binop_carry:
case ir_binop_borrow:
case ir_binop_imul_high: