[Mesa-stable] [Mesa-dev] [PATCH] nir: Use double-precision pow() when bit_size is 64, powf() otherwise
Jason Ekstrand
jason at jlekstrand.net
Mon Mar 28 19:58:58 UTC 2016
On Mon, Mar 28, 2016 at 11:31 AM, Ian Romanick <idr at freedesktop.org> wrote:
> On 03/23/2016 08:09 PM, Jason Ekstrand wrote:
> > Is there a 64-bit pow in GLSL? If so, this is the right implementation.
>
> There isn't. But there also aren't double versions of sin or cos, and
> 9076c4e2 added those. However, it didn't add double versions of fexp2
> or flog2 (both of which are not supported in GLSL).
>
> Ugh... it also did not add double versions of frsq or fsqrt... which are
> supported in GLSL.
>
> So, there are some extra functions and some missing functions. My gut
> tells me we should just do all of them so that people don't have to
> think about which ones should / shouldn't be implemented.
>
That seems reasonable. Either that or flag those opcodes as only
supporting 32-bit types for now. I think I'd rather just implement them if
it's not too much work. You know someone's going to write a an fp64_pow
extension some day...
> Looking more closely... I think fabs, fnot, fsign, and fsat should have
> explicit double support as well... it seems the existing implementations
> of both of these will cause some small values to be incorrectly
> "flushed" to zero. What are the rules in C when you compare a double
> variable with a single constant?
>
> void foo(double d)
> {
> /* Does d get converted to single, or does 0.0f get converted to
> * double?
> */
> if (d == 0.0f)
> printf("zero\n");
> }
>
> > Reviewed-by: Jason Ekstrand <jason at jlekstrand.net
> > <mailto:jason at jlekstrand.net>>
> >
> > On Mar 23, 2016 7:42 PM, "Ian Romanick" <idr at freedesktop.org
> > <mailto:idr at freedesktop.org>> wrote:
> >
> > From: Ian Romanick <ian.d.romanick at intel.com
> > <mailto:ian.d.romanick at intel.com>>
> >
> > Found (randomly) by inspection. Looking at the rest of the changes
> in
> > this file in commit 9076c4e2, I'm certain this is what was intended.
> >
> > Signed-off-by: Ian Romanick <ian.d.romanick at intel.com
> > <mailto:ian.d.romanick at intel.com>>
> > Cc: Connor Abbott <cwabbott0 at gmail.com <mailto:cwabbott0 at gmail.com>>
> > Cc: mesa-stable at lists.freedesktop.org
> > <mailto:mesa-stable at lists.freedesktop.org>
> > ---
> > src/compiler/nir/nir_opcodes.py | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/src/compiler/nir/nir_opcodes.py
> > b/src/compiler/nir/nir_opcodes.py
> > index 553f924..ac59130 100644
> > --- a/src/compiler/nir/nir_opcodes.py
> > +++ b/src/compiler/nir/nir_opcodes.py
> > @@ -520,7 +520,7 @@ for (int i = 0; i < 32; i += 8) {
> > }
> > """)
> >
> > -binop("fpow", tfloat, "", "bit_size == 64 ? powf(src0, src1) :
> > pow(src0, src1)")
> > +binop("fpow", tfloat, "", "bit_size == 64 ? pow(src0, src1) :
> > powf(src0, src1)")
> >
> > binop_horiz("pack_half_2x16_split", 1, tuint32, 1, tfloat32, 1,
> > tfloat32,
> > "pack_half_1x16(src0.x) | (pack_half_1x16(src1.x) <<
> 16)")
> > --
> > 2.5.5
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org <mailto:
> mesa-dev at lists.freedesktop.org>
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-stable/attachments/20160328/4f3ab40c/attachment.html>
More information about the mesa-stable
mailing list