summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Paul <brianp@vmware.com>2013-01-21 11:41:02 -0700
committerBrian Paul <brianp@vmware.com>2013-01-22 14:53:58 -0700
commitab74fee5e1a3fc3323b7238278637b232c2d0d95 (patch)
treedc8b655c0e8c5a923d5984e60d1cff52a6d961df
parented643d6b2fa11082f617f24040c73d2c58ca09bf (diff)
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 <jfonseca@vmware.com>
-rw-r--r--src/gallium/auxiliary/draw/draw_pipe_clip.c6
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 878d7798802..7b879c4cd50 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;
}
}