t_dd_dmatmp: Remove HAVE_ELTS support
authorIan Romanick <ian.d.romanick@intel.com>
Mon, 14 Sep 2015 23:57:32 +0000 (16:57 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Wed, 23 Sep 2015 16:57:17 +0000 (09:57 -0700)
Two drivers use this file, and neither supports ELTs.

No piglit regressions on i915 (G33) or radeon (Radeon 7500).

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Brian Paul <brianp@vmware.com>
src/mesa/tnl_dd/t_dd_dmatmp.h

index f4940e8c0391300a53b91a70bc4530214218023a..f55cfe87bd6c2a3182ee9a959202db596ea4f152 100644 (file)
 #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;