Remove CVS keywords.
[mesa.git] / src / mesa / drivers / dri / mach64 / mach64_native_vbtmp.h
index b07cbcfd486382d7527ed57ca612e97d6d55ffc8..684f2acc890849ac4fba0e0ad05927879bc5b7e0 100644 (file)
@@ -1,4 +1,4 @@
-/* $XFree86$ */ /* -*- mode: c; c-basic-offset: 3 -*- */
+/* -*- mode: c; c-basic-offset: 3 -*- */
 /*
  * Mesa 3-D graphics library
  * Version:  3.5
@@ -74,7 +74,7 @@ static void TAG(emit)( GLcontext *ctx,
 #endif
 #endif
 #if DO_SPEC
-   GLubyte (*spec)[4];
+   GLfloat (*spec)[4];
    GLuint spec_stride;
 #endif
 #if DO_FOG
@@ -82,7 +82,7 @@ static void TAG(emit)( GLcontext *ctx,
    GLuint fog_stride;
 #endif
 #if DO_RGBA
-   GLubyte (*col)[4];
+   GLfloat (*col)[4];
    GLuint col_stride;
 #endif
    GLfloat (*coord)[4];
@@ -123,8 +123,13 @@ static void TAG(emit)( GLcontext *ctx,
 #endif
 
 #if DO_SPEC
-   spec = (GLubyte (*)[4])VB->SecondaryColorPtr[0]->data;
-   spec_stride = VB->SecondaryColorPtr[0]->stride;
+   if (VB->SecondaryColorPtr[0]) {
+      spec = VB->SecondaryColorPtr[0]->data;
+      spec_stride = VB->SecondaryColorPtr[0]->stride;
+   } else {
+      spec = (GLfloat (*)[4])ctx->Current.Attrib[VERT_ATTRIB_COLOR1];
+      spec_stride = 0;
+   }
 #endif
 
 #if DO_FOG
@@ -148,22 +153,21 @@ static void TAG(emit)( GLcontext *ctx,
 
    if (start) {
 #if DO_TEX1
-        tc1 =  (GLfloat (*)[4])((GLubyte *)tc1 + start * tc1_stride);
+         STRIDE_4F(tc1, start * tc1_stride);
 #endif
 #if DO_TEX0
-        tc0 =  (GLfloat (*)[4])((GLubyte *)tc0 + start * tc0_stride);
+         STRIDE_4F(tc0, start * tc0_stride);
 #endif
 #if DO_SPEC
-        STRIDE_4UB(spec, start * spec_stride);
+        STRIDE_4F(spec, start * spec_stride);
 #endif
 #if DO_FOG
-        /*  STRIDE_F(fog, start * fog_stride); */
-        fog =  (GLfloat (*)[4])((GLubyte *)fog + start * fog_stride);
+        STRIDE_4F(fog, start * fog_stride);
 #endif
 #if DO_RGBA
-        STRIDE_4UB(col, start * col_stride);
+        STRIDE_4F(col, start * col_stride);
 #endif
-        coord =  (GLfloat (*)[4])((GLubyte *)coord + start * coord_stride);
+        STRIDE_4F(coord, start * coord_stride);
    }
 
    for (i=start; i < end; i++, v = (VERTEX *)((GLubyte *)v + stride)) {
@@ -184,30 +188,30 @@ static void TAG(emit)( GLcontext *ctx,
 #if DO_PTEX
         if (tc1_size == 4) {
 #ifdef MACH64_PREMULT_TEXCOORDS
-           LE32_OUT_FLOAT( p++, w*tc1[0][0] );                 /* VERTEX_?_SECONDARY_S */
-           LE32_OUT_FLOAT( p++, w*tc1[0][1] );                 /* VERTEX_?_SECONDARY_T */
-           LE32_OUT_FLOAT( p++, w*tc1[0][3] );                 /* VERTEX_?_SECONDARY_W */
+           LE32_OUT_FLOAT( p++, w*tc1[0][0] );         /* VERTEX_?_SECONDARY_S */
+           LE32_OUT_FLOAT( p++, w*tc1[0][1] );         /* VERTEX_?_SECONDARY_T */
+           LE32_OUT_FLOAT( p++, w*tc1[0][3] );         /* VERTEX_?_SECONDARY_W */
 #else /* !MACH64_PREMULT_TEXCOORDS */
            float rhw = 1.0 / tc1[0][3];
-           LE32_OUT_FLOAT( p++, rhw*tc1[0][0] );               /* VERTEX_?_SECONDARY_S */
-           LE32_OUT_FLOAT( p++, rhw*tc1[0][1] );               /* VERTEX_?_SECONDARY_T */
-           LE32_OUT_FLOAT( p++, w*tc1[0][3] );                 /* VERTEX_?_SECONDARY_W */      
+           LE32_OUT_FLOAT( p++, rhw*tc1[0][0] );       /* VERTEX_?_SECONDARY_S */
+           LE32_OUT_FLOAT( p++, rhw*tc1[0][1] );       /* VERTEX_?_SECONDARY_T */
+           LE32_OUT_FLOAT( p++, w*tc1[0][3] );         /* VERTEX_?_SECONDARY_W */      
 #endif /* !MACH64_PREMULT_TEXCOORDS */
         } else {
 #endif /* DO_PTEX */
 #ifdef MACH64_PREMULT_TEXCOORDS
-           LE32_OUT_FLOAT( p++, w*tc1[0][0] );                 /* VERTEX_?_SECONDARY_S */
-           LE32_OUT_FLOAT( p++, w*tc1[0][1] );                 /* VERTEX_?_SECONDARY_T */
-           LE32_OUT_FLOAT( p++, w );                           /* VERTEX_?_SECONDARY_W */
+           LE32_OUT_FLOAT( p++, w*tc1[0][0] );         /* VERTEX_?_SECONDARY_S */
+           LE32_OUT_FLOAT( p++, w*tc1[0][1] );         /* VERTEX_?_SECONDARY_T */
+           LE32_OUT_FLOAT( p++, w );                   /* VERTEX_?_SECONDARY_W */
 #else /* !MACH64_PREMULT_TEXCOORDS */
-           LE32_OUT_FLOAT( p++, tc1[0][0] );                   /* VERTEX_?_SECONDARY_S */
-           LE32_OUT_FLOAT( p++, tc1[0][1] );                   /* VERTEX_?_SECONDARY_T */
-           LE32_OUT_FLOAT( p++, w );                           /* VERTEX_?_SECONDARY_W */
+           LE32_OUT_FLOAT( p++, tc1[0][0] );           /* VERTEX_?_SECONDARY_S */
+           LE32_OUT_FLOAT( p++, tc1[0][1] );           /* VERTEX_?_SECONDARY_T */
+           LE32_OUT_FLOAT( p++, w );                   /* VERTEX_?_SECONDARY_W */
 #endif /* !MACH64_PREMULT_TEXCOORDS */
 #if DO_PTEX
         }
 #endif /* DO_PTEX */
-        tc1 =  (GLfloat (*)[4])((GLubyte *)tc1 +  tc1_stride);
+        STRIDE_4F(tc1, tc1_stride);
 #else /* !DO_TEX1 */
         p += 3;
 #endif /* !DO_TEX1 */
@@ -239,28 +243,29 @@ static void TAG(emit)( GLcontext *ctx,
 #if DO_PTEX
         }
 #endif /* DO_PTEX */
-        tc0 =  (GLfloat (*)[4])((GLubyte *)tc0 +  tc0_stride);
+        STRIDE_4F(tc0, tc0_stride);
 #else /* !DO_TEX0 */
         p += 3;
 #endif /* !DO_TEX0 */
 
 #if DO_SPEC
-        ((GLubyte *)p)[0] = spec[0][2];                        /* VERTEX_?_SPEC_B */
-        ((GLubyte *)p)[1] = spec[0][1];                        /* VERTEX_?_SPEC_G */
-        ((GLubyte *)p)[2] = spec[0][0];                        /* VERTEX_?_SPEC_R */
-        STRIDE_4UB(spec, spec_stride);
+        UNCLAMPED_FLOAT_TO_UBYTE(((GLubyte *)p)[0],  spec[0][2]);      /* VERTEX_?_SPEC_B */
+        UNCLAMPED_FLOAT_TO_UBYTE(((GLubyte *)p)[1],  spec[0][1]);      /* VERTEX_?_SPEC_G */
+        UNCLAMPED_FLOAT_TO_UBYTE(((GLubyte *)p)[2],  spec[0][0]);      /* VERTEX_?_SPEC_R */
+
+        STRIDE_4F(spec, spec_stride);
 #endif
 #if DO_FOG
-        ((GLubyte *)p)[3] = fog[0][0] * 255.0;                 /* VERTEX_?_SPEC_A */
-        fog =  (GLfloat (*)[4])((GLubyte *)fog + fog_stride);
-        /*  STRIDE_F(fog, fog_stride); */
+        UNCLAMPED_FLOAT_TO_UBYTE(((GLubyte *)p)[3], fog[0][0]);  /* VERTEX_?_SPEC_A */
+        /*      ((GLubyte *)p)[3] = fog[0][0] * 255.0;  */
+        STRIDE_4F(fog, fog_stride);
 #endif
         p++;
            
 #if DO_XYZW
         if (mask[i] == 0) {
            /* unclipped */
-           LE32_OUT( p++, VIEWPORT_Z( coord[0][2] ) );         /* VERTEX_?_Z */
+           LE32_OUT( p++, VIEWPORT_Z( coord[0][2] ) ); /* VERTEX_?_Z */
         } else {
 #endif
            p++;
@@ -269,11 +274,12 @@ static void TAG(emit)( GLcontext *ctx,
 #endif
 
 #if DO_RGBA
-        *((GLubyte *)p)++ = col[0][2];                         /* VERTEX_?_B */
-        *((GLubyte *)p)++ = col[0][1];                         /* VERTEX_?_G */
-        *((GLubyte *)p)++ = col[0][0];                         /* VERTEX_?_R */
-        *((GLubyte *)p)++ = col[0][3];                         /* VERTEX_?_A */
-        STRIDE_4UB(col, col_stride);
+        UNCLAMPED_FLOAT_TO_UBYTE(((GLubyte *)p)[0], col[0][2]);
+        UNCLAMPED_FLOAT_TO_UBYTE(((GLubyte *)p)[1], col[0][1]);
+        UNCLAMPED_FLOAT_TO_UBYTE(((GLubyte *)p)[2], col[0][0]);
+        UNCLAMPED_FLOAT_TO_UBYTE(((GLubyte *)p)[3], col[0][3]);
+        p++;
+        STRIDE_4F(col, col_stride);
 #else
         p++;
 #endif
@@ -286,7 +292,7 @@ static void TAG(emit)( GLcontext *ctx,
                      (VIEWPORT_Y( coord[0][1] ) & 0xffff) );   /* VERTEX_?_Y */
            
            if (MACH64_DEBUG & DEBUG_VERBOSE_PRIMS) {
-              fprintf( stderr, "%s: vert (importable) %d: %.2f %.2f %.2f %x\n",
+              fprintf( stderr, "%s: vert %d: %.2f %.2f %.2f %x\n",
                        __FUNCTION__,
                        i,
                        (LE32_IN( p ) >> 16)/4.0,
@@ -297,7 +303,7 @@ static void TAG(emit)( GLcontext *ctx,
         }
 #endif
 #if DO_TEX1 || DO_TEX0 || DO_XYZW
-        coord =  (GLfloat (*)[4])((GLubyte *)coord +  coord_stride);
+        STRIDE_4F(coord, coord_stride);
 #endif
         
         assert( p + 1 - (CARD32 *)v == 10 );
@@ -346,14 +352,14 @@ static void TAG(interp)( GLcontext *ctx,
    LOCALVARS
    struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
    GLubyte *ddverts = GET_VERTEX_STORE();
-   GLuint shift = GET_VERTEX_STRIDE_SHIFT();
+   GLuint size = GET_VERTEX_SIZE();
    const GLfloat *dstclip = VB->ClipPtr->data[edst];
    GLfloat w;
    const GLfloat *s = GET_VIEWPORT_MAT();
 
-   CARD32 *dst = (CARD32 *)(ddverts + (edst << shift));
-   CARD32 *in  = (CARD32 *)(ddverts + (ein  << shift));
-   CARD32 *out = (CARD32 *)(ddverts + (eout << shift));
+   CARD32 *dst = (CARD32 *)(ddverts + (edst * size));
+   CARD32 *in  = (CARD32 *)(ddverts + (ein  * size));
+   CARD32 *out = (CARD32 *)(ddverts + (eout * size));
 
    (void)s;
 
@@ -464,53 +470,33 @@ static void TAG(interp)( GLcontext *ctx,
 #endif /* !DO_TEX0 */
    
 #if DO_SPEC
-   INTERP_UB( t, *(GLubyte *)dst, *(GLubyte *)out, *(GLubyte *)in );   /* VERTEX_?_SPEC_B */
-   ((GLubyte *)dst)++; ((GLubyte *)out)++; ((GLubyte *)in)++;
-
-   INTERP_UB( t, *(GLubyte *)dst, *(GLubyte *)out, *(GLubyte *)in );   /* VERTEX_?_SPEC_G */
-   ((GLubyte *)dst)++; ((GLubyte *)out)++; ((GLubyte *)in)++;
-   
-   INTERP_UB( t, *(GLubyte *)dst, *(GLubyte *)out, *(GLubyte *)in );   /* VERTEX_?_SPEC_R */
-#if DO_FOG
-   ((GLubyte *)dst)++; ((GLubyte *)out)++; ((GLubyte *)in)++;
-#else /* !DO_FOG */
-   ((GLubyte *)dst) += 2; ((GLubyte *)out) += 2; ((GLubyte *)in) += 2;
-#endif /* !DO_FOG */
-#elif DO_FOG
-   ((GLubyte *)dst) += 3; ((GLubyte *)out) += 3; ((GLubyte *)in) += 3;
+   INTERP_UB( t, ((GLubyte *)dst)[0], ((GLubyte *)out)[0], ((GLubyte *)in)[0] );       /* VERTEX_?_SPEC_B */
+   INTERP_UB( t, ((GLubyte *)dst)[1], ((GLubyte *)out)[1], ((GLubyte *)in)[1] );       /* VERTEX_?_SPEC_G */
+   INTERP_UB( t, ((GLubyte *)dst)[2], ((GLubyte *)out)[2], ((GLubyte *)in)[2] );       /* VERTEX_?_SPEC_R */
 #endif
    
 #if DO_FOG
-   INTERP_UB( t, *(GLubyte *)dst, *(GLubyte *)out, *(GLubyte *)in );   /* VERTEX_?_SPEC_A */
-   ((GLubyte *)dst)++; ((GLubyte *)out)++; ((GLubyte *)in)++;
+   INTERP_UB( t, ((GLubyte *)dst)[3], ((GLubyte *)out)[3], ((GLubyte *)in)[3] );       /* VERTEX_?_SPEC_A */
 #endif /* DO_FOG */
 
-#if !DO_SPEC && !DO_FOG
    dst++; out++; in++;
-#endif
 
    LE32_OUT( dst, VIEWPORT_Z( dstclip[2] * w ) );              /* VERTEX_?_Z */
    dst++; out++; in++;
   
-   INTERP_UB( t, *(GLubyte *)dst, *(GLubyte *)out, *(GLubyte *)in );   /* VERTEX_?_B */
-   ((GLubyte *)dst)++; ((GLubyte *)out)++; ((GLubyte *)in)++;
-
-   INTERP_UB( t, *(GLubyte *)dst, *(GLubyte *)out, *(GLubyte *)in );   /* VERTEX_?_G */
-   ((GLubyte *)dst)++; ((GLubyte *)out)++; ((GLubyte *)in)++;
-
-   INTERP_UB( t, *(GLubyte *)dst, *(GLubyte *)out, *(GLubyte *)in );   /* VERTEX_?_R */
-   ((GLubyte *)dst)++; ((GLubyte *)out)++; ((GLubyte *)in)++;
-
-   INTERP_UB( t, *(GLubyte *)dst, *(GLubyte *)out, *(GLubyte *)in );   /* VERTEX_?_A */
-   ((GLubyte *)dst)++; /* ((GLubyte *)out)++; ((GLubyte *)in)++; */
+   INTERP_UB( t, ((GLubyte *)dst)[0], ((GLubyte *)out)[0], ((GLubyte *)in)[0] );       /* VERTEX_?_B */
+   INTERP_UB( t, ((GLubyte *)dst)[1], ((GLubyte *)out)[1], ((GLubyte *)in)[1] );       /* VERTEX_?_G */
+   INTERP_UB( t, ((GLubyte *)dst)[2], ((GLubyte *)out)[2], ((GLubyte *)in)[2] );       /* VERTEX_?_R */
+   INTERP_UB( t, ((GLubyte *)dst)[3], ((GLubyte *)out)[3], ((GLubyte *)in)[3] );       /* VERTEX_?_A */
+   dst++; /*out++; in++;*/
 
    LE32_OUT( dst,
             (VIEWPORT_X( dstclip[0] * w ) << 16) |             /* VERTEX_?_X */
             (VIEWPORT_Y( dstclip[1] * w ) & 0xffff) );         /* VERTEX_?_Y */
 
-   assert( dst + 1 - (CARD32 *)(ddverts + (edst << shift)) == 10 );
-   assert( in  + 2 - (CARD32 *)(ddverts + (ein  << shift)) == 10 );
-   assert( out + 2 - (CARD32 *)(ddverts + (eout << shift)) == 10 );
+   assert( dst + 1 - (CARD32 *)(ddverts + (edst * size)) == 10 );
+   assert( in  + 2 - (CARD32 *)(ddverts + (ein  * size)) == 10 );
+   assert( out + 2 - (CARD32 *)(ddverts + (eout * size)) == 10 );
 
    if (MACH64_DEBUG & DEBUG_VERBOSE_PRIMS) {
       fprintf( stderr, "%s: dst vert: %.2f %.2f %.2f %x\n",
@@ -530,9 +516,9 @@ static void TAG(copy_pv)( GLcontext *ctx, GLuint edst, GLuint esrc )
 #if DO_SPEC || DO_FOG || DO_RGBA
    LOCALVARS   
    GLubyte *verts = GET_VERTEX_STORE();
-   GLuint shift = GET_VERTEX_STRIDE_SHIFT();
-   GLuint *dst = (GLuint *)(verts + (edst << shift));
-   GLuint *src = (GLuint *)(verts + (esrc << shift));
+   GLuint size = GET_VERTEX_SIZE();
+   GLuint *dst = (GLuint *)(verts + (edst * size));
+   GLuint *src = (GLuint *)(verts + (esrc * size));
 #endif
 
 #if DO_SPEC || DO_FOG
@@ -555,30 +541,20 @@ static void TAG(init)( void )
 
    setup_tab[IND].copy_pv = TAG(copy_pv);
 
-   /* vertex_stride_shift must be the same because each
-    * vertex is aligned with the end of the structure and 
-    * not the beginning
-    */
 #if DO_TEX1
    setup_tab[IND].vertex_format = TEX1_VERTEX_FORMAT;
    setup_tab[IND].vertex_size = 10;
-   setup_tab[IND].vertex_stride_shift = 6;
 #elif DO_TEX0
    setup_tab[IND].vertex_format = TEX0_VERTEX_FORMAT;
    setup_tab[IND].vertex_size = 7;
-   setup_tab[IND].vertex_stride_shift = 6;
 #elif DO_SPEC || DO_FOG
    setup_tab[IND].vertex_format = NOTEX_VERTEX_FORMAT;
    setup_tab[IND].vertex_size = 4;
-   setup_tab[IND].vertex_stride_shift = 6;
 #else
    setup_tab[IND].vertex_format = TINY_VERTEX_FORMAT;
    setup_tab[IND].vertex_size = 3;
-   setup_tab[IND].vertex_stride_shift = 6;
 #endif
 
-   assert(setup_tab[IND].vertex_size * 4 <=
-          1 << setup_tab[IND].vertex_stride_shift);
 }