<div dir="ltr">On 16 February 2013 10:58, Brian Paul <span dir="ltr"><<a href="mailto:brianp@vmware.com" target="_blank">brianp@vmware.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
This fixes a regression from ab74fee5e1a3fc3323b7238278637b232c2d0d95.<br>
When we use the clip coordinate to compute the screen-space interpolation<br>
factor, we need to first apply the divide-by-zero step to the clip<br>
coordinate.<br></blockquote><div><br></div><div style>I think you mean "divide-by-W" :)</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Fixes <a href="http://bugs.freedesktop.org/show_bug.cgi?id=60938" target="_blank">http://bugs.freedesktop.org/show_bug.cgi?id=60938</a><br>
<br>
Note: This is a candidate for the 9.1 branch.<br>
---<br>
 src/gallium/auxiliary/draw/draw_pipe_clip.c |   11 ++++++++---<br>
 1 files changed, 8 insertions(+), 3 deletions(-)<br>
<br>
diff --git a/src/gallium/auxiliary/draw/draw_pipe_clip.c b/src/gallium/auxiliary/draw/draw_pipe_clip.c<br>
index 7b879c4..3110809 100644<br>
--- a/src/gallium/auxiliary/draw/draw_pipe_clip.c<br>
+++ b/src/gallium/auxiliary/draw/draw_pipe_clip.c<br>
@@ -167,12 +167,17 @@ static void interp( const struct clip_stage *clip,<br>
    {<br>
       int k;<br>
       t_nopersp = t;<br>
-      for (k = 0; k < 2; k++)<br>
+      /* find either in.x != out.x or in.y != out.y */<br>
+      for (k = 0; k < 2; k++) {<br>
          if (in->clip[k] != out->clip[k]) {<br>
-            t_nopersp = (dst->clip[k] - out->clip[k]) /<br>
-               (in->clip[k] - out->clip[k]);<br>
+            /* do divide by W, then compute linear interpolation factor */<br>
+            float in_coord = in->clip[k] / in->clip[3];<br>
+            float out_coord = out->clip[k] / out->clip[3];<br>
+            float dst_coord = dst->clip[k] / dst->clip[3];<br>
+            t_nopersp = (dst_coord - out_coord) / (in_coord - out_coord);<br>
             break;<br>
          }<br>
+      }<br>
    }<br>
<br>
    /* Other attributes<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.7.3.4<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div></div>