Index: Mesa/src/mesa/drivers/dri/r200/r200_swtcl.c =================================================================== RCS file: /cvs/mesa/Mesa/src/mesa/drivers/dri/r200/r200_swtcl.c,v retrieving revision 1.21 diff -u -r1.21 r200_swtcl.c --- Mesa/src/mesa/drivers/dri/r200/r200_swtcl.c 23 Nov 2004 18:49:18 -0000 1.21 +++ Mesa/src/mesa/drivers/dri/r200/r200_swtcl.c 2 Jan 2005 02:56:58 -0000 @@ -110,6 +110,16 @@ EMIT_ATTR( _TNL_ATTRIB_POS, EMIT_4F, R200_VTX_XY | R200_VTX_Z0 | R200_VTX_W0 ); offset = 4; } + else if (index & _TNL_BITS_TEX_ANY) { /* for projtex */ + GLuint vap = rmesa->hw.vap.cmd[VAP_SE_VAP_CNTL]; + vap &= ~R200_VAP_FORCE_W_TO_ONE; + if (vap != rmesa->hw.vap.cmd[VAP_SE_VAP_CNTL]) { + R200_STATECHANGE( rmesa, vap ); + rmesa->hw.vap.cmd[VAP_SE_VAP_CNTL] = vap; + } + EMIT_ATTR( _TNL_ATTRIB_POS, EMIT_4F, R200_VTX_XY | R200_VTX_Z0 | R200_VTX_W0 ); + offset = 4; + } else { EMIT_ATTR( _TNL_ATTRIB_POS, EMIT_3F, R200_VTX_XY | R200_VTX_Z0 ); offset = 3; @@ -226,15 +236,26 @@ /* HW perspective divide is a win, but tiny vertex formats are a * bigger one. */ + + /* FIXME: the old code did check only for TINY_VERTEX_FORMAT */ + /* and not for (x==TINY_VERTEX_FORMAT || x==NOTEX_VERTEX_FORMAT) */ + /* */ + /* Question: Is the w component necessary for specular color ? */ +#if 1 + if ( ((tnl->render_inputs & (_TNL_BITS_TEX_ANY|_TNL_BIT_COLOR1) ) == 0) +#else if ( ((tnl->render_inputs & _TNL_BITS_TEX_ANY) == 0) +#endif || (ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED))) { rmesa->swtcl.needproj = GL_TRUE; vte |= R200_VTX_XY_FMT | R200_VTX_Z_FMT; + vte &= ~R200_VTX_W0_FMT; vap |= R200_VAP_FORCE_W_TO_ONE; } else { rmesa->swtcl.needproj = GL_FALSE; vte &= ~(R200_VTX_XY_FMT | R200_VTX_Z_FMT); + vte |= R200_VTX_W0_FMT; vap &= ~R200_VAP_FORCE_W_TO_ONE; }