summaryrefslogtreecommitdiff
path: root/xc/lib/GL/mesa/src/drv
diff options
context:
space:
mode:
authorkeithw <keithw>2000-06-26 12:59:03 +0000
committerkeithw <keithw>2000-06-26 12:59:03 +0000
commitc6105514307ecd186aba8bc035a8bcad3bac2367 (patch)
tree4a69a15ba46fdc6b6e6b135d8fb7255f304a3212 /xc/lib/GL/mesa/src/drv
parent742bf7f8ade6f20ea1ca04827d9bbf692adc7a23 (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.c11
-rw-r--r--xc/lib/GL/mesa/src/drv/mga/mgatex.c33
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)
{