Use correct conversions when translating array colors.
diff --git a/src/mesa/array_cache/ac_import.c b/src/mesa/array_cache/ac_import.c
index 5d5c24f..ee15a6d 100644
--- a/src/mesa/array_cache/ac_import.c
+++ b/src/mesa/array_cache/ac_import.c
@@ -209,13 +209,13 @@
 
    switch (type) {
    case GL_FLOAT:
-      _math_trans_4f( (GLfloat (*)[4]) to->Ptr,
-		      from->Ptr,
-		      from->StrideB,
-		      from->Type,
-		      from->Size,
-		      0,
-		      ac->count - ac->start);
+      _math_trans_4fc( (GLfloat (*)[4]) to->Ptr,
+		       from->Ptr,
+		       from->StrideB,
+		       from->Type,
+		       from->Size,
+		       0,
+		       ac->count - ac->start);
 
       to->StrideB = 4 * sizeof(GLfloat);
       to->Type = GL_FLOAT;
diff --git a/src/mesa/math/m_trans_tmp.h b/src/mesa/math/m_trans_tmp.h
index 2ade71e..c1f0f76 100644
--- a/src/mesa/math/m_trans_tmp.h
+++ b/src/mesa/math/m_trans_tmp.h
@@ -58,6 +58,32 @@
 #endif
 
 
+
+#ifdef DEST_4FC
+static void DEST_4FC( GLfloat (*t)[4],
+		      CONST void *ptr,
+		      GLuint stride,
+		      ARGS )
+{
+   const GLubyte *f = (GLubyte *) ptr + SRC_START * stride;
+   const GLubyte *first = f;
+   GLuint i;
+
+   (void) first;
+   (void) start;
+   for (i = DST_START ; i < n ; i++, NEXT_F) {
+      CHECK {
+         NEXT_F2;
+	 if (SZ >= 1) t[i][0] = TRX_4FC(f, 0);
+	 if (SZ >= 2) t[i][1] = TRX_4FC(f, 1);
+	 if (SZ >= 3) t[i][2] = TRX_4FC(f, 2);
+	 if (SZ == 4) t[i][3] = TRX_4FC(f, 3); else t[i][3] = 1.0;
+      }
+   }
+}
+#endif
+
+
 #ifdef DEST_3F
 static void DEST_3F( GLfloat (*t)[3],
 		     CONST void *ptr,
@@ -218,6 +244,9 @@
 #ifdef DEST_4F
    TAB(_4f)[SZ][SRC_IDX] = DEST_4F;
 #endif
+#ifdef DEST_4FC
+   TAB(_4fc)[SZ][SRC_IDX] = DEST_4FC;
+#endif
 
 }
 
@@ -243,6 +272,9 @@
 #ifdef DEST_4F
 #undef DEST_4F
 #endif
+#ifdef DEST_4FC
+#undef DEST_4FC
+#endif
 #ifdef DEST_1F
 #undef DEST_1F
 #endif
diff --git a/src/mesa/math/m_translate.c b/src/mesa/math/m_translate.c
index def657e..14beabb 100644
--- a/src/mesa/math/m_translate.c
+++ b/src/mesa/math/m_translate.c
@@ -95,6 +95,7 @@
 static trans_4ub_func _math_trans_4ub_tab[5][MAX_TYPES];
 static trans_4us_func _math_trans_4us_tab[5][MAX_TYPES];
 static trans_4f_func  _math_trans_4f_tab[5][MAX_TYPES];
+static trans_4f_func  _math_trans_4fc_tab[5][MAX_TYPES];
 
 
 #define PTR_ELT(ptr, elt) (((SRC *)ptr)[elt])
@@ -118,6 +119,7 @@
 #define SRC_IDX TYPE_IDX(GL_BYTE)
 #define TRX_3F(f,n)   BYTE_TO_FLOAT( PTR_ELT(f,n) )
 #define TRX_4F(f,n)   BYTE_TO_FLOAT( PTR_ELT(f,n) )
+#define TRX_4FC(f,n)   BYTE_TO_FLOAT( PTR_ELT(f,n) )
 #define TRX_UB(ub, f,n)  ub = BYTE_TO_UBYTE( PTR_ELT(f,n) )
 #define TRX_US(ch, f,n)  ch = BYTE_TO_USHORT( PTR_ELT(f,n) )
 #define TRX_UI(f,n)  (PTR_ELT(f,n) < 0 ? 0 : (GLuint)  PTR_ELT(f,n))
@@ -126,6 +128,7 @@
 #define SZ 4
 #define INIT init_trans_4_GLbyte_raw
 #define DEST_4F trans_4_GLbyte_4f_raw
+#define DEST_4FC trans_4_GLbyte_4fc_raw
 #define DEST_4UB trans_4_GLbyte_4ub_raw
 #define DEST_4US trans_4_GLbyte_4us_raw
 #include "m_trans_tmp.h"
@@ -133,6 +136,7 @@
 #define SZ 3
 #define INIT init_trans_3_GLbyte_raw
 #define DEST_4F trans_3_GLbyte_4f_raw
+#define DEST_4FC trans_3_GLbyte_4fc_raw
 #define DEST_4UB trans_3_GLbyte_4ub_raw
 #define DEST_4US trans_3_GLbyte_4us_raw
 #define DEST_3F trans_3_GLbyte_3f_raw
@@ -141,11 +145,13 @@
 #define SZ 2
 #define INIT init_trans_2_GLbyte_raw
 #define DEST_4F trans_2_GLbyte_4f_raw
+#define DEST_4FC trans_2_GLbyte_4fc_raw
 #include "m_trans_tmp.h"
 
 #define SZ 1
 #define INIT init_trans_1_GLbyte_raw
 #define DEST_4F trans_1_GLbyte_4f_raw
+#define DEST_4FC trans_1_GLbyte_4fc_raw
 #define DEST_1UB trans_1_GLbyte_1ub_raw
 #define DEST_1UI trans_1_GLbyte_1ui_raw
 #include "m_trans_tmp.h"
@@ -153,6 +159,7 @@
 #undef SRC
 #undef TRX_3F
 #undef TRX_4F
+#undef TRX_4FC
 #undef TRX_UB
 #undef TRX_US
 #undef TRX_UI
@@ -165,6 +172,7 @@
 #define SRC_IDX TYPE_IDX(GL_UNSIGNED_BYTE)
 #define TRX_3F(f,n)	     UBYTE_TO_FLOAT(PTR_ELT(f,n))
 #define TRX_4F(f,n)	     UBYTE_TO_FLOAT(PTR_ELT(f,n))
+#define TRX_4FC(f,n)	     UBYTE_TO_FLOAT(PTR_ELT(f,n))
 #define TRX_UB(ub, f,n)	     ub = PTR_ELT(f,n)
 #define TRX_US(us, f,n)      us = UBYTE_TO_USHORT(PTR_ELT(f,n))
 #define TRX_UI(f,n)          (GLuint)PTR_ELT(f,n)
@@ -174,6 +182,7 @@
 #define SZ 4
 #define INIT init_trans_4_GLubyte_raw
 #define DEST_4F trans_4_GLubyte_4f_raw
+#define DEST_4FC trans_4_GLubyte_4fc_raw
 #define DEST_4US trans_4_GLubyte_4us_raw
 #include "m_trans_tmp.h"
 
@@ -184,6 +193,7 @@
 #define DEST_4US trans_3_GLubyte_4us_raw
 #define DEST_3F trans_3_GLubyte_3f_raw
 #define DEST_4F trans_3_GLubyte_4f_raw
+#define DEST_4FC trans_3_GLubyte_4fc_raw
 #include "m_trans_tmp.h"
 
 
@@ -197,6 +207,7 @@
 #undef SRC_IDX
 #undef TRX_3F
 #undef TRX_4F
+#undef TRX_4FC
 #undef TRX_UB
 #undef TRX_US
 #undef TRX_UI
@@ -208,6 +219,7 @@
 #define SRC_IDX TYPE_IDX(GL_SHORT)
 #define TRX_3F(f,n)   SHORT_TO_FLOAT( PTR_ELT(f,n) )
 #define TRX_4F(f,n)   (GLfloat)( PTR_ELT(f,n) )
+#define TRX_4FC(f,n)   (GLfloat)( PTR_ELT(f,n) )
 #define TRX_UB(ub, f,n)  ub = SHORT_TO_UBYTE(PTR_ELT(f,n))
 #define TRX_US(us, f,n)  us = SHORT_TO_USHORT(PTR_ELT(f,n))
 #define TRX_UI(f,n)  (PTR_ELT(f,n) < 0 ? 0 : (GLuint)  PTR_ELT(f,n))
@@ -216,6 +228,7 @@
 #define SZ  4
 #define INIT init_trans_4_GLshort_raw
 #define DEST_4F trans_4_GLshort_4f_raw
+#define DEST_4FC trans_4_GLshort_4fc_raw
 #define DEST_4UB trans_4_GLshort_4ub_raw
 #define DEST_4US trans_4_GLshort_4us_raw
 #include "m_trans_tmp.h"
@@ -223,6 +236,7 @@
 #define SZ 3
 #define INIT init_trans_3_GLshort_raw
 #define DEST_4F trans_3_GLshort_4f_raw
+#define DEST_4FC trans_3_GLshort_4fc_raw
 #define DEST_4UB trans_3_GLshort_4ub_raw
 #define DEST_4US trans_3_GLshort_4us_raw
 #define DEST_3F trans_3_GLshort_3f_raw
@@ -231,11 +245,13 @@
 #define SZ 2
 #define INIT init_trans_2_GLshort_raw
 #define DEST_4F trans_2_GLshort_4f_raw
+#define DEST_4FC trans_2_GLshort_4fc_raw
 #include "m_trans_tmp.h"
 
 #define SZ 1
 #define INIT init_trans_1_GLshort_raw
 #define DEST_4F trans_1_GLshort_4f_raw
+#define DEST_4FC trans_1_GLshort_4fc_raw
 #define DEST_1UB trans_1_GLshort_1ub_raw
 #define DEST_1UI trans_1_GLshort_1ui_raw
 #include "m_trans_tmp.h"
@@ -245,6 +261,7 @@
 #undef SRC_IDX
 #undef TRX_3F
 #undef TRX_4F
+#undef TRX_4FC
 #undef TRX_UB
 #undef TRX_US
 #undef TRX_UI
@@ -256,6 +273,7 @@
 #define SRC_IDX TYPE_IDX(GL_UNSIGNED_SHORT)
 #define TRX_3F(f,n)   USHORT_TO_FLOAT( PTR_ELT(f,n) )
 #define TRX_4F(f,n)   (GLfloat)( PTR_ELT(f,n) )
+#define TRX_4FC(f,n)   (GLfloat)( PTR_ELT(f,n) )
 #define TRX_UB(ub,f,n)  ub = (GLubyte) (PTR_ELT(f,n) >> 8)
 #define TRX_US(us,f,n)  us = (GLushort) (PTR_ELT(f,n) >> 8)
 #define TRX_UI(f,n)  (GLuint)   PTR_ELT(f,n)
@@ -264,6 +282,7 @@
 #define SZ 4
 #define INIT init_trans_4_GLushort_raw
 #define DEST_4F trans_4_GLushort_4f_raw
+#define DEST_4FC trans_4_GLushort_4fc_raw
 #define DEST_4UB trans_4_GLushort_4ub_raw
 #define DEST_4US trans_4_GLushort_4us_raw
 #include "m_trans_tmp.h"
@@ -271,6 +290,7 @@
 #define SZ 3
 #define INIT init_trans_3_GLushort_raw
 #define DEST_4F trans_3_GLushort_4f_raw
+#define DEST_4FC trans_3_GLushort_4fc_raw
 #define DEST_4UB trans_3_GLushort_4ub_raw
 #define DEST_4US trans_3_GLushort_4us_raw
 #define DEST_3F trans_3_GLushort_3f_raw
@@ -279,11 +299,13 @@
 #define SZ 2
 #define INIT init_trans_2_GLushort_raw
 #define DEST_4F trans_2_GLushort_4f_raw
+#define DEST_4FC trans_2_GLushort_4fc_raw
 #include "m_trans_tmp.h"
 
 #define SZ 1
 #define INIT init_trans_1_GLushort_raw
 #define DEST_4F trans_1_GLushort_4f_raw
+#define DEST_4FC trans_1_GLushort_4fc_raw
 #define DEST_1UB trans_1_GLushort_1ub_raw
 #define DEST_1UI trans_1_GLushort_1ui_raw
 #include "m_trans_tmp.h"
@@ -292,6 +314,7 @@
 #undef SRC_IDX
 #undef TRX_3F
 #undef TRX_4F
+#undef TRX_4FC
 #undef TRX_UB
 #undef TRX_US
 #undef TRX_UI
@@ -303,6 +326,7 @@
 #define SRC_IDX TYPE_IDX(GL_INT)
 #define TRX_3F(f,n)   INT_TO_FLOAT( PTR_ELT(f,n) )
 #define TRX_4F(f,n)   (GLfloat)( PTR_ELT(f,n) )
+#define TRX_4FC(f,n)   (GLfloat)( PTR_ELT(f,n) )
 #define TRX_UB(ub, f,n)  ub = INT_TO_UBYTE(PTR_ELT(f,n))
 #define TRX_US(us, f,n)  us = INT_TO_USHORT(PTR_ELT(f,n))
 #define TRX_UI(f,n)  (PTR_ELT(f,n) < 0 ? 0 : (GLuint)  PTR_ELT(f,n))
@@ -311,6 +335,7 @@
 #define SZ 4
 #define INIT init_trans_4_GLint_raw
 #define DEST_4F trans_4_GLint_4f_raw
+#define DEST_4FC trans_4_GLint_4fc_raw
 #define DEST_4UB trans_4_GLint_4ub_raw
 #define DEST_4US trans_4_GLint_4us_raw
 #include "m_trans_tmp.h"
@@ -318,6 +343,7 @@
 #define SZ 3
 #define INIT init_trans_3_GLint_raw
 #define DEST_4F trans_3_GLint_4f_raw
+#define DEST_4FC trans_3_GLint_4fc_raw
 #define DEST_4UB trans_3_GLint_4ub_raw
 #define DEST_4US trans_3_GLint_4us_raw
 #define DEST_3F trans_3_GLint_3f_raw
@@ -326,11 +352,13 @@
 #define SZ 2
 #define INIT init_trans_2_GLint_raw
 #define DEST_4F trans_2_GLint_4f_raw
+#define DEST_4FC trans_2_GLint_4fc_raw
 #include "m_trans_tmp.h"
 
 #define SZ 1
 #define INIT init_trans_1_GLint_raw
 #define DEST_4F trans_1_GLint_4f_raw
+#define DEST_4FC trans_1_GLint_4fc_raw
 #define DEST_1UB trans_1_GLint_1ub_raw
 #define DEST_1UI trans_1_GLint_1ui_raw
 #include "m_trans_tmp.h"
@@ -340,6 +368,7 @@
 #undef SRC_IDX
 #undef TRX_3F
 #undef TRX_4F
+#undef TRX_4FC
 #undef TRX_UB
 #undef TRX_US
 #undef TRX_UI
@@ -351,6 +380,7 @@
 #define SRC_IDX TYPE_IDX(GL_UNSIGNED_INT)
 #define TRX_3F(f,n)   INT_TO_FLOAT( PTR_ELT(f,n) )
 #define TRX_4F(f,n)   (GLfloat)( PTR_ELT(f,n) )
+#define TRX_4FC(f,n)   (GLfloat)( PTR_ELT(f,n) )
 #define TRX_UB(ub, f,n)  ub = (GLubyte) (PTR_ELT(f,n) >> 24)
 #define TRX_US(us, f,n)  us = (GLshort) (PTR_ELT(f,n) >> 16)
 #define TRX_UI(f,n)		PTR_ELT(f,n)
@@ -359,6 +389,7 @@
 #define SZ 4
 #define INIT init_trans_4_GLuint_raw
 #define DEST_4F trans_4_GLuint_4f_raw
+#define DEST_4FC trans_4_GLuint_4fc_raw
 #define DEST_4UB trans_4_GLuint_4ub_raw
 #define DEST_4US trans_4_GLuint_4us_raw
 #include "m_trans_tmp.h"
@@ -366,6 +397,7 @@
 #define SZ 3
 #define INIT init_trans_3_GLuint_raw
 #define DEST_4F trans_3_GLuint_4f_raw
+#define DEST_4FC trans_3_GLuint_4fc_raw
 #define DEST_4UB trans_3_GLuint_4ub_raw
 #define DEST_4US trans_3_GLuint_4us_raw
 #define DEST_3F trans_3_GLuint_3f_raw
@@ -374,11 +406,13 @@
 #define SZ 2
 #define INIT init_trans_2_GLuint_raw
 #define DEST_4F trans_2_GLuint_4f_raw
+#define DEST_4FC trans_2_GLuint_4fc_raw
 #include "m_trans_tmp.h"
 
 #define SZ 1
 #define INIT init_trans_1_GLuint_raw
 #define DEST_4F trans_1_GLuint_4f_raw
+#define DEST_4FC trans_1_GLuint_4fc_raw
 #define DEST_1UB trans_1_GLuint_1ub_raw
 #define DEST_1UI trans_1_GLuint_1ui_raw
 #include "m_trans_tmp.h"
@@ -387,6 +421,7 @@
 #undef SRC_IDX
 #undef TRX_3F
 #undef TRX_4F
+#undef TRX_4FC
 #undef TRX_UB
 #undef TRX_US
 #undef TRX_UI
@@ -398,6 +433,7 @@
 #define SRC_IDX TYPE_IDX(GL_DOUBLE)
 #define TRX_3F(f,n)   (GLfloat) PTR_ELT(f,n)
 #define TRX_4F(f,n)   (GLfloat) PTR_ELT(f,n)
+#define TRX_4FC(f,n)   (GLfloat) PTR_ELT(f,n)
 #define TRX_UB(ub,f,n) UNCLAMPED_FLOAT_TO_UBYTE(ub, PTR_ELT(f,n))
 #define TRX_US(us,f,n) UNCLAMPED_FLOAT_TO_USHORT(us, PTR_ELT(f,n))
 #define TRX_UI(f,n)  (GLuint) (GLint) PTR_ELT(f,n)
@@ -407,6 +443,7 @@
 #define SZ 4
 #define INIT init_trans_4_GLdouble_raw
 #define DEST_4F trans_4_GLdouble_4f_raw
+#define DEST_4FC trans_4_GLdouble_4fc_raw
 #define DEST_4UB trans_4_GLdouble_4ub_raw
 #define DEST_4US trans_4_GLdouble_4us_raw
 #include "m_trans_tmp.h"
@@ -414,6 +451,7 @@
 #define SZ 3
 #define INIT init_trans_3_GLdouble_raw
 #define DEST_4F trans_3_GLdouble_4f_raw
+#define DEST_4FC trans_3_GLdouble_4fc_raw
 #define DEST_4UB trans_3_GLdouble_4ub_raw
 #define DEST_4US trans_3_GLdouble_4us_raw
 #define DEST_3F trans_3_GLdouble_3f_raw
@@ -422,11 +460,13 @@
 #define SZ 2
 #define INIT init_trans_2_GLdouble_raw
 #define DEST_4F trans_2_GLdouble_4f_raw
+#define DEST_4FC trans_2_GLdouble_4fc_raw
 #include "m_trans_tmp.h"
 
 #define SZ 1
 #define INIT init_trans_1_GLdouble_raw
 #define DEST_4F trans_1_GLdouble_4f_raw
+#define DEST_4FC trans_1_GLdouble_4fc_raw
 #define DEST_1UB trans_1_GLdouble_1ub_raw
 #define DEST_1UI trans_1_GLdouble_1ui_raw
 #define DEST_1F trans_1_GLdouble_1f_raw
@@ -444,11 +484,13 @@
 #define DEST_4UB trans_4_GLfloat_4ub_raw
 #define DEST_4US trans_4_GLfloat_4us_raw
 #define DEST_4F  trans_4_GLfloat_4f_raw
+#define DEST_4FC  trans_4_GLfloat_4fc_raw
 #include "m_trans_tmp.h"
 
 #define SZ 3
 #define INIT init_trans_3_GLfloat_raw
 #define DEST_4F  trans_3_GLfloat_4f_raw
+#define DEST_4FC  trans_3_GLfloat_4fc_raw
 #define DEST_4UB trans_3_GLfloat_4ub_raw
 #define DEST_4US trans_3_GLfloat_4us_raw
 #define DEST_3F trans_3_GLfloat_3f_raw
@@ -457,11 +499,13 @@
 #define SZ 2
 #define INIT init_trans_2_GLfloat_raw
 #define DEST_4F trans_2_GLfloat_4f_raw
+#define DEST_4FC trans_2_GLfloat_4fc_raw
 #include "m_trans_tmp.h"
 
 #define SZ 1
 #define INIT init_trans_1_GLfloat_raw
 #define DEST_4F  trans_1_GLfloat_4f_raw
+#define DEST_4FC  trans_1_GLfloat_4fc_raw
 #define DEST_1UB trans_1_GLfloat_1ub_raw
 #define DEST_1UI trans_1_GLfloat_1ui_raw
 #define DEST_1F trans_1_GLfloat_1f_raw
@@ -472,6 +516,7 @@
 #undef SRC_IDX
 #undef TRX_3F
 #undef TRX_4F
+#undef TRX_4FC
 #undef TRX_UB
 #undef TRX_US
 #undef TRX_UI
@@ -510,6 +555,7 @@
    MEMSET( TAB(_4ub), 0, sizeof(TAB(_4ub)) );
    MEMSET( TAB(_4us), 0, sizeof(TAB(_4us)) );
    MEMSET( TAB(_4f),  0, sizeof(TAB(_4f)) );
+   MEMSET( TAB(_4fc),  0, sizeof(TAB(_4fc)) );
 
    init_trans_4_GLbyte_raw();
    init_trans_3_GLbyte_raw();
@@ -624,7 +670,7 @@
 #elif CHAN_TYPE == GL_UNSIGNED_SHORT
    _math_trans_4us( to, ptr, stride, type, size, start, n );
 #elif CHAN_TYPE == GL_FLOAT
-   _math_trans_4f( to, ptr, stride, type, size, start, n );
+   _math_trans_4fc( to, ptr, stride, type, size, start, n );
 #endif
 }
 
@@ -650,6 +696,17 @@
    _math_trans_4f_tab[size][TYPE_IDX(type)]( to, ptr, stride, start, n );
 }
 
+void _math_trans_4fc(GLfloat (*to)[4],
+		    CONST void *ptr,
+		    GLuint stride,
+		    GLenum type,
+		    GLuint size,
+		    GLuint start,
+		    GLuint n )
+{
+   _math_trans_4fc_tab[size][TYPE_IDX(type)]( to, ptr, stride, start, n );
+}
+
 void _math_trans_3f(GLfloat (*to)[3],
 		    CONST void *ptr,
 		    GLuint stride,
diff --git a/src/mesa/math/m_translate.h b/src/mesa/math/m_translate.h
index c473f83..527c706 100644
--- a/src/mesa/math/m_translate.h
+++ b/src/mesa/math/m_translate.h
@@ -85,6 +85,14 @@
 			   GLuint start,
 			   GLuint n );
 
+extern void _math_trans_4fc(GLfloat (*to)[4],
+			    CONST void *ptr,
+			    GLuint stride,
+			    GLenum type,
+			    GLuint size,
+			    GLuint start,
+			    GLuint n );
+
 extern void _math_trans_3f(GLfloat (*to)[3],
 			   CONST void *ptr,
 			   GLuint stride,
diff --git a/src/mesa/tnl/t_imm_elt.c b/src/mesa/tnl/t_imm_elt.c
index f9a3069..44c2a32 100644
--- a/src/mesa/tnl/t_imm_elt.c
+++ b/src/mesa/tnl/t_imm_elt.c
@@ -38,15 +38,6 @@
 
 
 
-typedef void (*trans_elt_1f_func)(GLfloat *to,
-				  CONST void *ptr,
-				  GLuint stride,
-				  const GLuint *flags,
-				  const GLuint *elts,
-				  GLuint match,
-				  GLuint start,
-				  GLuint n );
-
 typedef void (*trans_elt_1ui_func)(GLuint *to,
 				   CONST void *ptr,
 				   GLuint stride,
@@ -65,24 +56,6 @@
 				   GLuint start,
 				   GLuint n );
 
-typedef void (*trans_elt_4ub_func)(GLubyte (*to)[4],
-                                   CONST void *ptr,
-                                   GLuint stride,
-                                   const GLuint *flags,
-                                   const GLuint *elts,
-                                   GLuint match,
-                                   GLuint start,
-                                   GLuint n );
-
-typedef void (*trans_elt_4us_func)(GLushort (*to)[4],
-                                   CONST void *ptr,
-                                   GLuint stride,
-                                   const GLuint *flags,
-                                   const GLuint *elts,
-                                   GLuint match,
-                                   GLuint start,
-                                   GLuint n );
-
 typedef void (*trans_elt_4f_func)(GLfloat (*to)[4],
 				  CONST void *ptr,
 				  GLuint stride,
@@ -92,33 +65,18 @@
 				  GLuint start,
 				  GLuint n );
 
-typedef void (*trans_elt_3f_func)(GLfloat (*to)[3],
-				  CONST void *ptr,
-				  GLuint stride,
-				  const GLuint *flags,
-				  const GLuint *elts,
-				  GLuint match,
-				  GLuint start,
-				  GLuint n );
 
 
-
-
-static trans_elt_1f_func _tnl_trans_elt_1f_tab[MAX_TYPES];
 static trans_elt_1ui_func _tnl_trans_elt_1ui_tab[MAX_TYPES];
 static trans_elt_1ub_func _tnl_trans_elt_1ub_tab[MAX_TYPES];
-static trans_elt_3f_func  _tnl_trans_elt_3f_tab[MAX_TYPES];
-static trans_elt_4ub_func _tnl_trans_elt_4ub_tab[5][MAX_TYPES];
-static trans_elt_4us_func _tnl_trans_elt_4us_tab[5][MAX_TYPES];
 static trans_elt_4f_func  _tnl_trans_elt_4f_tab[5][MAX_TYPES];
+static trans_elt_4f_func  _tnl_trans_elt_4fc_tab[5][MAX_TYPES];
 
 
 #define PTR_ELT(ptr, elt) (((SRC *)ptr)[elt])
 
 
 
-
-
 /* Code specific to array element implementation.  There is a small
  * subtlety in the bits CHECK() tests, and the way bits are set in
  * glArrayElement which ensures that if, eg, in the case that the
@@ -145,45 +103,42 @@
  */
 #define SRC GLbyte
 #define SRC_IDX TYPE_IDX(GL_BYTE)
-#define TRX_3F(f,n)   BYTE_TO_FLOAT( PTR_ELT(f,n) )
 #define TRX_4F(f,n)   BYTE_TO_FLOAT( PTR_ELT(f,n) )
+#define TRX_4FC(f,n)   BYTE_TO_FLOAT( PTR_ELT(f,n) )
 #define TRX_UB(ub, f,n)  ub = BYTE_TO_UBYTE( PTR_ELT(f,n) )
-#define TRX_US(us, f,n)  us = BYTE_TO_USHORT( PTR_ELT(f,n) )
 #define TRX_UI(f,n)  (PTR_ELT(f,n) < 0 ? 0 : (GLuint)  PTR_ELT(f,n))
 
 
 #define SZ 4
 #define INIT init_trans_4_GLbyte_elt
 #define DEST_4F trans_4_GLbyte_4f_elt
-#define DEST_4UB trans_4_GLbyte_4ub_elt
-#define DEST_4US trans_4_GLbyte_4us_elt
+#define DEST_4FC trans_4_GLbyte_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 3
 #define INIT init_trans_3_GLbyte_elt
 #define DEST_4F trans_3_GLbyte_4f_elt
-#define DEST_4UB trans_3_GLbyte_4ub_elt
-#define DEST_4US trans_3_GLbyte_4us_elt
-#define DEST_3F trans_3_GLbyte_3f_elt
+#define DEST_4FC trans_3_GLbyte_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 2
 #define INIT init_trans_2_GLbyte_elt
 #define DEST_4F trans_2_GLbyte_4f_elt
+#define DEST_4FC trans_2_GLbyte_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 1
 #define INIT init_trans_1_GLbyte_elt
 #define DEST_4F trans_1_GLbyte_4f_elt
+#define DEST_4FC trans_1_GLbyte_4fc_elt
 #define DEST_1UB trans_1_GLbyte_1ub_elt
 #define DEST_1UI trans_1_GLbyte_1ui_elt
 #include "math/m_trans_tmp.h"
 
 #undef SRC
-#undef TRX_3F
 #undef TRX_4F
+#undef TRX_4FC
 #undef TRX_UB
-#undef TRX_US
 #undef TRX_UI
 #undef SRC_IDX
 
@@ -191,10 +146,9 @@
  */
 #define SRC GLubyte
 #define SRC_IDX TYPE_IDX(GL_UNSIGNED_BYTE)
-#define TRX_3F(f,n)	     UBYTE_TO_FLOAT( PTR_ELT(f,n) )
 #define TRX_4F(f,n)	     UBYTE_TO_FLOAT( PTR_ELT(f,n) )
+#define TRX_4FC(f,n)	     UBYTE_TO_FLOAT( PTR_ELT(f,n) )
 #define TRX_UB(ub, f,n)	     ub = PTR_ELT(f,n)
-#define TRX_US(us, f,n)	     us = PTR_ELT(f,n)
 #define TRX_UI(f,n)          (GLuint)PTR_ELT(f,n)
 
 /* 4ub->4ub handled in special case below.
@@ -202,30 +156,29 @@
 #define SZ 4
 #define INIT init_trans_4_GLubyte_elt
 #define DEST_4F trans_4_GLubyte_4f_elt
-#define DEST_4US trans_4_GLubyte_4us_elt
+#define DEST_4FC trans_4_GLubyte_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 3
 #define INIT init_trans_3_GLubyte_elt
 #define DEST_4F trans_3_GLubyte_4f_elt
-#define DEST_3F trans_3_GLubyte_3f_elt
-#define DEST_4UB trans_3_GLubyte_4ub_elt
-#define DEST_4US trans_3_GLubyte_4us_elt
+#define DEST_4FC trans_3_GLubyte_4fc_elt
 #include "math/m_trans_tmp.h"
 
 
 #define SZ 1
 #define INIT init_trans_1_GLubyte_elt
-#define DEST_1UI trans_1_GLubyte_1ui_elt
+#define DEST_4F  trans_1_GLubyte_4f_elt
+#define DEST_4FC  trans_1_GLubyte_4fc_elt
 #define DEST_1UB trans_1_GLubyte_1ub_elt
+#define DEST_1UI trans_1_GLubyte_1ui_elt
 #include "math/m_trans_tmp.h"
 
 #undef SRC
 #undef SRC_IDX
-#undef TRX_3F
 #undef TRX_4F
+#undef TRX_4FC
 #undef TRX_UB
-#undef TRX_US
 #undef TRX_UI
 
 
@@ -233,36 +186,34 @@
  */
 #define SRC GLshort
 #define SRC_IDX TYPE_IDX(GL_SHORT)
-#define TRX_3F(f,n)   SHORT_TO_FLOAT( PTR_ELT(f,n) )
 #define TRX_4F(f,n)   (GLfloat)( PTR_ELT(f,n) )
+#define TRX_4FC(f,n)   SHORT_TO_FLOAT( PTR_ELT(f,n) )
 #define TRX_UB(ub, f,n)  ub = SHORT_TO_UBYTE(PTR_ELT(f,n))
-#define TRX_US(us, f,n)  us = SHORT_TO_USHORT(PTR_ELT(f,n))
 #define TRX_UI(f,n)  (PTR_ELT(f,n) < 0 ? 0 : (GLuint)  PTR_ELT(f,n))
 
 
 #define SZ  4
 #define INIT init_trans_4_GLshort_elt
 #define DEST_4F trans_4_GLshort_4f_elt
-#define DEST_4UB trans_4_GLshort_4ub_elt
-#define DEST_4US trans_4_GLshort_4us_elt
+#define DEST_4FC trans_4_GLshort_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 3
 #define INIT init_trans_3_GLshort_elt
 #define DEST_4F trans_3_GLshort_4f_elt
-#define DEST_4UB trans_3_GLshort_4ub_elt
-#define DEST_4US trans_3_GLshort_4us_elt
-#define DEST_3F trans_3_GLshort_3f_elt
+#define DEST_4FC trans_3_GLshort_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 2
 #define INIT init_trans_2_GLshort_elt
 #define DEST_4F trans_2_GLshort_4f_elt
+#define DEST_4FC trans_2_GLshort_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 1
 #define INIT init_trans_1_GLshort_elt
 #define DEST_4F trans_1_GLshort_4f_elt
+#define DEST_4FC trans_1_GLshort_4fc_elt
 #define DEST_1UB trans_1_GLshort_1ub_elt
 #define DEST_1UI trans_1_GLshort_1ui_elt
 #include "math/m_trans_tmp.h"
@@ -270,10 +221,9 @@
 
 #undef SRC
 #undef SRC_IDX
-#undef TRX_3F
 #undef TRX_4F
+#undef TRX_4FC
 #undef TRX_UB
-#undef TRX_US
 #undef TRX_UI
 
 
@@ -281,46 +231,43 @@
  */
 #define SRC GLushort
 #define SRC_IDX TYPE_IDX(GL_UNSIGNED_SHORT)
-#define TRX_3F(f,n)   USHORT_TO_FLOAT( PTR_ELT(f,n) )
 #define TRX_4F(f,n)   (GLfloat)( PTR_ELT(f,n) )
+#define TRX_4FC(f,n)   USHORT_TO_FLOAT( PTR_ELT(f,n) )
 #define TRX_UB(ub,f,n)  ub = (GLubyte) (PTR_ELT(f,n) >> 8)
-#define TRX_US(us,f,n)  us = PTR_ELT(f,n)
 #define TRX_UI(f,n)  (GLuint)   PTR_ELT(f,n)
 
 
 #define SZ 4
 #define INIT init_trans_4_GLushort_elt
 #define DEST_4F trans_4_GLushort_4f_elt
-#define DEST_4UB trans_4_GLushort_4ub_elt
-#define DEST_4US trans_4_GLushort_4us_elt
+#define DEST_4FC trans_4_GLushort_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 3
 #define INIT init_trans_3_GLushort_elt
 #define DEST_4F trans_3_GLushort_4f_elt
-#define DEST_4UB trans_3_GLushort_4ub_elt
-#define DEST_4US trans_3_GLushort_4us_elt
-#define DEST_3F trans_3_GLushort_3f_elt
+#define DEST_4FC trans_3_GLushort_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 2
 #define INIT init_trans_2_GLushort_elt
 #define DEST_4F trans_2_GLushort_4f_elt
+#define DEST_4FC trans_2_GLushort_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 1
 #define INIT init_trans_1_GLushort_elt
 #define DEST_4F trans_1_GLushort_4f_elt
+#define DEST_4FC trans_1_GLushort_4fc_elt
 #define DEST_1UB trans_1_GLushort_1ub_elt
 #define DEST_1UI trans_1_GLushort_1ui_elt
 #include "math/m_trans_tmp.h"
 
 #undef SRC
 #undef SRC_IDX
-#undef TRX_3F
 #undef TRX_4F
+#undef TRX_4FC
 #undef TRX_UB
-#undef TRX_US
 #undef TRX_UI
 
 
@@ -328,36 +275,34 @@
  */
 #define SRC GLint
 #define SRC_IDX TYPE_IDX(GL_INT)
-#define TRX_3F(f,n)   INT_TO_FLOAT( PTR_ELT(f,n) )
 #define TRX_4F(f,n)   (GLfloat)( PTR_ELT(f,n) )
+#define TRX_4FC(f,n)   INT_TO_FLOAT( PTR_ELT(f,n) )
 #define TRX_UB(ub, f,n)  ub = INT_TO_UBYTE(PTR_ELT(f,n))
-#define TRX_US(us, f,n)  us = INT_TO_USHORT(PTR_ELT(f,n))
 #define TRX_UI(f,n)  (PTR_ELT(f,n) < 0 ? 0 : (GLuint)  PTR_ELT(f,n))
 
 
 #define SZ 4
 #define INIT init_trans_4_GLint_elt
 #define DEST_4F trans_4_GLint_4f_elt
-#define DEST_4UB trans_4_GLint_4ub_elt
-#define DEST_4US trans_4_GLint_4us_elt
+#define DEST_4FC trans_4_GLint_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 3
 #define INIT init_trans_3_GLint_elt
 #define DEST_4F trans_3_GLint_4f_elt
-#define DEST_4UB trans_3_GLint_4ub_elt
-#define DEST_4US trans_3_GLint_4us_elt
-#define DEST_3F trans_3_GLint_3f_elt
+#define DEST_4FC trans_3_GLint_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 2
 #define INIT init_trans_2_GLint_elt
 #define DEST_4F trans_2_GLint_4f_elt
+#define DEST_4FC trans_2_GLint_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 1
 #define INIT init_trans_1_GLint_elt
 #define DEST_4F trans_1_GLint_4f_elt
+#define DEST_4FC trans_1_GLint_4fc_elt
 #define DEST_1UB trans_1_GLint_1ub_elt
 #define DEST_1UI trans_1_GLint_1ui_elt
 #include "math/m_trans_tmp.h"
@@ -365,10 +310,9 @@
 
 #undef SRC
 #undef SRC_IDX
-#undef TRX_3F
 #undef TRX_4F
+#undef TRX_4FC
 #undef TRX_UB
-#undef TRX_US
 #undef TRX_UI
 
 
@@ -376,46 +320,43 @@
  */
 #define SRC GLuint
 #define SRC_IDX TYPE_IDX(GL_UNSIGNED_INT)
-#define TRX_3F(f,n)   UINT_TO_FLOAT( PTR_ELT(f,n) )
 #define TRX_4F(f,n)   (GLfloat)( PTR_ELT(f,n) )
+#define TRX_4FC(f,n)   UINT_TO_FLOAT( PTR_ELT(f,n) )
 #define TRX_UB(ub, f,n)  ub = (GLubyte) (PTR_ELT(f,n) >> 24)
-#define TRX_US(us, f,n)  us = (GLushort) (PTR_ELT(f,n) >> 16)
 #define TRX_UI(f,n)		PTR_ELT(f,n)
 
 
 #define SZ 4
 #define INIT init_trans_4_GLuint_elt
 #define DEST_4F trans_4_GLuint_4f_elt
-#define DEST_4UB trans_4_GLuint_4ub_elt
-#define DEST_4US trans_4_GLuint_4us_elt
+#define DEST_4FC trans_4_GLuint_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 3
 #define INIT init_trans_3_GLuint_elt
 #define DEST_4F trans_3_GLuint_4f_elt
-#define DEST_4UB trans_3_GLuint_4ub_elt
-#define DEST_4US trans_3_GLuint_4us_elt
-#define DEST_3F trans_3_GLuint_3f_elt
+#define DEST_4FC trans_3_GLuint_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 2
 #define INIT init_trans_2_GLuint_elt
 #define DEST_4F trans_2_GLuint_4f_elt
+#define DEST_4FC trans_2_GLuint_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 1
 #define INIT init_trans_1_GLuint_elt
 #define DEST_4F trans_1_GLuint_4f_elt
+#define DEST_4FC trans_1_GLuint_4fc_elt
 #define DEST_1UB trans_1_GLuint_1ub_elt
 #define DEST_1UI trans_1_GLuint_1ui_elt
 #include "math/m_trans_tmp.h"
 
 #undef SRC
 #undef SRC_IDX
-#undef TRX_3F
 #undef TRX_4F
+#undef TRX_4FC
 #undef TRX_UB
-#undef TRX_US
 #undef TRX_UI
 
 
@@ -423,10 +364,9 @@
  */
 #define SRC GLdouble
 #define SRC_IDX TYPE_IDX(GL_DOUBLE)
-#define TRX_3F(f,n)    (GLfloat) PTR_ELT(f,n)
 #define TRX_4F(f,n)    (GLfloat) PTR_ELT(f,n)
+#define TRX_4FC(f,n)    (GLfloat) PTR_ELT(f,n)
 #define TRX_UB(ub,f,n) UNCLAMPED_FLOAT_TO_UBYTE(ub, PTR_ELT(f,n))
-#define TRX_US(us,f,n) UNCLAMPED_FLOAT_TO_USHORT(us, PTR_ELT(f,n))
 #define TRX_UI(f,n)    (GLuint) (GLint) PTR_ELT(f,n)
 #define TRX_1F(f,n)    (GLfloat) PTR_ELT(f,n)
 
@@ -434,117 +374,89 @@
 #define SZ 4
 #define INIT init_trans_4_GLdouble_elt
 #define DEST_4F trans_4_GLdouble_4f_elt
-#define DEST_4UB trans_4_GLdouble_4ub_elt
-#define DEST_4US trans_4_GLdouble_4us_elt
+#define DEST_4FC trans_4_GLdouble_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 3
 #define INIT init_trans_3_GLdouble_elt
 #define DEST_4F trans_3_GLdouble_4f_elt
-#define DEST_4UB trans_3_GLdouble_4ub_elt
-#define DEST_4US trans_3_GLdouble_4us_elt
-#define DEST_3F trans_3_GLdouble_3f_elt
+#define DEST_4FC trans_3_GLdouble_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 2
 #define INIT init_trans_2_GLdouble_elt
 #define DEST_4F trans_2_GLdouble_4f_elt
+#define DEST_4FC trans_2_GLdouble_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 1
 #define INIT init_trans_1_GLdouble_elt
 #define DEST_4F trans_1_GLdouble_4f_elt
+#define DEST_4FC trans_1_GLdouble_4fc_elt
 #define DEST_1UB trans_1_GLdouble_1ub_elt
 #define DEST_1UI trans_1_GLdouble_1ui_elt
-#define DEST_1F trans_1_GLdouble_1f_elt
 #include "math/m_trans_tmp.h"
 
 #undef SRC
 #undef SRC_IDX
+#undef TRX_4F
+#undef TRX_4FC
+#undef TRX_UB
+#undef TRX_UI
 
 /* GL_FLOAT
  */
 #define SRC GLfloat
 #define SRC_IDX TYPE_IDX(GL_FLOAT)
+#define TRX_4F(f,n)    (GLfloat) PTR_ELT(f,n)
+#define TRX_4FC(f,n)    (GLfloat) PTR_ELT(f,n)
+#define TRX_UB(ub,f,n) UNCLAMPED_FLOAT_TO_UBYTE(ub, PTR_ELT(f,n))
+#define TRX_UI(f,n)    (GLuint) (GLint) PTR_ELT(f,n)
+#define TRX_1F(f,n)    (GLfloat) PTR_ELT(f,n)
+
+
 #define SZ 4
 #define INIT init_trans_4_GLfloat_elt
-#define DEST_4UB trans_4_GLfloat_4ub_elt
-#define DEST_4US trans_4_GLfloat_4us_elt
 #define DEST_4F  trans_4_GLfloat_4f_elt
+#define DEST_4FC  trans_4_GLfloat_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 3
 #define INIT init_trans_3_GLfloat_elt
 #define DEST_4F  trans_3_GLfloat_4f_elt
-#define DEST_4UB trans_3_GLfloat_4ub_elt
-#define DEST_4US trans_3_GLfloat_4us_elt
-#define DEST_3F trans_3_GLfloat_3f_elt
+#define DEST_4FC  trans_3_GLfloat_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 2
 #define INIT init_trans_2_GLfloat_elt
 #define DEST_4F trans_2_GLfloat_4f_elt
+#define DEST_4FC trans_2_GLfloat_4fc_elt
 #include "math/m_trans_tmp.h"
 
 #define SZ 1
 #define INIT init_trans_1_GLfloat_elt
-#define DEST_4F  trans_1_GLfloat_3f_elt
+#define DEST_4F  trans_1_GLfloat_4f_elt
+#define DEST_4FC  trans_1_GLfloat_4fc_elt
 #define DEST_1UB trans_1_GLfloat_1ub_elt
 #define DEST_1UI trans_1_GLfloat_1ui_elt
-#define DEST_1F trans_1_GLfloat_1f_elt
 #include "math/m_trans_tmp.h"
 
 #undef SRC
 #undef SRC_IDX
-#undef TRX_3F
 #undef TRX_4F
+#undef TRX_4FC
 #undef TRX_UB
-#undef TRX_US
 #undef TRX_UI
 
 
-static void trans_4_GLubyte_4ub(GLubyte (*t)[4],
-                                CONST void *Ptr,
-                                GLuint stride,
-                                ARGS )
-{
-   const GLubyte *f = (GLubyte *) Ptr + SRC_START * stride;
-   const GLubyte *first = f;
-   GLuint i;
-   (void) start;
-   if (((((long) f | (long) stride)) & 3L) == 0L) {
-      /* Aligned.
-       */
-      for (i = DST_START ; i < n ; i++, NEXT_F) {
-	 CHECK {
-	    NEXT_F2;
-	    COPY_4UBV( t[i], f );
-	 }
-      }
-   } else {
-      for (i = DST_START ; i < n ; i++, NEXT_F) {
-	 CHECK {
-	    NEXT_F2;
-	    t[i][0] = f[0];
-	    t[i][1] = f[1];
-	    t[i][2] = f[2];
-	    t[i][3] = f[3];
-	 }
-      }
-   }
-}
 
 
 static void init_translate_elt(void)
 {
    MEMSET( TAB(_1ui), 0, sizeof(TAB(_1ui)) );
    MEMSET( TAB(_1ub), 0, sizeof(TAB(_1ub)) );
-   MEMSET( TAB(_3f),  0, sizeof(TAB(_3f)) );
-   MEMSET( TAB(_4ub), 0, sizeof(TAB(_4ub)) );
-   MEMSET( TAB(_4us), 0, sizeof(TAB(_4us)) );
    MEMSET( TAB(_4f),  0, sizeof(TAB(_4f)) );
-
-   TAB(_4ub)[4][TYPE_IDX(GL_UNSIGNED_BYTE)] = trans_4_GLubyte_4ub;
+   MEMSET( TAB(_4fc),  0, sizeof(TAB(_4fc)) );
 
    init_trans_4_GLbyte_elt();
    init_trans_3_GLbyte_elt();
@@ -596,27 +508,6 @@
 }
 
 
-#if 00
-static void _tnl_trans_elt_1f(GLfloat *to,
-		       const struct gl_client_array *from,
-		       const GLuint *flags,
-		       const GLuint *elts,
-		       GLuint match,
-		       GLuint start,
-		       GLuint n )
-{
-   _tnl_trans_elt_1f_tab[TYPE_IDX(from->Type)]( to,
-					      from->Ptr,
-					      from->StrideB,
-					      flags,
-					      elts,
-					      match,
-					      start,
-					      n );
-
-}
-#endif
-
 static void _tnl_trans_elt_1ui(GLuint *to,
 			const struct gl_client_array *from,
 			const GLuint *flags,
@@ -656,49 +547,6 @@
 
 }
 
-
-#if 0
-static void _tnl_trans_elt_4ub(GLubyte (*to)[4],
-                               const struct gl_client_array *from,
-                               const GLuint *flags,
-                               const GLuint *elts,
-                               GLuint match,
-                               GLuint start,
-                               GLuint n )
-{
-   _tnl_trans_elt_4ub_tab[from->Size][TYPE_IDX(from->Type)]( to,
-                                                             from->Ptr,
-                                                             from->StrideB,
-                                                             flags,
-                                                             elts,
-                                                             match,
-                                                             start,
-                                                             n );
-
-}
-#endif
-
-#if 0
-static void _tnl_trans_elt_4us(GLushort (*to)[4],
-                               const struct gl_client_array *from,
-                               const GLuint *flags,
-                               const GLuint *elts,
-                               GLuint match,
-                               GLuint start,
-                               GLuint n )
-{
-   _tnl_trans_elt_4us_tab[from->Size][TYPE_IDX(from->Type)]( to,
-                                                             from->Ptr,
-                                                             from->StrideB,
-                                                             flags,
-                                                             elts,
-                                                             match,
-                                                             start,
-                                                             n );
-
-}
-#endif
-
 static void _tnl_trans_elt_4f(GLfloat (*to)[4],
                               const struct gl_client_array *from,
                               const GLuint *flags,
@@ -719,17 +567,15 @@
 }
 
 
-
-#if 0
-static void _tnl_trans_elt_3f(GLfloat (*to)[3],
-		       const struct gl_client_array *from,
-		       const GLuint *flags,
-		       const GLuint *elts,
-		       GLuint match,
-		       GLuint start,
-		       GLuint n )
+static void _tnl_trans_elt_4fc(GLfloat (*to)[4],
+			       const struct gl_client_array *from,
+			       const GLuint *flags,
+			       const GLuint *elts,
+			       GLuint match,
+			       GLuint start,
+			       GLuint n )
 {
-   _tnl_trans_elt_3f_tab[TYPE_IDX(from->Type)]( to,
+   _tnl_trans_elt_4fc_tab[from->Size][TYPE_IDX(from->Type)]( to,
 					      from->Ptr,
 					      from->StrideB,
 					      flags,
@@ -737,8 +583,9 @@
 					      match,
 					      start,
 					      n );
+
 }
-#endif
+
 
 
 
@@ -834,17 +681,17 @@
    }
 
    if (translateConventional & VERT_BIT_COLOR0) {
-      _tnl_trans_elt_4f( IM->Attrib[VERT_ATTRIB_COLOR0],
-                         &ctx->Array.Color,
-                         flags, elts, (VERT_BIT_ELT|VERT_BIT_COLOR0),
-                         start, count);
+      _tnl_trans_elt_4fc( IM->Attrib[VERT_ATTRIB_COLOR0],
+			  &ctx->Array.Color,
+			  flags, elts, (VERT_BIT_ELT|VERT_BIT_COLOR0),
+			  start, count);
    }
 
    if (translateConventional & VERT_BIT_COLOR1) {
-      _tnl_trans_elt_4f( IM->Attrib[VERT_ATTRIB_COLOR1],
-                         &ctx->Array.SecondaryColor,
-                         flags, elts, (VERT_BIT_ELT|VERT_BIT_COLOR1),
-                         start, count);
+      _tnl_trans_elt_4fc( IM->Attrib[VERT_ATTRIB_COLOR1],
+			  &ctx->Array.SecondaryColor,
+			  flags, elts, (VERT_BIT_ELT|VERT_BIT_COLOR1),
+			  start, count);
    }
 
    if (translateConventional & VERT_BIT_FOG) {
diff --git a/src/mesa/tnl/t_vb_light.c b/src/mesa/tnl/t_vb_light.c
index aedbad4..154c3d2 100644
--- a/src/mesa/tnl/t_vb_light.c
+++ b/src/mesa/tnl/t_vb_light.c
@@ -82,13 +82,13 @@
    else
       to->StrideB = 4 * sizeof(GLfloat);
    
-   _math_trans_4f( (GLfloat (*)[4]) to->Ptr,
-		   from->Ptr,
-		   from->StrideB,
-		   from->Type,
-		   from->Size,
-		   0,
-		   count);
+   _math_trans_4fc( (GLfloat (*)[4]) to->Ptr,
+		    from->Ptr,
+		    from->StrideB,
+		    from->Type,
+		    from->Size,
+		    0,
+		    count);
 
    VB->ColorPtr[0] = to;
 }