Module: Mesa
Branch: master
Commit: ab74fee5e1a3fc3323b7238278637b232c2d0d95
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ab74fee5e1a3fc3323b7238278637b232c2d0d95

Author: Brian Paul <[email protected]>
Date:   Mon Jan 21 11:41:02 2013 -0700

draw: fix problem in screen-space interpolation clip code

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.

Reviewed-by: José Fonseca <[email protected]>

---

 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;
          }
    }

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to