summaryrefslogtreecommitdiffstats
path: root/src/gallium/auxiliary/draw
diff options
context:
space:
mode:
authorRoland Scheidegger <[email protected]>2018-05-17 03:45:02 +0200
committerRoland Scheidegger <[email protected]>2018-05-19 02:49:58 +0200
commit6f558fb0f79d88eb1749740e8bddb7e8b313fdf4 (patch)
tree2c20b1fe6712fab173890e6e224237cb66b16d4f /src/gallium/auxiliary/draw
parentc86e9a5fe51ce3ba26f4a75fd0e70d5ed93bedb6 (diff)
draw: get rid of special logic to not emit null tris
I've confirmed after 77554d220d6d74b4d913dc37ea3a874e9dc550e4 we no longer need this to pass some tests from another api (as we no longer generate the bogus extra null tris in the first place). Reviewed-by: Jose Fonseca <[email protected]>
Diffstat (limited to 'src/gallium/auxiliary/draw')
-rw-r--r--src/gallium/auxiliary/draw/draw_pipe_clip.c38
1 files changed, 0 insertions, 38 deletions
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
@@ -210,30 +210,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;
}