[Mesa-dev] [PATCH 4/5] nir: implement GLSL.std.450 NMax operation
Juan A. Suarez Romero
jasuarez at igalia.com
Tue Jun 13 09:07:58 UTC 2017
On Mon, 2017-06-12 at 10:27 -0700, Connor Abbott wrote:
> The nir fmax opcode already has the semantics you want wrt NaN's, or
> at least it should, no need to do all this csel stuff.
>
Thanks for the feedback. Didn't realize that indeed fmax (and fmin too)
already handle NaN.
I'll use them to implement NMax, NMin and NClamp.
J.A.
> On Mon, Jun 12, 2017 at 9:33 AM, Juan A. Suarez Romero
> <jasuarez at igalia.com> wrote:
> > ---
> > src/compiler/spirv/vtn_glsl450.c | 23 +++++++++++++++++++++++
> > 1 file changed, 23 insertions(+)
> >
> > diff --git a/src/compiler/spirv/vtn_glsl450.c b/src/compiler/spirv/vtn_glsl450.c
> > index 5e75c3c..ce80360 100644
> > --- a/src/compiler/spirv/vtn_glsl450.c
> > +++ b/src/compiler/spirv/vtn_glsl450.c
> > @@ -225,6 +225,25 @@ build_nmin(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y)
> > }
> >
> > /**
> > + * Returns
> > + * if (isNan(x))
> > + * return y
> > + * else if (isNan(y))
> > + * return x
> > + * else
> > + * return min(x, y)
> > + */
> > +static nir_ssa_def *
> > +build_nmax(nir_builder *b, nir_ssa_def *x, nir_ssa_def *y)
> > +{
> > + return nir_bcsel(b, nir_fne(b, x, x),
> > + y,
> > + nir_bcsel(b, nir_fne(b, y, y),
> > + x,
> > + nir_fmax(b, x, y)));
> > +}
> > +
> > +/**
> > * Approximate asin(x) by the formula:
> > * asin~(x) = sign(x) * (pi/2 - sqrt(1 - |x|) * (pi/2 + |x|(pi/4 - 1 + |x|(p0 + |x|p1))))
> > *
> > @@ -555,6 +574,10 @@ handle_glsl450_alu(struct vtn_builder *b, enum GLSLstd450 entrypoint,
> > val->ssa->def = build_nmin(nb, src[0], src[1]);
> > return;
> >
> > + case GLSLstd450NMax:
> > + val->ssa->def = build_nmax(nb, src[0], src[1]);
> > + return;
> > +
> > case GLSLstd450Log:
> > val->ssa->def = build_log(nb, src[0]);
> > return;
> > --
> > 2.9.4
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>
More information about the mesa-dev
mailing list