Mesa (master): draw: get rid of special logic to not emit null tris

Roland Scheidegger sroland at kemper.freedesktop.org
Sat May 19 00:50:56 UTC 2018


Module: Mesa
Branch: master
Commit: 6f558fb0f79d88eb1749740e8bddb7e8b313fdf4
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6f558fb0f79d88eb1749740e8bddb7e8b313fdf4

Author: Roland Scheidegger <sroland at vmware.com>
Date:   Thu May 17 03:45:02 2018 +0200

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 <jfonseca at vmware.com>

---

 src/gallium/auxiliary/draw/draw_pipe_clip.c | 38 -----------------------------
 1 file changed, 38 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_pipe_clip.c b/src/gallium/auxiliary/draw/draw_pipe_clip.c
index 46118b6e67..2a9c944dc1 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;
       }




More information about the mesa-commit mailing list