dEQP-GLES3: line color interpolation does not have enough precision
Submitted by Iago Toral
Assigned to Ian Romanick
dEQP-GLES3.functional.rasterization.interpolation.basic.lines dEQP-GLES3.functional.rasterization.interpolation.basic.line_strip 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 dEQP-GLES3.functional.rasterization.interpolation.projected.line_loop 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 dEQP-GLES3.functional.rasterization.fbo.texture_2d.interpolation.lines_wide dEQP-GLES3.functional.rasterization.fbo.rbo_singlesample.interpolation.lines dEQP-GLES3.functional.rasterization.fbo.rbo_singlesample.interpolation.lines_wide
The problem with these are small differences in the interpolated color computed for certain pixels across lines. dEQP computes a range of acceptable color values for each pixel and them compares that with the actual rendering result (as provided by glReadPixels). In many cases (at least for lines that are just 1px wide), the difference is off by just one unit in just one component of a pixel. For wide lines it seems that more pixels are affected but the differences are so small that they seem invisible to the naked eye in any case.
Attribute interpolation is done in hardware. The FS receives barycentric coordinates and deltas, computed by hardware in the payload and then, as far as I can see, computing interpolated values amounts to a PLN instruction passing these values as parameters. If this is not producing correct results I would guess that it is an issue in the precision used by the hardware to do these computations (be it the PLN, the values delivered in the FS payload or both), and software can't do much about it. I have also reviewed the state configurations for various hardware units that are involved in interpolation and rasterization calculations and they all seem okay to me.
So, my conclusion is that it is not clear to me if dEQP's expectations are 100% accurate, but even if they are I am not sure that the driver can do much about this since all the aspects of interpolation seem to be on the side of the hardware.