From: Keith Whitwell Date: Fri, 13 May 2005 09:15:50 +0000 (+0000) Subject: Calculate render inputs for tcl stage correctly (hint: they aren't the X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=846eb333aee2eeece35a6ec2f8ac8b40e99c5fcd;p=mesa.git Calculate render inputs for tcl stage correctly (hint: they aren't the same as tnl->render_inputs). Fixes recent tcl problems. --- diff --git a/src/mesa/drivers/dri/r200/r200_tcl.c b/src/mesa/drivers/dri/r200/r200_tcl.c index 335af125944..fbce05f9282 100644 --- a/src/mesa/drivers/dri/r200/r200_tcl.c +++ b/src/mesa/drivers/dri/r200/r200_tcl.c @@ -370,6 +370,7 @@ static GLboolean r200_run_tcl_render( GLcontext *ctx, r200ContextPtr rmesa = R200_CONTEXT(ctx); TNLcontext *tnl = TNL_CONTEXT(ctx); struct vertex_buffer *VB = &tnl->vb; + GLuint inputs = VERT_BIT_POS | VERT_BIT_COLOR0; GLuint i; /* TODO: separate this from the swtnl pipeline @@ -383,8 +384,38 @@ static GLboolean r200_run_tcl_render( GLcontext *ctx, if (VB->Count == 0) return GL_FALSE; + /* Validate state: + */ + if (rmesa->NewGLState) + r200ValidateState( ctx ); + + /* NOTE: inputs != tnl->render_inputs - these are the untransformed + * inputs. + */ + if (ctx->Light.Enabled) { + inputs |= VERT_BIT_NORMAL; + if (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR) { + inputs |= VERT_BIT_COLOR1; + } + } + + if ( ctx->Fog.FogCoordinateSource == GL_FOG_COORD ) { + inputs |= VERT_BIT_FOG; + } + + for (i = 0 ; i < ctx->Const.MaxTextureUnits; i++) { + if (ctx->Texture.Unit[i]._ReallyEnabled) { + if (rmesa->TexGenNeedNormals[i]) { + inputs |= VERT_BIT_NORMAL; + } + inputs |= VERT_BIT_TEX(i); + } + } + + /* Do the actual work: + */ r200ReleaseArrays( ctx, ~0 /* stage->changed_inputs */ ); - r200EmitArrays( ctx, tnl->render_inputs ); + r200EmitArrays( ctx, inputs ); rmesa->tcl.Elts = VB->Elts;