static void transition_to_swtnl( struct gl_context *ctx ) { r200ContextPtr rmesa = R200_CONTEXT(ctx); TNLcontext *tnl = TNL_CONTEXT(ctx); R200_NEWPRIM( rmesa ); r200ChooseVertexState( ctx ); r200ChooseRenderState( ctx ); _tnl_validate_shine_tables( ctx ); tnl->Driver.NotifyMaterialChange = _tnl_validate_shine_tables; radeonReleaseArrays( ctx, ~0 ); /* Still using the D3D based hardware-rasterizer from the radeon; * need to put the card into D3D mode to make it work: */ R200_STATECHANGE( rmesa, vap ); rmesa->hw.vap.cmd[VAP_SE_VAP_CNTL] &= ~(R200_VAP_TCL_ENABLE|R200_VAP_PROG_VTX_SHADER_ENABLE); }
void r200UpdateTextureState( GLcontext *ctx ) { r200ContextPtr rmesa = R200_CONTEXT(ctx); GLboolean ok; GLuint dbg; ok = (r200UpdateTextureUnit( ctx, 0 ) && r200UpdateTextureUnit( ctx, 1 )); FALLBACK( rmesa, R200_FALLBACK_TEXTURE, !ok ); if (rmesa->TclFallback) r200ChooseVertexState( ctx ); /* * T0 hang workaround ------------- */ #if 1 if ((rmesa->hw.ctx.cmd[CTX_PP_CNTL] & R200_TEX_ENABLE_MASK) == R200_TEX_0_ENABLE && (rmesa->hw.tex[0].cmd[TEX_PP_TXFILTER] & R200_MIN_FILTER_MASK) > R200_MIN_FILTER_LINEAR) { R200_STATECHANGE(rmesa, ctx); R200_STATECHANGE(rmesa, tex[1]); rmesa->hw.ctx.cmd[CTX_PP_CNTL] |= R200_TEX_1_ENABLE; rmesa->hw.tex[1].cmd[TEX_PP_TXFORMAT] &= ~TEXOBJ_TXFORMAT_MASK; rmesa->hw.tex[1].cmd[TEX_PP_TXFORMAT] |= 0x08000000; } else { if ((rmesa->hw.ctx.cmd[CTX_PP_CNTL] & R200_TEX_1_ENABLE) && (rmesa->hw.tex[1].cmd[TEX_PP_TXFORMAT] & 0x08000000)) { R200_STATECHANGE(rmesa, tex[1]); rmesa->hw.tex[1].cmd[TEX_PP_TXFORMAT] &= ~0x08000000; } } #endif #if 1 /* * Texture cache LRU hang workaround ------------- */ dbg = 0x0; if (((rmesa->hw.ctx.cmd[CTX_PP_CNTL] & R200_TEX_0_ENABLE) && ((((rmesa->hw.tex[0].cmd[TEX_PP_TXFILTER] & R200_MIN_FILTER_MASK)) & 0x04) == 0))) { dbg |= 0x02; } if (((rmesa->hw.ctx.cmd[CTX_PP_CNTL] & R200_TEX_1_ENABLE) && ((((rmesa->hw.tex[1].cmd[TEX_PP_TXFILTER] & R200_MIN_FILTER_MASK)) & 0x04) == 0))) { dbg |= 0x04; } if (dbg != rmesa->hw.tam.cmd[TAM_DEBUG3]) { R200_STATECHANGE( rmesa, tam ); rmesa->hw.tam.cmd[TAM_DEBUG3] = dbg; if (0) printf("TEXCACHE LRU HANG WORKAROUND %x\n", dbg); } #endif }