On Tue, Dec 09, 2003 at 01:24:16PM -0600, Ryan Underwood wrote:
> 
> Thanks for the insight.  Is this already something that has been
> extensively looked at without success, or would it be worth my time to
> dig into the code and try to find the cause?  I've thought about it, but
> afraid that I will just hit a brick wall someone else already ran into
> with it. ;)

I've attached a patch that should hopefully fix this problem. The render
code just forgot to reset the multi texturing registers. I've not
actually tested the patch but I don't see anything else wrong with the
code...

> Is there anywhere I can get a G400 databook for reference, or is that
> not publicly available?

They're not available anymore :( It's a real shame since they seemed to be
quite friendly towards open source developers at one point. I can almost
understand that they don't want to release any parhelia docs but I don't
understand why they stopped giving out the older docs...

-- 
Ville Syrjälä
[EMAIL PROTECTED]
http://www.sci.fi/~syrjala/
Index: mga_reg.h
===================================================================
RCS file: /cvs/dri/xc/xc/programs/Xserver/hw/xfree86/drivers/mga/mga_reg.h,v
retrieving revision 1.8
diff -u -r1.8 mga_reg.h
--- mga_reg.h   27 Jan 2002 20:05:35 -0000      1.8
+++ mga_reg.h   10 Dec 2003 06:27:05 -0000
@@ -475,6 +475,9 @@
 #define MGAREG_ALPHACTRL       0x2c7c
 #define MGAREG_DWGSYNC         0x2c4c
 
+#define MGAREG_TDUALSTAGE0     0x2cf8
+#define MGAREG_TDUALSTAGE1     0x2cfc
+
 #define MGAREG_AGP_PLL         0x1e4c
 #define MGA_AGP2XPLL_ENABLE            0x1
 #define MGA_AGP2XPLL_DISABLE           0x0
Index: mga_storm.c
===================================================================
RCS file: /cvs/dri/xc/xc/programs/Xserver/hw/xfree86/drivers/mga/mga_storm.c,v
retrieving revision 1.20
diff -u -r1.20 mga_storm.c
--- mga_storm.c 25 Mar 2003 11:21:06 -0000      1.20
+++ mga_storm.c 10 Dec 2003 06:27:07 -0000
@@ -341,6 +341,10 @@
     tex_padw = 1 << log2w;
     tex_padh = 1 << log2h;
 
+    WAITFIFO(2);
+    OUTREG(MGAREG_TDUALSTAGE0, 0);
+    OUTREG(MGAREG_TDUALSTAGE1, 0);
+
     WAITFIFO(15);
     OUTREG(MGAREG_TMR0, (1 << 20) / tex_padw);  /* sx inc */
     OUTREG(MGAREG_TMR1, 0);  /* sy inc */
@@ -425,6 +429,9 @@
     tex_padw = 1 << log2w;
     tex_padh = 1 << log2h;
 
+    WAITFIFO(2);
+    OUTREG(MGAREG_TDUALSTAGE0, 0);
+    OUTREG(MGAREG_TDUALSTAGE1, 0);
 
     WAITFIFO(12);
     OUTREG(MGAREG_DR4, red << 7);  /* red start */
@@ -522,6 +529,10 @@
     tex_padw = 1 << log2w;
     tex_padh = 1 << log2h;
 
+    WAITFIFO(2);
+    OUTREG(MGAREG_TDUALSTAGE0, 0);
+    OUTREG(MGAREG_TDUALSTAGE1, 0);
+
     WAITFIFO(15);
     OUTREG(MGAREG_TMR0, (1 << 20) / tex_padw);  /* sx inc */
     OUTREG(MGAREG_TMR1, 0);  /* sy inc */

Reply via email to