OSDN Git Service

remove vertex_stride_shift, fix up code to not need it
authorDave Airlie <airliedfreedesktop.org>
Thu, 12 Feb 2004 11:52:38 +0000 (11:52 +0000)
committerDave Airlie <airliedfreedesktop.org>
Thu, 12 Feb 2004 11:52:38 +0000 (11:52 +0000)
src/mesa/drivers/dri/mach64/mach64_native_vbtmp.h
src/mesa/drivers/dri/mach64/mach64_tris.c
src/mesa/drivers/dri/mach64/mach64_vb.c
src/mesa/drivers/dri/mach64/mach64_vbtmp.h

index b924bcc..623e1ea 100644 (file)
@@ -355,7 +355,6 @@ 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;
@@ -540,9 +539,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
@@ -565,30 +564,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);
 }
 
 
index 64f69d2..83ed6e3 100644 (file)
@@ -1314,21 +1314,21 @@ do {                                            \
 #define VERT_Y(_v) _v->v.y
 #define VERT_Z(_v) _v->v.z
 #define AREA_IS_CCW( a ) (a > 0)
-#define GET_VERTEX(e) (mmesa->verts + (e<<mmesa->vertex_stride_shift))
+#define GET_VERTEX(e) (mmesa->verts + ((e) * mmesa->vertex_size * sizeof(int)))
 
 #define MACH64_COLOR( dst, src )                \
 do {                                           \
-   dst[0] = src[2];                            \
-   dst[1] = src[1];                            \
-   dst[2] = src[0];                            \
-   dst[3] = src[3];                            \
+   UNCLAMPED_FLOAT_TO_UBYTE(dst[0], src[2]);   \
+   UNCLAMPED_FLOAT_TO_UBYTE(dst[1], src[1]);                           \
+   UNCLAMPED_FLOAT_TO_UBYTE(dst[2], src[0]);                           \
+   UNCLAMPED_FLOAT_TO_UBYTE(dst[3], src[3]);                           \
 } while (0)
 
 #define MACH64_SPEC( dst, src )                        \
 do {                                           \
-   dst[0] = src[2];                            \
-   dst[1] = src[1];                            \
-   dst[2] = src[0];                            \
+   UNCLAMPED_FLOAT_TO_UBYTE(dst[0], src[2]);   \
+   UNCLAMPED_FLOAT_TO_UBYTE(dst[1], src[1]);   \
+   UNCLAMPED_FLOAT_TO_UBYTE(dst[2], src[0]);   \
 } while (0)
 
 #define VERT_SET_RGBA( v, c )    MACH64_COLOR( v->ub4[coloroffset], c )
@@ -1674,7 +1674,6 @@ static void mach64FastRenderClippedPoly( GLcontext *ctx, const GLuint *elts,
 {
    mach64ContextPtr mmesa = MACH64_CONTEXT( ctx );
    GLubyte *mach64verts = (GLubyte *)mmesa->verts;
-   const GLuint shift = mmesa->vertex_stride_shift;
    const GLuint *start = (const GLuint *)VERT(elts[0]);
    int i;
 
index 254dd27..7e23006 100644 (file)
@@ -60,7 +60,6 @@ static struct {
    copy_pv_func                copy_pv;
    GLboolean           (*check_tex_sizes)( GLcontext *ctx );
    GLuint               vertex_size;
-   GLuint               vertex_stride_shift;
    GLuint               vertex_format;
 } setup_tab[MACH64_MAX_SETUP];
 
@@ -89,7 +88,7 @@ static struct {
 #define GET_TEXSOURCE(n)  mmesa->tmu_source[n]
 #define GET_VERTEX_FORMAT() mmesa->vertex_format
 #define GET_VERTEX_STORE() mmesa->verts
-#define GET_VERTEX_STRIDE_SHIFT() mmesa->vertex_stride_shift
+#define GET_VERTEX_SIZE() mmesa->vertex_size * sizeof(GLuint)
 
 #define HAVE_HW_VIEWPORT    0
 #define HAVE_HW_DIVIDE      0
@@ -519,8 +518,8 @@ void mach64BuildVertices( GLcontext *ctx,
                        GLuint newinputs )
 {
    mach64ContextPtr mmesa = MACH64_CONTEXT( ctx );
-   GLubyte *v = ((GLubyte *)mmesa->verts + (start<<mmesa->vertex_stride_shift));
-   GLuint stride = 1<<mmesa->vertex_stride_shift;
+   GLuint stride = mmesa->vertex_size * sizeof(int);
+   GLubyte *v = ((GLubyte *)mmesa->verts + (start * stride));
 
    newinputs |= mmesa->SetupNewInputs;
    mmesa->SetupNewInputs = 0;
@@ -599,7 +598,6 @@ void mach64ChooseVertexState( GLcontext *ctx )
       FLUSH_BATCH(mmesa);
       mmesa->vertex_format = setup_tab[ind].vertex_format;
       mmesa->vertex_size = setup_tab[ind].vertex_size;
-      mmesa->vertex_stride_shift = setup_tab[ind].vertex_stride_shift;
    }
 }
 
index 590af1b..b216a2d 100644 (file)
@@ -668,14 +668,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;
 
@@ -840,12 +840,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) {
@@ -853,12 +851,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) {
@@ -866,41 +862,32 @@ 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);
 }