Summary: | dEQP-GLES3: line color interpolation does not have enough precision | ||
---|---|---|---|
Product: | Mesa | Reporter: | Iago Toral <itoral> |
Component: | Drivers/DRI/i965 | Assignee: | Ian Romanick <idr> |
Status: | RESOLVED MOVED | QA Contact: | Intel 3D Bugs Mailing List <intel-3d-bugs> |
Severity: | normal | ||
Priority: | medium | CC: | agoldmints, agomez, gpoo+bfdo, itoral, jasuarez, jmcasanova, lemody |
Version: | git | ||
Hardware: | Other | ||
OS: | All | ||
Whiteboard: | |||
i915 platform: | i915 features: | ||
Bug Depends on: | |||
Bug Blocks: | 102590 |
Description
Iago Toral
2015-03-18 08:19:55 UTC
This tests also fail in HSW-U with the following configuration : ==Test Environment== -------------------------------------------------- xorg-server-1.17.2 libdrm-2.4.65 xf86-video-intel-2.99.917 mesa-11.1.0-devel (git 6f39546) libva-1.6.1 intel-driver-1.6.1 cairo-1.14.2 kernel: 4.3.0-rc5-drm-intel-nightly+ commit ce4630de6e6ba63c0477e753510f6294fac9d30c Author: Matt Roper <matthew.d.roper@intel.com> Date: Wed Oct 21 15:05:45 2015 -0700 As per today, using latest Mesa version (18.1-branchpoint-478-gf71714022b2), these are the failing tests: dEQP-GLES3.functional.rasterization.interpolation.basic.lines_wide dEQP-GLES3.functional.rasterization.interpolation.basic.line_strip_wide dEQP-GLES3.functional.rasterization.interpolation.basic.line_loop_wide dEQP-GLES3.functional.rasterization.interpolation.projected.lines_wide dEQP-GLES3.functional.rasterization.interpolation.projected.line_strip_wide dEQP-GLES3.functional.rasterization.interpolation.projected.line_loop_wide dEQP-GLES3.functional.rasterization.fbo.texture_2d.interpolation.lines_wide dEQP-GLES3.functional.rasterization.fbo.rbo_singlesample.interpolation.lines_wide Let me add I've tried to reproduce the other issues that now works fine (like dEQP-GLES3.functional.rasterization.interpolation.basic.lines) using mesa commit 6f39546, but it worked fine. I guess the dEQP testsuite fixed them. Another point to add here is that the tests that still fail, were removed from mustpass in Android, and included in gles3-hw-issues.txt file. Can't know exactly the reasons, as the bug it references is private. (In reply to Juan A. Suarez from comment #4) > Another point to add here is that the tests that still fail, were removed > from mustpass in Android, and included in gles3-hw-issues.txt file. Can't > know exactly the reasons, as the bug it references is private. These are the 2 commits that did this: https://github.com/KhronosGroup/VK-GL-CTS/commit/bd58796db4526ba76686d537a9f13b3202bd600c https://github.com/KhronosGroup/VK-GL-CTS/commit/8e77955a66e73dafccedd6284b4482eaf9e69e8a (In reply to Andrés Gómez García from comment #5) > (In reply to Juan A. Suarez from comment #4) > > Another point to add here is that the tests that still fail, were removed > > from mustpass in Android, and included in gles3-hw-issues.txt file. Can't > > know exactly the reasons, as the bug it references is private. > > These are the 2 commits that did this: > > https://github.com/KhronosGroup/VK-GL-CTS/commit/ > bd58796db4526ba76686d537a9f13b3202bd600c > https://github.com/KhronosGroup/VK-GL-CTS/commit/ > 8e77955a66e73dafccedd6284b4482eaf9e69e8a It would be great if someone with access to: https://issuetracker.google.com/issues/21804494 Could shed some light O:) For the sake of completeness, these are also failing: dEQP-GLES2.functional.rasterization.interpolation.basic.lines_wide dEQP-GLES2.functional.rasterization.interpolation.basic.line_strip_wide dEQP-GLES2.functional.rasterization.interpolation.basic.line_loop_wide dEQP-GLES2.functional.rasterization.interpolation.projected.lines_wide dEQP-GLES2.functional.rasterization.interpolation.projected.line_strip_wide dEQP-GLES2.functional.rasterization.interpolation.projected.line_loop_wide FYI I've created a vk-gl-cts issue to get shed some light into this. If the commentary on the Khronos and Google issues (which aren't public) is to be believed, Intel HW is providing barycentrics to the shader which are interpolated diagonally as if the line is drawn as a rectangle rather than simply replicating the barycentrics from the original line vertically or horizontally. If this is really the case, then ouch; we're going to have to do some "fun" in the shader. One option would be to use derivatives of barycentrics to figure out the slope of the line and, from there, figure out if we're supposed to be horizontal or vertical. However, I'm a bit concerned about the stability of those calculations for 45-degree lines and I'm not sure how we would figure out from there how to correct to get back to the pixel we're vertically or horizontally associated with. Another (rather horrible) option would be to somehow push both ends of the line into the fragment shader (probably via a geometry shader? Yuck!) and use gl_FragCoord to figure out our own barycentrics. Playing around with the line HW in Vulkan a bit, this definitely appears to be what the HW is doing. *sigh* Unfortunately, the HW doesn't give us a perpendicular barycentric coordinate so we have no idea where we are in the line other than gl_FragCoord.xy. The best solution I've been able to come up with so far is to add an extra vec4 varying out of the last geometry stage into the fragment shader which duplicates gl_Position. Then we can use that to find the slope of the line to determine major/minor axis and, using gl_FragCoord.xy, manually calculate the point vertical or horizontal and compute our own barycentrics. Of course, we'll have to have different math for perspective correct vs. not etc. Oh, fun! -- GitLab Migration Automatic Message -- This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity. You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/mesa/mesa/issues/1481. |
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.