From 37a94995cfa062d41b311e035f65af980bf57bec Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Wed, 9 Jun 2004 02:29:22 +0000 Subject: fix bug with emitting spec/fog report by Eric Anholt, this isn't the prettiest fix but it does work --- src/mesa/drivers/dri/i830/i830_tris.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'src/mesa/drivers/dri/i830') diff --git a/src/mesa/drivers/dri/i830/i830_tris.c b/src/mesa/drivers/dri/i830/i830_tris.c index 6dcaa73f18..8421897cfe 100644 --- a/src/mesa/drivers/dri/i830/i830_tris.c +++ b/src/mesa/drivers/dri/i830/i830_tris.c @@ -731,6 +731,7 @@ static void i830RenderStart( GLcontext *ctx ) GLuint index = tnl->render_inputs; GLuint v0 = STATE3D_VERTEX_FORMAT_CMD; GLuint v2 = STATE3D_VERTEX_FORMAT_2_CMD; + GLuint force_emit = 0; /* Important: */ @@ -750,15 +751,31 @@ static void i830RenderStart( GLcontext *ctx ) EMIT_ATTR( _TNL_ATTRIB_COLOR0, EMIT_4UB_4F_BGRA, VRTX_HAS_DIFFUSE ); if (index & (_TNL_BIT_COLOR1|_TNL_BIT_FOG)) { + if (index & _TNL_BIT_COLOR1) + { + if (imesa->vertex_attrs[imesa->vertex_attr_count].format != EMIT_3UB_3F_BGR) + force_emit=1; EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_3UB_3F_BGR, VRTX_HAS_SPEC ); + } else + { + if (imesa->vertex_attrs[imesa->vertex_attr_count].format != EMIT_PAD) + force_emit=1; EMIT_PAD( 3 ); - + } if (index & _TNL_BIT_FOG) + { + if (imesa->vertex_attrs[imesa->vertex_attr_count].format != EMIT_1UB_1F) + force_emit=1; EMIT_ATTR( _TNL_ATTRIB_FOG, EMIT_1UB_1F, VRTX_HAS_SPEC ); + } else + { + if (imesa->vertex_attrs[imesa->vertex_attr_count].format != EMIT_PAD) + force_emit=1; EMIT_PAD( 1 ); + } } if (index & _TNL_BITS_TEX_ANY) { @@ -807,7 +824,8 @@ static void i830RenderStart( GLcontext *ctx ) * statechange to a new hardware vertex format: */ if (v0 != imesa->Setup[I830_CTXREG_VF] || - v2 != imesa->Setup[I830_CTXREG_VF2] ) { + v2 != imesa->Setup[I830_CTXREG_VF2] || + force_emit == 1) { I830_STATECHANGE( imesa, I830_UPLOAD_CTX ); -- cgit v1.2.3