summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Krol <[email protected]>2008-03-30 23:21:20 +0200
committerMichal Krol <[email protected]>2008-03-30 23:21:20 +0200
commit63950b11b6060e4e0d06e0d14548ff132a295067 (patch)
tree53848ae0dff0734a18f5c094aa892491f9429bd7
parentfc9888014470286d8d651c569aaadf9cd69d8282 (diff)
draw: Do not run full pipeline when flatshade_first for point primitives.
-rw-r--r--src/gallium/auxiliary/draw/draw_prim.c1
-rw-r--r--src/gallium/auxiliary/draw/draw_pt.c3
-rw-r--r--src/gallium/auxiliary/draw/draw_validate.c8
3 files changed, 11 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/draw/draw_prim.c b/src/gallium/auxiliary/draw/draw_prim.c
index 404c28d76a1..ddcde01d9a2 100644
--- a/src/gallium/auxiliary/draw/draw_prim.c
+++ b/src/gallium/auxiliary/draw/draw_prim.c
@@ -594,7 +594,6 @@ draw_arrays(struct draw_context *draw, unsigned prim,
/* drawing done here: */
if (!draw->rasterizer->bypass_vs ||
- (draw->rasterizer->flatshade && draw->rasterizer->flatshade_first) ||
!draw_pt_arrays(draw, prim, start, count)) {
/* we have to run the whole pipeline */
draw_prim(draw, prim, start, count);
diff --git a/src/gallium/auxiliary/draw/draw_pt.c b/src/gallium/auxiliary/draw/draw_pt.c
index 3ec31ec25f3..fc9304197a9 100644
--- a/src/gallium/auxiliary/draw/draw_pt.c
+++ b/src/gallium/auxiliary/draw/draw_pt.c
@@ -36,6 +36,9 @@
#include "draw/draw_pt.h"
+/* XXX: Shouldn't those two functions below use the '>' operator???
+ */
+
static boolean too_many_verts( struct draw_context *draw,
unsigned verts )
{
diff --git a/src/gallium/auxiliary/draw/draw_validate.c b/src/gallium/auxiliary/draw/draw_validate.c
index e163e078f0f..ad43f06f73f 100644
--- a/src/gallium/auxiliary/draw/draw_validate.c
+++ b/src/gallium/auxiliary/draw/draw_validate.c
@@ -76,6 +76,10 @@ draw_need_pipeline(const struct draw_context *draw,
/* AA lines */
if (draw->rasterizer->line_smooth && draw->pipeline.aaline)
return TRUE;
+
+ /* first-vertex driven flatshading */
+ if (draw->rasterizer->flatshade && draw->rasterizer->flatshade_first)
+ return TRUE;
}
if (points(prim))
@@ -112,6 +116,10 @@ draw_need_pipeline(const struct draw_context *draw,
/* two-side lighting */
if (draw->rasterizer->light_twoside)
return TRUE;
+
+ /* first-vertex driven flatshading */
+ if (draw->rasterizer->flatshade && draw->rasterizer->flatshade_first)
+ return TRUE;
}
/* polygon cull - this is difficult - hardware can cull just fine