[Mesa-dev] Expected wide line rendering with clipping

Erik Faye-Lund kusmabite at gmail.com
Sat Feb 7 04:41:49 PST 2015


On Fri, Feb 6, 2015 at 1:11 PM, Iago Toral <itoral at igalia.com> wrote:
> Hi,
>
> Eduardo and I have been looking into a few dEQP test failures that deal
> with wide line rendering. There are a few of them that fail because of
> how clipping is implemented for this case.
>
> The problem in these cases seems to be that the hw renders the wide line
> as a parallelogram so that if an edge of the parallelogram is partially
> clipped, the other parallel edge will also be clipped at the same
> height/width so that the resulting wide line stays a parallelogram. The
> dEQP renders as if a wide line where a collection of 1px lines, so
> cliping one edge of the resulting line does not have implications for
> the other edge.
>
> This ASCII art illustrates the problem (* represent line pixels, |
> represents the viewport's rightmost edge):
>
>  Expected by dEQP          i965 rendering
>          |                      |
>         *|                      |
>        **|                      |
>       ***|                      |
>      ****|                  ****|
>     **** |                 **** |
>    ****  |                ****  |

Is that drawing correct? I would expect it to look like this:

          |                      |
         *|                      |
        **|                    **|**
       ***|                   ***|*
      ****|                  ****|
     **** |                 **** |
    ****  |                ****  |

>From the drawing, it looks like the line is exactly 45 degrees, so I
believe this particular case is actually undefined, because of the
following spec wording:

"Line segment rasterization begins by characterizing the segment as
either x-major or y-major. x-major line segments have slope in the
closed interval [−1, 1]; all other line segments are y-major (slope is
determined by the segment’s endpoints)."

A 45 degree line should have a slope of 1, and should in theory be
identified as an x-major line, giving the result dEQP expects (i965 is
in this case rendering the line as similar to y-major, except y-major
rendering should also generate fragments outside the viewport, as
pointed out in my drawing above). However, since we're exactly at the
break-off point, previous calculations are allowed to be off by some
small value, leaving the characterization undefined.

So I think in this case, both results are allowed, and the test is
therefore somewhat bogus. If the line was tilted a tiny amount so it's
guaranteed to be characterized as an x-major, then it should be
correct again. Not having access to the tests myself, they might
already have done this, though.


More information about the mesa-dev mailing list