summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/drivers/dri/tdfx/tdfx_context.c10
-rw-r--r--src/mesa/drivers/dri/tdfx/tdfx_context.h5
-rw-r--r--src/mesa/drivers/dri/tdfx/tdfx_tris.c2
-rw-r--r--src/mesa/drivers/dri/tdfx/tdfx_vb.c41
-rw-r--r--src/mesa/drivers/dri/tdfx/tdfx_vbtmp.h143
5 files changed, 38 insertions, 163 deletions
diff --git a/src/mesa/drivers/dri/tdfx/tdfx_context.c b/src/mesa/drivers/dri/tdfx/tdfx_context.c
index f3a719146d8..2bc7de00e96 100644
--- a/src/mesa/drivers/dri/tdfx/tdfx_context.c
+++ b/src/mesa/drivers/dri/tdfx/tdfx_context.c
@@ -91,7 +91,7 @@ static void tdfxDDInitExtensions( GLcontext *ctx )
-static const struct gl_pipeline_stage *tdfx_pipeline[] = {
+static const struct tnl_pipeline_stage *tdfx_pipeline[] = {
&_tnl_vertex_transform_stage,
&_tnl_normal_transform_stage,
&_tnl_lighting_stage, /* REMOVE: fog coord stage */
@@ -346,7 +346,7 @@ tdfxInitContext( __DRIdrawablePrivate *driDrawPriv, tdfxContextPtr fxMesa )
FxI32 result[2];
if ( TDFX_DEBUG & DEBUG_VERBOSE_DRI ) {
- fprintf( stderr, "%s( %p )\n", __FUNCTION__, fxMesa );
+ fprintf( stderr, "%s( %p )\n", __FUNCTION__, (void *)fxMesa );
}
#if DEBUG_LOCKING
@@ -461,7 +461,7 @@ tdfxDestroyContext( __DRIcontextPrivate *driContextPriv )
tdfxContextPtr fxMesa = (tdfxContextPtr) driContextPriv->driverPrivate;
if ( TDFX_DEBUG & DEBUG_VERBOSE_DRI ) {
- fprintf( stderr, "%s( %p )\n", __FUNCTION__, fxMesa );
+ fprintf( stderr, "%s( %p )\n", __FUNCTION__, (void *)fxMesa );
}
if ( fxMesa ) {
@@ -503,7 +503,7 @@ tdfxUnbindContext( __DRIcontextPrivate *driContextPriv )
tdfxContextPtr fxMesa = TDFX_CONTEXT(ctx);
if ( TDFX_DEBUG & DEBUG_VERBOSE_DRI ) {
- fprintf( stderr, "%s( %p )\n", __FUNCTION__, driContextPriv );
+ fprintf( stderr, "%s( %p )\n", __FUNCTION__, (void *)driContextPriv );
}
if ( driContextPriv && (tdfxContextPtr) driContextPriv == fxMesa ) {
@@ -521,7 +521,7 @@ tdfxMakeCurrent( __DRIcontextPrivate *driContextPriv,
__DRIdrawablePrivate *driReadPriv )
{
if ( TDFX_DEBUG & DEBUG_VERBOSE_DRI ) {
- fprintf( stderr, "%s( %p )\n", __FUNCTION__, driContextPriv );
+ fprintf( stderr, "%s( %p )\n", __FUNCTION__, (void *)driContextPriv );
}
if ( driContextPriv ) {
diff --git a/src/mesa/drivers/dri/tdfx/tdfx_context.h b/src/mesa/drivers/dri/tdfx/tdfx_context.h
index 9b0c912769b..4bf813061e0 100644
--- a/src/mesa/drivers/dri/tdfx/tdfx_context.h
+++ b/src/mesa/drivers/dri/tdfx/tdfx_context.h
@@ -868,11 +868,6 @@ struct tdfx_context {
struct tdfx_glide Glide;
-
- /* Temporaries for translating away float colors:
- */
- struct gl_client_array UbyteColor;
-
/* Fallback rasterization functions
*/
tdfx_point_func draw_point;
diff --git a/src/mesa/drivers/dri/tdfx/tdfx_tris.c b/src/mesa/drivers/dri/tdfx/tdfx_tris.c
index bf50d7bca77..131c2f1a0e7 100644
--- a/src/mesa/drivers/dri/tdfx/tdfx_tris.c
+++ b/src/mesa/drivers/dri/tdfx/tdfx_tris.c
@@ -216,7 +216,7 @@ static void tdfx_print_vertex( GLcontext *ctx, const tdfxVertex *v )
{
tdfxContextPtr imesa = TDFX_CONTEXT( ctx );
- fprintf(stderr, "vertex at %p\n", v);
+ fprintf(stderr, "vertex at %p\n", (void *)v);
if (imesa->vertexFormat == TDFX_LAYOUT_TINY) {
fprintf(stderr, "x %f y %f z %f\n", v->v.x, v->v.y, v->v.z);
diff --git a/src/mesa/drivers/dri/tdfx/tdfx_vb.c b/src/mesa/drivers/dri/tdfx/tdfx_vb.c
index de5b9360e0b..3562ead19c4 100644
--- a/src/mesa/drivers/dri/tdfx/tdfx_vb.c
+++ b/src/mesa/drivers/dri/tdfx/tdfx_vb.c
@@ -72,40 +72,9 @@ static struct {
} setup_tab[TDFX_MAX_SETUP];
-static void import_float_colors( GLcontext *ctx )
-{
- struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
- struct gl_client_array *from = VB->ColorPtr[0];
- struct gl_client_array *to = &TDFX_CONTEXT(ctx)->UbyteColor;
- 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);
-
- VB->ColorPtr[0] = to;
-}
-
-
-#define GET_COLOR(ptr, idx) (((GLchan (*)[4])((ptr)->Ptr))[idx])
+#define GET_COLOR(ptr, idx) ((ptr)->data[idx])
static void interp_extras( GLcontext *ctx,
@@ -270,7 +239,7 @@ void tdfxBuildVertices( GLcontext *ctx, GLuint start, GLuint count,
if (!newinputs)
return;
- if (newinputs & VERT_BIT_CLIP) {
+ if (newinputs & VERT_BIT_POS) {
setup_tab[fxMesa->SetupIndex].emit( ctx, start, count, v, stride );
} else {
GLuint ind = 0;
@@ -356,10 +325,4 @@ void tdfxFreeVB( GLcontext *ctx )
ALIGN_FREE(fxMesa->verts);
fxMesa->verts = 0;
}
-
- if (fxMesa->UbyteColor.Ptr) {
- ALIGN_FREE(fxMesa->UbyteColor.Ptr);
- fxMesa->UbyteColor.Ptr = 0;
- }
-
}
diff --git a/src/mesa/drivers/dri/tdfx/tdfx_vbtmp.h b/src/mesa/drivers/dri/tdfx/tdfx_vbtmp.h
index 9925a10eabb..fd693330dad 100644
--- a/src/mesa/drivers/dri/tdfx/tdfx_vbtmp.h
+++ b/src/mesa/drivers/dri/tdfx/tdfx_vbtmp.h
@@ -9,7 +9,7 @@ static void TAG(emit)( GLcontext *ctx,
tdfxContextPtr fxMesa = TDFX_CONTEXT(ctx);
struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
GLfloat (*tc0)[4], (*tc1)[4];
- GLubyte (*col)[4];
+ GLfloat (*col)[4];
GLuint tc0_stride, tc1_stride, col_stride;
GLuint tc0_size, tc1_size;
GLfloat (*proj)[4] = VB->NdcPtr->data;
@@ -43,13 +43,11 @@ static void TAG(emit)( GLcontext *ctx,
}
if (IND & TDFX_RGBA_BIT) {
- if (VB->ColorPtr[0]->Type != GL_UNSIGNED_BYTE)
- import_float_colors( ctx );
- col = VB->ColorPtr[0]->Ptr;
- col_stride = VB->ColorPtr[0]->StrideB;
+ col = VB->ColorPtr[0]->data;
+ col_stride = VB->ColorPtr[0]->stride;
}
- if (VB->importable_data) {
+ {
/* May have nonstandard strides:
*/
if (start) {
@@ -59,7 +57,7 @@ static void TAG(emit)( GLcontext *ctx,
if (IND & TDFX_TEX1_BIT)
tc1 = (GLfloat (*)[4])((GLubyte *)tc1 + start * tc1_stride);
if (IND & TDFX_RGBA_BIT)
- STRIDE_4UB(col, start * col_stride);
+ STRIDE_4F(col, start * col_stride);
}
for (i=start; i < end; i++, v = (tdfxVertex *)((GLubyte *)v + stride)) {
@@ -77,17 +75,12 @@ static void TAG(emit)( GLcontext *ctx,
proj = (GLfloat (*)[4])((GLubyte *)proj + proj_stride);
}
if (IND & TDFX_RGBA_BIT) {
-#if 0
- *(GLuint *)&v->v.color = *(GLuint *)col;
-#else
- GLubyte *b = (GLubyte *) &v->v.color;
- b[0] = col[0][2];
- b[1] = col[0][1];
- b[2] = col[0][0];
- b[3] = col[0][3];
-
-#endif
- STRIDE_4UB(col, col_stride);
+ GLubyte *b = (GLubyte *)&v[4];
+ UNCLAMPED_FLOAT_TO_UBYTE(b[0], col[0][2]);
+ UNCLAMPED_FLOAT_TO_UBYTE(b[1], col[0][1]);
+ UNCLAMPED_FLOAT_TO_UBYTE(b[2], col[0][0]);
+ UNCLAMPED_FLOAT_TO_UBYTE(b[3], col[0][3]);
+ STRIDE_4F(col, col_stride);
}
if (IND & TDFX_TEX0_BIT) {
GLfloat w = v->v.rhw;
@@ -121,60 +114,6 @@ static void TAG(emit)( GLcontext *ctx,
}
}
}
- else {
- for (i=start; i < end; i++, v = (tdfxVertex *)((GLubyte *)v + stride)) {
- if (IND & TDFX_XYZ_BIT) {
- if (mask[i] == 0) {
- v->v.x = s[0] * proj[i][0] + s[12];
- v->v.y = s[5] * proj[i][1] + s[13];
- v->v.z = s[10] * proj[i][2] + s[14];
- v->v.rhw = proj[i][3];
- } else {
- v->v.rhw = 1.0;
- }
- }
- if (IND & TDFX_RGBA_BIT) {
-#if 0
- *(GLuint *)&v->v.color = *(GLuint *)&col[i];
-#else
- GLubyte *b = (GLubyte *) &v->v.color;
- b[0] = col[i][2];
- b[1] = col[i][1];
- b[2] = col[i][0];
- b[3] = col[i][3];
-
-#endif
- }
- if (IND & TDFX_TEX0_BIT) {
- GLfloat w = v->v.rhw;
- if (IND & TDFX_PTEX_BIT) {
- v->pv.tu0 = tc0[i][0] * u0scale * w;
- v->pv.tv0 = tc0[i][1] * v0scale * w;
- v->pv.tq0 = w;
- if (tc0_size == 4)
- v->pv.tq0 = tc0[i][3] * w;
- }
- else {
- v->v.tu0 = tc0[i][0] * u0scale * w;
- v->v.tv0 = tc0[i][1] * v0scale * w;
- }
- }
- if (IND & TDFX_TEX1_BIT) {
- GLfloat w = v->v.rhw;
- if (IND & TDFX_PTEX_BIT) {
- v->pv.tu1 = tc1[i][0] * u1scale * w;
- v->pv.tv1 = tc1[i][1] * v1scale * w;
- v->pv.tq1 = w;
- if (tc1_size == 4)
- v->pv.tq1 = tc1[i][3] * w;
- }
- else {
- v->v.tu1 = tc1[i][0] * u1scale * w;
- v->v.tv1 = tc1[i][1] * v1scale * w;
- }
- }
- }
- }
}
#else
#if (IND & TDFX_XYZ_BIT)
@@ -183,7 +122,7 @@ static void TAG(emit)( GLcontext *ctx, GLuint start, GLuint end,
{
tdfxContextPtr fxMesa = TDFX_CONTEXT(ctx);
struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
- GLubyte (*col)[4];
+ GLfloat (*col)[4];
GLuint col_stride;
GLfloat (*proj)[4] = VB->NdcPtr->data;
GLuint proj_stride = VB->NdcPtr->stride;
@@ -198,20 +137,17 @@ static void TAG(emit)( GLcontext *ctx, GLuint start, GLuint end,
ASSERT(fxMesa->SetupIndex == (TDFX_XYZ_BIT|TDFX_RGBA_BIT));
ASSERT(stride == 16);
- if (VB->ColorPtr[0]->Type != GL_UNSIGNED_BYTE)
- import_float_colors( ctx );
-
- col = (GLubyte (*)[4])VB->ColorPtr[0]->Ptr;
- col_stride = VB->ColorPtr[0]->StrideB;
+ col = VB->ColorPtr[0]->data;
+ col_stride = VB->ColorPtr[0]->stride;
ASSERT(VB->ColorPtr[0]->Type == GL_UNSIGNED_BYTE);
/* Pack what's left into a 4-dword vertex. Color is in a different
* place, and there is no 'w' coordinate.
*/
- if (VB->importable_data) {
+ {
if (start) {
proj = (GLfloat (*)[4])((GLubyte *)proj + start * proj_stride);
- STRIDE_4UB(col, start * col_stride);
+ STRIDE_4F(col, start * col_stride);
}
for (i=start; i < end; i++, v+=4) {
@@ -223,27 +159,11 @@ static void TAG(emit)( GLcontext *ctx, GLuint start, GLuint end,
proj = (GLfloat (*)[4])((GLubyte *)proj + proj_stride);
{
GLubyte *b = (GLubyte *)&v[3];
- b[0] = col[0][2];
- b[1] = col[0][1];
- b[2] = col[0][0];
- b[3] = col[0][3];
- STRIDE_4UB(col, col_stride);
- }
- }
- }
- else {
- for (i=start; i < end; i++, v+=4) {
- if (mask[i] == 0) {
- v[0] = s[0] * proj[i][0] + s[12];
- v[1] = s[5] * proj[i][1] + s[13];
- v[2] = s[10] * proj[i][2] + s[14];
- }
- {
- GLubyte *b = (GLubyte *)&v[3];
- b[0] = col[i][2];
- b[1] = col[i][1];
- b[2] = col[i][0];
- b[3] = col[i][3];
+ UNCLAMPED_FLOAT_TO_UBYTE(b[0], col[0][2]);
+ UNCLAMPED_FLOAT_TO_UBYTE(b[1], col[0][1]);
+ UNCLAMPED_FLOAT_TO_UBYTE(b[2], col[0][0]);
+ UNCLAMPED_FLOAT_TO_UBYTE(b[3], col[0][3]);
+ STRIDE_4F(col, col_stride);
}
}
}
@@ -254,19 +174,16 @@ static void TAG(emit)( GLcontext *ctx, GLuint start, GLuint end,
{
tdfxContextPtr fxMesa = TDFX_CONTEXT(ctx);
struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
- GLubyte (*col)[4];
+ GLfloat (*col)[4];
GLuint col_stride;
GLfloat *v = (GLfloat *)dest;
int i;
- if (VB->ColorPtr[0]->Type != GL_UNSIGNED_BYTE)
- import_float_colors( ctx );
-
- col = VB->ColorPtr[0]->Ptr;
- col_stride = VB->ColorPtr[0]->StrideB;
+ col = VB->ColorPtr[0]->data;
+ col_stride = VB->ColorPtr[0]->stride;
if (start)
- STRIDE_4UB(col, col_stride * start);
+ STRIDE_4F(col, col_stride * start);
/* Need to figure out where color is:
*/
@@ -277,11 +194,11 @@ static void TAG(emit)( GLcontext *ctx, GLuint start, GLuint end,
for (i=start; i < end; i++, STRIDE_F(v, stride)) {
GLubyte *b = (GLubyte *)v;
- b[0] = col[0][2];
- b[1] = col[0][1];
- b[2] = col[0][0];
- b[3] = col[0][3];
- STRIDE_4UB( col, col_stride );
+ UNCLAMPED_FLOAT_TO_UBYTE(b[0], col[0][2]);
+ UNCLAMPED_FLOAT_TO_UBYTE(b[1], col[0][1]);
+ UNCLAMPED_FLOAT_TO_UBYTE(b[2], col[0][0]);
+ UNCLAMPED_FLOAT_TO_UBYTE(b[3], col[0][3]);
+ STRIDE_4F(col, col_stride);
}
}
#endif