Browse Source

draw: get rid of special logic to not emit null tris

I've confirmed after 77554d220d 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 <jfonseca@vmware.com>
tags/18.2-branchpoint
Roland Scheidegger 7 years ago
parent
commit
6f558fb0f7
1 changed files with 0 additions and 38 deletions
  1. 0
    38
      src/gallium/auxiliary/draw/draw_pipe_clip.c

+ 0
- 38
src/gallium/auxiliary/draw/draw_pipe_clip.c View File

@@ -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;
}

Loading…
Cancel
Save