summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/auxiliary')
-rw-r--r--src/gallium/auxiliary/draw/draw_pipe_clip.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/src/gallium/auxiliary/draw/draw_pipe_clip.c b/src/gallium/auxiliary/draw/draw_pipe_clip.c
index 4cfa54b2e17..ff80363a51e 100644
--- a/src/gallium/auxiliary/draw/draw_pipe_clip.c
+++ b/src/gallium/auxiliary/draw/draw_pipe_clip.c
@@ -252,8 +252,7 @@ static void emit_poly(struct draw_stage *stage,
struct prim_header header;
unsigned i;
ushort edge_first, edge_middle, edge_last;
- boolean last_tri_was_null = FALSE;
- boolean tri_was_not_null = FALSE;
+ boolean tri_emitted = FALSE;
if (stage->draw->rasterizer->flatshade_first) {
edge_first = DRAW_PIPE_EDGE_FLAG_0;
@@ -289,17 +288,16 @@ static void emit_poly(struct draw_stage *stage,
}
tri_null = is_tri_null(clipper, &header);
- /* If we generated a triangle with an area, aka. non-null triangle,
- * or if the previous triangle was also null then skip all subsequent
- * null triangles */
- if ((tri_was_not_null && tri_null) || (last_tri_was_null && tri_null)) {
- last_tri_was_null = tri_null;
+ /*
+ * If we ever generated a tri (regardless if it had area or not),
+ * skip all subsequent null tris.
+ * FIXME: it is unclear why we always have to emit at least one
+ * tri. Maybe this is hiding bugs elsewhere.
+ */
+ if (tri_null && tri_emitted) {
continue;
}
- last_tri_was_null = tri_null;
- if (!tri_null) {
- tri_was_not_null = TRUE;
- }
+ tri_emitted = TRUE;
if (!edgeflags[i-1]) {
header.flags &= ~edge_middle;