Bug 89648 - dEQP-GLES3: reflect does not produce correct results for limit values
Summary: dEQP-GLES3: reflect does not produce correct results for limit values
Status: RESOLVED WONTFIX
Alias: None
Product: Mesa
Classification: Unclassified
Component: Drivers/DRI/i965 (show other bugs)
Version: git
Hardware: Other All
: medium normal
Assignee: Intel 3D Bugs Mailing List
QA Contact: Intel 3D Bugs Mailing List
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-03-18 08:13 UTC by Iago Toral
Modified: 2017-02-13 19:52 UTC (History)
0 users

See Also:
i915 platform:
i915 features:


Attachments

Description Iago Toral 2015-03-18 08:13:39 UTC
List of affected tests:

dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.highp_vertex.scalar
dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.highp_fragment.scalar

The same underlying problems described for modf (bug 89645) and mix (bug 89647): the hardware produces NaNs for some of the operations involved.

reflect(x,y) is computed as: x - 2.0 * dot(y, x) * y = x - 2.0 * x * y * y (for scalars, but the argument is the same for vectors). If, for example, y is a very large number so that y * y = inf, and x = 0, then we have to multiply  0 by inf and that results in NaN. The same happens if x is not 0.0, but something very close (starting from -1.00e-38 for negative values for example) 

As with the other related bug reports, we could probably fix this by emitting code that checks for these values specifically and resolves them directly rather than using the formula, but that would hurt performance.
Comment 1 Kenneth Graunke 2016-03-26 09:44:13 UTC
These tests were stricken from the Android must-pass list.
Comment 2 Matt Turner 2017-02-13 19:52:02 UTC
I think these were fixed by

commit 123c801f106dd1157fc889eaec934272ac6be937
Author: Pyry Haulos <phaulos@google.com>
Date:   Fri May 29 14:09:59 2015 -0700

    Allow different multiplication order in reflect()
    
    GLSL spec allows compiler to assume that multiplication is commutative.
    reflect() contains three multiplications which compiler can re-order
    based on the spec language. This change relaxes reflect() tests to
    allow both evaluation orders.
    
    Bug: 19408572
    Change-Id: I78e5b6e6f7bc761b4c49f5e1d4a283fcc60bf512

and

commit 919e0bc33b7fa8a27131967a02c6ceca3c8d1009
Author: Mika Isojärvi <misojarvi@google.com>
Date:   Thu Mar 24 16:05:56 2016 -0700

    Allow more alternative forms of scalar reflect function
    
    Bug: 22859221
    Change-Id: Iff34d861642b8d4b8a1cdc932529d98ac7c71005

All 24 dEQP-GLES3.functional.shaders.builtin_functions.precision.reflect.* tests now pass.


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.