If the texture image changed force emitting the texture address, even
authorFelix Kuehling <fxkuehl@gmx.de>
Wed, 9 Mar 2005 15:28:47 +0000 (15:28 +0000)
committerFelix Kuehling <fxkuehl@gmx.de>
Wed, 9 Mar 2005 15:28:47 +0000 (15:28 +0000)
if it didn't change. This seems to flush texture cashes. Fixes
multi-textured lighting in quake2.

src/mesa/drivers/dri/savage/savagestate.c

index fd3da82..dd143f0 100644 (file)
@@ -1445,8 +1445,16 @@ static void savageEmitChangedRegChunk (savageContextPtr imesa,
 }
 static void savageUpdateRegister_s4(savageContextPtr imesa)
 {
-    /* the savage4 uses the contiguous range of BCI registers 0x1e-0x39
-     * 0x1e-0x27 are local, no need to check them for global changes */
+    /* In case the texture image was changed without changing the
+     * texture address as well, we need to force emitting the texture
+     * address in order to flush texture cashes. */
+    if ((imesa->dirty & SAVAGE_UPLOAD_TEX0) &&
+       imesa->oldRegs.s4.texAddr[0].ui == imesa->regs.s4.texAddr[0].ui)
+       imesa->oldRegs.s4.texAddr[0].ui = 0xffffffff;
+    if ((imesa->dirty & SAVAGE_UPLOAD_TEX1) &&
+       imesa->oldRegs.s4.texAddr[1].ui == imesa->regs.s4.texAddr[1].ui)
+       imesa->oldRegs.s4.texAddr[1].ui = 0xffffffff;
+
     savageEmitChangedRegs (imesa, 0x1e, 0x39);
 
     imesa->dirty=0;