diff options
author | keithw <keithw> | 2000-06-26 12:59:03 +0000 |
---|---|---|
committer | keithw <keithw> | 2000-06-26 12:59:03 +0000 |
commit | c6105514307ecd186aba8bc035a8bcad3bac2367 (patch) | |
tree | 4a69a15ba46fdc6b6e6b135d8fb7255f304a3212 /xc/lib/GL/mesa/src/drv | |
parent | 742bf7f8ade6f20ea1ca04827d9bbf692adc7a23 (diff) |
Pull in SoF text bug fix (alpha + texture) from Utah.
A better bugfix for the GL_DECAL texture env mode.
Add a couple of missing FLUSH_BATCH() calls.
Diffstat (limited to 'xc/lib/GL/mesa/src/drv')
-rw-r--r-- | xc/lib/GL/mesa/src/drv/mga/mgastate.c | 11 | ||||
-rw-r--r-- | xc/lib/GL/mesa/src/drv/mga/mgatex.c | 33 |
2 files changed, 28 insertions, 16 deletions
diff --git a/xc/lib/GL/mesa/src/drv/mga/mgastate.c b/xc/lib/GL/mesa/src/drv/mga/mgastate.c index 7a3b82930..bbfb4d4f4 100644 --- a/xc/lib/GL/mesa/src/drv/mga/mgastate.c +++ b/xc/lib/GL/mesa/src/drv/mga/mgastate.c @@ -573,10 +573,7 @@ void mgaEmitHwStateLocked( mgaContextPtr mmesa ) mmesa->CurrentTexObj[1]->Setup, sizeof(mmesa->sarea->TexState[1])); - mmesa->sarea->WarpPipe = ((mmesa->setupindex & MGA_WARP_T2GZSAF) | - MGA_ALPHA_BIT | MGA_SPEC_BIT | MGA_FOG_BIT); - - + mmesa->sarea->WarpPipe = mmesa->warp_pipe; mmesa->sarea->dirty |= mmesa->dirty; #if 0 @@ -627,7 +624,7 @@ static void mgaDDEnable(GLcontext *ctx, GLenum cap, GLboolean state) case GL_TEXTURE_2D: case GL_TEXTURE_3D: FLUSH_BATCH( mmesa ); - mmesa->new_state |= MGA_NEW_TEXTURE; + mmesa->new_state |= (MGA_NEW_TEXTURE|MGA_NEW_ALPHA); break; case GL_POLYGON_STIPPLE: if ((ctx->Driver.TriangleCaps & DD_TRI_STIPPLE) && @@ -658,10 +655,11 @@ static void mgaWarpUpdateState( GLcontext *ctx ) int index = mmesa->setupindex; index &= ~(MGA_WIN_BIT|MGA_TEX0_BIT|MGA_RGBA_BIT); - index |= MGA_ALPHA_BIT; + index |= MGA_ALPHA_BIT | MGA_SPEC_BIT | MGA_FOG_BIT; if (index != mmesa->warp_pipe) { + FLUSH_BATCH(mmesa); mmesa->warp_pipe = index; mmesa->new_state |= MGA_NEW_WARP; mmesa->dirty |= MGA_UPLOAD_PIPE; @@ -737,6 +735,7 @@ void mgaDDReducedPrimitiveChange( GLcontext *ctx, GLenum prim ) if (ctx->Polygon.StippleFlag && (ctx->Driver.TriangleCaps & DD_TRI_STIPPLE)) { + mmesa->dirty |= MGA_UPLOAD_CTX; mmesa->Setup[MGA_CTXREG_DWGCTL] &= ~(0xf<<20); if (ctx->PB->primitive == GL_POLYGON) mmesa->Setup[MGA_CTXREG_DWGCTL] |= mmesa->poly_stipple; diff --git a/xc/lib/GL/mesa/src/drv/mga/mgatex.c b/xc/lib/GL/mesa/src/drv/mga/mgatex.c index eafccbaa2..c6eebeb8b 100644 --- a/xc/lib/GL/mesa/src/drv/mga/mgatex.c +++ b/xc/lib/GL/mesa/src/drv/mga/mgatex.c @@ -906,15 +906,27 @@ static void mgaUpdateTextureStage( GLcontext *ctx, int unit ) TD0_alpha_sel_mul); break; case GL_DECAL: - *reg = (TD0_color_arg2_fcol | - TD0_color_alpha_currtex | - TD0_color_alpha2inv_enable | - TD0_color_arg2mul_alpha2 | - TD0_color_arg1mul_alpha1 | - TD0_color_add_add | - TD0_color_sel_add | - TD0_alpha_arg2_fcol | - TD0_alpha_sel_arg2 ); + if (unit == 0) + *reg = (TD0_color_arg2_diffuse | + TD0_color_alpha_currtex | + TD0_color_alpha2inv_enable | + TD0_color_arg2mul_alpha2 | + TD0_color_arg1mul_alpha1 | + TD0_color_add_add | + TD0_color_sel_add | + TD0_alpha_arg2_diffuse | + TD0_alpha_sel_arg2 ); + else + *reg = (TD0_color_arg2_prevstage | + TD0_color_alpha_currtex | + TD0_color_alpha2inv_enable | + TD0_color_arg2mul_alpha2 | + TD0_color_arg1mul_alpha1 | + TD0_color_add_add | + TD0_color_sel_add | + TD0_alpha_arg2_prevstage | + TD0_alpha_sel_arg2 ); + break; case GL_ADD: @@ -1102,7 +1114,8 @@ void mgaTexEnv( GLcontext *ctx, GLenum pname, const GLfloat *param ) if (pname == GL_TEXTURE_ENV_MODE) { /* force the texture state to be updated */ FLUSH_BATCH( MGA_CONTEXT(ctx) ); - MGA_CONTEXT(ctx)->new_state |= MGA_NEW_TEXTURE; + MGA_CONTEXT(ctx)->new_state |= (MGA_NEW_TEXTURE | + MGA_NEW_ALPHA); } else if (pname == GL_TEXTURE_ENV_COLOR) { |