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 */