[Mesa-dev] [PATCH 3/3] draw: fix problem in screen-space interpolation clip code

Jose Fonseca jfonseca at vmware.com
Mon Jan 21 11:20:10 PST 2013


Series looks good to me.

Reviewed-by: Brian Paul <brianp at vmware.com>

Jose

----- Original Message -----
> I don't see how this could have ever worked right.
> 
> The screen-space interpolation code uses the vertex->data[pos_attr]
> position which contain window coords.  But window coords are only
> computed for the unclipped vertices; the clipped vertices have
> undefined window coords (see draw_cliptest_tmp.h).
> 
> Use the vertex clip coords instead which are always defined.
> 
> Fixes http://bugs.freedesktop.org/show_bug.cgi?id=55476
> (piglit fbo-blit-stretch failure on softpipe)
> 
> Note: This is a candidate for the 9.0 branch.
> ---
>  src/gallium/auxiliary/draw/draw_pipe_clip.c |    6 +++---
>  1 files changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/src/gallium/auxiliary/draw/draw_pipe_clip.c
> b/src/gallium/auxiliary/draw/draw_pipe_clip.c
> index 878d779..7b879c4 100644
> --- a/src/gallium/auxiliary/draw/draw_pipe_clip.c
> +++ b/src/gallium/auxiliary/draw/draw_pipe_clip.c
> @@ -168,9 +168,9 @@ static void interp( const struct clip_stage
> *clip,
>        int k;
>        t_nopersp = t;
>        for (k = 0; k < 2; k++)
> -         if (in->data[pos_attr][k] != out->data[pos_attr][k]) {
> -            t_nopersp = (dst->data[pos_attr][k] -
> out->data[pos_attr][k]) /
> -               (in->data[pos_attr][k] - out->data[pos_attr][k]);
> +         if (in->clip[k] != out->clip[k]) {
> +            t_nopersp = (dst->clip[k] - out->clip[k]) /
> +               (in->clip[k] - out->clip[k]);
>              break;
>           }
>     }
> --
> 1.7.3.4
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> 


More information about the mesa-dev mailing list