From: Roland Scheidegger <srol...@vmware.com> Discovered this when working on other clip code, apparently didn't work correctly - the combination of linear interpolated values and using gl_ClipVertex produced wrong values (failing all such combinations in piglits glsl-1.30 interpolation tests). Use the pre-clip-pos values when determining the interpolation factor to fix this. Unfortunately I have no idea what I'm doing here really, but it fixes all these failures in piglit (all interpolation-noperspective-XXX-vertex, 10 tests in total). Albeit piglit coverage of clipping isn't great, so hopefully someone can confirm this actually makes sense, and wouldn't cause failures elsewhere... --- src/gallium/auxiliary/draw/draw_pipe_clip.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/gallium/auxiliary/draw/draw_pipe_clip.c b/src/gallium/auxiliary/draw/draw_pipe_clip.c index f2b56b0..7f22eef 100644 --- a/src/gallium/auxiliary/draw/draw_pipe_clip.c +++ b/src/gallium/auxiliary/draw/draw_pipe_clip.c @@ -192,11 +192,11 @@ static void interp(const struct clip_stage *clip, t_nopersp = t; /* find either in.x != out.x or in.y != out.y */ for (k = 0; k < 2; k++) { - if (in->clip[k] != out->clip[k]) { + if (in->pre_clip_pos[k] != out->pre_clip_pos[k]) { /* do divide by W, then compute linear interpolation factor */ - float in_coord = in->clip[k] / in->clip[3]; - float out_coord = out->clip[k] / out->clip[3]; - float dst_coord = dst->clip[k] / dst->clip[3]; + float in_coord = in->pre_clip_pos[k] / in->pre_clip_pos[3]; + float out_coord = out->pre_clip_pos[k] / out->pre_clip_pos[3]; + float dst_coord = dst->pre_clip_pos[k] / dst->pre_clip_pos[3]; t_nopersp = (dst_coord - out_coord) / (in_coord - out_coord); break; } -- 2.1.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev