diff --git a/src/gallium/auxiliary/draw/draw_pipe_clip.c b/src/gallium/auxiliary/draw/draw_pipe_clip.c index 46118b6e67d..2a9c944dc1e 100644 --- a/src/gallium/auxiliary/draw/draw_pipe_clip.c +++ b/src/gallium/auxiliary/draw/draw_pipe_clip.c @@ -209,30 +209,6 @@ static void interp(const struct clip_stage *clip, } } -/** - * Checks whether the specified triangle is empty and if it is returns - * true, otherwise returns false. - * Triangle is considered null/empty if its area is equal to zero. - */ -static inline boolean -is_tri_null(const struct clip_stage *clip, const struct prim_header *header) -{ - const unsigned pos_attr = clip->pos_attr; - float x1 = header->v[1]->data[pos_attr][0] - header->v[0]->data[pos_attr][0]; - float y1 = header->v[1]->data[pos_attr][1] - header->v[0]->data[pos_attr][1]; - float z1 = header->v[1]->data[pos_attr][2] - header->v[0]->data[pos_attr][2]; - - float x2 = header->v[2]->data[pos_attr][0] - header->v[0]->data[pos_attr][0]; - float y2 = header->v[2]->data[pos_attr][1] - header->v[0]->data[pos_attr][1]; - float z2 = header->v[2]->data[pos_attr][2] - header->v[0]->data[pos_attr][2]; - - float vx = y1 * z2 - z1 * y2; - float vy = x1 * z2 - z1 * x2; - float vz = x1 * y2 - y1 * x2; - - return (vx*vx + vy*vy + vz*vz) == 0.f; -} - /** * Emit a post-clip polygon to the next pipeline stage. The polygon * will be convex and the provoking vertex will always be vertex[0]. @@ -247,7 +223,6 @@ static void emit_poly(struct draw_stage *stage, struct prim_header header; unsigned i; ushort edge_first, edge_middle, edge_last; - boolean tri_emitted = FALSE; if (stage->draw->rasterizer->flatshade_first) { edge_first = DRAW_PIPE_EDGE_FLAG_0; @@ -269,7 +244,6 @@ static void emit_poly(struct draw_stage *stage, header.pad = 0; for (i = 2; i < n; i++, header.flags = edge_middle) { - boolean tri_null; /* order the triangle verts to respect the provoking vertex mode */ if (stage->draw->rasterizer->flatshade_first) { header.v[0] = inlist[0]; /* the provoking vertex */ @@ -282,18 +256,6 @@ static void emit_poly(struct draw_stage *stage, header.v[2] = inlist[0]; /* the provoking vertex */ } - tri_null = is_tri_null(clipper, &header); - /* - * If we ever generated a tri (regardless if it had area or not), - * skip all subsequent null tris. - * FIXME: I think this logic was hiding bugs elsewhere. It should - * be possible now to always emit all tris. - */ - if (tri_null && tri_emitted) { - continue; - } - tri_emitted = TRUE; - if (!edgeflags[i-1]) { header.flags &= ~edge_middle; }