Mesa (master): draw: Include draw_decompose_tmp.h in draw_so_emit_tmp.h.

Chia-I Wu olv at kemper.freedesktop.org
Thu Aug 5 22:53:01 PDT 2010


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

Author: Chia-I Wu <olv at lunarg.com>
Date:   Mon Aug  2 01:38:58 2010 +0800

draw: Include draw_decompose_tmp.h in draw_so_emit_tmp.h.

Use draw_decompose_tmp.h to replace stream out primitive decomposer.

---

 src/gallium/auxiliary/draw/draw_pt_so_emit.c  |   20 +---
 src/gallium/auxiliary/draw/draw_so_emit_tmp.h |  156 +++++-------------------
 2 files changed, 38 insertions(+), 138 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_pt_so_emit.c b/src/gallium/auxiliary/draw/draw_pt_so_emit.c
index 5d82934..c86bdd9 100644
--- a/src/gallium/auxiliary/draw/draw_pt_so_emit.c
+++ b/src/gallium/auxiliary/draw/draw_pt_so_emit.c
@@ -218,25 +218,15 @@ static void so_tri(struct pt_so_emit *so, int i0, int i1, int i2)
 }
 
 
-#define TRIANGLE(gs,i0,i1,i2) so_tri(so,i0,i1,i2)
-#define LINE(gs,i0,i1)        so_line(so,i0,i1)
-#define POINT(gs,i0)          so_point(so,i0)
-#define FUNC so_run_linear
-#define LOCAL_VARS
+#define FUNC         so_run_linear
+#define GET_ELT(idx) (start + (idx))
 #include "draw_so_emit_tmp.h"
-#undef LOCAL_VARS
-#undef FUNC
 
 
-#define TRIANGLE(gs,i0,i1,i2) so_tri(gs,elts[i0],elts[i1],elts[i2])
-#define LINE(gs,i0,i1)        so_line(gs,elts[i0],elts[i1])
-#define POINT(gs,i0)          so_point(gs,elts[i0])
-#define FUNC so_run_elts
-#define LOCAL_VARS                         \
-   const ushort *elts = input_prims->elts;
+#define FUNC         so_run_elts
+#define LOCAL_VARS   const ushort *elts = input_prims->elts;
+#define GET_ELT(idx) (elts[start + (idx)])
 #include "draw_so_emit_tmp.h"
-#undef LOCAL_VARS
-#undef FUNC
 
 
 void draw_pt_so_emit( struct pt_so_emit *emit,
diff --git a/src/gallium/auxiliary/draw/draw_so_emit_tmp.h b/src/gallium/auxiliary/draw/draw_so_emit_tmp.h
index 01212a8..6d8937a 100644
--- a/src/gallium/auxiliary/draw/draw_so_emit_tmp.h
+++ b/src/gallium/auxiliary/draw/draw_so_emit_tmp.h
@@ -1,123 +1,33 @@
-
-static void FUNC( struct pt_so_emit *so,
-                  const struct draw_prim_info *input_prims,
-                  const struct draw_vertex_info *input_verts,
-                  unsigned start,
-                  unsigned count)
-{
-   struct draw_context *draw = so->draw;
-
-   boolean flatfirst = (draw->rasterizer->flatshade &&
-                        draw->rasterizer->flatshade_first);
-   unsigned i;
-   LOCAL_VARS
-
-   if (0) debug_printf("%s %d\n", __FUNCTION__, count);
-
-   debug_assert(input_prims->primitive_count == 1);
-
-   switch (input_prims->prim) {
-   case PIPE_PRIM_POINTS:
-      for (i = 0; i < count; i++) {
-	 POINT( so, start + i + 0 );
-      }
-      break;
-
-   case PIPE_PRIM_LINES:
-      for (i = 0; i+1 < count; i += 2) {
-         LINE( so , start + i + 0 , start + i + 1 );
-      }
-      break;
-
-   case PIPE_PRIM_LINE_LOOP:
-      if (count >= 2) {
-
-         for (i = 1; i < count; i++) {
-            LINE( so, start + i - 1, start + i );
-         }
-
-	 LINE( so, start + i - 1, start );
-      }
-      break;
-
-   case PIPE_PRIM_LINE_STRIP:
-      for (i = 1; i < count; i++) {
-         LINE( so, start + i - 1, start + i );
-      }
-      break;
-
-   case PIPE_PRIM_TRIANGLES:
-      for (i = 0; i+2 < count; i += 3) {
-         TRIANGLE( so, start + i + 0, start + i + 1, start + i + 2 );
-      }
-      break;
-
-   case PIPE_PRIM_TRIANGLE_STRIP:
-      if (flatfirst) {
-         for (i = 0; i+2 < count; i++) {
-            TRIANGLE( so,
-                      start + i + 0,
-                      start + i + 1 + (i&1),
-                      start + i + 2 - (i&1) );
-         }
-      }
-      else {
-         for (i = 0; i+2 < count; i++) {
-            TRIANGLE( so,
-                      start + i + 0 + (i&1),
-                      start + i + 1 - (i&1),
-                      start + i + 2 );
-         }
-      }
-      break;
-
-   case PIPE_PRIM_TRIANGLE_FAN:
-      if (count >= 3) {
-         if (flatfirst) {
-            for (i = 0; i+2 < count; i++) {
-               TRIANGLE( so,
-                         start + i + 1,
-                         start + i + 2,
-                         start );
-            }
-         }
-         else {
-            for (i = 0; i+2 < count; i++) {
-               TRIANGLE( so,
-                         start,
-                         start + i + 1,
-                         start + i + 2 );
-            }
-         }
-      }
-      break;
-
-   case PIPE_PRIM_POLYGON:
-      {
-         /* These bitflags look a little odd because we submit the
-          * vertices as (1,2,0) to satisfy flatshade requirements.
-          */
-
-	 for (i = 0; i+2 < count; i++) {
-
-            if (flatfirst) {
-               TRIANGLE( so, start + 0, start + i + 1, start + i + 2 );
-            }
-            else {
-               TRIANGLE( so, start + i + 1, start + i + 2, start + 0 );
-            }
-	 }
-      }
-      break;
-
-   default:
-      debug_assert(!"Unsupported primitive in stream output");
-      break;
-   }
-}
-
-
-#undef TRIANGLE
-#undef POINT
-#undef LINE
-#undef FUNC
+#define FUNC_VARS                               \
+   struct pt_so_emit *so,                       \
+   const struct draw_prim_info *input_prims,    \
+   const struct draw_vertex_info *input_verts,  \
+   unsigned start,                              \
+   unsigned count
+
+#define FUNC_ENTER                                                \
+   /* declare more local vars */                                  \
+   struct draw_context *draw = so->draw;                          \
+   const unsigned prim = input_prims->prim;                       \
+   const boolean last_vertex_last =                               \
+      !(draw->rasterizer->flatshade &&                            \
+        draw->rasterizer->flatshade_first);                       \
+   do {                                                           \
+      debug_assert(input_prims->primitive_count == 1);            \
+      switch (prim) {                                             \
+      case PIPE_PRIM_LINES_ADJACENCY:                             \
+      case PIPE_PRIM_LINE_STRIP_ADJACENCY:                        \
+      case PIPE_PRIM_TRIANGLES_ADJACENCY:                         \
+      case PIPE_PRIM_TRIANGLE_STRIP_ADJACENCY:                    \
+         debug_assert(!"unexpected primitive type in stream output"); \
+         return;                                                  \
+      default:                                                    \
+         break;                                                   \
+      }                                                           \
+   } while (0)                                                    \
+
+#define POINT(i0)                so_point(so,i0)
+#define LINE(flags,i0,i1)        so_line(so,i0,i1)
+#define TRIANGLE(flags,i0,i1,i2) so_tri(so,i0,i1,i2)
+
+#include "draw_decompose_tmp.h"



More information about the mesa-commit mailing list