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
> <[email protected]> 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
> > [email protected]
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>
_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev