Merge branch 'gallium-0.1' into gallium-tex-surfaces
[mesa.git] / src / mesa / tnl_dd / t_dd_vbtmp.h
index 14b4a28651abfe926e0135ca33ae41863415958d..92dd8931c33b710e3e0e9e58222fd5560a4bc0b9 100644 (file)
@@ -129,7 +129,7 @@ static void TAG(emit)( GLcontext *ctx,
    GLfloat (*col)[4], (*spec)[4];
    GLuint tc0_stride, tc1_stride, col_stride, spec_stride, fog_stride;
    GLuint tc2_stride, tc3_stride;
-   GLuint tc0_size, tc1_size;
+   GLuint tc0_size, tc1_size, col_size;
    GLuint tc2_size, tc3_size;
    GLfloat (*coord)[4];
    GLuint coord_stride;
@@ -186,6 +186,7 @@ static void TAG(emit)( GLcontext *ctx,
    if (DO_RGBA) {
       col_stride = VB->ColorPtr[0]->stride;
       col = VB->ColorPtr[0]->data;
+      col_size = VB->ColorPtr[0]->size;
    }
 
    if (DO_SPEC) {
@@ -244,7 +245,11 @@ static void TAG(emit)( GLcontext *ctx,
         UNCLAMPED_FLOAT_TO_UBYTE(v->v.color.red, col[0][0]);
         UNCLAMPED_FLOAT_TO_UBYTE(v->v.color.green, col[0][1]);
         UNCLAMPED_FLOAT_TO_UBYTE(v->v.color.blue, col[0][2]);
-        UNCLAMPED_FLOAT_TO_UBYTE(v->v.color.alpha, col[0][3]);
+        if (col_size == 4) {
+           UNCLAMPED_FLOAT_TO_UBYTE(v->v.color.alpha, col[0][3]);
+        } else {
+           v->v.color.alpha = CHAN_MAX;
+        }
         STRIDE_4F(col, col_stride);
       }
       if (DO_SPEC) {
@@ -339,7 +344,7 @@ static void TAG(emit)( GLcontext *ctx, GLuint start, GLuint end,
    LOCALVARS
       struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
    GLfloat (*col)[4];
-   GLuint col_stride;
+   GLuint col_stride, col_size;
    GLfloat (*coord)[4] = VB->NdcPtr->data;
    GLuint coord_stride = VB->NdcPtr->stride;
    GLfloat *v = (GLfloat *)dest;
@@ -353,6 +358,7 @@ static void TAG(emit)( GLcontext *ctx, GLuint start, GLuint end,
 
    col = VB->ColorPtr[0]->data;
    col_stride = VB->ColorPtr[0]->stride;
+   col_size = VB->ColorPtr[0]->size;
 
 /*     fprintf(stderr, "%s(small) importable %x\n",  */
 /*        __FUNCTION__, VB->importable_data); */
@@ -379,7 +385,11 @@ static void TAG(emit)( GLcontext *ctx, GLuint start, GLuint end,
         UNCLAMPED_FLOAT_TO_UBYTE(c->red, col[0][0]);
         UNCLAMPED_FLOAT_TO_UBYTE(c->green, col[0][1]);
         UNCLAMPED_FLOAT_TO_UBYTE(c->blue, col[0][2]);
-        UNCLAMPED_FLOAT_TO_UBYTE(c->alpha, col[0][3]);
+        if (col_size == 4) {
+           UNCLAMPED_FLOAT_TO_UBYTE(c->alpha, col[0][3]);
+        } else {
+           c->alpha = CHAN_MAX;
+        }
         STRIDE_4F( col, col_stride );
       }
 /*      fprintf(stderr, "vert %d: %.2f %.2f %.2f %x\n",  */
@@ -470,14 +480,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();
 
-   VERTEX *dst = (VERTEX *)(ddverts + (edst << shift));
-   VERTEX *in  = (VERTEX *)(ddverts + (ein << shift));
-   VERTEX *out = (VERTEX *)(ddverts + (eout << shift));
+   VERTEX *dst = (VERTEX *)(ddverts + (edst * size));
+   VERTEX *in  = (VERTEX *)(ddverts + (ein * size));
+   VERTEX *out = (VERTEX *)(ddverts + (eout * size));
 
    (void)s;
 
@@ -611,12 +621,10 @@ static void TAG(init)( void )
         ASSERT(HAVE_PTEX_VERTICES);
         setup_tab[IND].vertex_format = PROJ_TEX3_VERTEX_FORMAT;
         setup_tab[IND].vertex_size = 18;
-        setup_tab[IND].vertex_stride_shift = 7;
       }
       else {
         setup_tab[IND].vertex_format = TEX3_VERTEX_FORMAT;
         setup_tab[IND].vertex_size = 14;
-        setup_tab[IND].vertex_stride_shift = 6;
       }
    }
    else if (DO_TEX2) {
@@ -624,12 +632,10 @@ static void TAG(init)( void )
         ASSERT(HAVE_PTEX_VERTICES);
         setup_tab[IND].vertex_format = PROJ_TEX3_VERTEX_FORMAT;
         setup_tab[IND].vertex_size = 18;
-        setup_tab[IND].vertex_stride_shift = 7;
       }
       else {
         setup_tab[IND].vertex_format = TEX2_VERTEX_FORMAT;
         setup_tab[IND].vertex_size = 12;
-        setup_tab[IND].vertex_stride_shift = 6;
       }
    }
    else if (DO_TEX1) {
@@ -637,41 +643,31 @@ static void TAG(init)( void )
         ASSERT(HAVE_PTEX_VERTICES);
         setup_tab[IND].vertex_format = PROJ_TEX1_VERTEX_FORMAT;
         setup_tab[IND].vertex_size = 12;
-        setup_tab[IND].vertex_stride_shift = 6;
       }
       else {
         setup_tab[IND].vertex_format = TEX1_VERTEX_FORMAT;
         setup_tab[IND].vertex_size = 10;
-        setup_tab[IND].vertex_stride_shift = 6;
       }
    }
    else if (DO_TEX0) {
       if (DO_PTEX && HAVE_PTEX_VERTICES) {
         setup_tab[IND].vertex_format = PROJ_TEX1_VERTEX_FORMAT;
         setup_tab[IND].vertex_size = 12;
-        setup_tab[IND].vertex_stride_shift = 6;
       } else {
         setup_tab[IND].vertex_format = TEX0_VERTEX_FORMAT;
         setup_tab[IND].vertex_size = 8;
-        setup_tab[IND].vertex_stride_shift = 5;
       }
    }
    else if (!HAVE_HW_DIVIDE && !DO_SPEC && !DO_FOG && HAVE_TINY_VERTICES) {
       setup_tab[IND].vertex_format = TINY_VERTEX_FORMAT;
       setup_tab[IND].vertex_size = 4;
-      setup_tab[IND].vertex_stride_shift = 4;
    } else if (HAVE_NOTEX_VERTICES) {
       setup_tab[IND].vertex_format = NOTEX_VERTEX_FORMAT;
       setup_tab[IND].vertex_size = 6;
-      setup_tab[IND].vertex_stride_shift = 5;
    } else {
       setup_tab[IND].vertex_format = TEX0_VERTEX_FORMAT;
       setup_tab[IND].vertex_size = 8;
-      setup_tab[IND].vertex_stride_shift = 5;
    }
-
-   assert(setup_tab[IND].vertex_size * 4 <=
-          1 << setup_tab[IND].vertex_stride_shift);
 }