nir: add more build helpers

Reviewed-by: Georg Lehmann <dadschoorse@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28606>
This commit is contained in:
Marek Olšák 2024-04-05 21:51:42 -04:00 committed by Marge Bot
parent b681677f7d
commit 281e08714e

View file

@ -413,28 +413,66 @@ nir_imm_ivec2(nir_builder *build, int x, int y)
}
static inline nir_def *
nir_imm_ivec3(nir_builder *build, int x, int y, int z)
nir_imm_ivec3_intN(nir_builder *build, int x, int y, int z, unsigned bit_size)
{
nir_const_value v[3] = {
nir_const_value_for_int(x, 32),
nir_const_value_for_int(y, 32),
nir_const_value_for_int(z, 32),
nir_const_value_for_int(x, bit_size),
nir_const_value_for_int(y, bit_size),
nir_const_value_for_int(z, bit_size),
};
return nir_build_imm(build, 3, 32, v);
return nir_build_imm(build, 3, bit_size, v);
}
static inline nir_def *
nir_imm_uvec2_intN(nir_builder *build, unsigned x, unsigned y,
unsigned bit_size)
{
nir_const_value v[2] = {
nir_const_value_for_uint(x, bit_size),
nir_const_value_for_uint(y, bit_size),
};
return nir_build_imm(build, 2, bit_size, v);
}
static inline nir_def *
nir_imm_uvec3_intN(nir_builder *build, unsigned x, unsigned y, unsigned z,
unsigned bit_size)
{
nir_const_value v[3] = {
nir_const_value_for_uint(x, bit_size),
nir_const_value_for_uint(y, bit_size),
nir_const_value_for_uint(z, bit_size),
};
return nir_build_imm(build, 3, bit_size, v);
}
static inline nir_def *
nir_imm_ivec3(nir_builder *build, int x, int y, int z)
{
return nir_imm_ivec3_intN(build, x, y, z, 32);
}
static inline nir_def *
nir_imm_ivec4_intN(nir_builder *build, int x, int y, int z, int w,
unsigned bit_size)
{
nir_const_value v[4] = {
nir_const_value_for_int(x, bit_size),
nir_const_value_for_int(y, bit_size),
nir_const_value_for_int(z, bit_size),
nir_const_value_for_int(w, bit_size),
};
return nir_build_imm(build, 4, bit_size, v);
}
static inline nir_def *
nir_imm_ivec4(nir_builder *build, int x, int y, int z, int w)
{
nir_const_value v[4] = {
nir_const_value_for_int(x, 32),
nir_const_value_for_int(y, 32),
nir_const_value_for_int(z, 32),
nir_const_value_for_int(w, 32),
};
return nir_build_imm(build, 4, 32, v);
return nir_imm_ivec4_intN(build, x, y, z, w, 32);
}
nir_def *
@ -865,6 +903,18 @@ nir_isub_imm(nir_builder *build, uint64_t y, nir_def *x)
return nir_isub(build, nir_imm_intN_t(build, y, x->bit_size), x);
}
static inline nir_def *
nir_imax_imm(nir_builder *build, nir_def *x, int64_t y)
{
return nir_imax(build, x, nir_imm_intN_t(build, y, x->bit_size));
}
static inline nir_def *
nir_imin_imm(nir_builder *build, nir_def *x, int64_t y)
{
return nir_imin(build, x, nir_imm_intN_t(build, y, x->bit_size));
}
static inline nir_def *
_nir_mul_imm(nir_builder *build, nir_def *x, uint64_t y, bool amul)
{
@ -922,6 +972,12 @@ nir_fdiv_imm(nir_builder *build, nir_def *x, double y)
return nir_fdiv(build, x, nir_imm_floatN_t(build, y, x->bit_size));
}
static inline nir_def *
nir_fpow_imm(nir_builder *build, nir_def *x, double y)
{
return nir_fpow(build, x, nir_imm_floatN_t(build, y, x->bit_size));
}
static inline nir_def *
nir_iand_imm(nir_builder *build, nir_def *x, uint64_t y)
{