summaryrefslogtreecommitdiff
path: root/src/gallium/auxiliary/draw/draw_validate.c
diff options
context:
space:
mode:
authorBen Skeggs <skeggsb@gmail.com>2008-03-25 12:14:49 +1100
committerBen Skeggs <skeggsb@gmail.com>2008-03-25 12:14:49 +1100
commit9e1f7b2c57154704d5881362a44da703b7a4a00f (patch)
tree9cd0ca55f1eb9a0908ae76f65cfda107a7aec0ca /src/gallium/auxiliary/draw/draw_validate.c
parent601b018a9a6143c634239d5bb51616724c2e593d (diff)
parent4654803e2595ea041ea83baf5e13e6c68890e9a7 (diff)
Merge remote branch 'upstream/gallium-0.1' into nouveau-gallium-0.1
Diffstat (limited to 'src/gallium/auxiliary/draw/draw_validate.c')
-rw-r--r--src/gallium/auxiliary/draw/draw_validate.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/src/gallium/auxiliary/draw/draw_validate.c b/src/gallium/auxiliary/draw/draw_validate.c
index 33e5559508..70b477ba5c 100644
--- a/src/gallium/auxiliary/draw/draw_validate.c
+++ b/src/gallium/auxiliary/draw/draw_validate.c
@@ -34,20 +34,14 @@
/**
- * Check if we need any special pipeline stages, or whether prims/verts
- * can go through untouched.
+ * Check if we need any special pipeline stages, or whether
+ * prims/verts can go through untouched. Don't test for bypass
+ * clipping or vs modes, this function is just about the primitive
+ * pipeline stages.
*/
boolean
draw_need_pipeline(const struct draw_context *draw)
{
- /* clipping */
- if (!draw->rasterizer->bypass_clipping)
- return TRUE;
-
- /* vertex shader */
- if (!draw->rasterizer->bypass_vs)
- return TRUE;
-
/* line stipple */
if (draw->rasterizer->line_stipple_enable && draw->line_stipple)
return TRUE;
@@ -72,6 +66,11 @@ draw_need_pipeline(const struct draw_context *draw)
if (draw->rasterizer->poly_stipple_enable && draw->pipeline.pstipple)
return TRUE;
+ /* unfilled polygons */
+ if (draw->rasterizer->fill_cw != PIPE_POLYGON_MODE_FILL ||
+ draw->rasterizer->fill_ccw != PIPE_POLYGON_MODE_FILL)
+ return TRUE;
+
/* polygon offset */
if (draw->rasterizer->offset_cw || draw->rasterizer->offset_ccw)
return TRUE;
@@ -84,9 +83,14 @@ draw_need_pipeline(const struct draw_context *draw)
if (draw->rasterizer->light_twoside)
return TRUE;
- /* polygon cull */
+ /* polygon cull - this is difficult - hardware can cull just fine
+ * most of the time (though sometimes CULL_NEITHER is unsupported.
+ *
+ * Generally this isn't a reason to require the pipeline, though.
+ *
if (draw->rasterizer->cull_mode)
return TRUE;
+ */
return FALSE;
}