mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 06:58:05 +02:00
nir/builder: Rework the boolean conversion helpers
Move them up to where the other conversion helpers. For nir_b2<T>(), suffix them with N like all the others and make them use nir_type_convert() as well. Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Reviewed-by: Emma Anholt <emma@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20067>
This commit is contained in:
parent
d9a24632d3
commit
e67e2293fa
6 changed files with 33 additions and 43 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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];
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue