summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/savage/savagetex.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/drivers/dri/savage/savagetex.c')
-rw-r--r--src/mesa/drivers/dri/savage/savagetex.c494
1 files changed, 189 insertions, 305 deletions
diff --git a/src/mesa/drivers/dri/savage/savagetex.c b/src/mesa/drivers/dri/savage/savagetex.c
index 94a4b23aec9..ee2e403061c 100644
--- a/src/mesa/drivers/dri/savage/savagetex.c
+++ b/src/mesa/drivers/dri/savage/savagetex.c
@@ -1026,21 +1026,13 @@ static void savageUpdateTex0State_s4( GLcontext *ctx )
struct gl_texture_object *tObj;
savageTextureObjectPtr t;
GLuint format;
- Reg_TexCtrl TexCtrl;
- Reg_TexBlendCtrl TexBlendCtrl;
- Reg_TexDescr TexDescr;
/* disable */
-
if (ctx->Texture.Unit[0]._ReallyEnabled == 0) {
- imesa->Registers.TexDescr.s4.tex0En = GL_FALSE;
- imesa->Registers.TexBlendCtrl[0].ui = TBC_NoTexMap;
- imesa->Registers.TexCtrl[0].ui = 0x20f040;
- imesa->Registers.TexAddr[0].ui = 0;
- imesa->Registers.changed.ni.fTex0BlendCtrlChanged = GL_TRUE;
- imesa->Registers.changed.ni.fTex0AddrChanged = GL_TRUE;
- imesa->Registers.changed.ni.fTexDescrChanged = GL_TRUE;
- imesa->Registers.changed.ni.fTex0CtrlChanged = GL_TRUE;
+ imesa->regs.s4.texDescr.ni.tex0En = GL_FALSE;
+ imesa->regs.s4.texBlendCtrl[0].ui = TBC_NoTexMap;
+ imesa->regs.s4.texCtrl[0].ui = 0x20f040;
+ imesa->regs.s4.texAddr[0].ui = 0;
return;
}
@@ -1074,49 +1066,46 @@ static void savageUpdateTex0State_s4( GLcontext *ctx )
if (t->MemBlock)
savageUpdateTexLRU( imesa, t );
-
- TexDescr.ui = imesa->Registers.TexDescr.ui & ~0x01000000;
- TexCtrl.ui = imesa->Registers.TexCtrl[0].ui;
- TexBlendCtrl.ui = imesa->Registers.TexBlendCtrl[0].ui;
format = tObj->Image[0][tObj->BaseLevel]->Format;
switch (ctx->Texture.Unit[0].EnvMode) {
case GL_REPLACE:
- TexCtrl.s4.clrArg1Invert = GL_FALSE;
+ imesa->regs.s4.texCtrl[0].ni.clrArg1Invert = GL_FALSE;
switch(format)
{
case GL_LUMINANCE:
case GL_RGB:
- TexBlendCtrl.ui = TBC_Decal;
+ imesa->regs.s4.texBlendCtrl[0].ui = TBC_Decal;
break;
case GL_LUMINANCE_ALPHA:
case GL_RGBA:
case GL_INTENSITY:
- TexBlendCtrl.ui = TBC_Copy;
+ imesa->regs.s4.texBlendCtrl[0].ui = TBC_Copy;
break;
case GL_ALPHA:
- TexBlendCtrl.ui = TBC_CopyAlpha;
+ imesa->regs.s4.texBlendCtrl[0].ui = TBC_CopyAlpha;
break;
}
- __HWEnvCombineSingleUnitScale(imesa, 0, 0, &TexBlendCtrl);
+ __HWEnvCombineSingleUnitScale(imesa, 0, 0,
+ &imesa->regs.s4.texBlendCtrl[0]);
break;
case GL_DECAL:
- TexCtrl.s4.clrArg1Invert = GL_FALSE;
+ imesa->regs.s4.texCtrl[0].ni.clrArg1Invert = GL_FALSE;
switch (format)
{
case GL_RGB:
case GL_LUMINANCE:
- TexBlendCtrl.ui = TBC_Decal;
+ imesa->regs.s4.texBlendCtrl[0].ui = TBC_Decal;
break;
case GL_RGBA:
case GL_INTENSITY:
case GL_LUMINANCE_ALPHA:
- TexBlendCtrl.ui = TBC_DecalAlpha;
+ imesa->regs.s4.texBlendCtrl[0].ui = TBC_DecalAlpha;
break;
/*
@@ -1125,16 +1114,18 @@ static void savageUpdateTex0State_s4( GLcontext *ctx )
*/
case GL_ALPHA:
- TexBlendCtrl.ui = TBC_CopyAlpha;
+ imesa->regs.s4.texBlendCtrl[0].ui = TBC_CopyAlpha;
break;
}
- __HWEnvCombineSingleUnitScale(imesa, 0, 0, &TexBlendCtrl);
+ __HWEnvCombineSingleUnitScale(imesa, 0, 0,
+ &imesa->regs.s4.texBlendCtrl[0]);
break;
case GL_MODULATE:
- TexCtrl.s4.clrArg1Invert = GL_FALSE;
- TexBlendCtrl.ui = TBC_ModulAlpha;
- __HWEnvCombineSingleUnitScale(imesa, 0, 0, &TexBlendCtrl);
+ imesa->regs.s4.texCtrl[0].ni.clrArg1Invert = GL_FALSE;
+ imesa->regs.s4.texBlendCtrl[0].ui = TBC_ModulAlpha;
+ __HWEnvCombineSingleUnitScale(imesa, 0, 0,
+ &imesa->regs.s4.texBlendCtrl[0]);
break;
case GL_BLEND:
@@ -1142,85 +1133,69 @@ static void savageUpdateTex0State_s4( GLcontext *ctx )
switch (format)
{
case GL_ALPHA:
- TexBlendCtrl.ui = TBC_ModulAlpha;
- TexCtrl.s4.clrArg1Invert = GL_FALSE;
+ imesa->regs.s4.texBlendCtrl[0].ui = TBC_ModulAlpha;
+ imesa->regs.s4.texCtrl[0].ni.clrArg1Invert = GL_FALSE;
break;
case GL_LUMINANCE:
case GL_RGB:
- TexBlendCtrl.ui = TBC_Blend0;
- TexDescr.s4.tex1En = GL_TRUE;
- TexDescr.s4.texBLoopEn = GL_TRUE;
- TexDescr.s4.tex1Width = TexDescr.s4.tex0Width;
- TexDescr.s4.tex1Height = TexDescr.s4.tex0Height;
- TexDescr.s4.tex1Fmt = TexDescr.s4.tex0Fmt;
-
- if (imesa->Registers.TexAddr[1].ui != imesa->Registers.TexAddr[0].ui)
- {
- imesa->Registers.TexAddr[1].ui = imesa->Registers.TexAddr[0].ui;
- imesa->Registers.changed.ni.fTex1AddrChanged = GL_TRUE;
- }
-
- if (imesa->Registers.TexBlendCtrl[1].ui != TBC_Blend1)
- {
- imesa->Registers.TexBlendCtrl[1].ui = TBC_Blend1;
- imesa->Registers.changed.ni.fTex1BlendCtrlChanged = GL_TRUE;
- }
-
- TexCtrl.s4.clrArg1Invert = GL_TRUE;
+ imesa->regs.s4.texBlendCtrl[0].ui = TBC_Blend0;
+ imesa->regs.s4.texDescr.ni.tex1En = GL_TRUE;
+ imesa->regs.s4.texDescr.ni.texBLoopEn = GL_TRUE;
+ imesa->regs.s4.texDescr.ni.tex1Width =
+ imesa->regs.s4.texDescr.ni.tex0Width;
+ imesa->regs.s4.texDescr.ni.tex1Height =
+ imesa->regs.s4.texDescr.ni.tex0Height;
+ imesa->regs.s4.texDescr.ni.tex1Fmt =
+ imesa->regs.s4.texDescr.ni.tex0Fmt;
+
+ imesa->regs.s4.texAddr[1].ui = imesa->regs.s4.texAddr[0].ui;
+ imesa->regs.s4.texBlendCtrl[1].ui = TBC_Blend1;
+
+ imesa->regs.s4.texCtrl[0].ni.clrArg1Invert = GL_TRUE;
imesa->bTexEn1 = GL_TRUE;
break;
case GL_LUMINANCE_ALPHA:
case GL_RGBA:
- TexBlendCtrl.ui = TBC_BlendAlpha0;
- TexDescr.s4.tex1En = GL_TRUE;
- TexDescr.s4.texBLoopEn = GL_TRUE;
- TexDescr.s4.tex1Width = TexDescr.s4.tex0Width;
- TexDescr.s4.tex1Height = TexDescr.s4.tex0Height;
- TexDescr.s4.tex1Fmt = TexDescr.s4.tex0Fmt;
-
- if (imesa->Registers.TexAddr[1].ui != imesa->Registers.TexAddr[0].ui)
- {
- imesa->Registers.TexAddr[1].ui = imesa->Registers.TexAddr[0].ui;
- imesa->Registers.changed.ni.fTex1AddrChanged = GL_TRUE;
- }
-
- if (imesa->Registers.TexBlendCtrl[1].ui != TBC_BlendAlpha1)
- {
- imesa->Registers.TexBlendCtrl[1].ui = TBC_BlendAlpha1;
- imesa->Registers.changed.ni.fTex1BlendCtrlChanged = GL_TRUE;
- }
-
- TexCtrl.s4.clrArg1Invert = GL_TRUE;
+ imesa->regs.s4.texBlendCtrl[0].ui = TBC_BlendAlpha0;
+ imesa->regs.s4.texDescr.ni.tex1En = GL_TRUE;
+ imesa->regs.s4.texDescr.ni.texBLoopEn = GL_TRUE;
+ imesa->regs.s4.texDescr.ni.tex1Width =
+ imesa->regs.s4.texDescr.ni.tex0Width;
+ imesa->regs.s4.texDescr.ni.tex1Height =
+ imesa->regs.s4.texDescr.ni.tex0Height;
+ imesa->regs.s4.texDescr.ni.tex1Fmt =
+ imesa->regs.s4.texDescr.ni.tex0Fmt;
+
+ imesa->regs.s4.texAddr[1].ui = imesa->regs.s4.texAddr[0].ui;
+ imesa->regs.s4.texBlendCtrl[1].ui = TBC_BlendAlpha1;
+
+ imesa->regs.s4.texCtrl[0].ni.clrArg1Invert = GL_TRUE;
imesa->bTexEn1 = GL_TRUE;
break;
case GL_INTENSITY:
- TexBlendCtrl.ui = TBC_BlendInt0;
- TexDescr.s4.tex1En = GL_TRUE;
- TexDescr.s4.texBLoopEn = GL_TRUE;
- TexDescr.s4.tex1Width = TexDescr.s4.tex0Width;
- TexDescr.s4.tex1Height = TexDescr.s4.tex0Height;
- TexDescr.s4.tex1Fmt = TexDescr.s4.tex0Fmt;
-
- if (imesa->Registers.TexAddr[1].ui != imesa->Registers.TexAddr[0].ui)
- {
- imesa->Registers.TexAddr[1].ui = imesa->Registers.TexAddr[0].ui;
- imesa->Registers.changed.ni.fTex1AddrChanged = GL_TRUE;
- }
-
- if (imesa->Registers.TexBlendCtrl[1].ui != TBC_BlendInt1)
- {
- imesa->Registers.TexBlendCtrl[1].ui = TBC_BlendInt1;
- imesa->Registers.changed.ni.fTex1BlendCtrlChanged = GL_TRUE;
- }
- TexCtrl.s4.clrArg1Invert = GL_TRUE;
- TexCtrl.s4.alphaArg1Invert = GL_TRUE;
+ imesa->regs.s4.texBlendCtrl[0].ui = TBC_BlendInt0;
+ imesa->regs.s4.texDescr.ni.tex1En = GL_TRUE;
+ imesa->regs.s4.texDescr.ni.texBLoopEn = GL_TRUE;
+ imesa->regs.s4.texDescr.ni.tex1Width =
+ imesa->regs.s4.texDescr.ni.tex0Width;
+ imesa->regs.s4.texDescr.ni.tex1Height =
+ imesa->regs.s4.texDescr.ni.tex0Height;
+ imesa->regs.s4.texDescr.ni.tex1Fmt =
+ imesa->regs.s4.texDescr.ni.tex0Fmt;
+
+ imesa->regs.s4.texAddr[1].ui = imesa->regs.s4.texAddr[0].ui;
+ imesa->regs.s4.texBlendCtrl[1].ui = TBC_BlendInt1;
+
+ imesa->regs.s4.texCtrl[0].ni.clrArg1Invert = GL_TRUE;
+ imesa->regs.s4.texCtrl[0].ni.alphaArg1Invert = GL_TRUE;
imesa->bTexEn1 = GL_TRUE;
break;
}
- __HWEnvCombineSingleUnitScale(imesa, 0, 0, &TexBlendCtrl);
+ __HWEnvCombineSingleUnitScale(imesa, 0, 0,
+ &imesa->regs.s4.texBlendCtrl[0]);
break;
/*
@@ -1228,14 +1203,16 @@ static void savageUpdateTex0State_s4( GLcontext *ctx )
*/
case GL_ADD:
printf("Add\n");
- TexCtrl.s4.clrArg1Invert = GL_FALSE;
- TexBlendCtrl.ui = TBC_AddAlpha;
- __HWEnvCombineSingleUnitScale(imesa, 0, 0, &TexBlendCtrl);
+ imesa->regs.s4.texCtrl[0].ni.clrArg1Invert = GL_FALSE;
+ imesa->regs.s4.texBlendCtrl[0].ui = TBC_AddAlpha;
+ __HWEnvCombineSingleUnitScale(imesa, 0, 0,
+ &imesa->regs.s4.texBlendCtrl[0]);
break;
#if GL_ARB_texture_env_combine
case GL_COMBINE_ARB:
- __HWParseTexEnvCombine(imesa, 0, &TexCtrl, &TexBlendCtrl);
+ __HWParseTexEnvCombine(imesa, 0, &imesa->regs.s4.texCtrl[0],
+ &imesa->regs.s4.texBlendCtrl[0]);
break;
#endif
@@ -1245,39 +1222,40 @@ static void savageUpdateTex0State_s4( GLcontext *ctx )
break;
}
- TexCtrl.s4.uMode = !(t->texParams.sWrapMode & 0x01);
- TexCtrl.s4.vMode = !(t->texParams.tWrapMode & 0x01);
+ imesa->regs.s4.texCtrl[0].ni.uMode = !(t->texParams.sWrapMode & 0x01);
+ imesa->regs.s4.texCtrl[0].ni.vMode = !(t->texParams.tWrapMode & 0x01);
switch (t->texParams.minFilter)
{
case GL_NEAREST:
- TexCtrl.s4.filterMode = TFM_Point;
- TexCtrl.s4.mipmapEnable = GL_FALSE;
+ imesa->regs.s4.texCtrl[0].ni.filterMode = TFM_Point;
+ imesa->regs.s4.texCtrl[0].ni.mipmapEnable = GL_FALSE;
break;
case GL_LINEAR:
- TexCtrl.s4.filterMode = TFM_Bilin;
- TexCtrl.s4.mipmapEnable = GL_FALSE;
+ imesa->regs.s4.texCtrl[0].ni.filterMode = TFM_Bilin;
+ imesa->regs.s4.texCtrl[0].ni.mipmapEnable = GL_FALSE;
break;
case GL_NEAREST_MIPMAP_NEAREST:
- TexCtrl.s4.filterMode = TFM_Point;
- TexCtrl.s4.mipmapEnable = GL_TRUE;
+ imesa->regs.s4.texCtrl[0].ni.filterMode = TFM_Point;
+ imesa->regs.s4.texCtrl[0].ni.mipmapEnable = GL_TRUE;
break;
case GL_LINEAR_MIPMAP_NEAREST:
- TexCtrl.s4.filterMode = TFM_Bilin;
- TexCtrl.s4.mipmapEnable = GL_TRUE;
+ imesa->regs.s4.texCtrl[0].ni.filterMode = TFM_Bilin;
+ imesa->regs.s4.texCtrl[0].ni.mipmapEnable = GL_TRUE;
break;
case GL_NEAREST_MIPMAP_LINEAR:
case GL_LINEAR_MIPMAP_LINEAR:
- TexCtrl.s4.filterMode = TFM_Trilin;
- TexCtrl.s4.mipmapEnable = GL_TRUE;
+ imesa->regs.s4.texCtrl[0].ni.filterMode = TFM_Trilin;
+ imesa->regs.s4.texCtrl[0].ni.mipmapEnable = GL_TRUE;
break;
}
- if((ctx->Texture.Unit[0].LodBias !=0.0F) && (TexCtrl.s4.dBias != 0))
+ if((ctx->Texture.Unit[0].LodBias !=0.0F) &&
+ (imesa->regs.s4.texCtrl[0].ni.dBias != 0))
{
union {
GLfloat f;
@@ -1307,47 +1285,23 @@ static void savageUpdateTex0State_s4( GLcontext *ctx )
}
ul &= 0x1FF;
- TexCtrl.s4.dBias = ul;
+ imesa->regs.s4.texCtrl[0].ni.dBias = ul;
}
- TexDescr.s4.tex0En = GL_TRUE;
- TexDescr.s4.tex0Width = t->image[0].image->WidthLog2;
- TexDescr.s4.tex0Height = t->image[0].image->HeightLog2;
- TexDescr.s4.tex0Fmt = t->image[0].internalFormat;
- TexCtrl.s4.dMax = t->max_level;
+ imesa->regs.s4.texDescr.ni.tex0En = GL_TRUE;
+ imesa->regs.s4.texDescr.ni.tex0Width = t->image[0].image->WidthLog2;
+ imesa->regs.s4.texDescr.ni.tex0Height = t->image[0].image->HeightLog2;
+ imesa->regs.s4.texDescr.ni.tex0Fmt = t->image[0].internalFormat;
+ imesa->regs.s4.texCtrl[0].ni.dMax = t->max_level;
- if (TexDescr.s4.tex1En)
- TexDescr.s4.texBLoopEn = GL_TRUE;
+ if (imesa->regs.s4.texDescr.ni.tex1En)
+ imesa->regs.s4.texDescr.ni.texBLoopEn = GL_TRUE;
- if (imesa->Registers.TexAddr[0].ui != (GLuint)t->texParams.hwPhysAddress)
- {
- imesa->Registers.TexAddr[0].ui = (GLuint) t->texParams.hwPhysAddress | 0x2;
-
- if(t->heap == SAVAGE_AGP_HEAP)
- imesa->Registers.TexAddr[0].ui |= 0x1;
-
- imesa->Registers.changed.ni.fTex0AddrChanged = GL_TRUE;
- }
-
- if (imesa->Registers.TexCtrl[0].ui != TexCtrl.ui)
- {
- imesa->Registers.TexCtrl[0].ui = TexCtrl.ui;
- imesa->Registers.changed.ni.fTex0CtrlChanged = GL_TRUE;
- }
-
- if (imesa->Registers.TexBlendCtrl[0].ui != TexBlendCtrl.ui)
- {
- imesa->Registers.TexBlendCtrl[0].ui = TexBlendCtrl.ui;
- imesa->Registers.changed.ni.fTex0BlendCtrlChanged = GL_TRUE;
- }
-
- if (imesa->Registers.TexDescr.ui != TexDescr.ui)
- {
- imesa->Registers.TexDescr.ui = TexDescr.ui;
- imesa->Registers.changed.ni.fTexDescrChanged = GL_TRUE;
- }
-
- return;
+ imesa->regs.s4.texAddr[0].ui = (GLuint) t->texParams.hwPhysAddress | 0x2;
+ if(t->heap == SAVAGE_AGP_HEAP)
+ imesa->regs.s4.texAddr[0].ui |= 0x1;
+
+ return;
}
static void savageUpdateTex1State_s4( GLcontext *ctx )
{
@@ -1355,10 +1309,6 @@ static void savageUpdateTex1State_s4( GLcontext *ctx )
struct gl_texture_object *tObj;
savageTextureObjectPtr t;
GLuint format;
- Reg_TexCtrl TexCtrl;
- Reg_TexBlendCtrl TexBlendCtrl;
- Reg_TexDescr TexDescr;
-
/* disable */
if(imesa->bTexEn1)
@@ -1368,15 +1318,11 @@ static void savageUpdateTex1State_s4( GLcontext *ctx )
}
if (ctx->Texture.Unit[1]._ReallyEnabled == 0) {
- imesa->Registers.TexDescr.s4.tex1En = GL_FALSE;
- imesa->Registers.TexBlendCtrl[1].ui = TBC_NoTexMap1;
- imesa->Registers.TexCtrl[1].ui = 0x20f040;
- imesa->Registers.TexAddr[1].ui = 0;
- imesa->Registers.TexDescr.s4.texBLoopEn = GL_FALSE;
- imesa->Registers.changed.ni.fTex1BlendCtrlChanged = GL_TRUE;
- imesa->Registers.changed.ni.fTexDescrChanged = GL_TRUE;
- imesa->Registers.changed.ni.fTex1BlendCtrlChanged = GL_TRUE;
- imesa->Registers.changed.ni.fTex1AddrChanged = GL_TRUE;
+ imesa->regs.s4.texDescr.ni.tex1En = GL_FALSE;
+ imesa->regs.s4.texBlendCtrl[1].ui = TBC_NoTexMap1;
+ imesa->regs.s4.texCtrl[1].ui = 0x20f040;
+ imesa->regs.s4.texAddr[1].ui = 0;
+ imesa->regs.s4.texDescr.ni.texBLoopEn = GL_FALSE;
return;
}
@@ -1413,67 +1359,63 @@ static void savageUpdateTex1State_s4( GLcontext *ctx )
if (t->MemBlock)
savageUpdateTexLRU( imesa, t );
- TexDescr.ui = imesa->Registers.TexDescr.ui;
- TexCtrl.ui = imesa->Registers.TexCtrl[1].ui;
- TexBlendCtrl.ui = imesa->Registers.TexBlendCtrl[1].ui;
-
format = tObj->Image[0][tObj->BaseLevel]->Format;
switch (ctx->Texture.Unit[1].EnvMode) {
case GL_REPLACE:
- TexCtrl.s4.clrArg1Invert = GL_FALSE;
+ imesa->regs.s4.texCtrl[1].ni.clrArg1Invert = GL_FALSE;
switch (format)
{
case GL_LUMINANCE:
case GL_RGB:
- TexBlendCtrl.ui = TBC_Decal;
+ imesa->regs.s4.texBlendCtrl[1].ui = TBC_Decal;
break;
case GL_LUMINANCE_ALPHA:
case GL_INTENSITY:
case GL_RGBA:
- TexBlendCtrl.ui = TBC_Copy;
+ imesa->regs.s4.texBlendCtrl[1].ui = TBC_Copy;
break;
case GL_ALPHA:
- TexBlendCtrl.ui = TBC_CopyAlpha1;
+ imesa->regs.s4.texBlendCtrl[1].ui = TBC_CopyAlpha1;
break;
}
- __HWEnvCombineSingleUnitScale(imesa, 0, 1, &TexBlendCtrl);
+ __HWEnvCombineSingleUnitScale(imesa, 0, 1, &imesa->regs.s4.texBlendCtrl);
break;
case GL_MODULATE:
- TexCtrl.s4.clrArg1Invert = GL_FALSE;
- TexBlendCtrl.ui = TBC_ModulAlpha1;
- __HWEnvCombineSingleUnitScale(imesa, 0, 1, &TexBlendCtrl);
+ imesa->regs.s4.texCtrl[1].ni.clrArg1Invert = GL_FALSE;
+ imesa->regs.s4.texBlendCtrl[1].ui = TBC_ModulAlpha1;
+ __HWEnvCombineSingleUnitScale(imesa, 0, 1, &imesa->regs.s4.texBlendCtrl);
break;
/*#if GL_EXT_texture_env_add*/
case GL_ADD:
- TexCtrl.s4.clrArg1Invert = GL_FALSE;
- TexBlendCtrl.ui = TBC_AddAlpha1;
- __HWEnvCombineSingleUnitScale(imesa, 0, 1, &TexBlendCtrl);
+ imesa->regs.s4.texCtrl[1].ni.clrArg1Invert = GL_FALSE;
+ imesa->regs.s4.texBlendCtrl[1].ui = TBC_AddAlpha1;
+ __HWEnvCombineSingleUnitScale(imesa, 0, 1, &imesa->regs.s4.texBlendCtrl);
break;
/*#endif*/
#if GL_ARB_texture_env_combine
case GL_COMBINE_ARB:
- __HWParseTexEnvCombine(imesa, 1, &TexCtrl, &TexBlendCtrl);
+ __HWParseTexEnvCombine(imesa, 1, &texCtrl, &imesa->regs.s4.texBlendCtrl);
break;
#endif
case GL_DECAL:
- TexCtrl.s4.clrArg1Invert = GL_FALSE;
+ imesa->regs.s4.texCtrl[1].ni.clrArg1Invert = GL_FALSE;
switch (format)
{
case GL_LUMINANCE:
case GL_RGB:
- TexBlendCtrl.ui = TBC_Decal1;
+ imesa->regs.s4.texBlendCtrl[1].ui = TBC_Decal1;
break;
case GL_LUMINANCE_ALPHA:
case GL_INTENSITY:
case GL_RGBA:
- TexBlendCtrl.ui = TBC_DecalAlpha1;
+ imesa->regs.s4.texBlendCtrl[1].ui = TBC_DecalAlpha1;
break;
/*
@@ -1481,10 +1423,10 @@ static void savageUpdateTex1State_s4( GLcontext *ctx )
// are undefined with GL_DECAL
*/
case GL_ALPHA:
- TexBlendCtrl.ui = TBC_CopyAlpha1;
+ imesa->regs.s4.texBlendCtrl[1].ui = TBC_CopyAlpha1;
break;
}
- __HWEnvCombineSingleUnitScale(imesa, 0, 1, &TexBlendCtrl);
+ __HWEnvCombineSingleUnitScale(imesa, 0, 1, &imesa->regs.s4.texBlendCtrl);
break;
case GL_BLEND:
@@ -1493,10 +1435,10 @@ static void savageUpdateTex1State_s4( GLcontext *ctx )
/*
// This is a hack for GLQuake, invert.
*/
- TexCtrl.s4.clrArg1Invert = GL_TRUE;
- TexBlendCtrl.ui = 0;
+ imesa->regs.s4.texCtrl[1].ni.clrArg1Invert = GL_TRUE;
+ imesa->regs.s4.texBlendCtrl[1].ui = 0;
}
- __HWEnvCombineSingleUnitScale(imesa, 0, 1, &TexBlendCtrl);
+ __HWEnvCombineSingleUnitScale(imesa, 0, 1, &imesa->regs.s4.texBlendCtrl);
break;
default:
@@ -1505,39 +1447,40 @@ static void savageUpdateTex1State_s4( GLcontext *ctx )
break;
}
- TexCtrl.s4.uMode = !(t->texParams.sWrapMode & 0x01);
- TexCtrl.s4.vMode = !(t->texParams.tWrapMode & 0x01);
+ imesa->regs.s4.texCtrl[1].ni.uMode = !(t->texParams.sWrapMode & 0x01);
+ imesa->regs.s4.texCtrl[1].ni.vMode = !(t->texParams.tWrapMode & 0x01);
switch (t->texParams.minFilter)
{
case GL_NEAREST:
- TexCtrl.s4.filterMode = TFM_Point;
- TexCtrl.s4.mipmapEnable = GL_FALSE;
+ imesa->regs.s4.texCtrl[1].ni.filterMode = TFM_Point;
+ imesa->regs.s4.texCtrl[1].ni.mipmapEnable = GL_FALSE;
break;
case GL_LINEAR:
- TexCtrl.s4.filterMode = TFM_Bilin;
- TexCtrl.s4.mipmapEnable = GL_FALSE;
+ imesa->regs.s4.texCtrl[1].ni.filterMode = TFM_Bilin;
+ imesa->regs.s4.texCtrl[1].ni.mipmapEnable = GL_FALSE;
break;
case GL_NEAREST_MIPMAP_NEAREST:
- TexCtrl.s4.filterMode = TFM_Point;
- TexCtrl.s4.mipmapEnable = GL_TRUE;
+ imesa->regs.s4.texCtrl[1].ni.filterMode = TFM_Point;
+ imesa->regs.s4.texCtrl[1].ni.mipmapEnable = GL_TRUE;
break;
case GL_LINEAR_MIPMAP_NEAREST:
- TexCtrl.s4.filterMode = TFM_Bilin;
- TexCtrl.s4.mipmapEnable = GL_TRUE;
+ imesa->regs.s4.texCtrl[1].ni.filterMode = TFM_Bilin;
+ imesa->regs.s4.texCtrl[1].ni.mipmapEnable = GL_TRUE;
break;
case GL_NEAREST_MIPMAP_LINEAR:
case GL_LINEAR_MIPMAP_LINEAR:
- TexCtrl.s4.filterMode = TFM_Trilin;
- TexCtrl.s4.mipmapEnable = GL_TRUE;
+ imesa->regs.s4.texCtrl[1].ni.filterMode = TFM_Trilin;
+ imesa->regs.s4.texCtrl[1].ni.mipmapEnable = GL_TRUE;
break;
}
- if((ctx->Texture.Unit[1].LodBias !=0.0F)&&(TexCtrl.s4.dBias != 0))
+ if((ctx->Texture.Unit[1].LodBias !=0.0F)&&
+ (imesa->regs.s4.texCtrl[1].ni.dBias != 0))
{
union {
GLfloat f;
@@ -1567,45 +1510,19 @@ static void savageUpdateTex1State_s4( GLcontext *ctx )
}
ul &= 0x1FF;
- TexCtrl.s4.dBias = ul;
+ imesa->regs.s4.texCtrl[1].ni.dBias = ul;
}
- TexDescr.s4.tex1En = GL_TRUE;
- TexDescr.s4.tex1Width = t->image[0].image->WidthLog2;
- TexDescr.s4.tex1Height = t->image[0].image->HeightLog2;
- TexDescr.s4.tex1Fmt = t->image[0].internalFormat;
- TexCtrl.s4.dMax = t->max_level;
- TexDescr.s4.texBLoopEn = GL_TRUE;
-
- if (imesa->Registers.TexAddr[1].ui != (GLuint)t->texParams.hwPhysAddress)
- {
- imesa->Registers.TexAddr[1].ui = (GLuint) t->texParams.hwPhysAddress| 2;
-
- if(t->heap == SAVAGE_AGP_HEAP)
- imesa->Registers.TexAddr[1].ui |= 0x1;
-
- /*imesa->Registers.TexAddr[1].ui = (GLuint) t->texParams.hwPhysAddress| 3;*/
- imesa->Registers.changed.ni.fTex1AddrChanged = GL_TRUE;
- }
-
- if (imesa->Registers.TexCtrl[1].ui != TexCtrl.ui)
- {
- imesa->Registers.TexCtrl[1].ui = TexCtrl.ui;
- imesa->Registers.changed.ni.fTex1CtrlChanged = GL_TRUE;
- }
-
- if (imesa->Registers.TexBlendCtrl[1].ui != TexBlendCtrl.ui)
- {
- imesa->Registers.TexBlendCtrl[1].ui = TexBlendCtrl.ui;
- imesa->Registers.changed.ni.fTex1BlendCtrlChanged = GL_TRUE;
- }
-
- if (imesa->Registers.TexDescr.ui != TexDescr.ui)
- {
- imesa->Registers.TexDescr.ui = TexDescr.ui;
- imesa->Registers.changed.ni.fTexDescrChanged = GL_TRUE;
- }
+ imesa->regs.s4.texDescr.ni.tex1En = GL_TRUE;
+ imesa->regs.s4.texDescr.ni.tex1Width = t->image[0].image->WidthLog2;
+ imesa->regs.s4.texDescr.ni.tex1Height = t->image[0].image->HeightLog2;
+ imesa->regs.s4.texDescr.ni.tex1Fmt = t->image[0].internalFormat;
+ imesa->regs.s4.texCtrl[1].ni.dMax = t->max_level;
+ imesa->regs.s4.texDescr.ni.texBLoopEn = GL_TRUE;
+ imesa->regs.s4.texAddr[1].ui = (GLuint) t->texParams.hwPhysAddress| 2;
+ if(t->heap == SAVAGE_AGP_HEAP)
+ imesa->regs.s4.texAddr[1].ui |= 0x1;
}
static void savageUpdateTexState_s3d( GLcontext *ctx )
{
@@ -1613,19 +1530,14 @@ static void savageUpdateTexState_s3d( GLcontext *ctx )
struct gl_texture_object *tObj;
savageTextureObjectPtr t;
GLuint format;
- Reg_TexCtrl TexCtrl;
- Reg_DrawCtrl DrawCtrl;
- Reg_TexDescr TexDescr;
/* disable */
if (ctx->Texture.Unit[0]._ReallyEnabled == 0) {
- imesa->Registers.TexCtrl[0].ui = 0;
- imesa->Registers.TexCtrl[0].s3d.texEn = GL_FALSE;
- imesa->Registers.TexCtrl[0].s3d.dBias = 0x08;
- imesa->Registers.TexCtrl[0].s3d.texXprEn = GL_TRUE;
- imesa->Registers.TexAddr[0].ui = 0;
- imesa->Registers.changed.ni.fTex0AddrChanged = GL_TRUE;
- imesa->Registers.changed.ni.fTex0CtrlChanged = GL_TRUE;
+ imesa->regs.s3d.texCtrl.ui = 0;
+ imesa->regs.s3d.texCtrl.ni.texEn = GL_FALSE;
+ imesa->regs.s3d.texCtrl.ni.dBias = 0x08;
+ imesa->regs.s3d.texCtrl.ni.texXprEn = GL_TRUE;
+ imesa->regs.s3d.texAddr.ui = 0;
return;
}
@@ -1659,23 +1571,19 @@ static void savageUpdateTexState_s3d( GLcontext *ctx )
if (t->MemBlock)
savageUpdateTexLRU( imesa, t );
- TexDescr.ui = imesa->Registers.TexDescr.ui;
- TexCtrl.ui = imesa->Registers.TexCtrl[0].ui;
- DrawCtrl.ui = imesa->Registers.DrawCtrl.ui;
-
format = tObj->Image[0][tObj->BaseLevel]->Format;
/* FIXME: copied from utah-glx, probably needs some tuning */
switch (ctx->Texture.Unit[0].EnvMode) {
case GL_DECAL:
- DrawCtrl.ni.texBlendCtrl = SAVAGETBC_DECAL_S3D;
+ imesa->regs.s3d.drawCtrl.ni.texBlendCtrl = SAVAGETBC_DECAL_S3D;
break;
case GL_REPLACE:
- DrawCtrl.ni.texBlendCtrl = SAVAGETBC_COPY_S3D;
+ imesa->regs.s3d.drawCtrl.ni.texBlendCtrl = SAVAGETBC_COPY_S3D;
break;
case GL_BLEND: /* FIXIT */
case GL_MODULATE:
- DrawCtrl.ni.texBlendCtrl = SAVAGETBC_MODULATEALPHA_S3D;
+ imesa->regs.s3d.drawCtrl.ni.texBlendCtrl = SAVAGETBC_MODULATEALPHA_S3D;
break;
default:
fprintf(stderr, "unkown tex env mode\n");
@@ -1683,43 +1591,43 @@ static void savageUpdateTexState_s3d( GLcontext *ctx )
break;
}
- DrawCtrl.ni.flushPdDestWrites = GL_TRUE;
- DrawCtrl.ni.flushPdZbufWrites = GL_TRUE;
+ imesa->regs.s3d.drawCtrl.ni.flushPdDestWrites = GL_TRUE;
+ imesa->regs.s3d.drawCtrl.ni.flushPdZbufWrites = GL_TRUE;
/* FIXME: this is how the utah-driver works. I doubt it's the ultimate
truth. */
- TexCtrl.s3d.uWrapEn = 0;
- TexCtrl.s3d.vWrapEn = 0;
+ imesa->regs.s3d.texCtrl.ni.uWrapEn = 0;
+ imesa->regs.s3d.texCtrl.ni.vWrapEn = 0;
if (t->texParams.sWrapMode == GL_CLAMP)
- TexCtrl.s3d.wrapMode = TAM_Clamp;
+ imesa->regs.s3d.texCtrl.ni.wrapMode = TAM_Clamp;
else
- TexCtrl.s3d.wrapMode = TAM_Wrap;
+ imesa->regs.s3d.texCtrl.ni.wrapMode = TAM_Wrap;
switch (t->texParams.minFilter) {
case GL_NEAREST:
- TexCtrl.s3d.filterMode = TFM_Point;
- TexCtrl.s3d.mipmapDisable = GL_TRUE;
+ imesa->regs.s3d.texCtrl.ni.filterMode = TFM_Point;
+ imesa->regs.s3d.texCtrl.ni.mipmapDisable = GL_TRUE;
break;
case GL_LINEAR:
- TexCtrl.s3d.filterMode = TFM_Bilin;
- TexCtrl.s3d.mipmapDisable = GL_TRUE;
+ imesa->regs.s3d.texCtrl.ni.filterMode = TFM_Bilin;
+ imesa->regs.s3d.texCtrl.ni.mipmapDisable = GL_TRUE;
break;
case GL_NEAREST_MIPMAP_NEAREST:
- TexCtrl.s3d.filterMode = TFM_Point;
- TexCtrl.s3d.mipmapDisable = GL_FALSE;
+ imesa->regs.s3d.texCtrl.ni.filterMode = TFM_Point;
+ imesa->regs.s3d.texCtrl.ni.mipmapDisable = GL_FALSE;
break;
case GL_LINEAR_MIPMAP_NEAREST:
- TexCtrl.s3d.filterMode = TFM_Bilin;
- TexCtrl.s3d.mipmapDisable = GL_FALSE;
+ imesa->regs.s3d.texCtrl.ni.filterMode = TFM_Bilin;
+ imesa->regs.s3d.texCtrl.ni.mipmapDisable = GL_FALSE;
break;
case GL_NEAREST_MIPMAP_LINEAR:
case GL_LINEAR_MIPMAP_LINEAR:
- TexCtrl.s3d.filterMode = TFM_Trilin;
- TexCtrl.s3d.mipmapDisable = GL_FALSE;
+ imesa->regs.s3d.texCtrl.ni.filterMode = TFM_Trilin;
+ imesa->regs.s3d.texCtrl.ni.mipmapDisable = GL_FALSE;
break;
}
@@ -1728,54 +1636,30 @@ static void savageUpdateTexState_s3d( GLcontext *ctx )
/*
if (t->max_level < t->image[0].image->WidthLog2 ||
t->max_level < t->image[0].image->HeightLog2) {
- TexCtrl.s3d.mipmapEnable = GL_TRUE;
- if (TexCtrl.s3d.filterMode == TFM_Trilin)
- TexCtrl.s3d.filterMode = TFM_Bilin;
- TexCtrl.s3d.filterMode = TFM_Point;
+ texCtrl.ni.mipmapEnable = GL_TRUE;
+ if (texCtrl.ni.filterMode == TFM_Trilin)
+ texCtrl.ni.filterMode = TFM_Bilin;
+ texCtrl.ni.filterMode = TFM_Point;
}
*/
/* LOD bias makes corruption of small mipmap levels worse on Savage IX
* but doesn't show the desired effect with the lodbias mesa demo. */
- TexCtrl.s3d.dBias = 0;
+ imesa->regs.s3d.texCtrl.ni.dBias = 0;
- TexCtrl.s3d.texEn = GL_TRUE;
- TexDescr.s3d.texWidth = t->image[0].image->WidthLog2;
- TexDescr.s3d.texHeight = t->image[0].image->HeightLog2;
+ imesa->regs.s3d.texCtrl.ni.texEn = GL_TRUE;
+ imesa->regs.s3d.texDescr.ni.texWidth = t->image[0].image->WidthLog2;
+ imesa->regs.s3d.texDescr.ni.texHeight = t->image[0].image->HeightLog2;
assert (t->image[0].internalFormat <= 7);
- TexDescr.s3d.texFmt = t->image[0].internalFormat;
-
- if (imesa->Registers.TexAddr[0].ni.addr != (GLuint)t->texParams.hwPhysAddress >> 3)
- {
- imesa->Registers.TexAddr[0].ni.addr = (GLuint) t->texParams.hwPhysAddress >> 3;
-
- if(t->heap == SAVAGE_AGP_HEAP) {
- imesa->Registers.TexAddr[0].ni.inSysTex = 1;
- imesa->Registers.TexAddr[0].ni.inAGPTex = 1;
- } else {
- imesa->Registers.TexAddr[0].ni.inSysTex = 0;
- imesa->Registers.TexAddr[0].ni.inAGPTex = 1;
- }
-
- imesa->Registers.changed.ni.fTex0AddrChanged = GL_TRUE;
- }
-
- if (imesa->Registers.TexCtrl[0].ui != TexCtrl.ui)
- {
- imesa->Registers.TexCtrl[0].ui = TexCtrl.ui;
- imesa->Registers.changed.ni.fTex0CtrlChanged = GL_TRUE;
- }
+ imesa->regs.s3d.texDescr.ni.texFmt = t->image[0].internalFormat;
- if (imesa->Registers.TexDescr.ui != TexDescr.ui)
- {
- imesa->Registers.TexDescr.ui = TexDescr.ui;
- imesa->Registers.changed.ni.fTexDescrChanged = GL_TRUE;
- }
-
- if (imesa->Registers.DrawCtrl.ui != DrawCtrl.ui)
- {
- imesa->Registers.DrawCtrl.ui = DrawCtrl.ui;
- imesa->Registers.changed.ni.fDrawCtrlChanged = GL_TRUE;
+ imesa->regs.s3d.texAddr.ni.addr = (GLuint) t->texParams.hwPhysAddress >> 3;
+ if(t->heap == SAVAGE_AGP_HEAP) {
+ imesa->regs.s3d.texAddr.ni.inSysTex = 1;
+ imesa->regs.s3d.texAddr.ni.inAGPTex = 1;
+ } else {
+ imesa->regs.s3d.texAddr.ni.inSysTex = 0;
+ imesa->regs.s3d.texAddr.ni.inAGPTex = 1;
}
}