{
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));
dst[4] = src[4];
dst[5] = src[5];
}
{
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));
dst[4] = src[4];
}
{
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));
dst[3] = src[3];
}
if (format == TINY_VERTEX_FORMAT) {
if (HAVE_HW_VIEWPORT) {
- dst->win[0] = s[0] * src->v.x + s[12];
- dst->win[1] = s[5] * src->v.y + s[13];
- dst->win[2] = s[10] * src->v.z + s[14];
- dst->win[3] = 1.0;
+ dst->attrib[FRAG_ATTRIB_WPOS][0] = s[0] * src->v.x + s[12];
+ dst->attrib[FRAG_ATTRIB_WPOS][1] = s[5] * src->v.y + s[13];
+ dst->attrib[FRAG_ATTRIB_WPOS][2] = s[10] * src->v.z + s[14];
+ dst->attrib[FRAG_ATTRIB_WPOS][3] = 1.0;
} else {
- dst->win[0] = UNVIEWPORT_X( src->v.x );
- dst->win[1] = UNVIEWPORT_Y( src->v.y );
- dst->win[2] = UNVIEWPORT_Z( src->v.z );
- dst->win[3] = 1.0;
+ dst->attrib[FRAG_ATTRIB_WPOS][0] = UNVIEWPORT_X( src->v.x );
+ dst->attrib[FRAG_ATTRIB_WPOS][1] = UNVIEWPORT_Y( src->v.y );
+ dst->attrib[FRAG_ATTRIB_WPOS][2] = UNVIEWPORT_Z( src->v.z );
+ dst->attrib[FRAG_ATTRIB_WPOS][3] = 1.0;
}
dst->color[0] = src->tv.color.red;
if (HAVE_HW_VIEWPORT) {
if (HAVE_HW_DIVIDE && CHECK_HW_DIVIDE) {
GLfloat oow = 1.0 / src->v.w;
- dst->win[0] = s[0] * src->v.x * oow + s[12];
- dst->win[1] = s[5] * src->v.y * oow + s[13];
- dst->win[2] = s[10] * src->v.z * oow + s[14];
- dst->win[3] = oow;
+ dst->attrib[FRAG_ATTRIB_WPOS][0] = s[0] * src->v.x * oow + s[12];
+ dst->attrib[FRAG_ATTRIB_WPOS][1] = s[5] * src->v.y * oow + s[13];
+ dst->attrib[FRAG_ATTRIB_WPOS][2] = s[10] * src->v.z * oow + s[14];
+ dst->attrib[FRAG_ATTRIB_WPOS][3] = oow;
} else {
- dst->win[0] = s[0] * src->v.x + s[12];
- dst->win[1] = s[5] * src->v.y + s[13];
- dst->win[2] = s[10] * src->v.z + s[14];
- dst->win[3] = src->v.w;
+ dst->attrib[FRAG_ATTRIB_WPOS][0] = s[0] * src->v.x + s[12];
+ dst->attrib[FRAG_ATTRIB_WPOS][1] = s[5] * src->v.y + s[13];
+ dst->attrib[FRAG_ATTRIB_WPOS][2] = s[10] * src->v.z + s[14];
+ dst->attrib[FRAG_ATTRIB_WPOS][3] = src->v.w;
}
} else {
- dst->win[0] = UNVIEWPORT_X( src->v.x );
- dst->win[1] = UNVIEWPORT_Y( src->v.y );
- dst->win[2] = UNVIEWPORT_Z( src->v.z );
- dst->win[3] = src->v.w;
+ dst->attrib[FRAG_ATTRIB_WPOS][0] = UNVIEWPORT_X( src->v.x );
+ dst->attrib[FRAG_ATTRIB_WPOS][1] = UNVIEWPORT_Y( src->v.y );
+ dst->attrib[FRAG_ATTRIB_WPOS][2] = UNVIEWPORT_Z( src->v.z );
+ dst->attrib[FRAG_ATTRIB_WPOS][3] = src->v.w;
}
dst->color[0] = src->v.color.red;
dst->color[2] = src->v.color.blue;
dst->color[3] = src->v.color.alpha;
- dst->specular[0] = src->v.specular.red;
- dst->specular[1] = src->v.specular.green;
- dst->specular[2] = src->v.specular.blue;
+ dst->attrib[FRAG_ATTRIB_COL1][0] = UBYTE_TO_FLOAT(src->v.specular.red);
+ dst->attrib[FRAG_ATTRIB_COL1][1] = UBYTE_TO_FLOAT(src->v.specular.green);
+ dst->attrib[FRAG_ATTRIB_COL1][2] = UBYTE_TO_FLOAT(src->v.specular.blue);
- dst->fog = src->v.specular.alpha/255.0;
+ dst->attrib[FRAG_ATTRIB_FOGC][0] = UBYTE_TO_FLOAT(src->v.specular.alpha);
if (HAVE_PTEX_VERTICES &&
((HAVE_TEX2_VERTICES && format == PROJ_TEX3_VERTEX_FORMAT) ||
(format == PROJ_TEX1_VERTEX_FORMAT))) {
- dst->texcoord[0][0] = src->pv.u0;
- dst->texcoord[0][1] = src->pv.v0;
- dst->texcoord[0][3] = src->pv.q0;
+ dst->attrib[FRAG_ATTRIB_TEX0][0] = src->pv.u0;
+ dst->attrib[FRAG_ATTRIB_TEX0][1] = src->pv.v0;
+ dst->attrib[FRAG_ATTRIB_TEX0][3] = src->pv.q0;
- dst->texcoord[1][0] = src->pv.u1;
- dst->texcoord[1][1] = src->pv.v1;
- dst->texcoord[1][3] = src->pv.q1;
+ dst->attrib[FRAG_ATTRIB_TEX1][0] = src->pv.u1;
+ dst->attrib[FRAG_ATTRIB_TEX1][1] = src->pv.v1;
+ dst->attrib[FRAG_ATTRIB_TEX1][3] = src->pv.q1;
if (HAVE_TEX2_VERTICES) {
- dst->texcoord[2][0] = src->pv.u2;
- dst->texcoord[2][1] = src->pv.v2;
- dst->texcoord[2][3] = src->pv.q2;
+ dst->attrib[FRAG_ATTRIB_TEX2][0] = src->pv.u2;
+ dst->attrib[FRAG_ATTRIB_TEX2][1] = src->pv.v2;
+ dst->attrib[FRAG_ATTRIB_TEX2][3] = src->pv.q2;
}
if (HAVE_TEX3_VERTICES) {
- dst->texcoord[3][0] = src->pv.u3;
- dst->texcoord[3][1] = src->pv.v3;
- dst->texcoord[3][3] = src->pv.q3;
+ dst->attrib[FRAG_ATTRIB_TEX3][0] = src->pv.u3;
+ dst->attrib[FRAG_ATTRIB_TEX3][1] = src->pv.v3;
+ dst->attrib[FRAG_ATTRIB_TEX3][3] = src->pv.q3;
}
}
else {
- dst->texcoord[0][0] = src->v.u0;
- dst->texcoord[0][1] = src->v.v0;
- dst->texcoord[0][3] = 1.0;
+ dst->attrib[FRAG_ATTRIB_TEX0][0] = src->v.u0;
+ dst->attrib[FRAG_ATTRIB_TEX0][1] = src->v.v0;
+ dst->attrib[FRAG_ATTRIB_TEX0][3] = 1.0;
- dst->texcoord[1][0] = src->v.u1;
- dst->texcoord[1][1] = src->v.v1;
- dst->texcoord[1][3] = 1.0;
+ dst->attrib[FRAG_ATTRIB_TEX1][0] = src->v.u1;
+ dst->attrib[FRAG_ATTRIB_TEX1][1] = src->v.v1;
+ dst->attrib[FRAG_ATTRIB_TEX1][3] = 1.0;
if (HAVE_TEX2_VERTICES) {
- dst->texcoord[2][0] = src->v.u2;
- dst->texcoord[2][1] = src->v.v2;
- dst->texcoord[2][3] = 1.0;
+ dst->attrib[FRAG_ATTRIB_TEX2][0] = src->v.u2;
+ dst->attrib[FRAG_ATTRIB_TEX2][1] = src->v.v2;
+ dst->attrib[FRAG_ATTRIB_TEX2][3] = 1.0;
}
if (HAVE_TEX3_VERTICES) {
- dst->texcoord[3][0] = src->v.u3;
- dst->texcoord[3][1] = src->v.v3;
- dst->texcoord[3][3] = 1.0;
+ dst->attrib[FRAG_ATTRIB_TEX3][0] = src->v.u3;
+ dst->attrib[FRAG_ATTRIB_TEX3][1] = src->v.v3;
+ dst->attrib[FRAG_ATTRIB_TEX3][3] = 1.0;
}
}
}
- dst->pointSize = ctx->Point._Size;
+ dst->pointSize = ctx->Point.Size;
}
fprintf(stderr, "\n");
}
-static void do_import( struct vertex_buffer *VB,
- struct gl_client_array *to,
- struct gl_client_array *from )
-{
- GLuint count = VB->Count;
-
- if (!to->Ptr) {
- to->Ptr = ALIGN_MALLOC( VB->Size * 4 * sizeof(GLubyte), 32 );
- to->Type = GL_UNSIGNED_BYTE;
- }
-
- /* No need to transform the same value 3000 times.
- */
- if (!from->StrideB) {
- to->StrideB = 0;
- count = 1;
- }
- else
- to->StrideB = 4 * sizeof(GLubyte);
-
- _math_trans_4ub( (GLubyte (*)[4]) to->Ptr,
- from->Ptr,
- from->StrideB,
- from->Type,
- from->Size,
- 0,
- count);
-}
-
-#ifndef IMPORT_QUALIFIER
-#define IMPORT_QUALIFIER static
-#endif
-
-IMPORT_QUALIFIER void TAG(import_float_colors)( GLcontext *ctx )
-{
- LOCALVARS
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
- struct gl_client_array *to = GET_UBYTE_COLOR_STORE();
- do_import( VB, to, VB->ColorPtr[0] );
- VB->ColorPtr[0] = to;
-}
-IMPORT_QUALIFIER void TAG(import_float_spec_colors)( GLcontext *ctx )
-{
- LOCALVARS
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
- struct gl_client_array *to = GET_UBYTE_SPEC_COLOR_STORE();
- do_import( VB, to, VB->SecondaryColorPtr[0] );
- VB->SecondaryColorPtr[0] = to;
-}
/* Interpolate the elements of the VB not included in typical hardware
* vertices.
#define INTERP_QUALIFIER static
#endif
-#define GET_COLOR(ptr, idx) (((GLchan (*)[4])((ptr)->Ptr))[idx])
+#define GET_COLOR(ptr, idx) ((ptr)->data[idx])
INTERP_QUALIFIER void TAG(interp_extras)( GLcontext *ctx,
struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
if (VB->ColorPtr[1]) {
- INTERP_4CHAN( t,
+ assert(VB->ColorPtr[1]->stride == 4 * sizeof(GLfloat));
+
+ INTERP_4F( t,
GET_COLOR(VB->ColorPtr[1], dst),
GET_COLOR(VB->ColorPtr[1], out),
GET_COLOR(VB->ColorPtr[1], in) );
if (VB->SecondaryColorPtr[1]) {
- INTERP_3CHAN( t,
+ INTERP_3F( t,
GET_COLOR(VB->SecondaryColorPtr[1], dst),
GET_COLOR(VB->SecondaryColorPtr[1], out),
GET_COLOR(VB->SecondaryColorPtr[1], in) );
struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
if (VB->ColorPtr[1]) {
- COPY_CHAN4( GET_COLOR(VB->ColorPtr[1], dst),
- GET_COLOR(VB->ColorPtr[1], src) );
+ COPY_4FV( GET_COLOR(VB->ColorPtr[1], dst),
+ GET_COLOR(VB->ColorPtr[1], src) );
if (VB->SecondaryColorPtr[1]) {
- COPY_CHAN4( GET_COLOR(VB->SecondaryColorPtr[1], dst),
- GET_COLOR(VB->SecondaryColorPtr[1], src) );
+ COPY_4FV( GET_COLOR(VB->SecondaryColorPtr[1], dst),
+ GET_COLOR(VB->SecondaryColorPtr[1], src) );
}
}
#undef INTERP_QUALIFIER
-#undef IMPORT_QUALIFIER
#undef GET_COLOR
#undef IND