Clean-up/renaming of the per-vertex attribute bits, specifically, the
[mesa.git] / src / mesa / tnl / t_imm_eval.c
index 6a69e9b3d86dfa4fe262bf7a13d7186c5990de29..01c886bec04b7ab862d4a476698bfe0713c44646 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: t_imm_eval.c,v 1.15 2001/08/14 00:50:44 keithw Exp $ */
+/* $Id: t_imm_eval.c,v 1.21 2002/01/22 14:35:16 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -52,11 +52,11 @@ static void eval_points1( GLfloat outcoord[][4],
                          GLfloat du, GLfloat u1 )
 {
    GLuint i;
-   for (i = 0 ; !(flags[i] & VERT_END_VB) ; i++)
-      if (flags[i] & VERT_EVAL_ANY) {
+   for (i = 0 ; !(flags[i] & VERT_BIT_END_VB) ; i++)
+      if (flags[i] & VERT_BITS_EVAL_ANY) {
         outcoord[i][0] = coord[i][0];
         outcoord[i][1] = coord[i][1];
-        if (flags[i] & VERT_EVAL_P1)
+        if (flags[i] & VERT_BIT_EVAL_P1)
            outcoord[i][0] = coord[i][0] * du + u1;
       }
 }
@@ -68,11 +68,11 @@ static void eval_points2( GLfloat outcoord[][4],
                          GLfloat dv, GLfloat v1 )
 {
    GLuint i;
-   for (i = 0 ; !(flags[i] & VERT_END_VB) ; i++) {
-      if (flags[i] & VERT_EVAL_ANY) {
+   for (i = 0 ; !(flags[i] & VERT_BIT_END_VB) ; i++) {
+      if (flags[i] & VERT_BITS_EVAL_ANY) {
         outcoord[i][0] = coord[i][0];
         outcoord[i][1] = coord[i][1];
-        if (flags[i] & VERT_EVAL_P2) {
+        if (flags[i] & VERT_BIT_EVAL_P2) {
            outcoord[i][0] = coord[i][0] * du + u1;
            outcoord[i][1] = coord[i][1] * dv + v1;
         }
@@ -100,8 +100,8 @@ static void eval1_4f( GLvector4f *dest,
    GLfloat (*to)[4] = dest->data;
    GLuint i;
 
-   for (i = 0 ; !(flags[i] & VERT_END_VB) ; i++)
-      if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) {
+   for (i = 0 ; !(flags[i] & VERT_BIT_END_VB) ; i++)
+      if (flags[i] & (VERT_BIT_EVAL_C1|VERT_BIT_EVAL_P1)) {
         GLfloat u = (coord[i][0] - u1) * du;
         ASSIGN_4V(to[i], 0,0,0,1);
         _math_horner_bezier_curve(map->Points, to[i], u,
@@ -126,8 +126,8 @@ static void eval1_4f_ca( struct gl_client_array *dest,
    ASSERT(dest->Type == GL_FLOAT);
    ASSERT(dest->StrideB == 4 * sizeof(GLfloat));
 
-   for (i = 0 ; !(flags[i] & VERT_END_VB) ; i++)
-      if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) {
+   for (i = 0 ; !(flags[i] & VERT_BIT_END_VB) ; i++)
+      if (flags[i] & (VERT_BIT_EVAL_C1|VERT_BIT_EVAL_P1)) {
         GLfloat u = (coord[i][0] - u1) * du;
         ASSIGN_4V(to[i], 0,0,0,1);
         _math_horner_bezier_curve(map->Points, to[i], u,
@@ -148,8 +148,8 @@ static void eval1_1ui( GLvector1ui *dest,
    GLuint *to = dest->data;
    GLuint i;
 
-   for (i = 0 ; !(flags[i] & VERT_END_VB) ; i++)
-      if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) {
+   for (i = 0 ; !(flags[i] & VERT_BIT_END_VB) ; i++)
+      if (flags[i] & (VERT_BIT_EVAL_C1|VERT_BIT_EVAL_P1)) {
         GLfloat u = (coord[i][0] - u1) * du;
         GLfloat tmp;
         _math_horner_bezier_curve(map->Points, &tmp, u, 1, map->Order);
@@ -158,18 +158,18 @@ static void eval1_1ui( GLvector1ui *dest,
 
 }
 
-static void eval1_norm( GLvector3f *dest,
+static void eval1_norm( GLvector4f *dest,
                        GLfloat coord[][4],
                        const GLuint *flags,
                        struct gl_1d_map *map )
 {
    const GLfloat u1 = map->u1;
    const GLfloat du = map->du;
-   GLfloat (*to)[3] = dest->data;
+   GLfloat (*to)[4] = dest->data;
    GLuint i;
 
-   for (i = 0 ; !(flags[i] & VERT_END_VB) ; i++)
-      if (flags[i] & (VERT_EVAL_C1|VERT_EVAL_P1)) {
+   for (i = 0 ; !(flags[i] & VERT_BIT_END_VB) ; i++)
+      if (flags[i] & (VERT_BIT_EVAL_C1|VERT_BIT_EVAL_P1)) {
         GLfloat u = (coord[i][0] - u1) * du;
         _math_horner_bezier_curve(map->Points, to[i], u, 3, map->Order);
       }
@@ -180,7 +180,7 @@ static void eval1_norm( GLvector3f *dest,
 
 
 static void eval2_obj_norm( GLvector4f *obj_ptr,
-                           GLvector3f *norm_ptr,
+                           GLvector4f *norm_ptr,
                            GLfloat coord[][4],
                            GLuint *flags,
                            GLuint dimension,
@@ -191,13 +191,13 @@ static void eval2_obj_norm( GLvector4f *obj_ptr,
    const GLfloat v1 = map->v1;
    const GLfloat dv = map->dv;
    GLfloat (*obj)[4] = obj_ptr->data;
-   GLfloat (*normal)[3] = norm_ptr->data;
+   GLfloat (*normal)[4] = norm_ptr->data;
    GLuint i;
 
 /*     fprintf(stderr, "%s\n", __FUNCTION__); */
 
-   for (i = 0 ; !(flags[i] & VERT_END_VB) ; i++)
-      if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) {
+   for (i = 0 ; !(flags[i] & VERT_BIT_END_VB) ; i++)
+      if (flags[i] & (VERT_BIT_EVAL_C2|VERT_BIT_EVAL_P2)) {
         GLfloat u = (coord[i][0] - u1) * du;
         GLfloat v = (coord[i][1] - v1) * dv;
         GLfloat du[4], dv[4];
@@ -206,13 +206,15 @@ static void eval2_obj_norm( GLvector4f *obj_ptr,
         _math_de_casteljau_surf(map->Points, obj[i], du, dv, u, v, dimension,
                                 map->Uorder, map->Vorder);
 
-        du[0] = du[0]*obj[i][3] - du[3]*obj[i][0];
-        du[1] = du[1]*obj[i][3] - du[3]*obj[i][1];
-        du[2] = du[2]*obj[i][3] - du[3]*obj[i][2];
+        if (dimension == 4) {
+           du[0] = du[0]*obj[i][3] - du[3]*obj[i][0];
+           du[1] = du[1]*obj[i][3] - du[3]*obj[i][1];
+           du[2] = du[2]*obj[i][3] - du[3]*obj[i][2];
         
-        dv[0] = dv[0]*obj[i][3] - dv[3]*obj[i][0];
-        dv[1] = dv[1]*obj[i][3] - dv[3]*obj[i][1];
-        dv[2] = dv[2]*obj[i][3] - dv[3]*obj[i][2];
+           dv[0] = dv[0]*obj[i][3] - dv[3]*obj[i][0];
+           dv[1] = dv[1]*obj[i][3] - dv[3]*obj[i][1];
+           dv[2] = dv[2]*obj[i][3] - dv[3]*obj[i][2];
+        }
 
         CROSS3(normal[i], du, dv);
         NORMALIZE_3FV(normal[i]);
@@ -236,8 +238,8 @@ static void eval2_4f( GLvector4f *dest,
    GLfloat (*to)[4] = dest->data;
    GLuint i;
 
-   for (i = 0 ; !(flags[i] & VERT_END_VB) ; i++)
-      if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) {
+   for (i = 0 ; !(flags[i] & VERT_BIT_END_VB) ; i++)
+      if (flags[i] & (VERT_BIT_EVAL_C2|VERT_BIT_EVAL_P2)) {
         GLfloat u = (coord[i][0] - u1) * du;
         GLfloat v = (coord[i][1] - v1) * dv;
 /*      fprintf(stderr, "coord %d: %f %f\n", i, coord[i][0], coord[i][1]); */
@@ -266,8 +268,8 @@ static void eval2_4f_ca( struct gl_client_array *dest,
    ASSERT(dest->Type == GL_FLOAT);
    ASSERT(dest->StrideB == 4 * sizeof(GLfloat));
 
-   for (i = 0 ; !(flags[i] & VERT_END_VB) ; i++)
-      if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) {
+   for (i = 0 ; !(flags[i] & VERT_BIT_END_VB) ; i++)
+      if (flags[i] & (VERT_BIT_EVAL_C2|VERT_BIT_EVAL_P2)) {
         GLfloat u = (coord[i][0] - u1) * du;
         GLfloat v = (coord[i][1] - v1) * dv;
         _math_horner_bezier_surf(map->Points, to[i], u, v, dimension,
@@ -278,7 +280,7 @@ static void eval2_4f_ca( struct gl_client_array *dest,
 }
 
 
-static void eval2_norm( GLvector3f *dest,
+static void eval2_norm( GLvector4f *dest,
                        GLfloat coord[][4],
                        GLuint *flags,
                        struct gl_2d_map *map )
@@ -287,17 +289,17 @@ static void eval2_norm( GLvector3f *dest,
    const GLfloat du = map->du;
    const GLfloat v1 = map->v1;
    const GLfloat dv = map->dv;
-   GLfloat (*to)[3] = dest->data;
+   GLfloat (*to)[4] = dest->data;
    GLuint i;
 
-   for (i = 0 ; !(flags[i] & VERT_END_VB) ; i++)
-      if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) {
+   for (i = 0 ; !(flags[i] & VERT_BIT_END_VB) ; i++) {
+      if (flags[i] & (VERT_BIT_EVAL_C2|VERT_BIT_EVAL_P2)) {
         GLfloat u = (coord[i][0] - u1) * du;
         GLfloat v = (coord[i][1] - v1) * dv;
         _math_horner_bezier_surf(map->Points, to[i], u, v, 3,
                                  map->Uorder, map->Vorder);
-     }
-
+      }
+   }
 }
 
 
@@ -313,8 +315,8 @@ static void eval2_1ui( GLvector1ui *dest,
    GLuint *to = dest->data;
    GLuint i;
 
-   for (i = 0 ; !(flags[i] & VERT_END_VB) ; i++)
-      if (flags[i] & (VERT_EVAL_C2|VERT_EVAL_P2)) {
+   for (i = 0 ; !(flags[i] & VERT_BIT_END_VB) ; i++)
+      if (flags[i] & (VERT_BIT_EVAL_C2|VERT_BIT_EVAL_P2)) {
         GLfloat u = (coord[i][0] - u1) * du;
         GLfloat v = (coord[i][1] - v1) * dv;
         GLfloat tmp;
@@ -349,9 +351,9 @@ static void copy_4f_stride( GLfloat to[][4], GLfloat *from,
    }
 }
 
-static void copy_3f( GLfloat to[][3], GLfloat from[][3], GLuint count )
+static void copy_3f( GLfloat to[][4], GLfloat from[][4], GLuint count )
 {
-   int i;
+   GLuint i;
 /*     MEMCPY( to, from, (count) * sizeof(to[0])); */
    for (i = 0 ; i < count ; i++) {
 /*        fprintf(stderr, "copy norm %d from %p: %f %f %f\n", i, */
@@ -377,52 +379,52 @@ static void update_eval( GLcontext *ctx )
    GLuint eval1 = 0, eval2 = 0;
 
    if (ctx->Eval.Map1Index)
-      eval1 |= VERT_INDEX;
+      eval1 |= VERT_BIT_INDEX;
 
    if (ctx->Eval.Map2Index)
-      eval2 |= VERT_INDEX;
+      eval2 |= VERT_BIT_INDEX;
 
    if (ctx->Eval.Map1Color4)
-      eval1 |= VERT_RGBA;
+      eval1 |= VERT_BIT_COLOR0;
 
    if (ctx->Eval.Map2Color4)
-      eval2 |= VERT_RGBA;
+      eval2 |= VERT_BIT_COLOR0;
 
    if (ctx->Eval.Map1Normal)
-      eval1 |= VERT_NORM;
+      eval1 |= VERT_BIT_NORMAL;
 
    if (ctx->Eval.Map2Normal)
-      eval2 |= VERT_NORM;
+      eval2 |= VERT_BIT_NORMAL;
 
    if (ctx->Eval.Map1TextureCoord4 ||
        ctx->Eval.Map1TextureCoord3 ||
        ctx->Eval.Map1TextureCoord2 ||
        ctx->Eval.Map1TextureCoord1)
-      eval1 |= VERT_TEX0;
+      eval1 |= VERT_BIT_TEX0;
 
    if (ctx->Eval.Map2TextureCoord4 ||
        ctx->Eval.Map2TextureCoord3 ||
        ctx->Eval.Map2TextureCoord2 ||
        ctx->Eval.Map2TextureCoord1)
-      eval2 |= VERT_TEX0;
+      eval2 |= VERT_BIT_TEX0;
 
    if (ctx->Eval.Map1Vertex4)
-      eval1 |= VERT_OBJ_234;
+      eval1 |= VERT_BITS_OBJ_234;
 
    if (ctx->Eval.Map1Vertex3)
-      eval1 |= VERT_OBJ_23;
+      eval1 |= VERT_BITS_OBJ_23;
 
    if (ctx->Eval.Map2Vertex4) {
       if (ctx->Eval.AutoNormal)
-        eval2 |= VERT_OBJ_234 | VERT_NORM;
+        eval2 |= VERT_BITS_OBJ_234 | VERT_BIT_NORMAL;
       else
-        eval2 |= VERT_OBJ_234;
+        eval2 |= VERT_BITS_OBJ_234;
    }
    else if (ctx->Eval.Map2Vertex3) {
       if (ctx->Eval.AutoNormal)
-        eval2 |= VERT_OBJ_23 | VERT_NORM;
+        eval2 |= VERT_BITS_OBJ_23 | VERT_BIT_NORMAL;
       else
-        eval2 |= VERT_OBJ_23;
+        eval2 |= VERT_BITS_OBJ_23;
    }
 
    tnl->eval.EvalMap1Flags = eval1;
@@ -446,13 +448,13 @@ void _tnl_eval_immediate( GLcontext *ctx, struct immediate *IM )
    GLuint *flags = IM->Flag + IM->CopyStart;
    GLuint copycount;
    GLuint orflag = IM->OrFlag;
-   GLuint any_eval1 = orflag & (VERT_EVAL_C1|VERT_EVAL_P1);
-   GLuint any_eval2 = orflag & (VERT_EVAL_C2|VERT_EVAL_P2);
+   GLuint any_eval1 = orflag & (VERT_BIT_EVAL_C1|VERT_BIT_EVAL_P1);
+   GLuint any_eval2 = orflag & (VERT_BIT_EVAL_C2|VERT_BIT_EVAL_P2);
    GLuint req = 0;
    GLuint purge_flags = 0;
-   GLfloat (*coord)[4] = IM->Obj + IM->CopyStart;
+   GLfloat (*coord)[4] = IM->Attrib[VERT_ATTRIB_POS] + IM->CopyStart;
 
-   if (IM->AndFlag & VERT_EVAL_ANY)
+   if (IM->AndFlag & VERT_BITS_EVAL_ANY)
       copycount = IM->Start - IM->CopyStart; /* just copy copied vertices */
    else
       copycount = IM->Count - IM->CopyStart; /* copy all vertices */
@@ -470,15 +472,15 @@ void _tnl_eval_immediate( GLcontext *ctx, struct immediate *IM )
       req |= tnl->pipeline.inputs & tnl->eval.EvalMap1Flags;
 
       if (!ctx->Eval.Map1Vertex4 && !ctx->Eval.Map1Vertex3)
-        purge_flags = (VERT_EVAL_P1|VERT_EVAL_C1);
+        purge_flags = (VERT_BIT_EVAL_P1|VERT_BIT_EVAL_C1);
 
-      if (orflag & VERT_EVAL_P1) {
-        eval_points1( store->Obj + IM->CopyStart, 
+      if (orflag & VERT_BIT_EVAL_P1) {
+        eval_points1( store->Attrib[VERT_ATTRIB_POS] + IM->CopyStart, 
                       coord, flags,
                       ctx->Eval.MapGrid1du,
                       ctx->Eval.MapGrid1u1);
         
-        coord = store->Obj + IM->CopyStart;
+        coord = store->Attrib[VERT_ATTRIB_POS] + IM->CopyStart;
       }
    }
 
@@ -486,17 +488,17 @@ void _tnl_eval_immediate( GLcontext *ctx, struct immediate *IM )
       req |= tnl->pipeline.inputs & tnl->eval.EvalMap2Flags;
 
       if (!ctx->Eval.Map2Vertex4 && !ctx->Eval.Map2Vertex3)
-        purge_flags |= (VERT_EVAL_P2|VERT_EVAL_C2);
+        purge_flags |= (VERT_BIT_EVAL_P2|VERT_BIT_EVAL_C2);
 
-      if (orflag & VERT_EVAL_P2) {
-        eval_points2( store->Obj + IM->CopyStart, 
+      if (orflag & VERT_BIT_EVAL_P2) {
+        eval_points2( store->Attrib[VERT_ATTRIB_POS] + IM->CopyStart, 
                       coord, flags,
                       ctx->Eval.MapGrid2du,
                       ctx->Eval.MapGrid2u1,
                       ctx->Eval.MapGrid2dv,
                       ctx->Eval.MapGrid2v1 );
 
-        coord = store->Obj + IM->CopyStart;
+        coord = store->Attrib[VERT_ATTRIB_POS] + IM->CopyStart;
       }
    }
 
@@ -505,7 +507,7 @@ void _tnl_eval_immediate( GLcontext *ctx, struct immediate *IM )
 
    /* Perform the evaluations on active data elements.
     */
-   if (req & VERT_INDEX)
+   if (req & VERT_BIT_INDEX)
    {
       GLuint generated = 0;
 
@@ -517,75 +519,75 @@ void _tnl_eval_immediate( GLcontext *ctx, struct immediate *IM )
 
       if (ctx->Eval.Map1Index && any_eval1) {
         eval1_1ui( &tmp->Index, coord, flags, &ctx->EvalMap.Map1Index );
-        generated |= VERT_EVAL_C1|VERT_EVAL_P1;
+        generated |= VERT_BIT_EVAL_C1|VERT_BIT_EVAL_P1;
       }
 
       if (ctx->Eval.Map2Index && any_eval2) {
         eval2_1ui( &tmp->Index, coord, flags, &ctx->EvalMap.Map2Index );
-        generated |= VERT_EVAL_C2|VERT_EVAL_P2;
+        generated |= VERT_BIT_EVAL_C2|VERT_BIT_EVAL_P2;
       }
    }
 
-   if (req & VERT_RGBA)
+   if (req & VERT_BIT_COLOR0)
    {
       GLuint generated = 0;
 
       if (copycount) 
-        copy_4f_stride( store->Color + IM->CopyStart, 
+        copy_4f_stride( store->Attrib[VERT_ATTRIB_COLOR0] + IM->CopyStart, 
                         (GLfloat *)tmp->Color.Ptr, 
                         tmp->Color.StrideB,
                         copycount );
 
-      tmp->Color.Ptr = store->Color + IM->CopyStart;
+      tmp->Color.Ptr = store->Attrib[VERT_ATTRIB_COLOR0] + IM->CopyStart;
       tmp->Color.StrideB = 4 * sizeof(GLfloat);
       tmp->Color.Flags = 0;
-      tnl->vb.importable_data &= ~VERT_RGBA;
+      tnl->vb.importable_data &= ~VERT_BIT_COLOR0;
 
       if (ctx->Eval.Map1Color4 && any_eval1) {
         eval1_4f_ca( &tmp->Color, coord, flags, 4, &ctx->EvalMap.Map1Color4 );
-        generated |= VERT_EVAL_C1|VERT_EVAL_P1;
+        generated |= VERT_BIT_EVAL_C1|VERT_BIT_EVAL_P1;
       }
 
       if (ctx->Eval.Map2Color4 && any_eval2) {
         eval2_4f_ca( &tmp->Color, coord, flags, 4, &ctx->EvalMap.Map2Color4 );
-        generated |= VERT_EVAL_C2|VERT_EVAL_P2;
+        generated |= VERT_BIT_EVAL_C2|VERT_BIT_EVAL_P2;
       }
    }
 
 
-   if (req & VERT_TEX(0))
+   if (req & VERT_BIT_TEX(0))
    {
       GLuint generated = 0;
 
       if (copycount)
-        copy_4f( store->TexCoord[0] + IM->CopyStart, 
+        copy_4f( store->Attrib[VERT_ATTRIB_TEX0] + IM->CopyStart, 
                  tmp->TexCoord[0].data, copycount );
       else
         tmp->TexCoord[0].size = 0;
 
-      tmp->TexCoord[0].data = store->TexCoord[0] + IM->CopyStart;
+      tmp->TexCoord[0].data = store->Attrib[VERT_ATTRIB_TEX0] + IM->CopyStart;
       tmp->TexCoord[0].start = (GLfloat *)tmp->TexCoord[0].data;
 
       if (any_eval1) {
         if (ctx->Eval.Map1TextureCoord4) {
            eval1_4f( &tmp->TexCoord[0], coord, flags, 4,
                      &ctx->EvalMap.Map1Texture4 );
-           generated |= VERT_EVAL_C1|VERT_EVAL_P1;
+           generated |= VERT_BIT_EVAL_C1|VERT_BIT_EVAL_P1;
         }
         else if (ctx->Eval.Map1TextureCoord3) {
            eval1_4f( &tmp->TexCoord[0], coord, flags, 3,
                      &ctx->EvalMap.Map1Texture3 );
-           generated |= VERT_EVAL_C1|VERT_EVAL_P1;
+           generated |= VERT_BIT_EVAL_C1|VERT_BIT_EVAL_P1;
         }
         else if (ctx->Eval.Map1TextureCoord2) {
            eval1_4f( &tmp->TexCoord[0], coord, flags, 2,
                      &ctx->EvalMap.Map1Texture2 );
-           generated |= VERT_EVAL_C1|VERT_EVAL_P1;
+           generated |= VERT_BIT_EVAL_C1|VERT_BIT_EVAL_P1;
         }
         else if (ctx->Eval.Map1TextureCoord1) {
            eval1_4f( &tmp->TexCoord[0], coord, flags, 1,
                      &ctx->EvalMap.Map1Texture1 );
-           generated |= VERT_EVAL_C1|VERT_EVAL_P1;
+           generated |= VERT_BIT_EVAL_C1|VERT_BIT_EVAL_P1;
         }
       }
 
@@ -593,50 +595,48 @@ void _tnl_eval_immediate( GLcontext *ctx, struct immediate *IM )
         if (ctx->Eval.Map2TextureCoord4) {
            eval2_4f( &tmp->TexCoord[0], coord, flags, 4,
                      &ctx->EvalMap.Map2Texture4 );
-           generated |= VERT_EVAL_C2|VERT_EVAL_P2;
+           generated |= VERT_BIT_EVAL_C2|VERT_BIT_EVAL_P2;
         }
         else if (ctx->Eval.Map2TextureCoord3) {
            eval2_4f( &tmp->TexCoord[0], coord, flags, 3,
                      &ctx->EvalMap.Map2Texture3 );
-           generated |= VERT_EVAL_C2|VERT_EVAL_P2;
+           generated |= VERT_BIT_EVAL_C2|VERT_BIT_EVAL_P2;
         }
         else if (ctx->Eval.Map2TextureCoord2) {
            eval2_4f( &tmp->TexCoord[0], coord, flags, 2,
                      &ctx->EvalMap.Map2Texture2 );
-           generated |= VERT_EVAL_C2|VERT_EVAL_P2;
+           generated |= VERT_BIT_EVAL_C2|VERT_BIT_EVAL_P2;
         }
         else if (ctx->Eval.Map2TextureCoord1) {
            eval2_4f( &tmp->TexCoord[0], coord, flags, 1,
                      &ctx->EvalMap.Map2Texture1 );
-           generated |= VERT_EVAL_C2|VERT_EVAL_P2;
+           generated |= VERT_BIT_EVAL_C2|VERT_BIT_EVAL_P2;
         }
       }
    }
 
 
-   if (req & VERT_NORM)
+   if (req & VERT_BIT_NORMAL)
    {
       GLuint generated = 0;
 
       if (copycount) {
 /*      fprintf(stderr, "%s: Copy normals\n", __FUNCTION__);  */
-        copy_3f( store->Normal + IM->CopyStart, tmp->Normal.data, 
-                 copycount );
+        copy_3f( store->Attrib[VERT_ATTRIB_NORMAL] + IM->CopyStart,
+                  tmp->Normal.data, copycount );
       }
 
-      tmp->Normal.data = store->Normal + IM->CopyStart;
+      tmp->Normal.data = store->Attrib[VERT_ATTRIB_NORMAL] + IM->CopyStart;
       tmp->Normal.start = (GLfloat *)tmp->Normal.data;
 
       if (ctx->Eval.Map1Normal && any_eval1) {
-        eval1_norm( &tmp->Normal, coord, flags,
-                    &ctx->EvalMap.Map1Normal );
-        generated |= VERT_EVAL_C1|VERT_EVAL_P1;
+        eval1_norm( &tmp->Normal, coord, flags, &ctx->EvalMap.Map1Normal );
+        generated |= VERT_BIT_EVAL_C1|VERT_BIT_EVAL_P1;
       }
 
       if (ctx->Eval.Map2Normal && any_eval2) {
-        eval2_norm( &tmp->Normal, coord, flags,
-                    &ctx->EvalMap.Map2Normal );
-        generated |= VERT_EVAL_C2|VERT_EVAL_P2;
+        eval2_norm( &tmp->Normal, coord, flags, &ctx->EvalMap.Map2Normal );
+        generated |= VERT_BIT_EVAL_C2|VERT_BIT_EVAL_P2;
       }
    }
 
@@ -645,18 +645,22 @@ void _tnl_eval_immediate( GLcontext *ctx, struct immediate *IM )
    /* In the AutoNormal case, the copy and assignment of tmp->NormalPtr
     * are done above.
     */
-   if (req & VERT_OBJ)
+   if (req & VERT_BIT_POS)
    {
       if (copycount) {
         /* This copy may already have occurred when eliminating
          * glEvalPoint calls:
          */
-        if  (coord != store->Obj + IM->CopyStart)
-           copy_4f( store->Obj + IM->CopyStart, tmp->Obj.data, copycount );
-      } else
+        if (coord != store->Attrib[VERT_ATTRIB_POS] + IM->CopyStart) {
+           copy_4f( store->Attrib[VERT_ATTRIB_POS] + IM->CopyStart,
+                     tmp->Obj.data, copycount );
+         }
+      }
+      else {
         tmp->Obj.size = 0;
+      }
 
-      tmp->Obj.data = store->Obj + IM->CopyStart;
+      tmp->Obj.data = store->Attrib[VERT_ATTRIB_POS] + IM->CopyStart;
       tmp->Obj.start = (GLfloat *)tmp->Obj.data;
 
       /* Note: Normal data is already prepared above.
@@ -674,18 +678,16 @@ void _tnl_eval_immediate( GLcontext *ctx, struct immediate *IM )
       }
 
       if (any_eval2) {
-        if (ctx->Eval.Map2Vertex4)
-        {
-           if (ctx->Eval.AutoNormal && (req & VERT_NORM))
+        if (ctx->Eval.Map2Vertex4) {
+           if (ctx->Eval.AutoNormal && (req & VERT_BIT_NORMAL))
               eval2_obj_norm( &tmp->Obj, &tmp->Normal, coord, flags, 4,
                               &ctx->EvalMap.Map2Vertex4 );
            else
               eval2_4f( &tmp->Obj, coord, flags, 4,
                         &ctx->EvalMap.Map2Vertex4 );
         }
-        else if (ctx->Eval.Map2Vertex3)
-        {
-           if (ctx->Eval.AutoNormal && (req & VERT_NORM))
+        else if (ctx->Eval.Map2Vertex3) {
+           if (ctx->Eval.AutoNormal && (req & VERT_BIT_NORMAL))
               eval2_obj_norm( &tmp->Obj, &tmp->Normal, coord, flags, 3,
                               &ctx->EvalMap.Map2Vertex3 );
            else
@@ -702,7 +704,7 @@ void _tnl_eval_immediate( GLcontext *ctx, struct immediate *IM )
     * must be ignored.
     */
    if (purge_flags) {
-      GLuint vertex = VERT_OBJ|(VERT_EVAL_ANY & ~purge_flags);
+      GLuint vertex = VERT_BIT_POS|(VERT_BITS_EVAL_ANY & ~purge_flags);
       GLuint last_new_prim = 0;
       GLuint new_prim_length = 0;
       GLuint next_old_prim = 0;