summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/savage/savagetex.c
diff options
context:
space:
mode:
authorFelix Kuehling <fxkuehl@gmx.de>2004-02-29 20:42:22 +0000
committerFelix Kuehling <fxkuehl@gmx.de>2004-02-29 20:42:22 +0000
commitc6338e60ffac532a4e10013d5720597a431cbc34 (patch)
treedc8560f5101a686f16c0e1a8c9644de56e8dab58 /src/mesa/drivers/dri/savage/savagetex.c
parent4923e1926ad7b7eb7de017eda8e7db64d357e5c8 (diff)
Reorganized hardware state data structures and state emission. Don't track
which registers changed in all the functions that change the state. Instead check which registers changed in the end when the hardware state is updated. Tried to avoid cosmetic (whitespace) changes in this commit.
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 94a4b23aec..ee2e403061 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;
}
}