vtn/opencl: Switch some nir-sequence ops to use libclc
All of these are pretty well-defined. Rather than implementing them as a sequence of nir ops, we can just use the libclc implementation. v2 (idr): Delete functions that are now unused. Acked-by: Jason Ekstrand <jason@jlekstrand.net> Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6035>
This commit is contained in:
@@ -51,21 +51,6 @@ nir_cross4(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y)
|
||||
nir_imm_intN_t(b, 0, cross->bit_size));
|
||||
}
|
||||
|
||||
nir_ssa_def*
|
||||
nir_length(nir_builder *b, nir_ssa_def *vec)
|
||||
{
|
||||
nir_ssa_def *finf = nir_imm_floatN_t(b, INFINITY, vec->bit_size);
|
||||
|
||||
nir_ssa_def *abs = nir_fabs(b, vec);
|
||||
if (vec->num_components == 1)
|
||||
return abs;
|
||||
|
||||
nir_ssa_def *maxc = nir_fmax_abs_vec_comp(b, abs);
|
||||
abs = nir_fdiv(b, abs, maxc);
|
||||
nir_ssa_def *res = nir_fmul(b, nir_fsqrt(b, nir_fdot(b, abs, abs)), maxc);
|
||||
return nir_bcsel(b, nir_feq(b, maxc, finf), maxc, res);
|
||||
}
|
||||
|
||||
nir_ssa_def*
|
||||
nir_fast_length(nir_builder *b, nir_ssa_def *vec)
|
||||
{
|
||||
@@ -130,23 +115,6 @@ nir_normalize(nir_builder *b, nir_ssa_def *vec)
|
||||
return nir_bcsel(b, nir_feq(b, maxc, f0), vec, res);
|
||||
}
|
||||
|
||||
nir_ssa_def*
|
||||
nir_rotate(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y)
|
||||
{
|
||||
nir_ssa_def *shift_mask = nir_imm_int(b, x->bit_size - 1);
|
||||
|
||||
if (y->bit_size != 32)
|
||||
y = nir_u2u32(b, y);
|
||||
|
||||
nir_ssa_def *lshift = nir_iand(b, y, shift_mask);
|
||||
nir_ssa_def *rshift = nir_isub(b, nir_imm_int(b, x->bit_size), lshift);
|
||||
|
||||
nir_ssa_def *hi = nir_ishl(b, x, lshift);
|
||||
nir_ssa_def *lo = nir_ushr(b, x, rshift);
|
||||
|
||||
return nir_ior(b, hi, lo);
|
||||
}
|
||||
|
||||
nir_ssa_def*
|
||||
nir_smoothstep(nir_builder *b, nir_ssa_def *edge0, nir_ssa_def *edge1, nir_ssa_def *x)
|
||||
{
|
||||
|
@@ -38,11 +38,9 @@ extern "C" {
|
||||
|
||||
nir_ssa_def* nir_cross3(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y);
|
||||
nir_ssa_def* nir_cross4(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y);
|
||||
nir_ssa_def* nir_length(nir_builder *b, nir_ssa_def *vec);
|
||||
nir_ssa_def* nir_fast_length(nir_builder *b, nir_ssa_def *vec);
|
||||
nir_ssa_def* nir_nextafter(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y);
|
||||
nir_ssa_def* nir_normalize(nir_builder *b, nir_ssa_def *vec);
|
||||
nir_ssa_def* nir_rotate(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y);
|
||||
nir_ssa_def* nir_smoothstep(nir_builder *b, nir_ssa_def *edge0,
|
||||
nir_ssa_def *edge1, nir_ssa_def *x);
|
||||
nir_ssa_def* nir_upsample(nir_builder *b, nir_ssa_def *hi, nir_ssa_def *lo);
|
||||
@@ -177,12 +175,6 @@ nir_fdim(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y)
|
||||
return nir_nan_check2(b, x, y, nir_bcsel(b, cond, res, zero));
|
||||
}
|
||||
|
||||
static inline nir_ssa_def *
|
||||
nir_distance(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y)
|
||||
{
|
||||
return nir_length(b, nir_fsub(b, x, y));
|
||||
}
|
||||
|
||||
static inline nir_ssa_def *
|
||||
nir_fast_distance(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y)
|
||||
{
|
||||
|
@@ -514,20 +514,8 @@ handle_special(struct vtn_builder *b, uint32_t opcode,
|
||||
if (dest_type->length == 4)
|
||||
return nir_cross4(nb, srcs[0], srcs[1]);
|
||||
return nir_cross3(nb, srcs[0], srcs[1]);
|
||||
case OpenCLstd_Degrees:
|
||||
return nir_degrees(nb, srcs[0]);
|
||||
case OpenCLstd_Fdim:
|
||||
return nir_fdim(nb, srcs[0], srcs[1]);
|
||||
case OpenCLstd_Distance:
|
||||
return nir_distance(nb, srcs[0], srcs[1]);
|
||||
case OpenCLstd_Fast_distance:
|
||||
return nir_fast_distance(nb, srcs[0], srcs[1]);
|
||||
case OpenCLstd_Fast_length:
|
||||
return nir_fast_length(nb, srcs[0]);
|
||||
case OpenCLstd_Fast_normalize:
|
||||
return nir_fast_normalize(nb, srcs[0]);
|
||||
case OpenCLstd_Length:
|
||||
return nir_length(nb, srcs[0]);
|
||||
case OpenCLstd_Fmod:
|
||||
if (nb->shader->options->lower_fmod)
|
||||
break;
|
||||
@@ -544,18 +532,10 @@ handle_special(struct vtn_builder *b, uint32_t opcode,
|
||||
return nir_nextafter(nb, srcs[0], srcs[1]);
|
||||
case OpenCLstd_Normalize:
|
||||
return nir_normalize(nb, srcs[0]);
|
||||
case OpenCLstd_Radians:
|
||||
return nir_radians(nb, srcs[0]);
|
||||
case OpenCLstd_Rotate:
|
||||
return nir_rotate(nb, srcs[0], srcs[1]);
|
||||
case OpenCLstd_Smoothstep:
|
||||
return nir_smoothstep(nb, srcs[0], srcs[1], srcs[2]);
|
||||
case OpenCLstd_Clz:
|
||||
return nir_clz_u(nb, srcs[0]);
|
||||
case OpenCLstd_Select:
|
||||
return nir_select(nb, srcs[0], srcs[1], srcs[2]);
|
||||
case OpenCLstd_Step:
|
||||
return nir_sge(nb, srcs[1], srcs[0]);
|
||||
case OpenCLstd_S_Upsample:
|
||||
case OpenCLstd_U_Upsample:
|
||||
/* SPIR-V and CL have different defs for upsample, just implement in nir */
|
||||
|
Reference in New Issue
Block a user