Signed-off-by: Topi Pohjolainen <topi.pohjolai...@intel.com> --- src/glsl/nir/glsl_to_nir.cpp | 55 +++++++++++--------------------------------- 1 file changed, 13 insertions(+), 42 deletions(-)
diff --git a/src/glsl/nir/glsl_to_nir.cpp b/src/glsl/nir/glsl_to_nir.cpp index 5b3c2ad..5da4122 100644 --- a/src/glsl/nir/glsl_to_nir.cpp +++ b/src/glsl/nir/glsl_to_nir.cpp @@ -877,6 +877,12 @@ nir_visitor::emit(nir_op op, unsigned dest_size, nir_src src1, (type) == GLSL_TYPE_FLOAT ? nir_op_ ## suffix_1 ## _f ## suffix_2 : \ nir_op_ ## suffix_1 ## _i ## suffix_2 +#define OP_FLT_INT_UINT(type, suffix) \ + (type) == GLSL_TYPE_HALF ? nir_op_h ## suffix : \ + (type) == GLSL_TYPE_FLOAT ? nir_op_f ## suffix : \ + (type) == GLSL_TYPE_INT ? nir_op_i ## suffix : \ + nir_op_u ## suffix + void nir_visitor::visit(ir_expression *ir) { @@ -1230,12 +1236,7 @@ nir_visitor::visit(ir_expression *ir) op = OP_FLT_INT(out_type, mul); break; case ir_binop_div: - if (out_type == GLSL_TYPE_FLOAT) - op = nir_op_fdiv; - else if (out_type == GLSL_TYPE_INT) - op = nir_op_idiv; - else - op = nir_op_udiv; + op = OP_FLT_INT_UINT(out_type, div); break; case ir_binop_mod: if (out_type == GLSL_TYPE_FLOAT) @@ -1244,20 +1245,10 @@ nir_visitor::visit(ir_expression *ir) op = nir_op_umod; break; case ir_binop_min: - if (out_type == GLSL_TYPE_FLOAT) - op = nir_op_fmin; - else if (out_type == GLSL_TYPE_INT) - op = nir_op_imin; - else - op = nir_op_umin; + op = OP_FLT_INT_UINT(out_type, min); break; case ir_binop_max: - if (out_type == GLSL_TYPE_FLOAT) - op = nir_op_fmax; - else if (out_type == GLSL_TYPE_INT) - op = nir_op_imax; - else - op = nir_op_umax; + op = OP_FLT_INT_UINT(out_type, max); break; case ir_binop_bit_and: op = nir_op_iand; @@ -1330,48 +1321,28 @@ nir_visitor::visit(ir_expression *ir) case ir_binop_borrow: emit(nir_op_usub_borrow, dest_size, srcs); break; case ir_binop_less: if (supports_ints) { - if (types[0] == GLSL_TYPE_FLOAT) - emit(nir_op_flt, dest_size, srcs); - else if (types[0] == GLSL_TYPE_INT) - emit(nir_op_ilt, dest_size, srcs); - else - emit(nir_op_ult, dest_size, srcs); + emit(OP_FLT_INT_UINT(types[0], lt), dest_size, srcs); } else { emit(nir_op_slt, dest_size, srcs); } break; case ir_binop_greater: if (supports_ints) { - if (types[0] == GLSL_TYPE_FLOAT) - emit(nir_op_flt, dest_size, srcs[1], srcs[0]); - else if (types[0] == GLSL_TYPE_INT) - emit(nir_op_ilt, dest_size, srcs[1], srcs[0]); - else - emit(nir_op_ult, dest_size, srcs[1], srcs[0]); + emit(OP_FLT_INT_UINT(types[0], lt), dest_size, srcs[1], srcs[0]); } else { emit(nir_op_slt, dest_size, srcs[1], srcs[0]); } break; case ir_binop_lequal: if (supports_ints) { - if (types[0] == GLSL_TYPE_FLOAT) - emit(nir_op_fge, dest_size, srcs[1], srcs[0]); - else if (types[0] == GLSL_TYPE_INT) - emit(nir_op_ige, dest_size, srcs[1], srcs[0]); - else - emit(nir_op_uge, dest_size, srcs[1], srcs[0]); + emit(OP_FLT_INT_UINT(types[0], ge), dest_size, srcs[1], srcs[0]); } else { emit(nir_op_slt, dest_size, srcs[1], srcs[0]); } break; case ir_binop_gequal: if (supports_ints) { - if (types[0] == GLSL_TYPE_FLOAT) - emit(nir_op_fge, dest_size, srcs); - else if (types[0] == GLSL_TYPE_INT) - emit(nir_op_ige, dest_size, srcs); - else - emit(nir_op_uge, dest_size, srcs); + emit(OP_FLT_INT_UINT(types[0], ge), dest_size, srcs[0], srcs[1]); } else { emit(nir_op_slt, dest_size, srcs); } -- 1.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev