summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/softpipe
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2009-05-27 19:27:31 -0600
committerBrian Paul <[email protected]>2009-05-27 19:27:31 -0600
commit5d75124db480b37977c353511b4e228905b7cc95 (patch)
treeb44c38ba4c4467ad7230446826cfc08a7667bc9e /src/gallium/drivers/softpipe
parentc13bd7488593263f2c45c136b63114ce8b4602fb (diff)
softpipe: fix flat shading provoking vertex for PIPE_PRIM_POLYGON
Use the first vertex, not the last.
Diffstat (limited to 'src/gallium/drivers/softpipe')
-rw-r--r--src/gallium/drivers/softpipe/sp_context.h1
-rw-r--r--src/gallium/drivers/softpipe/sp_draw_arrays.c1
-rw-r--r--src/gallium/drivers/softpipe/sp_setup.c5
3 files changed, 6 insertions, 1 deletions
diff --git a/src/gallium/drivers/softpipe/sp_context.h b/src/gallium/drivers/softpipe/sp_context.h
index b89a7292e5b..2f90d538a59 100644
--- a/src/gallium/drivers/softpipe/sp_context.h
+++ b/src/gallium/drivers/softpipe/sp_context.h
@@ -107,6 +107,7 @@ struct softpipe_context {
/** Which vertex shader output slot contains point size */
int psize_slot;
+ unsigned api_prim; /**< current prim type being drawn: PIPE_PRIM_x */
unsigned reduced_api_prim; /**< PIPE_PRIM_POINTS, _LINES or _TRIANGLES */
/** Derived from scissor and surface bounds: */
diff --git a/src/gallium/drivers/softpipe/sp_draw_arrays.c b/src/gallium/drivers/softpipe/sp_draw_arrays.c
index f117096bf73..1460bc4b4b8 100644
--- a/src/gallium/drivers/softpipe/sp_draw_arrays.c
+++ b/src/gallium/drivers/softpipe/sp_draw_arrays.c
@@ -129,6 +129,7 @@ softpipe_draw_range_elements(struct pipe_context *pipe,
struct draw_context *draw = sp->draw;
unsigned i;
+ sp->api_prim = mode;
sp->reduced_api_prim = reduced_prim[mode];
if (sp->dirty)
diff --git a/src/gallium/drivers/softpipe/sp_setup.c b/src/gallium/drivers/softpipe/sp_setup.c
index accc692b66f..c4dd61e41e0 100644
--- a/src/gallium/drivers/softpipe/sp_setup.c
+++ b/src/gallium/drivers/softpipe/sp_setup.c
@@ -512,7 +512,10 @@ static boolean setup_sort_vertices( struct setup_context *setup,
const float (*v1)[4],
const float (*v2)[4] )
{
- setup->vprovoke = v2;
+ if (setup->softpipe->api_prim == PIPE_PRIM_POLYGON)
+ setup->vprovoke = v0;
+ else
+ setup->vprovoke = v2;
/* determine bottom to top order of vertices */
{