From e70e368af51a861c646a351d6d61b4fdf7253e89 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Mon, 3 Feb 2014 11:33:03 -0700 Subject: draw: fix incorrect color of flat-shaded clipped lines When we clipped a line weren't copying the provoking vertex color to the second vertex. We also weren't checking for first vs. last provoking vertex. Fixes failures found with the new piglit line-flat-clip-color test. Cc: "10.0, 10.1" Reviewed-by: Jose Fonseca (cherry picked from commit fc3fcd1e01093e8ab8d06d95c53f875ace57ca7f) --- src/gallium/auxiliary/draw/draw_pipe_clip.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/gallium/auxiliary/draw/draw_pipe_clip.c b/src/gallium/auxiliary/draw/draw_pipe_clip.c index dbb67575843..7409c1977b8 100644 --- a/src/gallium/auxiliary/draw/draw_pipe_clip.c +++ b/src/gallium/auxiliary/draw/draw_pipe_clip.c @@ -588,7 +588,12 @@ do_clip_line( struct draw_stage *stage, if (v0->clipmask) { interp( clipper, stage->tmp[0], t0, v0, v1, viewport_index ); - copy_flat(stage, stage->tmp[0], v0); + if (stage->draw->rasterizer->flatshade_first) { + copy_flat(stage, stage->tmp[0], v0); /* copy v0 color to tmp[0] */ + } + else { + copy_flat(stage, stage->tmp[0], v1); /* copy v1 color to tmp[0] */ + } newprim.v[0] = stage->tmp[0]; } else { @@ -597,6 +602,12 @@ do_clip_line( struct draw_stage *stage, if (v1->clipmask) { interp( clipper, stage->tmp[1], t1, v1, v0, viewport_index ); + if (stage->draw->rasterizer->flatshade_first) { + copy_flat(stage, stage->tmp[1], v0); /* copy v0 color to tmp[1] */ + } + else { + copy_flat(stage, stage->tmp[1], v1); /* copy v1 color to tmp[1] */ + } newprim.v[1] = stage->tmp[1]; } else { -- cgit v1.2.3