aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoland Scheidegger <[email protected]>2018-04-24 18:12:34 +0200
committerRoland Scheidegger <[email protected]>2018-04-25 04:50:20 +0200
commit98578df27bbf682f254d59a3a7d63b5f1b98f838 (patch)
treeef379ab7c7001a7e3af9e3255c92b51e2702caa9
parentc17ddcb4b4240542832fba72b5810039dd245fc9 (diff)
draw: simplify clip null tri logic
Simplifies the logic when to emit null tris (albeit the reasons why we have to do this remain unclear). This is strictly just logic simplification, the behavior doesn't change at all. Reviewed-by: Jose Fonseca <[email protected]>
-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;