diff --git a/src/compiler/nir/nir_builder.h b/src/compiler/nir/nir_builder.h index 51781cd1caa..4419d386cd7 100644 --- a/src/compiler/nir/nir_builder.h +++ b/src/compiler/nir/nir_builder.h @@ -404,6 +404,32 @@ nir_f2fN(nir_builder *b, nir_ssa_def *src, unsigned bit_size) return nir_convert_to_bit_size(b, src, nir_type_float, bit_size); } +static inline nir_ssa_def * +nir_f2b(nir_builder *b, nir_ssa_def *src) +{ + return nir_type_convert(b, src, nir_type_float, nir_type_bool1); +} + +static inline nir_ssa_def * +nir_i2b(nir_builder *b, nir_ssa_def *src) +{ + return nir_type_convert(b, src, nir_type_int, nir_type_bool1); +} + +static inline nir_ssa_def * +nir_b2iN(nir_builder *b, nir_ssa_def *src, uint32_t bit_size) +{ + return nir_type_convert(b, src, nir_type_bool, + (nir_alu_type) (nir_type_int | bit_size)); +} + +static inline nir_ssa_def * +nir_b2fN(nir_builder *b, nir_ssa_def *src, uint32_t bit_size) +{ + return nir_type_convert(b, src, nir_type_bool, + (nir_alu_type) (nir_type_float | bit_size)); +} + static inline nir_ssa_def * nir_i2fN(nir_builder *b, nir_ssa_def *src, unsigned bit_size) { @@ -1595,42 +1621,6 @@ nir_mask(nir_builder *b, nir_ssa_def *bits, unsigned dst_bit_size) nir_isub_imm(b, dst_bit_size, nir_u2u32(b, bits))); } -static inline nir_ssa_def * -nir_f2b(nir_builder *build, nir_ssa_def *f) -{ - return nir_f2b1(build, f); -} - -static inline nir_ssa_def * -nir_i2b(nir_builder *build, nir_ssa_def *i) -{ - return nir_i2b1(build, i); -} - -static inline nir_ssa_def * -nir_b2f(nir_builder *build, nir_ssa_def *b, uint32_t bit_size) -{ - switch (bit_size) { - case 64: return nir_b2f64(build, b); - case 32: return nir_b2f32(build, b); - case 16: return nir_b2f16(build, b); - default: - unreachable("Invalid bit-size"); - }; -} - -static inline nir_ssa_def * -nir_b2i(nir_builder *build, nir_ssa_def *b, uint32_t bit_size) -{ - switch (bit_size) { - case 64: return nir_b2i64(build, b); - case 32: return nir_b2i32(build, b); - case 16: return nir_b2i16(build, b); - case 8: return nir_b2i8(build, b); - default: - unreachable("Invalid bit-size"); - }; -} static inline nir_ssa_def * nir_load_barycentric(nir_builder *build, nir_intrinsic_op op, unsigned interp_mode) diff --git a/src/compiler/nir/nir_builtin_builder.c b/src/compiler/nir/nir_builtin_builder.c index bd11159f9fe..d7d0ba66e8e 100644 --- a/src/compiler/nir/nir_builtin_builder.c +++ b/src/compiler/nir/nir_builtin_builder.c @@ -218,7 +218,7 @@ nir_atan(nir_builder *b, nir_ssa_def *y_over_x) /* range-reduction fixup */ tmp = nir_ffma(b, - nir_b2f(b, nir_flt(b, one, abs_y_over_x), bit_size), + nir_b2fN(b, nir_flt(b, one, abs_y_over_x), bit_size), nir_ffma_imm12(b, tmp, -2.0f, M_PI_2), tmp); @@ -315,7 +315,7 @@ nir_atan2(nir_builder *b, nir_ssa_def *y, nir_ssa_def *x) * coordinate system. */ nir_ssa_def *arc = - nir_ffma_imm1(b, nir_b2f(b, flip, bit_size), M_PI_2, nir_atan(b, tan)); + nir_ffma_imm1(b, nir_b2fN(b, flip, bit_size), M_PI_2, nir_atan(b, tan)); /* Rather convoluted calculation of the sign of the result. When x < 0 we * cannot use fsign because we need to be able to distinguish between diff --git a/src/compiler/nir/nir_lower_io.c b/src/compiler/nir/nir_lower_io.c index 2fa2923db25..1ace5f597b7 100644 --- a/src/compiler/nir/nir_lower_io.c +++ b/src/compiler/nir/nir_lower_io.c @@ -1702,7 +1702,7 @@ build_explicit_io_store(nir_builder *b, nir_intrinsic_instr *intrin, mode == nir_var_function_temp) value = nir_b2b32(b, value); else - value = nir_b2i(b, value, 32); + value = nir_b2iN(b, value, 32); } store->src[0] = nir_src_for_ssa(value); diff --git a/src/compiler/nir/nir_opt_idiv_const.c b/src/compiler/nir/nir_opt_idiv_const.c index 2cd57e72736..629c71e645e 100644 --- a/src/compiler/nir/nir_opt_idiv_const.c +++ b/src/compiler/nir/nir_opt_idiv_const.c @@ -67,7 +67,7 @@ build_idiv(nir_builder *b, nir_ssa_def *n, int64_t d) { int64_t int_min = u_intN_min(n->bit_size); if (d == int_min) - return nir_b2i(b, nir_ieq_imm(b, n, int_min), n->bit_size); + return nir_b2iN(b, nir_ieq_imm(b, n, int_min), n->bit_size); uint64_t abs_d = d < 0 ? -d : d; diff --git a/src/compiler/nir/nir_opt_load_store_vectorize.c b/src/compiler/nir/nir_opt_load_store_vectorize.c index 438fda234a1..802bcca21d8 100644 --- a/src/compiler/nir/nir_opt_load_store_vectorize.c +++ b/src/compiler/nir/nir_opt_load_store_vectorize.c @@ -848,8 +848,8 @@ vectorize_stores(nir_builder *b, struct vectorize_ctx *ctx, /* convert booleans */ nir_ssa_def *low_val = low->intrin->src[low->info->value_src].ssa; nir_ssa_def *high_val = high->intrin->src[high->info->value_src].ssa; - low_val = low_val->bit_size == 1 ? nir_b2i(b, low_val, 32) : low_val; - high_val = high_val->bit_size == 1 ? nir_b2i(b, high_val, 32) : high_val; + low_val = low_val->bit_size == 1 ? nir_b2iN(b, low_val, 32) : low_val; + high_val = high_val->bit_size == 1 ? nir_b2iN(b, high_val, 32) : high_val; /* combine the data */ nir_ssa_def *data_channels[NIR_MAX_VEC_COMPONENTS]; diff --git a/src/gallium/auxiliary/nir/tgsi_to_nir.c b/src/gallium/auxiliary/nir/tgsi_to_nir.c index ad9ed85ecac..6b046a85fce 100644 --- a/src/gallium/auxiliary/nir/tgsi_to_nir.c +++ b/src/gallium/auxiliary/nir/tgsi_to_nir.c @@ -957,7 +957,7 @@ ttn_alu(nir_builder *b, nir_op op, nir_alu_dest dest, unsigned dest_bitsize, { nir_ssa_def *def = nir_build_alu_src_arr(b, op, src); if (def->bit_size == 1) - def = nir_ineg(b, nir_b2i(b, def, dest_bitsize)); + def = nir_ineg(b, nir_b2iN(b, def, dest_bitsize)); assert(def->bit_size == dest_bitsize); if (dest_bitsize == 64) { if (def->num_components > 2) {