Bug 94909 - [llvmpipe] piglit fs-roundEven-float regression
Summary: [llvmpipe] piglit fs-roundEven-float regression
Status: RESOLVED FIXED
Alias: None
Product: Mesa
Classification: Unclassified
Component: Mesa core (show other bugs)
Version: git
Hardware: x86-64 (AMD64) Linux (All)
: medium normal
Assignee: mesa-dev
QA Contact: mesa-dev
URL:
Whiteboard:
Keywords: bisected, regression
Depends on:
Blocks:
 
Reported: 2016-04-12 22:26 UTC by Vinson Lee
Modified: 2016-04-13 13:52 UTC (History)
2 users (show)

See Also:
i915 platform:
i915 features:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vinson Lee 2016-04-12 22:26:55 UTC
mesa: 35ade36c88e5aaa0b18c3cc911d9a4de3a60a80b (master 11.3.0-devel)

$ ./bin/shader_runner generated_tests/spec/glsl-1.30/execution/built-in-functions/fs-roundEven-float.shader_test -auto
Probe color at (36,0)
  Expected: 0.000000 1.000000 0.000000 1.000000
  Observed: 1.000000 0.000000 0.000000 1.000000
Probe color at (60,0)
  Expected: 0.000000 1.000000 0.000000 1.000000
  Observed: 1.000000 0.000000 0.000000 1.000000
PIGLIT: {"result": "fail" }


e4f01da15d8c6ce3e8c77ff3ff3d2ce2574a3f7b is the first bad commit
commit e4f01da15d8c6ce3e8c77ff3ff3d2ce2574a3f7b
Author: Jose Fonseca <jfonseca@vmware.com>
Date:   Fri Apr 1 11:50:28 2016 +0100

    gallivm: Prefer backend agnostic intrinsic for rounding.
    
    We could unconditionally use these instrinsics, but performance with SSE2
    would suck, as LLVM falls back to calling libm.
    
    lp_test_arit.
    
    Reviewed-by: Roland Scheidegger <sroland@vmware.com>

:040000 040000 0f7b55e9ae1e5faa3e9ee24d5ab66605e5be096d 09bf79b798b6210887add905b1f91d8587b58bc2 M	src
bisect run success
Comment 1 Roland Scheidegger 2016-04-13 02:10:30 UTC
Hmm I looked at this and the round llvm intrinsic doesn't actually do something useful (or at least definitely not what we want). The code generated is awful and apparently wrong.
llvm.round will do per-element calls into __roundf which is horrible. I think that's because libm round is specced to do round-nearest-away-from-zero, which is both not what we want and what we can't do natively with the roundps instruction.
I'll fix this...
Comment 2 Roland Scheidegger 2016-04-13 13:52:10 UTC
Fixed by cb438d8b3e1e32faf714f22b308c8f9c5506209b.


bug/show.html.tmpl processed on Jan 19, 2017 at 21:21:14.
(provided by the Example extension).