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

Reply via email to