Remove dead code.
authorBrian Paul <brian.paul@tungstengraphics.com>
Mon, 31 Mar 2003 23:47:31 +0000 (23:47 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Mon, 31 Mar 2003 23:47:31 +0000 (23:47 +0000)
Replace blocks of per-attribute code with for-loops.
New comments/docs.

src/mesa/tnl/t_imm_fixup.c
src/mesa/tnl/t_imm_fixup.h

index fd41108699d1bec19ba480c59b516a6d01e6cebb..b8c1bf4e72bb23fffc2c66e4154916b18ec50fed 100644 (file)
@@ -1,5 +1,3 @@
-/* $Id: t_imm_fixup.c,v 1.42 2003/03/31 18:19:57 brianp Exp $ */
-
 /*
  * Mesa 3-D graphics library
  * Version:  5.1
 #include "t_pipeline.h"
 
 
+/*
+ * Indexed by primitive type (GL_POINTS=0, GL_LINES=1, GL_LINE_LOOP=2, etc)
+ */
 static const GLuint increment[GL_POLYGON+2] = { 1,2,1,1,3,1,1,4,2,1,1 };
 static const GLuint intro[GL_POLYGON+2]     = { 0,0,2,2,0,2,2,0,2,2,0 };
 
+
 void
 _tnl_fixup_4f( GLfloat data[][4], const GLuint flag[],
                GLuint start, GLuint match )
@@ -70,25 +72,6 @@ _tnl_fixup_4f( GLfloat data[][4], const GLuint flag[],
    }
 }
 
-void
-_tnl_fixup_3f( GLfloat data[][3], const GLuint flag[],
-               GLuint start, GLuint match )
-{
-   GLuint i = start;
-
-   for (;;) {
-      if ((flag[++i] & match) == 0) {
-/*      _mesa_debug(NULL, "_tnl_fixup_3f copy to %p values %f %f %f\n", */
-/*              data[i],  */
-/*              data[i-1][0], */
-/*              data[i-1][1], */
-/*              data[i-1][2]); */
-        COPY_3V(data[i], data[i-1]);
-        if (flag[i] & VERT_BIT_END_VB) break;
-      }
-   }
-}
-
 
 void
 _tnl_fixup_1ui( GLuint *data, GLuint flag[], GLuint start, GLuint match )
@@ -105,20 +88,6 @@ _tnl_fixup_1ui( GLuint *data, GLuint flag[], GLuint start, GLuint match )
 }
 
 
-void
-_tnl_fixup_1f( GLfloat *data, GLuint flag[], GLuint start, GLuint match )
-{
-   GLuint i = start;
-
-   for (;;) {
-      if ((flag[++i] & match) == 0) {
-        data[i] = data[i-1];
-        if (flag[i] & VERT_BIT_END_VB) break;
-      }
-   }
-   flag[i] |= match;
-}
-
 void
 _tnl_fixup_1ub( GLubyte *data, GLuint flag[], GLuint start, GLuint match)
 {
@@ -145,21 +114,6 @@ fixup_first_4f( GLfloat data[][4], const GLuint flag[], GLuint match,
       COPY_4FV(data[i], dflt);
 }
 
-#if 0
-static void
-fixup_first_3f( GLfloat data[][3], const GLuint flag[], GLuint match,
-               GLuint start, const GLfloat *dflt )
-{
-   GLuint i = start-1;
-   match |= VERT_BIT_END_VB;
-
-/*     _mesa_debug(NULL, "fixup_first_3f default: %f %f %f start: %d\n", */
-/*        dflt[0], dflt[1], dflt[2], start);  */
-
-   while ((flag[++i]&match) == 0)
-      COPY_3FV(data[i], dflt);
-}
-#endif
 
 static void
 fixup_first_1ui( GLuint data[], const GLuint flag[], GLuint match,
@@ -172,18 +126,6 @@ fixup_first_1ui( GLuint data[], const GLuint flag[], GLuint match,
       data[i] = dflt;
 }
 
-#if 00
-static void
-fixup_first_1f( GLfloat data[], const GLuint flag[], GLuint match,
-               GLuint start, GLfloat dflt )
-{
-   GLuint i = start-1;
-   match |= VERT_BIT_END_VB;
-
-   while ((flag[++i]&match) == 0)
-      data[i] = dflt;
-}
-#endif
 
 static void
 fixup_first_1ub( GLubyte data[], const GLuint flag[], GLuint match,
@@ -196,12 +138,14 @@ fixup_first_1ub( GLubyte data[], const GLuint flag[], GLuint match,
       data[i] = dflt;
 }
 
-/*
+
+/**
  * Copy vertex attributes from the ctx->Current group into the immediate
  * struct at the given position according to copyMask.
  */
-static void copy_from_current( GLcontext *ctx, struct immediate *IM, 
-                               GLuint pos, GLuint copyMask )
+static void
+copy_from_current( GLcontext *ctx, struct immediate *IM, 
+                   GLuint pos, GLuint copyMask )
 {
    GLuint attrib, attribBit;
 
@@ -229,7 +173,19 @@ static void copy_from_current( GLcontext *ctx, struct immediate *IM,
 }
 
 
-void _tnl_fixup_input( GLcontext *ctx, struct immediate *IM )
+/**
+ * Fill in missing vertex attributes in the incoming immediate structure.
+ * For example, suppose the following calls are made:
+ * glBegin()
+ * glColor(c1)
+ * glVertex(v1)
+ * glVertex(v2)
+ * glEnd()
+ * The v2 vertex should get color c1 since glColor wasn't called for v2.
+ * This function will make c2 be c1.  Same story for all vertex attribs.
+ */
+void
+_tnl_fixup_input( GLcontext *ctx, struct immediate *IM )
 {
    TNLcontext *tnl = TNL_CONTEXT(ctx);
    GLuint start = IM->CopyStart;
@@ -258,6 +214,7 @@ void _tnl_fixup_input( GLcontext *ctx, struct immediate *IM )
 
    if (fixup) {
       const GLuint copy = fixup & ~IM->Flag[start];
+      GLuint attr;
 
       /* Equivalent to a lazy copy-from-current when setting up the
        * immediate.
@@ -268,62 +225,36 @@ void _tnl_fixup_input( GLcontext *ctx, struct immediate *IM )
       if (MESA_VERBOSE&VERBOSE_IMMEDIATE)
         _tnl_print_vert_flags("fixup", fixup); 
 
-      /* XXX replace these conditionals with a loop over the 16
-       * vertex attributes.
-       */
-
-      if (fixup & VERT_BITS_TEX_ANY) {
-        GLuint i;
-        for (i = 0 ; i < ctx->Const.MaxTextureUnits ; i++) {
-           if ((fixup & VERT_BIT_TEX(i))) {
-              if (orflag & VERT_BIT_TEX(i))
-                 _tnl_fixup_4f( IM->Attrib[VERT_ATTRIB_TEX0 + i], IM->Flag,
-                                 start, VERT_BIT_TEX(i) );
-              else
-                 fixup_first_4f( IM->Attrib[VERT_ATTRIB_TEX0 + i], IM->Flag,
-                                  VERT_BIT_END_VB, start,
-                                 IM->Attrib[VERT_ATTRIB_TEX0 + i][start]);
-           }
-        }
-      }
-   
-      if (fixup & VERT_BIT_COLOR0) {
-        if (orflag & VERT_BIT_COLOR0)
-           _tnl_fixup_4f( IM->Attrib[VERT_ATTRIB_COLOR0], IM->Flag, start,
-                           VERT_BIT_COLOR0 );
-        /* No need for else case as the drivers understand stride
-         * zero here.  (TODO - propogate this)
-         */
-      }
-      
-      if (fixup & VERT_BIT_COLOR1) {
-        if (orflag & VERT_BIT_COLOR1)
-           _tnl_fixup_4f( IM->Attrib[VERT_ATTRIB_COLOR1], IM->Flag, start, 
-                          VERT_BIT_COLOR1 );
-        else
-           fixup_first_4f( IM->Attrib[VERT_ATTRIB_COLOR1], IM->Flag,
-                            VERT_BIT_END_VB, start,
-                           IM->Attrib[VERT_ATTRIB_COLOR1][start] );
-      }
-      
-      if (fixup & VERT_BIT_FOG) {
-        if (orflag & VERT_BIT_FOG)
-           _tnl_fixup_4f( IM->Attrib[VERT_ATTRIB_FOG], IM->Flag,
-                           start, VERT_BIT_FOG );
-        else
-           fixup_first_4f( IM->Attrib[VERT_ATTRIB_FOG], IM->Flag,
-                            VERT_BIT_END_VB,
-                            start, IM->Attrib[VERT_ATTRIB_FOG][start] );
-      }
+      for (attr = 1; attr < VERT_ATTRIB_MAX; attr++) { /* skip 0 (POS) */
+         const GLuint attrBit = 1 << attr;
+         if (fixup & attrBit) {
+            if (!IM->Attrib[attr]) {
+               IM->Attrib[attr] = _mesa_malloc(IMM_SIZE * 4 * sizeof(GLfloat));
+               if (!IM->Attrib[attr]) {
+                  _mesa_error(ctx, GL_OUT_OF_MEMORY, "vertex processing");
+                  return;
+               }
+            }
 
-      if (fixup & VERT_BIT_NORMAL) {
-        if (orflag & VERT_BIT_NORMAL)
-           _tnl_fixup_4f( IM->Attrib[VERT_ATTRIB_NORMAL], IM->Flag, start,
-                           VERT_BIT_NORMAL );
-        else
-           fixup_first_4f( IM->Attrib[VERT_ATTRIB_NORMAL], IM->Flag,
-                            VERT_BIT_END_VB, start,
-                           IM->Attrib[VERT_ATTRIB_NORMAL][start] );
+            if (attr == VERT_BIT_COLOR0) {
+               /* special case, darn - try to remove someday */
+               if (orflag & VERT_BIT_COLOR0) {
+                  _tnl_fixup_4f( IM->Attrib[VERT_ATTRIB_COLOR0], IM->Flag,
+                                 start, VERT_BIT_COLOR0 );
+               }
+               /* No need for else case as the drivers understand stride
+                * zero here.  (TODO - propogate this)
+                */
+            }
+            else {
+               /* general case */
+               if (orflag & attrBit)
+                  _tnl_fixup_4f( IM->Attrib[attr], IM->Flag, start, attrBit );
+               else
+                  fixup_first_4f( IM->Attrib[attr], IM->Flag, VERT_BIT_END_VB,
+                                  start, IM->Attrib[attr][start] );
+            }
+         }
       }
 
       if (fixup & VERT_BIT_EDGEFLAG) {
@@ -406,7 +337,8 @@ static GLboolean is_fan_like[GL_POLYGON+1] = {
 };
 
 
-/* Copy the untransformed data from the shared vertices of a primitive
+/**
+ * Copy the untransformed data from the shared vertices of a primitive
  * that wraps over two immediate structs.  This is done prior to
  * set_immediate so that prev and next may point to the same
  * structure.  In general it's difficult to avoid this copy on long
@@ -415,7 +347,8 @@ static GLboolean is_fan_like[GL_POLYGON+1] = {
  * Have to be careful with the transitions between display list
  * replay, compile and normal execute modes.
  */
-void _tnl_copy_immediate_vertices( GLcontext *ctx, struct immediate *next )
+void
+_tnl_copy_immediate_vertices( GLcontext *ctx, struct immediate *next )
 {
    TNLcontext *tnl = TNL_CONTEXT(ctx);
    struct immediate *prev = tnl->ExecCopySource;
@@ -558,12 +491,14 @@ void _tnl_copy_immediate_vertices( GLcontext *ctx, struct immediate *next )
 
 
 
-/* Revive a compiled immediate struct - propogate new 'Current'
+/**
+ * Revive a compiled immediate struct - propogate new 'Current'
  * values.  Often this is redundant because the current values were
  * known and fixed up at compile time (or in the first execution of
  * the cassette).
  */
-void _tnl_fixup_compiled_cassette( GLcontext *ctx, struct immediate *IM )
+void
+_tnl_fixup_compiled_cassette( GLcontext *ctx, struct immediate *IM )
 {
    TNLcontext *tnl = TNL_CONTEXT(ctx);
    GLuint fixup;
@@ -604,15 +539,11 @@ void _tnl_fixup_compiled_cassette( GLcontext *ctx, struct immediate *IM )
 /*     _tnl_print_vert_flags("fixup compiled", fixup); */
 
    if (fixup) {
-
-      /* XXX try to replace this code with a loop over the 16 vertex
-       * attributes.
-       */
-
-#if 0
       GLuint attr;
-      for (attr = 1; attr < VERT_ATTRIB_MAX; attr++) {
-         if (fixup & (1 << attr)) {
+
+      for (attr = 1; attr < VERT_ATTRIB_MAX; attr++) { /* skip 0 (POS) */
+         const GLuint attrBit = 1 << attr;
+         if (fixup & attrBit) {
             if (attr == VERT_ATTRIB_COLOR0) {
                /* special case, darn */
                if (IM->CopyOrFlag & VERT_BIT_COLOR0)
@@ -624,48 +555,11 @@ void _tnl_fixup_compiled_cassette( GLcontext *ctx, struct immediate *IM )
             }
             else {
                fixup_first_4f(IM->Attrib[attr], IM->Flag,
-                              1 << attr, start, ctx->Current.Attrib[attr] );
+                              attrBit, start, ctx->Current.Attrib[attr] );
             }
          }
       }
 
-#else
-      if (fixup & VERT_BIT_NORMAL) {
-        fixup_first_4f(IM->Attrib[VERT_ATTRIB_NORMAL], IM->Flag,
-                        VERT_BIT_NORMAL, start,
-                       ctx->Current.Attrib[VERT_ATTRIB_NORMAL] );
-      }
-
-      if (fixup & VERT_BIT_COLOR0) {
-        if (IM->CopyOrFlag & VERT_BIT_COLOR0)
-           fixup_first_4f(IM->Attrib[VERT_ATTRIB_COLOR0], IM->Flag,
-                           VERT_BIT_COLOR0, start,
-                          ctx->Current.Attrib[VERT_ATTRIB_COLOR0] );
-        else
-           fixup &= ~VERT_BIT_COLOR0;
-      }
-
-      if (fixup & VERT_BIT_COLOR1)
-        fixup_first_4f(IM->Attrib[VERT_ATTRIB_COLOR1], IM->Flag,
-                        VERT_BIT_COLOR1, start,
-                       ctx->Current.Attrib[VERT_ATTRIB_COLOR1] );
-
-      if (fixup & VERT_BIT_FOG)
-        fixup_first_4f( IM->Attrib[VERT_ATTRIB_FOG], IM->Flag,
-                         VERT_BIT_FOG, start,
-                         ctx->Current.Attrib[VERT_ATTRIB_FOG] );
-
-      if (fixup & VERT_BITS_TEX_ANY) {
-        GLuint i;
-        for (i = 0 ; i < ctx->Const.MaxTextureUnits ; i++) {
-           if (fixup & VERT_BIT_TEX(i))
-              fixup_first_4f( IM->Attrib[VERT_ATTRIB_TEX0 + i], IM->Flag,
-                               VERT_BIT_TEX(i), start,
-                              ctx->Current.Attrib[VERT_ATTRIB_TEX0 + i] );
-        }
-      }
-#endif
-
       if (fixup & VERT_BIT_EDGEFLAG)
         fixup_first_1ub(IM->EdgeFlag, IM->Flag, VERT_BIT_EDGEFLAG, start,
                         ctx->Current.EdgeFlag );
@@ -701,20 +595,22 @@ void _tnl_fixup_compiled_cassette( GLcontext *ctx, struct immediate *IM )
 
 
 
-static void copy_none( TNLcontext *tnl, GLuint start, GLuint count, GLuint ovf)
+static void
+copy_none( TNLcontext *tnl, GLuint start, GLuint count, GLuint ovf)
 {
    (void) (start && ovf && tnl && count);
 }
 
-static void copy_last( TNLcontext *tnl, GLuint start, GLuint count, GLuint ovf)
+static void
+copy_last( TNLcontext *tnl, GLuint start, GLuint count, GLuint ovf)
 {
    (void) start; (void) ovf;
    tnl->ExecCopyCount = 1;
    tnl->ExecCopyElts[2] = count-1;
 }
 
-static void copy_first_and_last( TNLcontext *tnl, GLuint start, GLuint count,
-                                GLuint ovf)
+static void
+copy_first_and_last( TNLcontext *tnl, GLuint start, GLuint count, GLuint ovf)
 {
    (void) ovf;
    tnl->ExecCopyCount = 2;
@@ -722,8 +618,8 @@ static void copy_first_and_last( TNLcontext *tnl, GLuint start, GLuint count,
    tnl->ExecCopyElts[2] = count-1;
 }
 
-static void copy_last_two( TNLcontext *tnl, GLuint start, GLuint count,
-                          GLuint ovf )
+static void
+copy_last_three( TNLcontext *tnl, GLuint start, GLuint count, GLuint ovf )
 {
    (void) start;
    tnl->ExecCopyCount = 2+ovf;
@@ -732,8 +628,8 @@ static void copy_last_two( TNLcontext *tnl, GLuint start, GLuint count,
    tnl->ExecCopyElts[2] = count-1;
 }
 
-static void copy_overflow( TNLcontext *tnl, GLuint start, GLuint count,
-                          GLuint ovf )
+static void
+copy_overflow( TNLcontext *tnl, GLuint start, GLuint count, GLuint ovf )
 {
    (void) start;
    tnl->ExecCopyCount = ovf;
@@ -748,24 +644,23 @@ typedef void (*copy_func)( TNLcontext *tnl, GLuint start, GLuint count,
 
 static copy_func copy_tab[GL_POLYGON+2] =
 {
-   copy_none,
-   copy_overflow,
-   copy_first_and_last,
-   copy_last,
-   copy_overflow,
-   copy_last_two,
-   copy_first_and_last,
-   copy_overflow,
-   copy_last_two,
-   copy_first_and_last,
+   copy_none,            /* GL_POINTS */
+   copy_overflow,        /* GL_LINES */
+   copy_first_and_last,  /* GL_LINE_LOOP */
+   copy_last,            /* GL_LINE_STRIP */
+   copy_overflow,        /* GL_TRIANGLES */
+   copy_last_three,      /* GL_TRIANGLE_STRIP */
+   copy_first_and_last,  /* GL_TRIANGLE_FAN */
+   copy_overflow,        /* GL_QUADS */
+   copy_last_three,      /* GL_QUAD_STRIP */
+   copy_first_and_last,  /* GL_POLYGON */
    copy_none
 };
 
 
 
-
-
-/* Figure out what vertices need to be copied next time.
+/**
+ * Figure out what vertices need to be copied next time.
  */
 void
 _tnl_get_exec_copy_verts( GLcontext *ctx, struct immediate *IM )
@@ -790,7 +685,8 @@ _tnl_get_exec_copy_verts( GLcontext *ctx, struct immediate *IM )
       tnl->ExecCopyCount = 0;
       tnl->ExecCopyTexSize = 0;
       tnl->ExecParity = 0;
-   } else {
+   }
+   else {
       /* Remember this immediate as the one to copy from.
        */
       tnl->ExecCopySource = IM; IM->ref_count++;
@@ -812,7 +708,8 @@ _tnl_get_exec_copy_verts( GLcontext *ctx, struct immediate *IM )
 }
 
 
-/* Recalculate ExecCopyElts, ExecParity, etc.  
+/**
+ * Recalculate ExecCopyElts, ExecParity, etc.  
  */
 void 
 _tnl_get_purged_copy_verts( GLcontext *ctx, struct immediate *IM ) 
@@ -844,7 +741,7 @@ _tnl_get_purged_copy_verts( GLcontext *ctx, struct immediate *IM )
 }
 
 
-/*
+/**
  * Called via the VB->import_data function pointer.
  */
 void
@@ -880,4 +777,3 @@ _tnl_upgrade_current_data( GLcontext *ctx, GLuint required, GLuint flags )
       VB->importable_data &= ~VERT_BIT_COLOR0;
    }
 }
index 7ffcb1ebc8e61e1cccb1254602f0f0d9ed9b0b53..a2121bb8c92c37e3a1f630bd84311dd7d3e824a5 100644 (file)
@@ -1,5 +1,3 @@
-/* $Id: t_imm_fixup.h,v 1.7 2003/03/31 18:19:57 brianp Exp $ */
-
 /*
  * Mesa 3-D graphics library
  * Version:  5.1
 extern void _tnl_fixup_1ub( GLubyte *data, GLuint flag[],
                            GLuint start, GLuint match );
 
-extern void _tnl_fixup_1f( GLfloat *data, GLuint flag[],
-                          GLuint start, GLuint match );
-
 extern void _tnl_fixup_1ui( GLuint *data, GLuint flag[],
                            GLuint start, GLuint match );
 
-extern void _tnl_fixup_3f( GLfloat data[][3], const GLuint flag[],
-                          GLuint start, GLuint match );
-
 extern void _tnl_fixup_4f( GLfloat data[][4], const GLuint flag[],
                           GLuint start, GLuint match );