[Mesa-dev] [PATCH 18/24] t_dd_dmatmp.h: Remove HAVE_ELTS support

Ian Romanick idr at freedesktop.org
Mon Sep 14 18:01:24 PDT 2015


From: Ian Romanick <ian.d.romanick at intel.com>

Two drivers use this file, and neither supports ELTs.

Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
---
 src/mesa/tnl_dd/t_dd_dmatmp.h | 588 +-----------------------------------------
 1 file changed, 4 insertions(+), 584 deletions(-)

diff --git a/src/mesa/tnl_dd/t_dd_dmatmp.h b/src/mesa/tnl_dd/t_dd_dmatmp.h
index 63d54af..97bbb7f 100644
--- a/src/mesa/tnl_dd/t_dd_dmatmp.h
+++ b/src/mesa/tnl_dd/t_dd_dmatmp.h
@@ -43,29 +43,8 @@
 #error "must have lines, line strips, triangles, triangle fans, and triangle strips to use render template"
 #endif
 
-#if HAVE_QUAD_STRIPS || HAVE_QUADS
-#error "quads and quad strips not supported by render template"
-#endif
-
-#if !HAVE_ELTS
-#define ELTS_VARS(buf)
-#define ALLOC_ELTS(nr) 0
-#define EMIT_ELT( offset, elt )
-#define EMIT_TWO_ELTS( offset, elt0, elt1 )
-#define INCR_ELTS( nr )
-#define ELT_INIT(prim)
-#define GET_CURRENT_VB_MAX_ELTS() 0
-#define GET_SUBSEQUENT_VB_MAX_ELTS() 0
-#define RELEASE_ELT_VERTS()
-#define EMIT_INDEXED_VERTS( ctx, start, count )
-#endif
-
-#ifndef EMIT_TWO_ELTS
-#define EMIT_TWO_ELTS( offset, elt0, elt1 )	\
-do { 						\
-   EMIT_ELT( offset, elt0 ); 			\
-   EMIT_ELT( offset+1, elt1 ); 			\
-} while (0)
+#if HAVE_QUAD_STRIPS || HAVE_QUADS || HAVE_ELTS
+#error "ELTs, quads, and quad strips not supported by render template"
 #endif
 
 
@@ -73,31 +52,6 @@ do { 						\
 /*                  Render whole begin/end objects                    */
 /**********************************************************************/
 
-
-
-
-#if (HAVE_ELTS)
-static void *TAG(emit_elts)( struct gl_context *ctx, GLuint *elts, GLuint nr,
-			     void *buf)
-{
-   GLint i;
-   LOCAL_VARS;
-   ELTS_VARS(buf);
-
-   for ( i = 0 ; i+1 < nr ; i+=2, elts += 2 ) {
-      EMIT_TWO_ELTS( 0, elts[0], elts[1] );
-      INCR_ELTS( 2 );
-   }
-   
-   if (i < nr) {
-      EMIT_ELT( 0, elts[0] );
-      INCR_ELTS( 1 );
-   }
-
-   return (void *)ELTPTR;
-}
-#endif
-
 static __inline void *TAG(emit_verts)( struct gl_context *ctx, GLuint start, 
 				     GLuint count, void *buf )
 {
@@ -384,61 +338,11 @@ static void TAG(render_quad_strip_verts)( struct gl_context *ctx,
 
    if (ctx->Light.ShadeModel == GL_FLAT &&
        TNL_CONTEXT(ctx)->vb.AttribPtr[_TNL_ATTRIB_COLOR0]->stride) {
-      if (HAVE_ELTS) {
-	 LOCAL_VARS;
-	 int dmasz = GET_SUBSEQUENT_VB_MAX_ELTS();
-	 int currentsz;
-	 GLuint j, nr;
-
-         EMIT_INDEXED_VERTS( ctx, start, count );
-
-	 /* Simulate flat-shaded quadstrips using indexed vertices:
-	  */
-	 ELT_INIT( GL_TRIANGLES );
-
-	 currentsz = GET_CURRENT_VB_MAX_ELTS();
-
-	 /* Emit whole number of quads in total, and in each buffer.
-	  */
-	 dmasz -= dmasz & 1;
-	 count -= count & 1;
-	 currentsz -= currentsz & 1;
-
-	 if (currentsz < 12)
-	    currentsz = dmasz;
-
-	 currentsz = currentsz/6*2;
-	 dmasz = dmasz/6*2;
-
-	 for (j = 0; j + 3 < count; j += nr - 2) {
-	    nr = MIN2( currentsz, count - j );
-	    if (nr >= 4) {
-	       GLint quads = (nr/2)-1;
-	       GLint i;
-	       ELTS_VARS( ALLOC_ELTS( quads*6 ) );
-
-               for (i = j; i < j + quads * 2; i += 2) {
-		  EMIT_TWO_ELTS( 0, (i+0), (i+1) );
-		  EMIT_TWO_ELTS( 2, (i+2), (i+1) );
-		  EMIT_TWO_ELTS( 4, (i+3), (i+2) );
-		  INCR_ELTS( 6 );
-	       }
-
-	       FLUSH();
-	    }
-	    currentsz = dmasz;
-	 }
-
-	 RELEASE_ELT_VERTS();
-	 FLUSH();
-      }
-      else {
 	 /* Vertices won't fit in a single buffer or elts not
 	  * available - should never happen.
 	  */
         fprintf(stderr, "%s - cannot draw primitive\n", __func__);
 	 return;
-      }
    } else {
       LOCAL_VARS;
       int dmasz = GET_SUBSEQUENT_VB_MAX_VERTS();
@@ -478,57 +382,7 @@ static void TAG(render_quads_verts)(struct gl_context *ctx,
    /* Emit whole number of quads in total. */
    count -= count & 3;
 
-   if (HAVE_ELTS) {
-      /* Hardware doesn't have a quad primitive type -- try to
-       * simulate it using indexed vertices and the triangle
-       * primitive:
-       */
-      LOCAL_VARS;
-      int dmasz = GET_SUBSEQUENT_VB_MAX_ELTS();
-      int currentsz;
-      GLuint j, nr;
-
-      EMIT_INDEXED_VERTS( ctx, start, count );
-
-      FLUSH();
-      ELT_INIT( GL_TRIANGLES );
-      currentsz = GET_CURRENT_VB_MAX_ELTS();
-
-      /* Emit whole number of quads in total, and in each buffer.
-       */
-      dmasz -= dmasz & 3;
-      currentsz -= currentsz & 3;
-
-      /* Adjust for rendering as triangles:
-       */
-      currentsz = currentsz/6*4;
-      dmasz = dmasz/6*4;
-
-      if (currentsz < 8)
-	 currentsz = dmasz;
-
-      for (j = 0; j < count; j += nr ) {
-	 nr = MIN2( currentsz, count - j );
-	 if (nr >= 4) {
-	    GLint quads = nr/4;
-	    GLint i;
-	    ELTS_VARS( ALLOC_ELTS( quads*6 ) );
-
-            for (i = j; i < j + quads * 4; i += 4) {
-	       EMIT_TWO_ELTS( 0, (i+0), (i+1) );
-	       EMIT_TWO_ELTS( 2, (i+3), (i+1) );
-	       EMIT_TWO_ELTS( 4, (i+2), (i+3) );
-	       INCR_ELTS( 6 );
-	    }
-
-	    FLUSH();
-	 }
-	 currentsz = dmasz;
-      }
-
-      RELEASE_ELT_VERTS();
-   }
-   else {
+   {
       /* Hardware doesn't have a quad primitive type -- try to
        * simulate it using triangle primitive.  This is a win for
        * gears, but is it useful in the broader world?
@@ -577,430 +431,6 @@ static tnl_render_func TAG(render_tab_verts)[GL_POLYGON+2] =
    TAG(render_noop),
 };
 
-
-/****************************************************************************
- *                 Render elts using hardware indexed verts                 *
- ****************************************************************************/
-
-#if (HAVE_ELTS)
-static void TAG(render_points_elts)( struct gl_context *ctx,
-				     GLuint start,
-				     GLuint count,
-				     GLuint flags )
-{
-   if (HAVE_POINTS) {
-      LOCAL_VARS;
-      int dmasz = GET_SUBSEQUENT_VB_MAX_ELTS();
-      int currentsz;
-      GLuint *elts = TNL_CONTEXT(ctx)->vb.Elts;
-      GLuint j, nr;
-
-      ELT_INIT( GL_POINTS );
-
-      currentsz = GET_CURRENT_VB_MAX_ELTS();
-      if (currentsz < 8)
-	 currentsz = dmasz;
-
-      for (j = 0; j < count; j += nr ) {
-	 nr = MIN2( currentsz, count - j );
-         TAG(emit_elts)(ctx, elts + start + j, nr, ALLOC_ELTS(nr));
-	 FLUSH();
-	 currentsz = dmasz;
-      }
-   } else {
-      fprintf(stderr, "%s - cannot draw primitive\n", __func__);
-      return;
-   }
-}
-
-
-
-static void TAG(render_lines_elts)(struct gl_context *ctx,
-                                   GLuint start,
-                                   GLuint count,
-                                   GLuint flags)
-{
-   LOCAL_VARS;
-   int dmasz = GET_SUBSEQUENT_VB_MAX_ELTS();
-   int currentsz;
-   GLuint *elts = TNL_CONTEXT(ctx)->vb.Elts;
-   GLuint j, nr;
-
-   ELT_INIT(GL_LINES);
-
-   /* Emit whole number of lines in total and in each buffer:
-    */
-   count -= count & 1;
-   currentsz -= currentsz & 1;
-   dmasz -= dmasz & 1;
-
-   currentsz = GET_CURRENT_VB_MAX_ELTS();
-   if (currentsz < 8)
-      currentsz = dmasz;
-
-   for (j = 0; j < count; j += nr ) {
-      nr = MIN2(currentsz, count - j);
-      TAG(emit_elts)(ctx, elts + start + j, nr, ALLOC_ELTS(nr));
-      FLUSH();
-      currentsz = dmasz;
-   }
-}
-
-
-static void TAG(render_line_strip_elts)(struct gl_context *ctx,
-                                        GLuint start,
-                                        GLuint count,
-                                        GLuint flags)
-{
-   LOCAL_VARS;
-   int dmasz = GET_SUBSEQUENT_VB_MAX_ELTS();
-   int currentsz;
-   GLuint *elts = TNL_CONTEXT(ctx)->vb.Elts;
-   GLuint j, nr;
-
-   FLUSH(); /* always a new primitive */
-   ELT_INIT(GL_LINE_STRIP);
-
-   currentsz = GET_CURRENT_VB_MAX_ELTS();
-   if (currentsz < 8)
-      currentsz = dmasz;
-
-   for (j = 0; j + 1 < count; j += nr - 1) {
-      nr = MIN2(currentsz, count - j);
-      TAG(emit_elts)(ctx, elts + start + j, nr, ALLOC_ELTS(nr));
-      FLUSH();
-      currentsz = dmasz;
-   }
-}
-
-
-static void TAG(render_line_loop_elts)(struct gl_context *ctx,
-                                       GLuint start,
-                                       GLuint count,
-                                       GLuint flags)
-{
-   LOCAL_VARS;
-   int dmasz = GET_SUBSEQUENT_VB_MAX_ELTS();
-   int currentsz;
-   GLuint *elts = TNL_CONTEXT(ctx)->vb.Elts;
-   GLuint j, nr;
-
-   FLUSH();
-   ELT_INIT(GL_LINE_STRIP);
-
-   j = (flags & PRIM_BEGIN) ? 0 : 1;
-
-   currentsz = GET_CURRENT_VB_MAX_ELTS();
-   if (currentsz < 8)
-      currentsz = dmasz;
-
-   /* Ensure last vertex doesn't wrap:
-    */
-   currentsz--;
-   dmasz--;
-
-   if (j + 1 < count) {
-      for (/* empty */; j + 1 < count; j += nr - 1) {
-         nr = MIN2(currentsz, count - j);
-
-         if (j + nr >= count &&
-             count > 1 &&
-             (flags & PRIM_END)) {
-            void *tmp;
-            tmp = ALLOC_ELTS(nr+1);
-            tmp = TAG(emit_elts)(ctx, elts + start + j, nr, tmp);
-            tmp = TAG(emit_elts)(ctx, elts + start, 1, tmp);
-            (void) tmp;
-         } else {
-            TAG(emit_elts)(ctx, elts + start + j, nr, ALLOC_ELTS(nr));
-            currentsz = dmasz;
-         }
-      }
-   } else if (count > 1 && (flags & PRIM_END)) {
-      void *tmp;
-      tmp = ALLOC_ELTS(2);
-      tmp = TAG(emit_elts)( ctx, elts+start+1, 1, tmp );
-      tmp = TAG(emit_elts)( ctx, elts+start, 1, tmp );
-      (void) tmp;
-   }
-
-   FLUSH();
-}
-
-
-/* For verts, we still eliminate the copy from main memory to dma
- * buffers.  For elts, this is probably no better (worse?) than the
- * standard path.
- */
-static void TAG(render_triangles_elts)( struct gl_context *ctx,
-					GLuint start,
-					GLuint count,
-					GLuint flags )
-{
-   LOCAL_VARS;
-   GLuint *elts = TNL_CONTEXT(ctx)->vb.Elts;
-   int dmasz = GET_SUBSEQUENT_VB_MAX_ELTS()/3*3;
-   int currentsz;
-   GLuint j, nr;
-
-   FLUSH();
-   ELT_INIT( GL_TRIANGLES );
-
-   currentsz = GET_CURRENT_VB_MAX_ELTS();
-
-   /* Emit whole number of tris in total.  dmasz is already a multiple
-    * of 3.
-    */
-   count -= count % 3;
-   currentsz -= currentsz%3;
-   if (currentsz < 8)
-      currentsz = dmasz;
-
-   for (j = 0; j < count; j += nr) {
-      nr = MIN2( currentsz, count - j );
-      TAG(emit_elts)(ctx, elts + start + j, nr, ALLOC_ELTS(nr));
-      FLUSH();
-      currentsz = dmasz;
-   }
-}
-
-
-
-static void TAG(render_tri_strip_elts)(struct gl_context *ctx,
-                                       GLuint start,
-                                       GLuint count,
-                                       GLuint flags)
-{
-   LOCAL_VARS;
-   GLuint j, nr;
-   GLuint *elts = TNL_CONTEXT(ctx)->vb.Elts;
-   int dmasz = GET_SUBSEQUENT_VB_MAX_ELTS();
-   int currentsz;
-
-   FLUSH();
-   ELT_INIT(GL_TRIANGLE_STRIP);
-
-   currentsz = GET_CURRENT_VB_MAX_ELTS();
-   if (currentsz < 8)
-      currentsz = dmasz;
-
-   /* Keep the same winding over multiple buffers:
-    */
-   dmasz -= (dmasz & 1);
-   currentsz -= (currentsz & 1);
-
-   for (j = 0; j + 2 < count; j += nr - 2) {
-      nr = MIN2(currentsz, count - j);
-      TAG(emit_elts)( ctx, elts + start + j, nr, ALLOC_ELTS(nr) );
-      FLUSH();
-      currentsz = dmasz;
-   }
-}
-
-static void TAG(render_tri_fan_elts)(struct gl_context *ctx,
-                                     GLuint start,
-                                     GLuint count,
-                                     GLuint flags)
-{
-   LOCAL_VARS;
-   GLuint *elts = TNL_CONTEXT(ctx)->vb.Elts;
-   GLuint j, nr;
-   int dmasz = GET_SUBSEQUENT_VB_MAX_ELTS();
-   int currentsz;
-
-   FLUSH();
-   ELT_INIT(GL_TRIANGLE_FAN);
-
-   currentsz = GET_CURRENT_VB_MAX_ELTS();
-   if (currentsz < 8)
-      currentsz = dmasz;
-
-   for (j = 1; j + 1 < count; j += nr - 2) {
-      void *tmp;
-      nr = MIN2(currentsz, count - j + 1);
-      tmp = ALLOC_ELTS(nr);
-      tmp = TAG(emit_elts)(ctx, elts + start, 1, tmp);
-      tmp = TAG(emit_elts)(ctx, elts + start + j, nr - 1, tmp);
-      (void) tmp;
-      FLUSH();
-      currentsz = dmasz;
-   }
-}
-
-
-static void TAG(render_poly_elts)( struct gl_context *ctx,
-				   GLuint start,
-				   GLuint count,
-				   GLuint flags )
-{
-   if (HAVE_POLYGONS) {
-      LOCAL_VARS;
-      GLuint *elts = TNL_CONTEXT(ctx)->vb.Elts;
-      GLuint j, nr;
-      int dmasz = GET_SUBSEQUENT_VB_MAX_ELTS();
-      int currentsz;
-
-      FLUSH();
-      ELT_INIT( GL_POLYGON );
-
-      currentsz = GET_CURRENT_VB_MAX_ELTS();
-      if (currentsz < 8) {
-	 currentsz = dmasz;
-      }
-
-      for (j = 1 ; j + 1 < count; j += nr - 2) {
-	 void *tmp;
-	 nr = MIN2( currentsz, count - j + 1 );
-	 tmp = ALLOC_ELTS( nr );
-	 tmp = TAG(emit_elts)( ctx, elts+start, 1, tmp );
-         tmp = TAG(emit_elts)(ctx, elts + start + j, nr - 1, tmp);
-	 (void) tmp;
-	 FLUSH();
-	 currentsz = dmasz;
-      }
-   } else if (ctx->Light.ShadeModel == GL_SMOOTH) {
-      TAG(render_tri_fan_verts)( ctx, start, count, flags );
-   } else {
-      fprintf(stderr, "%s - cannot draw primitive\n", __func__);
-      return;
-   }
-}
-
-static void TAG(render_quad_strip_elts)(struct gl_context *ctx,
-                                        GLuint start,
-                                        GLuint count,
-                                        GLuint flags)
-{
-   LOCAL_VARS;
-   GLuint *elts = TNL_CONTEXT(ctx)->vb.Elts;
-   int dmasz = GET_SUBSEQUENT_VB_MAX_ELTS();
-   int currentsz;
-   GLuint j, nr;
-
-   FLUSH();
-   currentsz = GET_CURRENT_VB_MAX_ELTS();
-
-   /* Emit whole number of quads in total, and in each buffer.
-    */
-   dmasz -= dmasz & 1;
-   count -= count & 1;
-   currentsz -= currentsz & 1;
-
-   if (currentsz < 12)
-      currentsz = dmasz;
-
-   if (ctx->Light.ShadeModel == GL_FLAT) {
-      ELT_INIT(GL_TRIANGLES);
-
-      currentsz = currentsz / 6 * 2;
-      dmasz = dmasz / 6 * 2;
-
-      for (j = 0; j + 3 < count; j += nr - 2) {
-         nr = MIN2(currentsz, count - j);
-
-         if (nr >= 4) {
-            GLint i;
-            GLint quads = (nr / 2) - 1;
-            ELTS_VARS(ALLOC_ELTS( quads * 6));
-
-            for (i = j; i < j + quads; i++, elts += 2) {
-               EMIT_TWO_ELTS(0, elts[0], elts[1]);
-               EMIT_TWO_ELTS(2, elts[2], elts[1]);
-               EMIT_TWO_ELTS(4, elts[3], elts[2]);
-               INCR_ELTS(6);
-            }
-
-            FLUSH();
-         }
-
-         currentsz = dmasz;
-      }
-   } else {
-      ELT_INIT(GL_TRIANGLE_STRIP);
-
-      for (j = 0; j + 3 < count; j += nr - 2) {
-         nr = MIN2(currentsz, count - j);
-         TAG(emit_elts)(ctx, elts + start + j, nr, ALLOC_ELTS(nr));
-         FLUSH();
-         currentsz = dmasz;
-      }
-   }
-}
-
-
-static void TAG(render_quads_elts)(struct gl_context *ctx,
-                                   GLuint start,
-                                   GLuint count,
-                                   GLuint flags)
-{
-   LOCAL_VARS;
-   GLuint *elts = TNL_CONTEXT(ctx)->vb.Elts;
-   int dmasz = GET_SUBSEQUENT_VB_MAX_ELTS();
-   int currentsz;
-   GLuint j, nr;
-
-   ELT_INIT(GL_TRIANGLES);
-   currentsz = GET_CURRENT_VB_MAX_ELTS();
-
-   /* Emit whole number of quads in total, and in each buffer.
-    */
-   count -= count & 3;
-   dmasz -= dmasz & 3;
-   currentsz -= currentsz & 3;
-
-   /* Adjust for rendering as triangles:
-    */
-   currentsz = currentsz / 6 * 4;
-   dmasz = dmasz / 6 * 4;
-
-   if (currentsz < 8)
-      currentsz = dmasz;
-
-   for (j = 0; j + 3 < count; j += nr - 2) {
-      nr = MIN2(currentsz, count - j);
-
-      if (nr >= 4) {
-         GLint quads = nr / 4;
-         GLint i;
-         ELTS_VARS(ALLOC_ELTS(quads * 6));
-
-         for (i = j; i < j + quads; i++, elts += 4) {
-            EMIT_TWO_ELTS(0, elts[0], elts[1]);
-            EMIT_TWO_ELTS(2, elts[3], elts[1]);
-            EMIT_TWO_ELTS(4, elts[2], elts[3]);
-            INCR_ELTS(6);
-         }
-
-         FLUSH();
-      }
-
-      currentsz = dmasz;
-   }
-}
-
-
-
-static tnl_render_func TAG(render_tab_elts)[GL_POLYGON+2] =
-{
-   TAG(render_points_elts),
-   TAG(render_lines_elts),
-   TAG(render_line_loop_elts),
-   TAG(render_line_strip_elts),
-   TAG(render_triangles_elts),
-   TAG(render_tri_strip_elts),
-   TAG(render_tri_fan_elts),
-   TAG(render_quads_elts),
-   TAG(render_quad_strip_elts),
-   TAG(render_poly_elts),
-   TAG(render_noop),
-};
-
-
-
-#endif
-
-
-
 /* Pre-check the primitives in the VB to prevent the need for
  * fallbacks later on.
  */
@@ -1012,7 +442,7 @@ static GLboolean TAG(validate_render)( struct gl_context *ctx,
    if (VB->ClipOrMask & ~CLIP_CULL_BIT)
       return GL_FALSE;
 
-   if (VB->Elts && !HAVE_ELTS)
+   if (VB->Elts)
       return GL_FALSE;
 
    for (i = 0 ; i < VB->PrimitiveCount ; i++) {
@@ -1045,23 +475,13 @@ static GLboolean TAG(validate_render)( struct gl_context *ctx,
 	    ok = GL_TRUE;
 	 } else if (ctx->Light.ShadeModel == GL_FLAT &&
 		    VB->AttribPtr[_TNL_ATTRIB_COLOR0]->stride != 0) {
-	    if (HAVE_ELTS) {
-	       ok = (GLint) count < GET_SUBSEQUENT_VB_MAX_ELTS();
-	    }
-	    else {
 	       ok = GL_FALSE;
-	    }
 	 }
 	 else 
 	    ok = GL_TRUE;
 	 break;
       case GL_QUADS:
-         if (HAVE_ELTS) {
-	    ok = (GLint) count < GET_SUBSEQUENT_VB_MAX_ELTS();
-	 }
-	 else {
 	    ok = GL_TRUE; /* flatshading is ok. */
-	 }
 	 break;
       default:
 	 break;
-- 
2.1.0



More information about the mesa-dev mailing list