[Mesa-dev] [PATCH 1/2] nir: add a compiler option for disabling float comparison simplifications

Ian Romanick idr at freedesktop.org
Fri Nov 30 22:49:18 UTC 2018


On 11/30/2018 02:36 PM, Jason Ekstrand wrote:
> On Fri, Nov 30, 2018 at 4:34 PM Ian Romanick <idr at freedesktop.org
> <mailto:idr at freedesktop.org>> wrote:
> 
>     On 11/30/2018 01:29 PM, Jason Ekstrand wrote:
>     > On Fri, Nov 30, 2018 at 3:18 PM Ian Romanick <idr at freedesktop.org
>     <mailto:idr at freedesktop.org>
>     > <mailto:idr at freedesktop.org <mailto:idr at freedesktop.org>>> wrote:
>     >
>     >     On 11/29/2018 07:47 AM, Connor Abbott wrote:
>     >     > On Thu, Nov 29, 2018 at 4:22 PM Jason Ekstrand
>     >     <jason at jlekstrand.net <mailto:jason at jlekstrand.net>
>     <mailto:jason at jlekstrand.net <mailto:jason at jlekstrand.net>>> wrote:
>     >     >>
>     >     >> Can you provide some context for this?  Those rules are already
>     >     flagged "inexact" (that's what the ~ means) so they won't apply to
>     >     anything that's "precise" or "invariant".
>     >     >
>     >     > I think the concern is that this isn't allowed in SPIR-V,
>     even without
>     >     > exact or invariant. We even go out of our way to do the
>     correct thing
>     >     > in the frontend by inserting an "&& a == a" or "|| a != a",
>     but then
>     >
>     >     If you're that paranoid about it, why not just mark the
>     operations are
>     >     precise?  That's literally why it exists.
>     >
>     >     > opt_algebraic removes it with another rule and then this
>     rule can flip
>     >     > it from ordered to unordered. The spec says that operations
>     don't have
>     >     > to produce NaN, but it doesn't say anything on comparisons
>     other than
>     >     > the generic "everything must follow IEEE rules" and an entry
>     in the
>     >     > table that says "produces correct results." Then again, I
>     can't find
>     >     > anything in GLSL allowing these transforms either, so maybe
>     we just
>     >     > need to get rid of them.
>     >
>     >     What I hear you saying is, "The behavior isn't defined." 
>     Unless you can
>     >     point to a CTS test or an application that has incorrect
>     behavior, I'm
>     >     going to oppose removing this pretty strongly.  *Every* GLSL
>     compiler
>     >     does this.
>     >
>     >
>     > The test case came from VKD3D which does D3D12 on Vulkan.  Someone
>     > (Samuel, maybe?) was going to ask around and see if we can figure out
>     > what D3D12's rules are.  It's possible that it requires IEEE or
>     > something close.  If that's the case, as I said to Samuel on IRC,
>     we're
>     > probably looking at an extension.  I don't think we want a flag like
>     > this that's set per-API.
> 
>     Why isn't it sufficient to mark the operation as precise?  Was that on
>     IRC, and I missed it?
> 
>     It is also possible that we could improve the handling of 'if
>     (!condition)' in the backend to make these transformations less
>     important.  I have some patches for that somewhere.  They didn't really
>     help with these transformations in place, and I never measured the
>     result without these transformations.
> 
> I think we can and that would be better than this flag.

Ok.  I'll resurrect my patches next week.



More information about the mesa-dev mailing list