add gamma driver - no kernel driver yet
authorAlan Hourihane <alanh@tungstengraphics.com>
Tue, 30 Sep 2003 11:28:16 +0000 (11:28 +0000)
committerAlan Hourihane <alanh@tungstengraphics.com>
Tue, 30 Sep 2003 11:28:16 +0000 (11:28 +0000)
(build tested, not physically tested)

28 files changed:
Makefile.X11
src/mesa/drivers/dri/gamma/gamma_client.h [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_context.c [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_context.h [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_dd.c [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_inithw.c [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_lock.c [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_lock.h [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_macros.h [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_regs.h [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_render.c [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_screen.c [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_screen.h [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_span.c [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_state.c [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_tex.c [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_texmem.c [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_texstate.c [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_tris.c [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_tris.h [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_tritmp.h [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_vb.c [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_vb.h [new file with mode: 0644]
src/mesa/drivers/dri/gamma/gamma_xmesa.c [new file with mode: 0644]
src/mesa/drivers/dri/gamma/server/glint_common.h [new file with mode: 0644]
src/mesa/drivers/dri/gamma/server/glint_dri.h [new file with mode: 0644]
src/mesa/drivers/dri/i810/i810screen.c
src/mesa/drivers/dri/i830/i830_screen.c

index e6f1182618bc2d28c3c205ba43b8e348b65cc180..944553019808c3e7e4aa1590ae39d58e54f674e1 100644 (file)
@@ -1,4 +1,4 @@
-# $Id: Makefile.X11,v 1.88 2003/09/30 11:13:31 alanh Exp $
+# $Id: Makefile.X11,v 1.89 2003/09/30 11:28:16 alanh Exp $
 
 # Mesa 3-D graphics library
 # Version:  5.1
@@ -242,6 +242,7 @@ linux-solo:
        if [ -d src/mesa/drivers/dri/i810 ] ; then touch src/mesa/drivers/dri/i810/depend ; fi
        if [ -d src/mesa/drivers/dri/i830 ] ; then touch src/mesa/drivers/dri/i830/depend ; fi
        if [ -d src/mesa/drivers/dri/sis ] ; then touch src/mesa/drivers/dri/sis/depend ; fi
+       if [ -d src/mesa/drivers/dri/gamma ] ; then touch src/mesa/drivers/dri/gamma/depend ; fi
        if [ -d src/mesa/drivers/dri/fb ] ; then touch src/mesa/drivers/dri/fb/depend ; fi
        if [ -d src/glut/mini ] ; then touch src/glut/mini/depend ; fi
        if [ -d progs/miniglx ] ; then touch progs/miniglx/depend ; fi
@@ -254,6 +255,7 @@ linux-solo:
        if [ -d src/mesa/drivers/dri/i810 ] ; then cd src/mesa/drivers/dri/i810       ; $(MAKE) -f Makefile.X11 $@ ; fi
        if [ -d src/mesa/drivers/dri/i830 ] ; then cd src/mesa/drivers/dri/i830       ; $(MAKE) -f Makefile.X11 $@ ; fi
        if [ -d src/mesa/drivers/dri/sis ] ; then cd src/mesa/drivers/dri/sis       ; $(MAKE) -f Makefile.X11 $@ ; fi
+       if [ -d src/mesa/drivers/dri/gamma ] ; then cd src/mesa/drivers/dri/gamma       ; $(MAKE) -f Makefile.X11 $@ ; fi
        if [ -d src/mesa/drivers/dri/fb ] ; then cd src/mesa/drivers/dri/fb         ; $(MAKE) -f Makefile.X11 $@ ; fi
        if [ -d src/glx/mini  ] ; then cd src/glx/mini  ; $(MAKE) -f Makefile.X11 $@ ; fi
        if [ -d src/glu/mini  ] ; then cd src/glu/mini  ; $(MAKE) -f Makefile.X11 $@ ; fi
diff --git a/src/mesa/drivers/dri/gamma/gamma_client.h b/src/mesa/drivers/dri/gamma/gamma_client.h
new file mode 100644 (file)
index 0000000..1c1a22e
--- /dev/null
@@ -0,0 +1,6185 @@
+/* Automaticallly generated -- do not edit */
+#ifndef _GLINT_CLIENT_H_
+#define _GLINT_CLIENT_H_
+/* **********************************************************************/
+/* START OF glint_extra.h INCLUSION                                     */
+/* **********************************************************************/
+
+/* glint_extra.h
+ * Created: Fri Apr  2 23:32:05 1999 by faith@precisioninsight.com
+ * Revised: Fri Apr  2 23:33:00 1999 by faith@precisioninsight.com
+ *
+ * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
+ * All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ * 
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ * 
+ * $XFree86: xc/lib/GL/mesa/src/drv/gamma/gamma_client.h,v 1.3 2002/02/22 21:33:00 dawes Exp $
+ * 
+ */
+
+#define AreaStippleEnable          0x00001
+#define LineStippleEnable          0x00002
+#define GResetLineStipple          0x00004
+#define FastFillEnable             0x00008
+#define PrimitiveLine              0x00000
+#define PrimitiveTrapezoid         0x00040
+#define PrimitivePoint             0x00080
+#define PrimitiveRectangle         0x000C0
+#define AntialiasEnable            0x00100
+#define AntialiasingQuality        0x00200
+#define UsePointTable              0x00400
+#define SyncOnBitMask              0x00800
+#define SyncOnHostData             0x01000
+#define TextureEnable              0x02000
+#define FogEnable                  0x04000
+#define CoverageEnable             0x08000
+#define SubPixelCorrectionEnable   0x10000
+#define SpanOperation              0x40000
+
+
+/* **********************************************************************/
+/* END OF glint_extra.h INCLUSION                                       */
+/* **********************************************************************/
+
+
+#define GlintResetStatus                              0x0000
+#define GlintResetStatusReg                                0
+#define GlintResetStatusOff                           0x0000
+#define GlintResetStatusSec                           0x0000
+#define GlintResetStatusSecReg                        2
+#define GlintResetStatusSecOff                        0x0000
+
+#define GlintIntEnable                                0x0008
+#define GlintIntEnableReg                                  0
+#define GlintIntEnableOff                             0x0008
+#define GlintIntEnableSec                             0x0008
+#define GlintIntEnableSecReg                          2
+#define GlintIntEnableSecOff                          0x0008
+
+#define GlintIntFlags                                 0x0010
+#define GlintIntFlagsReg                                   0
+#define GlintIntFlagsOff                              0x0010
+#define GlintIntFlagsSec                              0x0010
+#define GlintIntFlagsSecReg                           2
+#define GlintIntFlagsSecOff                           0x0010
+
+#define GlintInFIFOSpace                              0x0018
+#define GlintInFIFOSpaceReg                                0
+#define GlintInFIFOSpaceOff                           0x0018
+#define GlintInFIFOSpaceSec                           0x0018
+#define GlintInFIFOSpaceSecReg                        2
+#define GlintInFIFOSpaceSecOff                        0x0018
+
+#define GlintOutFIFOWords                             0x0020
+#define GlintOutFIFOWordsReg                               0
+#define GlintOutFIFOWordsOff                          0x0020
+#define GlintOutFIFOWordsSec                          0x0020
+#define GlintOutFIFOWordsSecReg                       2
+#define GlintOutFIFOWordsSecOff                       0x0020
+
+#define GlintDMAAddress                               0x0028
+#define GlintDMAAddressReg                                 0
+#define GlintDMAAddressOff                            0x0028
+#define GlintDMAAddressSec                            0x0028
+#define GlintDMAAddressSecReg                         2
+#define GlintDMAAddressSecOff                         0x0028
+
+#define GlintDMACount                                 0x0030
+#define GlintDMACountReg                                   0
+#define GlintDMACountOff                              0x0030
+#define GlintDMACountSec                              0x0030
+#define GlintDMACountSecReg                           2
+#define GlintDMACountSecOff                           0x0030
+
+#define GlintErrorFlags                               0x0038
+#define GlintErrorFlagsReg                                 0
+#define GlintErrorFlagsOff                            0x0038
+#define GlintErrorFlagsSec                            0x0038
+#define GlintErrorFlagsSecReg                         2
+#define GlintErrorFlagsSecOff                         0x0038
+
+#define GlintVClkCtl                                  0x0040
+#define GlintVClkCtlReg                                    0
+#define GlintVClkCtlOff                               0x0040
+#define GlintVClkCtlSec                               0x0040
+#define GlintVClkCtlSecReg                            2
+#define GlintVClkCtlSecOff                            0x0040
+
+#define GlintTestRegister                             0x0048
+#define GlintTestRegisterReg                               0
+#define GlintTestRegisterOff                          0x0048
+#define GlintTestRegisterSec                          0x0048
+#define GlintTestRegisterSecReg                       2
+#define GlintTestRegisterSecOff                       0x0048
+
+#define GlintAperture0                                0x0050
+#define GlintAperture0Reg                                  0
+#define GlintAperture0Off                             0x0050
+#define GlintAperture0Sec                             0x0050
+#define GlintAperture0SecReg                          2
+#define GlintAperture0SecOff                          0x0050
+
+#define GlintAperture1                                0x0058
+#define GlintAperture1Reg                                  0
+#define GlintAperture1Off                             0x0058
+#define GlintAperture1Sec                             0x0058
+#define GlintAperture1SecReg                          2
+#define GlintAperture1SecOff                          0x0058
+
+#define GlintDMAControl                               0x0060
+#define GlintDMAControlReg                                 0
+#define GlintDMAControlOff                            0x0060
+#define GlintDMAControlSec                            0x0060
+#define GlintDMAControlSecReg                         2
+#define GlintDMAControlSecOff                         0x0060
+
+#define GlintFIFODis                                  0x0068
+#define GlintFIFODisReg                                    0
+#define GlintFIFODisOff                               0x0068
+#define GlintFIFODisSec                               0x0068
+#define GlintFIFODisSecReg                            2
+#define GlintFIFODisSecOff                            0x0068
+
+#define GlintLBMemoryCtl                              0x1000
+#define GlintLBMemoryCtlReg                                1
+#define GlintLBMemoryCtlOff                           0x0000
+#define GlintLBMemoryCtlSec                           0x1000
+#define GlintLBMemoryCtlSecReg                        3
+#define GlintLBMemoryCtlSecOff                        0x0000
+
+#define GlintLBMemoryEDO                              0x1008
+#define GlintLBMemoryEDOReg                                1
+#define GlintLBMemoryEDOOff                           0x0008
+#define GlintLBMemoryEDOSec                           0x1008
+#define GlintLBMemoryEDOSecReg                        3
+#define GlintLBMemoryEDOSecOff                        0x0008
+
+#define GlintFBMemoryCtl                              0x1800
+#define GlintFBMemoryCtlReg                                1
+#define GlintFBMemoryCtlOff                           0x0800
+#define GlintFBMemoryCtlSec                           0x1800
+#define GlintFBMemoryCtlSecReg                        3
+#define GlintFBMemoryCtlSecOff                        0x0800
+
+#define GlintFBModeSel                                0x1808
+#define GlintFBModeSelReg                                  1
+#define GlintFBModeSelOff                             0x0808
+#define GlintFBModeSelSec                             0x1808
+#define GlintFBModeSelSecReg                          3
+#define GlintFBModeSelSecOff                          0x0808
+
+#define GlintFBGCWrMask                               0x1810
+#define GlintFBGCWrMaskReg                                 1
+#define GlintFBGCWrMaskOff                            0x0810
+#define GlintFBGCWrMaskSec                            0x1810
+#define GlintFBGCWrMaskSecReg                         3
+#define GlintFBGCWrMaskSecOff                         0x0810
+
+#define GlintFBGCColorLower                           0x1818
+#define GlintFBGCColorLowerReg                             1
+#define GlintFBGCColorLowerOff                        0x0818
+#define GlintFBGCColorLowerSec                        0x1818
+#define GlintFBGCColorLowerSecReg                     3
+#define GlintFBGCColorLowerSecOff                     0x0818
+
+#define GlintFBTXMemCtl                               0x1820
+#define GlintFBTXMemCtlReg                                 1
+#define GlintFBTXMemCtlOff                            0x0820
+#define GlintFBTXMemCtlSec                            0x1820
+#define GlintFBTXMemCtlSecReg                         3
+#define GlintFBTXMemCtlSecOff                         0x0820
+
+#define GlintFBWrMask                                 0x1830
+#define GlintFBWrMaskReg                                   1
+#define GlintFBWrMaskOff                              0x0830
+#define GlintFBWrMaskSec                              0x1830
+#define GlintFBWrMaskSecReg                           3
+#define GlintFBWrMaskSecOff                           0x0830
+
+#define GlintFBGCColorUpper                           0x1838
+#define GlintFBGCColorUpperReg                             1
+#define GlintFBGCColorUpperOff                        0x0838
+#define GlintFBGCColorUpperSec                        0x1838
+#define GlintFBGCColorUpperSecReg                     3
+#define GlintFBGCColorUpperSecOff                     0x0838
+
+#define GlintVTGHLimit                                0x3000
+#define GlintVTGHLimitReg                                  1
+#define GlintVTGHLimitOff                             0x2000
+#define GlintVTGHLimitSec                             0x3000
+#define GlintVTGHLimitSecReg                          3
+#define GlintVTGHLimitSecOff                          0x2000
+
+#define GlintVTGHSyncStart                            0x3008
+#define GlintVTGHSyncStartReg                              1
+#define GlintVTGHSyncStartOff                         0x2008
+#define GlintVTGHSyncStartSec                         0x3008
+#define GlintVTGHSyncStartSecReg                      3
+#define GlintVTGHSyncStartSecOff                      0x2008
+
+#define GlintVTGHSyncEnd                              0x3010
+#define GlintVTGHSyncEndReg                                1
+#define GlintVTGHSyncEndOff                           0x2010
+#define GlintVTGHSyncEndSec                           0x3010
+#define GlintVTGHSyncEndSecReg                        3
+#define GlintVTGHSyncEndSecOff                        0x2010
+
+#define GlintVTGHBlankEnd                             0x3018
+#define GlintVTGHBlankEndReg                               1
+#define GlintVTGHBlankEndOff                          0x2018
+#define GlintVTGHBlankEndSec                          0x3018
+#define GlintVTGHBlankEndSecReg                       3
+#define GlintVTGHBlankEndSecOff                       0x2018
+
+#define GlintVTGVLimit                                0x3020
+#define GlintVTGVLimitReg                                  1
+#define GlintVTGVLimitOff                             0x2020
+#define GlintVTGVLimitSec                             0x3020
+#define GlintVTGVLimitSecReg                          3
+#define GlintVTGVLimitSecOff                          0x2020
+
+#define GlintVTGVSyncStart                            0x3028
+#define GlintVTGVSyncStartReg                              1
+#define GlintVTGVSyncStartOff                         0x2028
+#define GlintVTGVSyncStartSec                         0x3028
+#define GlintVTGVSyncStartSecReg                      3
+#define GlintVTGVSyncStartSecOff                      0x2028
+
+#define GlintVTGVSyncEnd                              0x3030
+#define GlintVTGVSyncEndReg                                1
+#define GlintVTGVSyncEndOff                           0x2030
+#define GlintVTGVSyncEndSec                           0x3030
+#define GlintVTGVSyncEndSecReg                        3
+#define GlintVTGVSyncEndSecOff                        0x2030
+
+#define GlintVTGVBlankEnd                             0x3038
+#define GlintVTGVBlankEndReg                               1
+#define GlintVTGVBlankEndOff                          0x2038
+#define GlintVTGVBlankEndSec                          0x3038
+#define GlintVTGVBlankEndSecReg                       3
+#define GlintVTGVBlankEndSecOff                       0x2038
+
+#define GlintVTGHGateStart                            0x3040
+#define GlintVTGHGateStartReg                              1
+#define GlintVTGHGateStartOff                         0x2040
+#define GlintVTGHGateStartSec                         0x3040
+#define GlintVTGHGateStartSecReg                      3
+#define GlintVTGHGateStartSecOff                      0x2040
+
+#define GlintVTGHGateEnd                              0x3048
+#define GlintVTGHGateEndReg                                1
+#define GlintVTGHGateEndOff                           0x2048
+#define GlintVTGHGateEndSec                           0x3048
+#define GlintVTGHGateEndSecReg                        3
+#define GlintVTGHGateEndSecOff                        0x2048
+
+#define GlintVTGVGateStart                            0x3050
+#define GlintVTGVGateStartReg                              1
+#define GlintVTGVGateStartOff                         0x2050
+#define GlintVTGVGateStartSec                         0x3050
+#define GlintVTGVGateStartSecReg                      3
+#define GlintVTGVGateStartSecOff                      0x2050
+
+#define GlintVTGVGateEnd                              0x3058
+#define GlintVTGVGateEndReg                                1
+#define GlintVTGVGateEndOff                           0x2058
+#define GlintVTGVGateEndSec                           0x3058
+#define GlintVTGVGateEndSecReg                        3
+#define GlintVTGVGateEndSecOff                        0x2058
+
+#define GlintVTGPolarity                              0x3060
+#define GlintVTGPolarityReg                                1
+#define GlintVTGPolarityOff                           0x2060
+#define GlintVTGPolaritySec                           0x3060
+#define GlintVTGPolaritySecReg                        3
+#define GlintVTGPolaritySecOff                        0x2060
+
+#define GlintVTGFrameRowAddr                          0x3068
+#define GlintVTGFrameRowAddrReg                            1
+#define GlintVTGFrameRowAddrOff                       0x2068
+#define GlintVTGFrameRowAddrSec                       0x3068
+#define GlintVTGFrameRowAddrSecReg                    3
+#define GlintVTGFrameRowAddrSecOff                    0x2068
+
+#define GlintVTGVLineNumber                           0x3070
+#define GlintVTGVLineNumberReg                             1
+#define GlintVTGVLineNumberOff                        0x2070
+#define GlintVTGVLineNumberSec                        0x3070
+#define GlintVTGVLineNumberSecReg                     3
+#define GlintVTGVLineNumberSecOff                     0x2070
+
+#define GlintVTGSerialClk                             0x3078
+#define GlintVTGSerialClkReg                               1
+#define GlintVTGSerialClkOff                          0x2078
+#define GlintVTGSerialClkSec                          0x3078
+#define GlintVTGSerialClkSecReg                       3
+#define GlintVTGSerialClkSecOff                       0x2078
+
+#define GlintVTGModeCtl                               0x3080
+#define GlintVTGModeCtlReg                                 1
+#define GlintVTGModeCtlOff                            0x2080
+#define GlintVTGModeCtlSec                            0x3080
+#define GlintVTGModeCtlSecReg                         3
+#define GlintVTGModeCtlSecOff                         0x2080
+
+#define GlintOutputFIFO                               0x2000
+#define GlintOutputFIFOReg                                 1
+#define GlintOutputFIFOOff                            0x1000
+#define GlintOutputFIFOSec                            0x2000
+#define GlintOutputFIFOSecReg                         3
+#define GlintOutputFIFOSecOff                         0x1000
+
+#define GlintGInFIFOSpace                             0x0018
+#define GlintGInFIFOSpaceReg                               0
+#define GlintGInFIFOSpaceOff                          0x0018
+
+#define GlintGDMAAddress                              0x0028
+#define GlintGDMAAddressReg                                0
+#define GlintGDMAAddressOff                           0x0028
+
+#define GlintGDMACount                                0x0030
+#define GlintGDMACountReg                                  0
+#define GlintGDMACountOff                             0x0030
+
+#define GlintGDMAControl                              0x0060
+#define GlintGDMAControlReg                                0
+#define GlintGDMAControlOff                           0x0060
+
+#define GlintGOutDMA                                  0x0080
+#define GlintGOutDMAReg                                    0
+#define GlintGOutDMAOff                               0x0080
+
+#define GlintGOutDMACount                             0x0088
+#define GlintGOutDMACountReg                               0
+#define GlintGOutDMACountOff                          0x0088
+
+#define GlintGResetStatus                             0x0800
+#define GlintGResetStatusReg                               0
+#define GlintGResetStatusOff                          0x0800
+
+#define GlintGIntEnable                               0x0808
+#define GlintGIntEnableReg                                 0
+#define GlintGIntEnableOff                            0x0808
+
+#define GlintGIntFlags                                0x0810
+#define GlintGIntFlagsReg                                  0
+#define GlintGIntFlagsOff                             0x0810
+
+#define GlintGErrorFlags                              0x0838
+#define GlintGErrorFlagsReg                                0
+#define GlintGErrorFlagsOff                           0x0838
+
+#define GlintGTestRegister                            0x0848
+#define GlintGTestRegisterReg                              0
+#define GlintGTestRegisterOff                         0x0848
+
+#define GlintGFIFODis                                 0x0868
+#define GlintGFIFODisReg                                   0
+#define GlintGFIFODisOff                              0x0868
+
+#define GlintGChipConfig                              0x0870
+#define GlintGChipConfigReg                                0
+#define GlintGChipConfigOff                           0x0870
+
+#define GlintGCSRAperture                             0x0878
+#define GlintGCSRApertureReg                               0
+#define GlintGCSRApertureOff                          0x0878
+
+#define GlintGPageTableAddr                           0x0c00
+#define GlintGPageTableAddrReg                             0
+#define GlintGPageTableAddrOff                        0x0c00
+
+#define GlintGPageTableLength                         0x0c08
+#define GlintGPageTableLengthReg                           0
+#define GlintGPageTableLengthOff                      0x0c08
+
+#define GlintGDelayTimer                              0x0c38
+#define GlintGDelayTimerReg                                0
+#define GlintGDelayTimerOff                           0x0c38
+
+#define GlintGCommandMode                             0x0c40
+#define GlintGCommandModeReg                               0
+#define GlintGCommandModeOff                          0x0c40
+
+#define GlintGCommandIntEnable                        0x0c48
+#define GlintGCommandIntEnableReg                          0
+#define GlintGCommandIntEnableOff                     0x0c48
+
+#define GlintGCommandIntFlags                         0x0c50
+#define GlintGCommandIntFlagsReg                           0
+#define GlintGCommandIntFlagsOff                      0x0c50
+
+#define GlintGCommandErrorFlags                       0x0c58
+#define GlintGCommandErrorFlagsReg                         0
+#define GlintGCommandErrorFlagsOff                    0x0c58
+
+#define GlintGCommandStatus                           0x0c60
+#define GlintGCommandStatusReg                             0
+#define GlintGCommandStatusOff                        0x0c60
+
+#define GlintGCommandFaultingAddr                     0x0c68
+#define GlintGCommandFaultingAddrReg                       0
+#define GlintGCommandFaultingAddrOff                  0x0c68
+
+#define GlintGVertexFaultingAddr                      0x0c70
+#define GlintGVertexFaultingAddrReg                        0
+#define GlintGVertexFaultingAddrOff                   0x0c70
+
+#define GlintGWriteFaultingAddr                       0x0c88
+#define GlintGWriteFaultingAddrReg                         0
+#define GlintGWriteFaultingAddrOff                    0x0c88
+
+#define GlintGFeedbackSelectCount                     0x0c98
+#define GlintGFeedbackSelectCountReg                       0
+#define GlintGFeedbackSelectCountOff                  0x0c98
+
+#define GlintGGammaProcessorMode                      0x0cb8
+#define GlintGGammaProcessorModeReg                        0
+#define GlintGGammaProcessorModeOff                   0x0cb8
+
+#define GlintGVGAShadow                               0x0d00
+#define GlintGVGAShadowReg                                 0
+#define GlintGVGAShadowOff                            0x0d00
+
+#define GlintGMultGLINTAperture                       0x0d08
+#define GlintGMultGLINTApertureReg                         0
+#define GlintGMultGLINTApertureOff                    0x0d08
+
+#define GlintGMultGLINT1                              0x0d10
+#define GlintGMultGLINT1Reg                                0
+#define GlintGMultGLINT1Off                           0x0d10
+
+#define GlintGMultGLINT2                              0x0d18
+#define GlintGMultGLINT2Reg                                0
+#define GlintGMultGLINT2Off                           0x0d18
+
+#define GlintStartXDom                                0x8000
+#define GlintStartXDomTag                             0x0000
+#define GlintStartXDomReg                                  1
+#define GlintStartXDomOff                             0x7000
+#define GlintStartXDomSec                             0x8000
+#define GlintStartXDomSecReg                          3
+#define GlintStartXDomSecOff                          0x7000
+
+#define GlintdXDom                                    0x8008
+#define GlintdXDomTag                                 0x0001
+#define GlintdXDomReg                                      1
+#define GlintdXDomOff                                 0x7008
+#define GlintdXDomSec                                 0x8008
+#define GlintdXDomSecReg                              3
+#define GlintdXDomSecOff                              0x7008
+
+#define GlintStartXSub                                0x8010
+#define GlintStartXSubTag                             0x0002
+#define GlintStartXSubReg                                  1
+#define GlintStartXSubOff                             0x7010
+#define GlintStartXSubSec                             0x8010
+#define GlintStartXSubSecReg                          3
+#define GlintStartXSubSecOff                          0x7010
+
+#define GlintdXSub                                    0x8018
+#define GlintdXSubTag                                 0x0003
+#define GlintdXSubReg                                      1
+#define GlintdXSubOff                                 0x7018
+#define GlintdXSubSec                                 0x8018
+#define GlintdXSubSecReg                              3
+#define GlintdXSubSecOff                              0x7018
+
+#define GlintStartY                                   0x8020
+#define GlintStartYTag                                0x0004
+#define GlintStartYReg                                     1
+#define GlintStartYOff                                0x7020
+#define GlintStartYSec                                0x8020
+#define GlintStartYSecReg                             3
+#define GlintStartYSecOff                             0x7020
+
+#define GlintdY                                       0x8028
+#define GlintdYTag                                    0x0005
+#define GlintdYReg                                         1
+#define GlintdYOff                                    0x7028
+#define GlintdYSec                                    0x8028
+#define GlintdYSecReg                                 3
+#define GlintdYSecOff                                 0x7028
+
+#define GlintGLINTCount                               0x8030
+#define GlintGLINTCountTag                            0x0006
+#define GlintGLINTCountReg                                 1
+#define GlintGLINTCountOff                            0x7030
+#define GlintGLINTCountSec                            0x8030
+#define GlintGLINTCountSecReg                         3
+#define GlintGLINTCountSecOff                         0x7030
+
+#define GlintRender                                   0x8038
+#define GlintRenderTag                                0x0007
+#define GlintRenderReg                                     1
+#define GlintRenderOff                                0x7038
+#define GlintRenderSec                                0x8038
+#define GlintRenderSecReg                             3
+#define GlintRenderSecOff                             0x7038
+
+#define GlintContinueNewLine                          0x8040
+#define GlintContinueNewLineTag                       0x0008
+#define GlintContinueNewLineReg                            1
+#define GlintContinueNewLineOff                       0x7040
+#define GlintContinueNewLineSec                       0x8040
+#define GlintContinueNewLineSecReg                    3
+#define GlintContinueNewLineSecOff                    0x7040
+
+#define GlintContinueNewDom                           0x8048
+#define GlintContinueNewDomTag                        0x0009
+#define GlintContinueNewDomReg                             1
+#define GlintContinueNewDomOff                        0x7048
+#define GlintContinueNewDomSec                        0x8048
+#define GlintContinueNewDomSecReg                     3
+#define GlintContinueNewDomSecOff                     0x7048
+
+#define GlintContinueNewSub                           0x8050
+#define GlintContinueNewSubTag                        0x000a
+#define GlintContinueNewSubReg                             1
+#define GlintContinueNewSubOff                        0x7050
+#define GlintContinueNewSubSec                        0x8050
+#define GlintContinueNewSubSecReg                     3
+#define GlintContinueNewSubSecOff                     0x7050
+
+#define GlintContinue                                 0x8058
+#define GlintContinueTag                              0x000b
+#define GlintContinueReg                                   1
+#define GlintContinueOff                              0x7058
+#define GlintContinueSec                              0x8058
+#define GlintContinueSecReg                           3
+#define GlintContinueSecOff                           0x7058
+
+#define GlintFlushSpan                                0x8060
+#define GlintFlushSpanTag                             0x000c
+#define GlintFlushSpanReg                                  1
+#define GlintFlushSpanOff                             0x7060
+#define GlintFlushSpanSec                             0x8060
+#define GlintFlushSpanSecReg                          3
+#define GlintFlushSpanSecOff                          0x7060
+
+#define GlintBitMaskPattern                           0x8068
+#define GlintBitMaskPatternTag                        0x000d
+#define GlintBitMaskPatternReg                             1
+#define GlintBitMaskPatternOff                        0x7068
+#define GlintBitMaskPatternSec                        0x8068
+#define GlintBitMaskPatternSecReg                     3
+#define GlintBitMaskPatternSecOff                     0x7068
+
+#define GlintPointTable0                              0x8080
+#define GlintPointTable0Tag                           0x0010
+#define GlintPointTable0Reg                                1
+#define GlintPointTable0Off                           0x7080
+#define GlintPointTable0Sec                           0x8080
+#define GlintPointTable0SecReg                        3
+#define GlintPointTable0SecOff                        0x7080
+
+#define GlintPointTable1                              0x8088
+#define GlintPointTable1Tag                           0x0011
+#define GlintPointTable1Reg                                1
+#define GlintPointTable1Off                           0x7088
+#define GlintPointTable1Sec                           0x8088
+#define GlintPointTable1SecReg                        3
+#define GlintPointTable1SecOff                        0x7088
+
+#define GlintPointTable2                              0x8090
+#define GlintPointTable2Tag                           0x0012
+#define GlintPointTable2Reg                                1
+#define GlintPointTable2Off                           0x7090
+#define GlintPointTable2Sec                           0x8090
+#define GlintPointTable2SecReg                        3
+#define GlintPointTable2SecOff                        0x7090
+
+#define GlintPointTable3                              0x8098
+#define GlintPointTable3Tag                           0x0013
+#define GlintPointTable3Reg                                1
+#define GlintPointTable3Off                           0x7098
+#define GlintPointTable3Sec                           0x8098
+#define GlintPointTable3SecReg                        3
+#define GlintPointTable3SecOff                        0x7098
+
+#define GlintRasterizerMode                           0x80a0
+#define GlintRasterizerModeTag                        0x0014
+#define GlintRasterizerModeReg                             1
+#define GlintRasterizerModeOff                        0x70a0
+#define GlintRasterizerModeSec                        0x80a0
+#define GlintRasterizerModeSecReg                     3
+#define GlintRasterizerModeSecOff                     0x70a0
+
+#define GlintYLimits                                  0x80a8
+#define GlintYLimitsTag                               0x0015
+#define GlintYLimitsReg                                    1
+#define GlintYLimitsOff                               0x70a8
+#define GlintYLimitsSec                               0x80a8
+#define GlintYLimitsSecReg                            3
+#define GlintYLimitsSecOff                            0x70a8
+
+#define GlintScanLineOwnership                        0x80b0
+#define GlintScanLineOwnershipTag                     0x0016
+#define GlintScanLineOwnershipReg                          1
+#define GlintScanLineOwnershipOff                     0x70b0
+#define GlintScanLineOwnershipSec                     0x80b0
+#define GlintScanLineOwnershipSecReg                  3
+#define GlintScanLineOwnershipSecOff                  0x70b0
+
+#define GlintWaitForCompletion                        0x80b8
+#define GlintWaitForCompletionTag                     0x0017
+#define GlintWaitForCompletionReg                          1
+#define GlintWaitForCompletionOff                     0x70b8
+#define GlintWaitForCompletionSec                     0x80b8
+#define GlintWaitForCompletionSecReg                  3
+#define GlintWaitForCompletionSecOff                  0x70b8
+
+#define GlintPixelSize                                0x80c0
+#define GlintPixelSizeTag                             0x0018
+#define GlintPixelSizeReg                                  1
+#define GlintPixelSizeOff                             0x70c0
+#define GlintPixelSizeSec                             0x80c0
+#define GlintPixelSizeSecReg                          3
+#define GlintPixelSizeSecOff                          0x70c0
+
+#define GlintScissorMode                              0x8180
+#define GlintScissorModeTag                           0x0030
+#define GlintScissorModeReg                                1
+#define GlintScissorModeOff                           0x7180
+#define GlintScissorModeSec                           0x8180
+#define GlintScissorModeSecReg                        3
+#define GlintScissorModeSecOff                        0x7180
+
+#define GlintScissorMinXY                             0x8188
+#define GlintScissorMinXYTag                          0x0031
+#define GlintScissorMinXYReg                               1
+#define GlintScissorMinXYOff                          0x7188
+#define GlintScissorMinXYSec                          0x8188
+#define GlintScissorMinXYSecReg                       3
+#define GlintScissorMinXYSecOff                       0x7188
+
+#define GlintScissorMaxXY                             0x8190
+#define GlintScissorMaxXYTag                          0x0032
+#define GlintScissorMaxXYReg                               1
+#define GlintScissorMaxXYOff                          0x7190
+#define GlintScissorMaxXYSec                          0x8190
+#define GlintScissorMaxXYSecReg                       3
+#define GlintScissorMaxXYSecOff                       0x7190
+
+#define GlintScreenSize                               0x8198
+#define GlintScreenSizeTag                            0x0033
+#define GlintScreenSizeReg                                 1
+#define GlintScreenSizeOff                            0x7198
+#define GlintScreenSizeSec                            0x8198
+#define GlintScreenSizeSecReg                         3
+#define GlintScreenSizeSecOff                         0x7198
+
+#define GlintAreaStippleMode                          0x81a0
+#define GlintAreaStippleModeTag                       0x0034
+#define GlintAreaStippleModeReg                            1
+#define GlintAreaStippleModeOff                       0x71a0
+#define GlintAreaStippleModeSec                       0x81a0
+#define GlintAreaStippleModeSecReg                    3
+#define GlintAreaStippleModeSecOff                    0x71a0
+
+#define GlintLineStippleMode                          0x81a8
+#define GlintLineStippleModeTag                       0x0035
+#define GlintLineStippleModeReg                            1
+#define GlintLineStippleModeOff                       0x71a8
+#define GlintLineStippleModeSec                       0x81a8
+#define GlintLineStippleModeSecReg                    3
+#define GlintLineStippleModeSecOff                    0x71a8
+
+#define GlintLoadLineStippleCounters                  0x81b0
+#define GlintLoadLineStippleCountersTag               0x0036
+#define GlintLoadLineStippleCountersReg                    1
+#define GlintLoadLineStippleCountersOff               0x71b0
+#define GlintLoadLineStippleCountersSec               0x81b0
+#define GlintLoadLineStippleCountersSecReg            3
+#define GlintLoadLineStippleCountersSecOff            0x71b0
+
+#define GlintUpdateLineStippleCounters                0x81b8
+#define GlintUpdateLineStippleCountersTag             0x0037
+#define GlintUpdateLineStippleCountersReg                  1
+#define GlintUpdateLineStippleCountersOff             0x71b8
+#define GlintUpdateLineStippleCountersSec             0x81b8
+#define GlintUpdateLineStippleCountersSecReg          3
+#define GlintUpdateLineStippleCountersSecOff          0x71b8
+
+#define GlintSaveLineStippleState                     0x81c0
+#define GlintSaveLineStippleStateTag                  0x0038
+#define GlintSaveLineStippleStateReg                       1
+#define GlintSaveLineStippleStateOff                  0x71c0
+#define GlintSaveLineStippleStateSec                  0x81c0
+#define GlintSaveLineStippleStateSecReg               3
+#define GlintSaveLineStippleStateSecOff               0x71c0
+
+#define GlintWindowOrigin                             0x81c8
+#define GlintWindowOriginTag                          0x0039
+#define GlintWindowOriginReg                               1
+#define GlintWindowOriginOff                          0x71c8
+#define GlintWindowOriginSec                          0x81c8
+#define GlintWindowOriginSecReg                       3
+#define GlintWindowOriginSecOff                       0x71c8
+
+#define GlintAreaStipplePattern0                      0x8200
+#define GlintAreaStipplePattern0Tag                   0x0040
+#define GlintAreaStipplePattern0Reg                        1
+#define GlintAreaStipplePattern0Off                   0x7200
+#define GlintAreaStipplePattern0Sec                   0x8200
+#define GlintAreaStipplePattern0SecReg                3
+#define GlintAreaStipplePattern0SecOff                0x7200
+
+#define GlintAreaStipplePattern1                      0x8208
+#define GlintAreaStipplePattern1Tag                   0x0041
+#define GlintAreaStipplePattern1Reg                        1
+#define GlintAreaStipplePattern1Off                   0x7208
+#define GlintAreaStipplePattern1Sec                   0x8208
+#define GlintAreaStipplePattern1SecReg                3
+#define GlintAreaStipplePattern1SecOff                0x7208
+
+#define GlintAreaStipplePattern2                      0x8210
+#define GlintAreaStipplePattern2Tag                   0x0042
+#define GlintAreaStipplePattern2Reg                        1
+#define GlintAreaStipplePattern2Off                   0x7210
+#define GlintAreaStipplePattern2Sec                   0x8210
+#define GlintAreaStipplePattern2SecReg                3
+#define GlintAreaStipplePattern2SecOff                0x7210
+
+#define GlintAreaStipplePattern3                      0x8218
+#define GlintAreaStipplePattern3Tag                   0x0043
+#define GlintAreaStipplePattern3Reg                        1
+#define GlintAreaStipplePattern3Off                   0x7218
+#define GlintAreaStipplePattern3Sec                   0x8218
+#define GlintAreaStipplePattern3SecReg                3
+#define GlintAreaStipplePattern3SecOff                0x7218
+
+#define GlintAreaStipplePattern4                      0x8220
+#define GlintAreaStipplePattern4Tag                   0x0044
+#define GlintAreaStipplePattern4Reg                        1
+#define GlintAreaStipplePattern4Off                   0x7220
+#define GlintAreaStipplePattern4Sec                   0x8220
+#define GlintAreaStipplePattern4SecReg                3
+#define GlintAreaStipplePattern4SecOff                0x7220
+
+#define GlintAreaStipplePattern5                      0x8228
+#define GlintAreaStipplePattern5Tag                   0x0045
+#define GlintAreaStipplePattern5Reg                        1
+#define GlintAreaStipplePattern5Off                   0x7228
+#define GlintAreaStipplePattern5Sec                   0x8228
+#define GlintAreaStipplePattern5SecReg                3
+#define GlintAreaStipplePattern5SecOff                0x7228
+
+#define GlintAreaStipplePattern6                      0x8230
+#define GlintAreaStipplePattern6Tag                   0x0046
+#define GlintAreaStipplePattern6Reg                        1
+#define GlintAreaStipplePattern6Off                   0x7230
+#define GlintAreaStipplePattern6Sec                   0x8230
+#define GlintAreaStipplePattern6SecReg                3
+#define GlintAreaStipplePattern6SecOff                0x7230
+
+#define GlintAreaStipplePattern7                      0x8238
+#define GlintAreaStipplePattern7Tag                   0x0047
+#define GlintAreaStipplePattern7Reg                        1
+#define GlintAreaStipplePattern7Off                   0x7238
+#define GlintAreaStipplePattern7Sec                   0x8238
+#define GlintAreaStipplePattern7SecReg                3
+#define GlintAreaStipplePattern7SecOff                0x7238
+
+#define GlintAreaStipplePattern8                      0x8240
+#define GlintAreaStipplePattern8Tag                   0x0048
+#define GlintAreaStipplePattern8Reg                        1
+#define GlintAreaStipplePattern8Off                   0x7240
+#define GlintAreaStipplePattern8Sec                   0x8240
+#define GlintAreaStipplePattern8SecReg                3
+#define GlintAreaStipplePattern8SecOff                0x7240
+
+#define GlintAreaStipplePattern9                      0x8248
+#define GlintAreaStipplePattern9Tag                   0x0049
+#define GlintAreaStipplePattern9Reg                        1
+#define GlintAreaStipplePattern9Off                   0x7248
+#define GlintAreaStipplePattern9Sec                   0x8248
+#define GlintAreaStipplePattern9SecReg                3
+#define GlintAreaStipplePattern9SecOff                0x7248
+
+#define GlintAreaStipplePattern10                     0x8250
+#define GlintAreaStipplePattern10Tag                  0x004a
+#define GlintAreaStipplePattern10Reg                       1
+#define GlintAreaStipplePattern10Off                  0x7250
+#define GlintAreaStipplePattern10Sec                  0x8250
+#define GlintAreaStipplePattern10SecReg               3
+#define GlintAreaStipplePattern10SecOff               0x7250
+
+#define GlintAreaStipplePattern11                     0x8258
+#define GlintAreaStipplePattern11Tag                  0x004b
+#define GlintAreaStipplePattern11Reg                       1
+#define GlintAreaStipplePattern11Off                  0x7258
+#define GlintAreaStipplePattern11Sec                  0x8258
+#define GlintAreaStipplePattern11SecReg               3
+#define GlintAreaStipplePattern11SecOff               0x7258
+
+#define GlintAreaStipplePattern12                     0x8260
+#define GlintAreaStipplePattern12Tag                  0x004c
+#define GlintAreaStipplePattern12Reg                       1
+#define GlintAreaStipplePattern12Off                  0x7260
+#define GlintAreaStipplePattern12Sec                  0x8260
+#define GlintAreaStipplePattern12SecReg               3
+#define GlintAreaStipplePattern12SecOff               0x7260
+
+#define GlintAreaStipplePattern13                     0x8268
+#define GlintAreaStipplePattern13Tag                  0x004d
+#define GlintAreaStipplePattern13Reg                       1
+#define GlintAreaStipplePattern13Off                  0x7268
+#define GlintAreaStipplePattern13Sec                  0x8268
+#define GlintAreaStipplePattern13SecReg               3
+#define GlintAreaStipplePattern13SecOff               0x7268
+
+#define GlintAreaStipplePattern14                     0x8270
+#define GlintAreaStipplePattern14Tag                  0x004e
+#define GlintAreaStipplePattern14Reg                       1
+#define GlintAreaStipplePattern14Off                  0x7270
+#define GlintAreaStipplePattern14Sec                  0x8270
+#define GlintAreaStipplePattern14SecReg               3
+#define GlintAreaStipplePattern14SecOff               0x7270
+
+#define GlintAreaStipplePattern15                     0x8278
+#define GlintAreaStipplePattern15Tag                  0x004f
+#define GlintAreaStipplePattern15Reg                       1
+#define GlintAreaStipplePattern15Off                  0x7278
+#define GlintAreaStipplePattern15Sec                  0x8278
+#define GlintAreaStipplePattern15SecReg               3
+#define GlintAreaStipplePattern15SecOff               0x7278
+
+#define GlintAreaStipplePattern16                     0x8280
+#define GlintAreaStipplePattern16Tag                  0x0050
+#define GlintAreaStipplePattern16Reg                       1
+#define GlintAreaStipplePattern16Off                  0x7280
+#define GlintAreaStipplePattern16Sec                  0x8280
+#define GlintAreaStipplePattern16SecReg               3
+#define GlintAreaStipplePattern16SecOff               0x7280
+
+#define GlintAreaStipplePattern17                     0x8288
+#define GlintAreaStipplePattern17Tag                  0x0051
+#define GlintAreaStipplePattern17Reg                       1
+#define GlintAreaStipplePattern17Off                  0x7288
+#define GlintAreaStipplePattern17Sec                  0x8288
+#define GlintAreaStipplePattern17SecReg               3
+#define GlintAreaStipplePattern17SecOff               0x7288
+
+#define GlintAreaStipplePattern18                     0x8290
+#define GlintAreaStipplePattern18Tag                  0x0052
+#define GlintAreaStipplePattern18Reg                       1
+#define GlintAreaStipplePattern18Off                  0x7290
+#define GlintAreaStipplePattern18Sec                  0x8290
+#define GlintAreaStipplePattern18SecReg               3
+#define GlintAreaStipplePattern18SecOff               0x7290
+
+#define GlintAreaStipplePattern19                     0x8298
+#define GlintAreaStipplePattern19Tag                  0x0053
+#define GlintAreaStipplePattern19Reg                       1
+#define GlintAreaStipplePattern19Off                  0x7298
+#define GlintAreaStipplePattern19Sec                  0x8298
+#define GlintAreaStipplePattern19SecReg               3
+#define GlintAreaStipplePattern19SecOff               0x7298
+
+#define GlintAreaStipplePattern20                     0x82a0
+#define GlintAreaStipplePattern20Tag                  0x0054
+#define GlintAreaStipplePattern20Reg                       1
+#define GlintAreaStipplePattern20Off                  0x72a0
+#define GlintAreaStipplePattern20Sec                  0x82a0
+#define GlintAreaStipplePattern20SecReg               3
+#define GlintAreaStipplePattern20SecOff               0x72a0
+
+#define GlintAreaStipplePattern21                     0x82a8
+#define GlintAreaStipplePattern21Tag                  0x0055
+#define GlintAreaStipplePattern21Reg                       1
+#define GlintAreaStipplePattern21Off                  0x72a8
+#define GlintAreaStipplePattern21Sec                  0x82a8
+#define GlintAreaStipplePattern21SecReg               3
+#define GlintAreaStipplePattern21SecOff               0x72a8
+
+#define GlintAreaStipplePattern22                     0x82b0
+#define GlintAreaStipplePattern22Tag                  0x0056
+#define GlintAreaStipplePattern22Reg                       1
+#define GlintAreaStipplePattern22Off                  0x72b0
+#define GlintAreaStipplePattern22Sec                  0x82b0
+#define GlintAreaStipplePattern22SecReg               3
+#define GlintAreaStipplePattern22SecOff               0x72b0
+
+#define GlintAreaStipplePattern23                     0x82b8
+#define GlintAreaStipplePattern23Tag                  0x0057
+#define GlintAreaStipplePattern23Reg                       1
+#define GlintAreaStipplePattern23Off                  0x72b8
+#define GlintAreaStipplePattern23Sec                  0x82b8
+#define GlintAreaStipplePattern23SecReg               3
+#define GlintAreaStipplePattern23SecOff               0x72b8
+
+#define GlintAreaStipplePattern24                     0x82c0
+#define GlintAreaStipplePattern24Tag                  0x0058
+#define GlintAreaStipplePattern24Reg                       1
+#define GlintAreaStipplePattern24Off                  0x72c0
+#define GlintAreaStipplePattern24Sec                  0x82c0
+#define GlintAreaStipplePattern24SecReg               3
+#define GlintAreaStipplePattern24SecOff               0x72c0
+
+#define GlintAreaStipplePattern25                     0x82c8
+#define GlintAreaStipplePattern25Tag                  0x0059
+#define GlintAreaStipplePattern25Reg                       1
+#define GlintAreaStipplePattern25Off                  0x72c8
+#define GlintAreaStipplePattern25Sec                  0x82c8
+#define GlintAreaStipplePattern25SecReg               3
+#define GlintAreaStipplePattern25SecOff               0x72c8
+
+#define GlintAreaStipplePattern26                     0x82d0
+#define GlintAreaStipplePattern26Tag                  0x005a
+#define GlintAreaStipplePattern26Reg                       1
+#define GlintAreaStipplePattern26Off                  0x72d0
+#define GlintAreaStipplePattern26Sec                  0x82d0
+#define GlintAreaStipplePattern26SecReg               3
+#define GlintAreaStipplePattern26SecOff               0x72d0
+
+#define GlintAreaStipplePattern27                     0x82d8
+#define GlintAreaStipplePattern27Tag                  0x005b
+#define GlintAreaStipplePattern27Reg                       1
+#define GlintAreaStipplePattern27Off                  0x72d8
+#define GlintAreaStipplePattern27Sec                  0x82d8
+#define GlintAreaStipplePattern27SecReg               3
+#define GlintAreaStipplePattern27SecOff               0x72d8
+
+#define GlintAreaStipplePattern28                     0x82e0
+#define GlintAreaStipplePattern28Tag                  0x005c
+#define GlintAreaStipplePattern28Reg                       1
+#define GlintAreaStipplePattern28Off                  0x72e0
+#define GlintAreaStipplePattern28Sec                  0x82e0
+#define GlintAreaStipplePattern28SecReg               3
+#define GlintAreaStipplePattern28SecOff               0x72e0
+
+#define GlintAreaStipplePattern29                     0x82e8
+#define GlintAreaStipplePattern29Tag                  0x005d
+#define GlintAreaStipplePattern29Reg                       1
+#define GlintAreaStipplePattern29Off                  0x72e8
+#define GlintAreaStipplePattern29Sec                  0x82e8
+#define GlintAreaStipplePattern29SecReg               3
+#define GlintAreaStipplePattern29SecOff               0x72e8
+
+#define GlintAreaStipplePattern30                     0x82f0
+#define GlintAreaStipplePattern30Tag                  0x005e
+#define GlintAreaStipplePattern30Reg                       1
+#define GlintAreaStipplePattern30Off                  0x72f0
+#define GlintAreaStipplePattern30Sec                  0x82f0
+#define GlintAreaStipplePattern30SecReg               3
+#define GlintAreaStipplePattern30SecOff               0x72f0
+
+#define GlintAreaStipplePattern31                     0x82f8
+#define GlintAreaStipplePattern31Tag                  0x005f
+#define GlintAreaStipplePattern31Reg                       1
+#define GlintAreaStipplePattern31Off                  0x72f8
+#define GlintAreaStipplePattern31Sec                  0x82f8
+#define GlintAreaStipplePattern31SecReg               3
+#define GlintAreaStipplePattern31SecOff               0x72f8
+
+#define GlintRouterMode                               0x8840
+#define GlintRouterModeTag                            0x0108
+#define GlintRouterModeReg                                 1
+#define GlintRouterModeOff                            0x7840
+#define GlintRouterModeSec                            0x8840
+#define GlintRouterModeSecReg                         3
+#define GlintRouterModeSecOff                         0x7840
+
+#define GlintTextureAddressMode                       0x8380
+#define GlintTextureAddressModeTag                    0x0070
+#define GlintTextureAddressModeReg                         1
+#define GlintTextureAddressModeOff                    0x7380
+#define GlintTextureAddressModeSec                    0x8380
+#define GlintTextureAddressModeSecReg                 3
+#define GlintTextureAddressModeSecOff                 0x7380
+
+#define GlintSStart                                   0x8388
+#define GlintSStartTag                                0x0071
+#define GlintSStartReg                                     1
+#define GlintSStartOff                                0x7388
+#define GlintSStartSec                                0x8388
+#define GlintSStartSecReg                             3
+#define GlintSStartSecOff                             0x7388
+
+#define GlintdSdx                                     0x8390
+#define GlintdSdxTag                                  0x0072
+#define GlintdSdxReg                                       1
+#define GlintdSdxOff                                  0x7390
+#define GlintdSdxSec                                  0x8390
+#define GlintdSdxSecReg                               3
+#define GlintdSdxSecOff                               0x7390
+
+#define GlintdSdyDom                                  0x8398
+#define GlintdSdyDomTag                               0x0073
+#define GlintdSdyDomReg                                    1
+#define GlintdSdyDomOff                               0x7398
+#define GlintdSdyDomSec                               0x8398
+#define GlintdSdyDomSecReg                            3
+#define GlintdSdyDomSecOff                            0x7398
+
+#define GlintTStart                                   0x83a0
+#define GlintTStartTag                                0x0074
+#define GlintTStartReg                                     1
+#define GlintTStartOff                                0x73a0
+#define GlintTStartSec                                0x83a0
+#define GlintTStartSecReg                             3
+#define GlintTStartSecOff                             0x73a0
+
+#define GlintdTdx                                     0x83a8
+#define GlintdTdxTag                                  0x0075
+#define GlintdTdxReg                                       1
+#define GlintdTdxOff                                  0x73a8
+#define GlintdTdxSec                                  0x83a8
+#define GlintdTdxSecReg                               3
+#define GlintdTdxSecOff                               0x73a8
+
+#define GlintdTdyDom                                  0x83b0
+#define GlintdTdyDomTag                               0x0076
+#define GlintdTdyDomReg                                    1
+#define GlintdTdyDomOff                               0x73b0
+#define GlintdTdyDomSec                               0x83b0
+#define GlintdTdyDomSecReg                            3
+#define GlintdTdyDomSecOff                            0x73b0
+
+#define GlintQStart                                   0x83b8
+#define GlintQStartTag                                0x0077
+#define GlintQStartReg                                     1
+#define GlintQStartOff                                0x73b8
+#define GlintQStartSec                                0x83b8
+#define GlintQStartSecReg                             3
+#define GlintQStartSecOff                             0x73b8
+
+#define GlintdQdx                                     0x83c0
+#define GlintdQdxTag                                  0x0078
+#define GlintdQdxReg                                       1
+#define GlintdQdxOff                                  0x73c0
+#define GlintdQdxSec                                  0x83c0
+#define GlintdQdxSecReg                               3
+#define GlintdQdxSecOff                               0x73c0
+
+#define GlintdQdyDom                                  0x83c8
+#define GlintdQdyDomTag                               0x0079
+#define GlintdQdyDomReg                                    1
+#define GlintdQdyDomOff                               0x73c8
+#define GlintdQdyDomSec                               0x83c8
+#define GlintdQdyDomSecReg                            3
+#define GlintdQdyDomSecOff                            0x73c8
+
+#define GlintLOD                                      0x83d0
+#define GlintLODTag                                   0x007a
+#define GlintLODReg                                        1
+#define GlintLODOff                                   0x73d0
+#define GlintLODSec                                   0x83d0
+#define GlintLODSecReg                                3
+#define GlintLODSecOff                                0x73d0
+
+#define GlintdSdy                                     0x83d8
+#define GlintdSdyTag                                  0x007b
+#define GlintdSdyReg                                       1
+#define GlintdSdyOff                                  0x73d8
+#define GlintdSdySec                                  0x83d8
+#define GlintdSdySecReg                               3
+#define GlintdSdySecOff                               0x73d8
+
+#define GlintdTdy                                     0x83e0
+#define GlintdTdyTag                                  0x007c
+#define GlintdTdyReg                                       1
+#define GlintdTdyOff                                  0x73e0
+#define GlintdTdySec                                  0x83e0
+#define GlintdTdySecReg                               3
+#define GlintdTdySecOff                               0x73e0
+
+#define GlintdQdy                                     0x83e8
+#define GlintdQdyTag                                  0x007d
+#define GlintdQdyReg                                       1
+#define GlintdQdyOff                                  0x73e8
+#define GlintdQdySec                                  0x83e8
+#define GlintdQdySecReg                               3
+#define GlintdQdySecOff                               0x73e8
+
+#define GlintTextureReadMode                          0x8480
+#define GlintTextureReadModeTag                       0x0090
+#define GlintTextureReadModeReg                            1
+#define GlintTextureReadModeOff                       0x7480
+#define GlintTextureReadModeSec                       0x8480
+#define GlintTextureReadModeSecReg                    3
+#define GlintTextureReadModeSecOff                    0x7480
+
+#define GlintTextureFormat                            0x8488
+#define GlintTextureFormatTag                         0x0091
+#define GlintTextureFormatReg                              1
+#define GlintTextureFormatOff                         0x7488
+#define GlintTextureFormatSec                         0x8488
+#define GlintTextureFormatSecReg                      3
+#define GlintTextureFormatSecOff                      0x7488
+
+#define GlintTextureCacheControl                      0x8490
+#define GlintTextureCacheControlTag                   0x0092
+#define GlintTextureCacheControlReg                        1
+#define GlintTextureCacheControlOff                   0x7490
+#define GlintTextureCacheControlSec                   0x8490
+#define GlintTextureCacheControlSecReg                3
+#define GlintTextureCacheControlSecOff                0x7490
+
+#define GlintGLINTBorderColor                         0x84a8
+#define GlintGLINTBorderColorTag                      0x0095
+#define GlintGLINTBorderColorReg                           1
+#define GlintGLINTBorderColorOff                      0x74a8
+#define GlintGLINTBorderColorSec                      0x84a8
+#define GlintGLINTBorderColorSecReg                   3
+#define GlintGLINTBorderColorSecOff                   0x74a8
+
+#define GlintTexelLUTIndex                            0x84c0
+#define GlintTexelLUTIndexTag                         0x0098
+#define GlintTexelLUTIndexReg                              1
+#define GlintTexelLUTIndexOff                         0x74c0
+#define GlintTexelLUTIndexSec                         0x84c0
+#define GlintTexelLUTIndexSecReg                      3
+#define GlintTexelLUTIndexSecOff                      0x74c0
+
+#define GlintTexelLUTData                             0x84c8
+#define GlintTexelLUTDataTag                          0x0099
+#define GlintTexelLUTDataReg                               1
+#define GlintTexelLUTDataOff                          0x74c8
+#define GlintTexelLUTDataSec                          0x84c8
+#define GlintTexelLUTDataSecReg                       3
+#define GlintTexelLUTDataSecOff                       0x74c8
+
+#define GlintTexelLUTAddress                          0x84d0
+#define GlintTexelLUTAddressTag                       0x009a
+#define GlintTexelLUTAddressReg                            1
+#define GlintTexelLUTAddressOff                       0x74d0
+#define GlintTexelLUTAddressSec                       0x84d0
+#define GlintTexelLUTAddressSecReg                    3
+#define GlintTexelLUTAddressSecOff                    0x74d0
+
+#define GlintTexelLUTTransfer                         0x84d8
+#define GlintTexelLUTTransferTag                      0x009b
+#define GlintTexelLUTTransferReg                           1
+#define GlintTexelLUTTransferOff                      0x74d8
+#define GlintTexelLUTTransferSec                      0x84d8
+#define GlintTexelLUTTransferSecReg                   3
+#define GlintTexelLUTTransferSecOff                   0x74d8
+
+#define GlintTextureFilterMode                        0x84e0
+#define GlintTextureFilterModeTag                     0x009c
+#define GlintTextureFilterModeReg                          1
+#define GlintTextureFilterModeOff                     0x74e0
+#define GlintTextureFilterModeSec                     0x84e0
+#define GlintTextureFilterModeSecReg                  3
+#define GlintTextureFilterModeSecOff                  0x74e0
+
+#define GlintTextureChromaUpper                       0x84e8
+#define GlintTextureChromaUpperTag                    0x009d
+#define GlintTextureChromaUpperReg                         1
+#define GlintTextureChromaUpperOff                    0x74e8
+#define GlintTextureChromaUpperSec                    0x84e8
+#define GlintTextureChromaUpperSecReg                 3
+#define GlintTextureChromaUpperSecOff                 0x74e8
+
+#define GlintTextureChromaLower                       0x84f0
+#define GlintTextureChromaLowerTag                    0x009e
+#define GlintTextureChromaLowerReg                         1
+#define GlintTextureChromaLowerOff                    0x74f0
+#define GlintTextureChromaLowerSec                    0x84f0
+#define GlintTextureChromaLowerSecReg                 3
+#define GlintTextureChromaLowerSecOff                 0x74f0
+
+#define GlintTxBaseAddr0                              0x8500
+#define GlintTxBaseAddr0Tag                           0x00a0
+#define GlintTxBaseAddr0Reg                                1
+#define GlintTxBaseAddr0Off                           0x7500
+#define GlintTxBaseAddr0Sec                           0x8500
+#define GlintTxBaseAddr0SecReg                        3
+#define GlintTxBaseAddr0SecOff                        0x7500
+
+#define GlintTxBaseAddr1                              0x8508
+#define GlintTxBaseAddr1Tag                           0x00a1
+#define GlintTxBaseAddr1Reg                                1
+#define GlintTxBaseAddr1Off                           0x7508
+#define GlintTxBaseAddr1Sec                           0x8508
+#define GlintTxBaseAddr1SecReg                        3
+#define GlintTxBaseAddr1SecOff                        0x7508
+
+#define GlintTxBaseAddr2                              0x8510
+#define GlintTxBaseAddr2Tag                           0x00a2
+#define GlintTxBaseAddr2Reg                                1
+#define GlintTxBaseAddr2Off                           0x7510
+#define GlintTxBaseAddr2Sec                           0x8510
+#define GlintTxBaseAddr2SecReg                        3
+#define GlintTxBaseAddr2SecOff                        0x7510
+
+#define GlintTxBaseAddr3                              0x8518
+#define GlintTxBaseAddr3Tag                           0x00a3
+#define GlintTxBaseAddr3Reg                                1
+#define GlintTxBaseAddr3Off                           0x7518
+#define GlintTxBaseAddr3Sec                           0x8518
+#define GlintTxBaseAddr3SecReg                        3
+#define GlintTxBaseAddr3SecOff                        0x7518
+
+#define GlintTxBaseAddr4                              0x8520
+#define GlintTxBaseAddr4Tag                           0x00a4
+#define GlintTxBaseAddr4Reg                                1
+#define GlintTxBaseAddr4Off                           0x7520
+#define GlintTxBaseAddr4Sec                           0x8520
+#define GlintTxBaseAddr4SecReg                        3
+#define GlintTxBaseAddr4SecOff                        0x7520
+
+#define GlintTxBaseAddr5                              0x8528
+#define GlintTxBaseAddr5Tag                           0x00a5
+#define GlintTxBaseAddr5Reg                                1
+#define GlintTxBaseAddr5Off                           0x7528
+#define GlintTxBaseAddr5Sec                           0x8528
+#define GlintTxBaseAddr5SecReg                        3
+#define GlintTxBaseAddr5SecOff                        0x7528
+
+#define GlintTxBaseAddr6                              0x8530
+#define GlintTxBaseAddr6Tag                           0x00a6
+#define GlintTxBaseAddr6Reg                                1
+#define GlintTxBaseAddr6Off                           0x7530
+#define GlintTxBaseAddr6Sec                           0x8530
+#define GlintTxBaseAddr6SecReg                        3
+#define GlintTxBaseAddr6SecOff                        0x7530
+
+#define GlintTxBaseAddr7                              0x8538
+#define GlintTxBaseAddr7Tag                           0x00a7
+#define GlintTxBaseAddr7Reg                                1
+#define GlintTxBaseAddr7Off                           0x7538
+#define GlintTxBaseAddr7Sec                           0x8538
+#define GlintTxBaseAddr7SecReg                        3
+#define GlintTxBaseAddr7SecOff                        0x7538
+
+#define GlintTxBaseAddr8                              0x8540
+#define GlintTxBaseAddr8Tag                           0x00a8
+#define GlintTxBaseAddr8Reg                                1
+#define GlintTxBaseAddr8Off                           0x7540
+#define GlintTxBaseAddr8Sec                           0x8540
+#define GlintTxBaseAddr8SecReg                        3
+#define GlintTxBaseAddr8SecOff                        0x7540
+
+#define GlintTxBaseAddr9                              0x8548
+#define GlintTxBaseAddr9Tag                           0x00a9
+#define GlintTxBaseAddr9Reg                                1
+#define GlintTxBaseAddr9Off                           0x7548
+#define GlintTxBaseAddr9Sec                           0x8548
+#define GlintTxBaseAddr9SecReg                        3
+#define GlintTxBaseAddr9SecOff                        0x7548
+
+#define GlintTxBaseAddr10                             0x8550
+#define GlintTxBaseAddr10Tag                          0x00aa
+#define GlintTxBaseAddr10Reg                               1
+#define GlintTxBaseAddr10Off                          0x7550
+#define GlintTxBaseAddr10Sec                          0x8550
+#define GlintTxBaseAddr10SecReg                       3
+#define GlintTxBaseAddr10SecOff                       0x7550
+
+#define GlintTxBaseAddr11                             0x8558
+#define GlintTxBaseAddr11Tag                          0x00ab
+#define GlintTxBaseAddr11Reg                               1
+#define GlintTxBaseAddr11Off                          0x7558
+#define GlintTxBaseAddr11Sec                          0x8558
+#define GlintTxBaseAddr11SecReg                       3
+#define GlintTxBaseAddr11SecOff                       0x7558
+
+#define GlintTxBaseAddr12                             0x8560
+#define GlintTxBaseAddr12Tag                          0x00ac
+#define GlintTxBaseAddr12Reg                               1
+#define GlintTxBaseAddr12Off                          0x7560
+#define GlintTxBaseAddr12Sec                          0x8560
+#define GlintTxBaseAddr12SecReg                       3
+#define GlintTxBaseAddr12SecOff                       0x7560
+
+#define GlintTexelLUT0                                0x8e80
+#define GlintTexelLUT0Tag                             0x01d0
+#define GlintTexelLUT0Reg                                  1
+#define GlintTexelLUT0Off                             0x7e80
+#define GlintTexelLUT0Sec                             0x8e80
+#define GlintTexelLUT0SecReg                          3
+#define GlintTexelLUT0SecOff                          0x7e80
+
+#define GlintTexelLUT1                                0x8e88
+#define GlintTexelLUT1Tag                             0x01d1
+#define GlintTexelLUT1Reg                                  1
+#define GlintTexelLUT1Off                             0x7e88
+#define GlintTexelLUT1Sec                             0x8e88
+#define GlintTexelLUT1SecReg                          3
+#define GlintTexelLUT1SecOff                          0x7e88
+
+#define GlintTexelLUT2                                0x8e90
+#define GlintTexelLUT2Tag                             0x01d2
+#define GlintTexelLUT2Reg                                  1
+#define GlintTexelLUT2Off                             0x7e90
+#define GlintTexelLUT2Sec                             0x8e90
+#define GlintTexelLUT2SecReg                          3
+#define GlintTexelLUT2SecOff                          0x7e90
+
+#define GlintTexelLUT3                                0x8e98
+#define GlintTexelLUT3Tag                             0x01d3
+#define GlintTexelLUT3Reg                                  1
+#define GlintTexelLUT3Off                             0x7e98
+#define GlintTexelLUT3Sec                             0x8e98
+#define GlintTexelLUT3SecReg                          3
+#define GlintTexelLUT3SecOff                          0x7e98
+
+#define GlintTexelLUT4                                0x8ea0
+#define GlintTexelLUT4Tag                             0x01d4
+#define GlintTexelLUT4Reg                                  1
+#define GlintTexelLUT4Off                             0x7ea0
+#define GlintTexelLUT4Sec                             0x8ea0
+#define GlintTexelLUT4SecReg                          3
+#define GlintTexelLUT4SecOff                          0x7ea0
+
+#define GlintTexelLUT5                                0x8ea8
+#define GlintTexelLUT5Tag                             0x01d5
+#define GlintTexelLUT5Reg                                  1
+#define GlintTexelLUT5Off                             0x7ea8
+#define GlintTexelLUT5Sec                             0x8ea8
+#define GlintTexelLUT5SecReg                          3
+#define GlintTexelLUT5SecOff                          0x7ea8
+
+#define GlintTexelLUT6                                0x8eb0
+#define GlintTexelLUT6Tag                             0x01d6
+#define GlintTexelLUT6Reg                                  1
+#define GlintTexelLUT6Off                             0x7eb0
+#define GlintTexelLUT6Sec                             0x8eb0
+#define GlintTexelLUT6SecReg                          3
+#define GlintTexelLUT6SecOff                          0x7eb0
+
+#define GlintTexelLUT7                                0x8eb8
+#define GlintTexelLUT7Tag                             0x01d7
+#define GlintTexelLUT7Reg                                  1
+#define GlintTexelLUT7Off                             0x7eb8
+#define GlintTexelLUT7Sec                             0x8eb8
+#define GlintTexelLUT7SecReg                          3
+#define GlintTexelLUT7SecOff                          0x7eb8
+
+#define GlintTexelLUT8                                0x8ec0
+#define GlintTexelLUT8Tag                             0x01d8
+#define GlintTexelLUT8Reg                                  1
+#define GlintTexelLUT8Off                             0x7ec0
+#define GlintTexelLUT8Sec                             0x8ec0
+#define GlintTexelLUT8SecReg                          3
+#define GlintTexelLUT8SecOff                          0x7ec0
+
+#define GlintTexelLUT9                                0x8ec8
+#define GlintTexelLUT9Tag                             0x01d9
+#define GlintTexelLUT9Reg                                  1
+#define GlintTexelLUT9Off                             0x7ec8
+#define GlintTexelLUT9Sec                             0x8ec8
+#define GlintTexelLUT9SecReg                          3
+#define GlintTexelLUT9SecOff                          0x7ec8
+
+#define GlintTexelLUT10                               0x8ed0
+#define GlintTexelLUT10Tag                            0x01da
+#define GlintTexelLUT10Reg                                 1
+#define GlintTexelLUT10Off                            0x7ed0
+#define GlintTexelLUT10Sec                            0x8ed0
+#define GlintTexelLUT10SecReg                         3
+#define GlintTexelLUT10SecOff                         0x7ed0
+
+#define GlintTexelLUT11                               0x8ed8
+#define GlintTexelLUT11Tag                            0x01db
+#define GlintTexelLUT11Reg                                 1
+#define GlintTexelLUT11Off                            0x7ed8
+#define GlintTexelLUT11Sec                            0x8ed8
+#define GlintTexelLUT11SecReg                         3
+#define GlintTexelLUT11SecOff                         0x7ed8
+
+#define GlintTexelLUT12                               0x8ee0
+#define GlintTexelLUT12Tag                            0x01dc
+#define GlintTexelLUT12Reg                                 1
+#define GlintTexelLUT12Off                            0x7ee0
+#define GlintTexelLUT12Sec                            0x8ee0
+#define GlintTexelLUT12SecReg                         3
+#define GlintTexelLUT12SecOff                         0x7ee0
+
+#define GlintTexelLUT13                               0x8ee8
+#define GlintTexelLUT13Tag                            0x01dd
+#define GlintTexelLUT13Reg                                 1
+#define GlintTexelLUT13Off                            0x7ee8
+#define GlintTexelLUT13Sec                            0x8ee8
+#define GlintTexelLUT13SecReg                         3
+#define GlintTexelLUT13SecOff                         0x7ee8
+
+#define GlintTexelLUT14                               0x8ef0
+#define GlintTexelLUT14Tag                            0x01de
+#define GlintTexelLUT14Reg                                 1
+#define GlintTexelLUT14Off                            0x7ef0
+#define GlintTexelLUT14Sec                            0x8ef0
+#define GlintTexelLUT14SecReg                         3
+#define GlintTexelLUT14SecOff                         0x7ef0
+
+#define GlintTexelLUT15                               0x8ef8
+#define GlintTexelLUT15Tag                            0x01df
+#define GlintTexelLUT15Reg                                 1
+#define GlintTexelLUT15Off                            0x7ef8
+#define GlintTexelLUT15Sec                            0x8ef8
+#define GlintTexelLUT15SecReg                         3
+#define GlintTexelLUT15SecOff                         0x7ef8
+
+#define GlintTexel0                                   0x8600
+#define GlintTexel0Tag                                0x00c0
+#define GlintTexel0Reg                                     1
+#define GlintTexel0Off                                0x7600
+#define GlintTexel0Sec                                0x8600
+#define GlintTexel0SecReg                             3
+#define GlintTexel0SecOff                             0x7600
+
+#define GlintTexel1                                   0x8608
+#define GlintTexel1Tag                                0x00c1
+#define GlintTexel1Reg                                     1
+#define GlintTexel1Off                                0x7608
+#define GlintTexel1Sec                                0x8608
+#define GlintTexel1SecReg                             3
+#define GlintTexel1SecOff                             0x7608
+
+#define GlintTexel2                                   0x8610
+#define GlintTexel2Tag                                0x00c2
+#define GlintTexel2Reg                                     1
+#define GlintTexel2Off                                0x7610
+#define GlintTexel2Sec                                0x8610
+#define GlintTexel2SecReg                             3
+#define GlintTexel2SecOff                             0x7610
+
+#define GlintTexel3                                   0x8618
+#define GlintTexel3Tag                                0x00c3
+#define GlintTexel3Reg                                     1
+#define GlintTexel3Off                                0x7618
+#define GlintTexel3Sec                                0x8618
+#define GlintTexel3SecReg                             3
+#define GlintTexel3SecOff                             0x7618
+
+#define GlintTexel4                                   0x8620
+#define GlintTexel4Tag                                0x00c4
+#define GlintTexel4Reg                                     1
+#define GlintTexel4Off                                0x7620
+#define GlintTexel4Sec                                0x8620
+#define GlintTexel4SecReg                             3
+#define GlintTexel4SecOff                             0x7620
+
+#define GlintTexel5                                   0x8628
+#define GlintTexel5Tag                                0x00c5
+#define GlintTexel5Reg                                     1
+#define GlintTexel5Off                                0x7628
+#define GlintTexel5Sec                                0x8628
+#define GlintTexel5SecReg                             3
+#define GlintTexel5SecOff                             0x7628
+
+#define GlintTexel6                                   0x8630
+#define GlintTexel6Tag                                0x00c6
+#define GlintTexel6Reg                                     1
+#define GlintTexel6Off                                0x7630
+#define GlintTexel6Sec                                0x8630
+#define GlintTexel6SecReg                             3
+#define GlintTexel6SecOff                             0x7630
+
+#define GlintTexel7                                   0x8638
+#define GlintTexel7Tag                                0x00c7
+#define GlintTexel7Reg                                     1
+#define GlintTexel7Off                                0x7638
+#define GlintTexel7Sec                                0x8638
+#define GlintTexel7SecReg                             3
+#define GlintTexel7SecOff                             0x7638
+
+#define GlintInterp0                                  0x8640
+#define GlintInterp0Tag                               0x00c8
+#define GlintInterp0Reg                                    1
+#define GlintInterp0Off                               0x7640
+#define GlintInterp0Sec                               0x8640
+#define GlintInterp0SecReg                            3
+#define GlintInterp0SecOff                            0x7640
+
+#define GlintInterp1                                  0x8648
+#define GlintInterp1Tag                               0x00c9
+#define GlintInterp1Reg                                    1
+#define GlintInterp1Off                               0x7648
+#define GlintInterp1Sec                               0x8648
+#define GlintInterp1SecReg                            3
+#define GlintInterp1SecOff                            0x7648
+
+#define GlintInterp2                                  0x8650
+#define GlintInterp2Tag                               0x00ca
+#define GlintInterp2Reg                                    1
+#define GlintInterp2Off                               0x7650
+#define GlintInterp2Sec                               0x8650
+#define GlintInterp2SecReg                            3
+#define GlintInterp2SecOff                            0x7650
+
+#define GlintInterp3                                  0x8658
+#define GlintInterp3Tag                               0x00cb
+#define GlintInterp3Reg                                    1
+#define GlintInterp3Off                               0x7658
+#define GlintInterp3Sec                               0x8658
+#define GlintInterp3SecReg                            3
+#define GlintInterp3SecOff                            0x7658
+
+#define GlintInterp4                                  0x8660
+#define GlintInterp4Tag                               0x00cc
+#define GlintInterp4Reg                                    1
+#define GlintInterp4Off                               0x7660
+#define GlintInterp4Sec                               0x8660
+#define GlintInterp4SecReg                            3
+#define GlintInterp4SecOff                            0x7660
+
+#define GlintTextureFilter                            0x8668
+#define GlintTextureFilterTag                         0x00cd
+#define GlintTextureFilterReg                              1
+#define GlintTextureFilterOff                         0x7668
+#define GlintTextureFilterSec                         0x8668
+#define GlintTextureFilterSecReg                      3
+#define GlintTextureFilterSecOff                      0x7668
+
+#define GlintTextureColorMode                         0x8680
+#define GlintTextureColorModeTag                      0x00d0
+#define GlintTextureColorModeReg                           1
+#define GlintTextureColorModeOff                      0x7680
+#define GlintTextureColorModeSec                      0x8680
+#define GlintTextureColorModeSecReg                   3
+#define GlintTextureColorModeSecOff                   0x7680
+
+#define GlintTextureEnvColor                          0x8688
+#define GlintTextureEnvColorTag                       0x00d1
+#define GlintTextureEnvColorReg                            1
+#define GlintTextureEnvColorOff                       0x7688
+#define GlintTextureEnvColorSec                       0x8688
+#define GlintTextureEnvColorSecReg                    3
+#define GlintTextureEnvColorSecOff                    0x7688
+
+#define GlintFogMode                                  0x8690
+#define GlintFogModeTag                               0x00d2
+#define GlintFogModeReg                                    1
+#define GlintFogModeOff                               0x7690
+#define GlintFogModeSec                               0x8690
+#define GlintFogModeSecReg                            3
+#define GlintFogModeSecOff                            0x7690
+
+#define GlintFogColor                                 0x8698
+#define GlintFogColorTag                              0x00d3
+#define GlintFogColorReg                                   1
+#define GlintFogColorOff                              0x7698
+#define GlintFogColorSec                              0x8698
+#define GlintFogColorSecReg                           3
+#define GlintFogColorSecOff                           0x7698
+
+#define GlintFStart                                   0x86a0
+#define GlintFStartTag                                0x00d4
+#define GlintFStartReg                                     1
+#define GlintFStartOff                                0x76a0
+#define GlintFStartSec                                0x86a0
+#define GlintFStartSecReg                             3
+#define GlintFStartSecOff                             0x76a0
+
+#define GlintdFdx                                     0x86a8
+#define GlintdFdxTag                                  0x00d5
+#define GlintdFdxReg                                       1
+#define GlintdFdxOff                                  0x76a8
+#define GlintdFdxSec                                  0x86a8
+#define GlintdFdxSecReg                               3
+#define GlintdFdxSecOff                               0x76a8
+
+#define GlintdFdyDom                                  0x86b0
+#define GlintdFdyDomTag                               0x00d6
+#define GlintdFdyDomReg                                    1
+#define GlintdFdyDomOff                               0x76b0
+#define GlintdFdyDomSec                               0x86b0
+#define GlintdFdyDomSecReg                            3
+#define GlintdFdyDomSecOff                            0x76b0
+
+#define GlintKsStart                                  0x86c8
+#define GlintKsStartTag                               0x00d9
+#define GlintKsStartReg                                    1
+#define GlintKsStartOff                               0x76c8
+#define GlintKsStartSec                               0x86c8
+#define GlintKsStartSecReg                            3
+#define GlintKsStartSecOff                            0x76c8
+
+#define GlintdKsdx                                    0x86d0
+#define GlintdKsdxTag                                 0x00da
+#define GlintdKsdxReg                                      1
+#define GlintdKsdxOff                                 0x76d0
+#define GlintdKsdxSec                                 0x86d0
+#define GlintdKsdxSecReg                              3
+#define GlintdKsdxSecOff                              0x76d0
+
+#define GlintdKsdyDom                                 0x86d8
+#define GlintdKsdyDomTag                              0x00db
+#define GlintdKsdyDomReg                                   1
+#define GlintdKsdyDomOff                              0x76d8
+#define GlintdKsdyDomSec                              0x86d8
+#define GlintdKsdyDomSecReg                           3
+#define GlintdKsdyDomSecOff                           0x76d8
+
+#define GlintKdStart                                  0x86e0
+#define GlintKdStartTag                               0x00dc
+#define GlintKdStartReg                                    1
+#define GlintKdStartOff                               0x76e0
+#define GlintKdStartSec                               0x86e0
+#define GlintKdStartSecReg                            3
+#define GlintKdStartSecOff                            0x76e0
+
+#define GlintdKdStart                                 0x86e8
+#define GlintdKdStartTag                              0x00dd
+#define GlintdKdStartReg                                   1
+#define GlintdKdStartOff                              0x76e8
+#define GlintdKdStartSec                              0x86e8
+#define GlintdKdStartSecReg                           3
+#define GlintdKdStartSecOff                           0x76e8
+
+#define GlintdKddyDom                                 0x86f0
+#define GlintdKddyDomTag                              0x00de
+#define GlintdKddyDomReg                                   1
+#define GlintdKddyDomOff                              0x76f0
+#define GlintdKddyDomSec                              0x86f0
+#define GlintdKddyDomSecReg                           3
+#define GlintdKddyDomSecOff                           0x76f0
+
+#define GlintRStart                                   0x8780
+#define GlintRStartTag                                0x00f0
+#define GlintRStartReg                                     1
+#define GlintRStartOff                                0x7780
+#define GlintRStartSec                                0x8780
+#define GlintRStartSecReg                             3
+#define GlintRStartSecOff                             0x7780
+
+#define GlintdRdx                                     0x8788
+#define GlintdRdxTag                                  0x00f1
+#define GlintdRdxReg                                       1
+#define GlintdRdxOff                                  0x7788
+#define GlintdRdxSec                                  0x8788
+#define GlintdRdxSecReg                               3
+#define GlintdRdxSecOff                               0x7788
+
+#define GlintdRdyDom                                  0x8790
+#define GlintdRdyDomTag                               0x00f2
+#define GlintdRdyDomReg                                    1
+#define GlintdRdyDomOff                               0x7790
+#define GlintdRdyDomSec                               0x8790
+#define GlintdRdyDomSecReg                            3
+#define GlintdRdyDomSecOff                            0x7790
+
+#define GlintGStart                                   0x8798
+#define GlintGStartTag                                0x00f3
+#define GlintGStartReg                                     1
+#define GlintGStartOff                                0x7798
+#define GlintGStartSec                                0x8798
+#define GlintGStartSecReg                             3
+#define GlintGStartSecOff                             0x7798
+
+#define GlintdGdx                                     0x87a0
+#define GlintdGdxTag                                  0x00f4
+#define GlintdGdxReg                                       1
+#define GlintdGdxOff                                  0x77a0
+#define GlintdGdxSec                                  0x87a0
+#define GlintdGdxSecReg                               3
+#define GlintdGdxSecOff                               0x77a0
+
+#define GlintdGdyDom                                  0x87a8
+#define GlintdGdyDomTag                               0x00f5
+#define GlintdGdyDomReg                                    1
+#define GlintdGdyDomOff                               0x77a8
+#define GlintdGdyDomSec                               0x87a8
+#define GlintdGdyDomSecReg                            3
+#define GlintdGdyDomSecOff                            0x77a8
+
+#define GlintBStart                                   0x87b0
+#define GlintBStartTag                                0x00f6
+#define GlintBStartReg                                     1
+#define GlintBStartOff                                0x77b0
+#define GlintBStartSec                                0x87b0
+#define GlintBStartSecReg                             3
+#define GlintBStartSecOff                             0x77b0
+
+#define GlintdBdx                                     0x87b8
+#define GlintdBdxTag                                  0x00f7
+#define GlintdBdxReg                                       1
+#define GlintdBdxOff                                  0x77b8
+#define GlintdBdxSec                                  0x87b8
+#define GlintdBdxSecReg                               3
+#define GlintdBdxSecOff                               0x77b8
+
+#define GlintdBdyDom                                  0x87c0
+#define GlintdBdyDomTag                               0x00f8
+#define GlintdBdyDomReg                                    1
+#define GlintdBdyDomOff                               0x77c0
+#define GlintdBdyDomSec                               0x87c0
+#define GlintdBdyDomSecReg                            3
+#define GlintdBdyDomSecOff                            0x77c0
+
+#define GlintAStart                                   0x87c8
+#define GlintAStartTag                                0x00f9
+#define GlintAStartReg                                     1
+#define GlintAStartOff                                0x77c8
+#define GlintAStartSec                                0x87c8
+#define GlintAStartSecReg                             3
+#define GlintAStartSecOff                             0x77c8
+
+#define GlintdAdx                                     0x87d0
+#define GlintdAdxTag                                  0x00fa
+#define GlintdAdxReg                                       1
+#define GlintdAdxOff                                  0x77d0
+#define GlintdAdxSec                                  0x87d0
+#define GlintdAdxSecReg                               3
+#define GlintdAdxSecOff                               0x77d0
+
+#define GlintdAdyDom                                  0x87d8
+#define GlintdAdyDomTag                               0x00fb
+#define GlintdAdyDomReg                                    1
+#define GlintdAdyDomOff                               0x77d8
+#define GlintdAdyDomSec                               0x87d8
+#define GlintdAdyDomSecReg                            3
+#define GlintdAdyDomSecOff                            0x77d8
+
+#define GlintColorDDAMode                             0x87e0
+#define GlintColorDDAModeTag                          0x00fc
+#define GlintColorDDAModeReg                               1
+#define GlintColorDDAModeOff                          0x77e0
+#define GlintColorDDAModeSec                          0x87e0
+#define GlintColorDDAModeSecReg                       3
+#define GlintColorDDAModeSecOff                       0x77e0
+
+#define GlintConstantColor                            0x87e8
+#define GlintConstantColorTag                         0x00fd
+#define GlintConstantColorReg                              1
+#define GlintConstantColorOff                         0x77e8
+#define GlintConstantColorSec                         0x87e8
+#define GlintConstantColorSecReg                      3
+#define GlintConstantColorSecOff                      0x77e8
+
+#define GlintGLINTColor                               0x87f0
+#define GlintGLINTColorTag                            0x00fe
+#define GlintGLINTColorReg                                 1
+#define GlintGLINTColorOff                            0x77f0
+#define GlintGLINTColorSec                            0x87f0
+#define GlintGLINTColorSecReg                         3
+#define GlintGLINTColorSecOff                         0x77f0
+
+#define GlintAlphaTestMode                            0x8800
+#define GlintAlphaTestModeTag                         0x0100
+#define GlintAlphaTestModeReg                              1
+#define GlintAlphaTestModeOff                         0x7800
+#define GlintAlphaTestModeSec                         0x8800
+#define GlintAlphaTestModeSecReg                      3
+#define GlintAlphaTestModeSecOff                      0x7800
+
+#define GlintAntialiasMode                            0x8808
+#define GlintAntialiasModeTag                         0x0101
+#define GlintAntialiasModeReg                              1
+#define GlintAntialiasModeOff                         0x7808
+#define GlintAntialiasModeSec                         0x8808
+#define GlintAntialiasModeSecReg                      3
+#define GlintAntialiasModeSecOff                      0x7808
+
+#define GlintAlphaBlendMode                           0x8810
+#define GlintAlphaBlendModeTag                        0x0102
+#define GlintAlphaBlendModeReg                             1
+#define GlintAlphaBlendModeOff                        0x7810
+#define GlintAlphaBlendModeSec                        0x8810
+#define GlintAlphaBlendModeSecReg                     3
+#define GlintAlphaBlendModeSecOff                     0x7810
+
+#define GlintChromaUpper                              0x8f08
+#define GlintChromaUpperTag                           0x01e1
+#define GlintChromaUpperReg                                1
+#define GlintChromaUpperOff                           0x7f08
+#define GlintChromaUpperSec                           0x8f08
+#define GlintChromaUpperSecReg                        3
+#define GlintChromaUpperSecOff                        0x7f08
+
+#define GlintChromaLower                              0x8f10
+#define GlintChromaLowerTag                           0x01e2
+#define GlintChromaLowerReg                                1
+#define GlintChromaLowerOff                           0x7f10
+#define GlintChromaLowerSec                           0x8f10
+#define GlintChromaLowerSecReg                        3
+#define GlintChromaLowerSecOff                        0x7f10
+
+#define GlintChromaTestMode                           0x8f18
+#define GlintChromaTestModeTag                        0x01e3
+#define GlintChromaTestModeReg                             1
+#define GlintChromaTestModeOff                        0x7f18
+#define GlintChromaTestModeSec                        0x8f18
+#define GlintChromaTestModeSecReg                     3
+#define GlintChromaTestModeSecOff                     0x7f18
+
+#define GlintDitherMode                               0x8818
+#define GlintDitherModeTag                            0x0103
+#define GlintDitherModeReg                                 1
+#define GlintDitherModeOff                            0x7818
+#define GlintDitherModeSec                            0x8818
+#define GlintDitherModeSecReg                         3
+#define GlintDitherModeSecOff                         0x7818
+
+#define GlintFBSoftwareWriteMask                      0x8820
+#define GlintFBSoftwareWriteMaskTag                   0x0104
+#define GlintFBSoftwareWriteMaskReg                        1
+#define GlintFBSoftwareWriteMaskOff                   0x7820
+#define GlintFBSoftwareWriteMaskSec                   0x8820
+#define GlintFBSoftwareWriteMaskSecReg                3
+#define GlintFBSoftwareWriteMaskSecOff                0x7820
+
+#define GlintLogicalOpMode                            0x8828
+#define GlintLogicalOpModeTag                         0x0105
+#define GlintLogicalOpModeReg                              1
+#define GlintLogicalOpModeOff                         0x7828
+#define GlintLogicalOpModeSec                         0x8828
+#define GlintLogicalOpModeSecReg                      3
+#define GlintLogicalOpModeSecOff                      0x7828
+
+#define GlintFBWriteData                              0x8830
+#define GlintFBWriteDataTag                           0x0106
+#define GlintFBWriteDataReg                                1
+#define GlintFBWriteDataOff                           0x7830
+#define GlintFBWriteDataSec                           0x8830
+#define GlintFBWriteDataSecReg                        3
+#define GlintFBWriteDataSecOff                        0x7830
+
+#define GlintLBReadMode                               0x8880
+#define GlintLBReadModeTag                            0x0110
+#define GlintLBReadModeReg                                 1
+#define GlintLBReadModeOff                            0x7880
+#define GlintLBReadModeSec                            0x8880
+#define GlintLBReadModeSecReg                         3
+#define GlintLBReadModeSecOff                         0x7880
+
+#define GlintLBReadFormat                             0x8888
+#define GlintLBReadFormatTag                          0x0111
+#define GlintLBReadFormatReg                               1
+#define GlintLBReadFormatOff                          0x7888
+#define GlintLBReadFormatSec                          0x8888
+#define GlintLBReadFormatSecReg                       3
+#define GlintLBReadFormatSecOff                       0x7888
+
+#define GlintLBSourceOffset                           0x8890
+#define GlintLBSourceOffsetTag                        0x0112
+#define GlintLBSourceOffsetReg                             1
+#define GlintLBSourceOffsetOff                        0x7890
+#define GlintLBSourceOffsetSec                        0x8890
+#define GlintLBSourceOffsetSecReg                     3
+#define GlintLBSourceOffsetSecOff                     0x7890
+
+#define GlintLBStencil                                0x88a8
+#define GlintLBStencilTag                             0x0115
+#define GlintLBStencilReg                                  1
+#define GlintLBStencilOff                             0x78a8
+#define GlintLBStencilSec                             0x88a8
+#define GlintLBStencilSecReg                          3
+#define GlintLBStencilSecOff                          0x78a8
+
+#define GlintLBDepth                                  0x88b0
+#define GlintLBDepthTag                               0x0116
+#define GlintLBDepthReg                                    1
+#define GlintLBDepthOff                               0x78b0
+#define GlintLBDepthSec                               0x88b0
+#define GlintLBDepthSecReg                            3
+#define GlintLBDepthSecOff                            0x78b0
+
+#define GlintLBWindowBase                             0x88b8
+#define GlintLBWindowBaseTag                          0x0117
+#define GlintLBWindowBaseReg                               1
+#define GlintLBWindowBaseOff                          0x78b8
+#define GlintLBWindowBaseSec                          0x88b8
+#define GlintLBWindowBaseSecReg                       3
+#define GlintLBWindowBaseSecOff                       0x78b8
+
+#define GlintLBWriteMode                              0x88c0
+#define GlintLBWriteModeTag                           0x0118
+#define GlintLBWriteModeReg                                1
+#define GlintLBWriteModeOff                           0x78c0
+#define GlintLBWriteModeSec                           0x88c0
+#define GlintLBWriteModeSecReg                        3
+#define GlintLBWriteModeSecOff                        0x78c0
+
+#define GlintLBWriteFormat                            0x88c8
+#define GlintLBWriteFormatTag                         0x0119
+#define GlintLBWriteFormatReg                              1
+#define GlintLBWriteFormatOff                         0x78c8
+#define GlintLBWriteFormatSec                         0x88c8
+#define GlintLBWriteFormatSecReg                      3
+#define GlintLBWriteFormatSecOff                      0x78c8
+
+#define GlintTextureData                              0x88e8
+#define GlintTextureDataTag                           0x011d
+#define GlintTextureDataReg                                1
+#define GlintTextureDataOff                           0x78e8
+#define GlintTextureDataSec                           0x88e8
+#define GlintTextureDataSecReg                        3
+#define GlintTextureDataSecOff                        0x78e8
+
+#define GlintTextureDownloadOffset                    0x88f0
+#define GlintTextureDownloadOffsetTag                 0x011e
+#define GlintTextureDownloadOffsetReg                      1
+#define GlintTextureDownloadOffsetOff                 0x78f0
+#define GlintTextureDownloadOffsetSec                 0x88f0
+#define GlintTextureDownloadOffsetSecReg              3
+#define GlintTextureDownloadOffsetSecOff              0x78f0
+
+#define GlintLBWindowOffset                           0x88f8
+#define GlintLBWindowOffsetTag                        0x011f
+#define GlintLBWindowOffsetReg                             1
+#define GlintLBWindowOffsetOff                        0x78f8
+#define GlintLBWindowOffsetSec                        0x88f8
+#define GlintLBWindowOffsetSecReg                     3
+#define GlintLBWindowOffsetSecOff                     0x78f8
+
+#define GlintGLINTWindow                              0x8980
+#define GlintGLINTWindowTag                           0x0130
+#define GlintGLINTWindowReg                                1
+#define GlintGLINTWindowOff                           0x7980
+#define GlintGLINTWindowSec                           0x8980
+#define GlintGLINTWindowSecReg                        3
+#define GlintGLINTWindowSecOff                        0x7980
+
+#define GlintStencilMode                              0x8988
+#define GlintStencilModeTag                           0x0131
+#define GlintStencilModeReg                                1
+#define GlintStencilModeOff                           0x7988
+#define GlintStencilModeSec                           0x8988
+#define GlintStencilModeSecReg                        3
+#define GlintStencilModeSecOff                        0x7988
+
+#define GlintStencilData                              0x8990
+#define GlintStencilDataTag                           0x0132
+#define GlintStencilDataReg                                1
+#define GlintStencilDataOff                           0x7990
+#define GlintStencilDataSec                           0x8990
+#define GlintStencilDataSecReg                        3
+#define GlintStencilDataSecOff                        0x7990
+
+#define GlintGLINTStencil                             0x8998
+#define GlintGLINTStencilTag                          0x0133
+#define GlintGLINTStencilReg                               1
+#define GlintGLINTStencilOff                          0x7998
+#define GlintGLINTStencilSec                          0x8998
+#define GlintGLINTStencilSecReg                       3
+#define GlintGLINTStencilSecOff                       0x7998
+
+#define GlintDepthMode                                0x89a0
+#define GlintDepthModeTag                             0x0134
+#define GlintDepthModeReg                                  1
+#define GlintDepthModeOff                             0x79a0
+#define GlintDepthModeSec                             0x89a0
+#define GlintDepthModeSecReg                          3
+#define GlintDepthModeSecOff                          0x79a0
+
+#define GlintGLINTDepth                               0x89a8
+#define GlintGLINTDepthTag                            0x0135
+#define GlintGLINTDepthReg                                 1
+#define GlintGLINTDepthOff                            0x79a8
+#define GlintGLINTDepthSec                            0x89a8
+#define GlintGLINTDepthSecReg                         3
+#define GlintGLINTDepthSecOff                         0x79a8
+
+#define GlintZStartU                                  0x89b0
+#define GlintZStartUTag                               0x0136
+#define GlintZStartUReg                                    1
+#define GlintZStartUOff                               0x79b0
+#define GlintZStartUSec                               0x89b0
+#define GlintZStartUSecReg                            3
+#define GlintZStartUSecOff                            0x79b0
+
+#define GlintZStartL                                  0x89b8
+#define GlintZStartLTag                               0x0137
+#define GlintZStartLReg                                    1
+#define GlintZStartLOff                               0x79b8
+#define GlintZStartLSec                               0x89b8
+#define GlintZStartLSecReg                            3
+#define GlintZStartLSecOff                            0x79b8
+
+#define GlintdZdxU                                    0x89c0
+#define GlintdZdxUTag                                 0x0138
+#define GlintdZdxUReg                                      1
+#define GlintdZdxUOff                                 0x79c0
+#define GlintdZdxUSec                                 0x89c0
+#define GlintdZdxUSecReg                              3
+#define GlintdZdxUSecOff                              0x79c0
+
+#define GlintdZdxL                                    0x89c8
+#define GlintdZdxLTag                                 0x0139
+#define GlintdZdxLReg                                      1
+#define GlintdZdxLOff                                 0x79c8
+#define GlintdZdxLSec                                 0x89c8
+#define GlintdZdxLSecReg                              3
+#define GlintdZdxLSecOff                              0x79c8
+
+#define GlintdZdyDomU                                 0x89d0
+#define GlintdZdyDomUTag                              0x013a
+#define GlintdZdyDomUReg                                   1
+#define GlintdZdyDomUOff                              0x79d0
+#define GlintdZdyDomUSec                              0x89d0
+#define GlintdZdyDomUSecReg                           3
+#define GlintdZdyDomUSecOff                           0x79d0
+
+#define GlintdZdyDomL                                 0x89d8
+#define GlintdZdyDomLTag                              0x013b
+#define GlintdZdyDomLReg                                   1
+#define GlintdZdyDomLOff                              0x79d8
+#define GlintdZdyDomLSec                              0x89d8
+#define GlintdZdyDomLSecReg                           3
+#define GlintdZdyDomLSecOff                           0x79d8
+
+#define GlintFastClearDepth                           0x89e0
+#define GlintFastClearDepthTag                        0x013c
+#define GlintFastClearDepthReg                             1
+#define GlintFastClearDepthOff                        0x79e0
+#define GlintFastClearDepthSec                        0x89e0
+#define GlintFastClearDepthSecReg                     3
+#define GlintFastClearDepthSecOff                     0x79e0
+
+#define GlintFBReadMode                               0x8a80
+#define GlintFBReadModeTag                            0x0150
+#define GlintFBReadModeReg                                 1
+#define GlintFBReadModeOff                            0x7a80
+#define GlintFBReadModeSec                            0x8a80
+#define GlintFBReadModeSecReg                         3
+#define GlintFBReadModeSecOff                         0x7a80
+
+#define GlintFBSourceOffset                           0x8a88
+#define GlintFBSourceOffsetTag                        0x0151
+#define GlintFBSourceOffsetReg                             1
+#define GlintFBSourceOffsetOff                        0x7a88
+#define GlintFBSourceOffsetSec                        0x8a88
+#define GlintFBSourceOffsetSecReg                     3
+#define GlintFBSourceOffsetSecOff                     0x7a88
+
+#define GlintFBPixelOffset                            0x8a90
+#define GlintFBPixelOffsetTag                         0x0152
+#define GlintFBPixelOffsetReg                              1
+#define GlintFBPixelOffsetOff                         0x7a90
+#define GlintFBPixelOffsetSec                         0x8a90
+#define GlintFBPixelOffsetSecReg                      3
+#define GlintFBPixelOffsetSecOff                      0x7a90
+
+#define GlintFBColor                                  0x8a98
+#define GlintFBColorTag                               0x0153
+#define GlintFBColorReg                                    1
+#define GlintFBColorOff                               0x7a98
+#define GlintFBColorSec                               0x8a98
+#define GlintFBColorSecReg                            3
+#define GlintFBColorSecOff                            0x7a98
+
+#define GlintFBData                                   0x8aa0
+#define GlintFBDataTag                                0x0154
+#define GlintFBDataReg                                     1
+#define GlintFBDataOff                                0x7aa0
+#define GlintFBDataSec                                0x8aa0
+#define GlintFBDataSecReg                             3
+#define GlintFBDataSecOff                             0x7aa0
+
+#define GlintFBSourceData                             0x8aa8
+#define GlintFBSourceDataTag                          0x0155
+#define GlintFBSourceDataReg                               1
+#define GlintFBSourceDataOff                          0x7aa8
+#define GlintFBSourceDataSec                          0x8aa8
+#define GlintFBSourceDataSecReg                       3
+#define GlintFBSourceDataSecOff                       0x7aa8
+
+#define GlintFBWindowBase                             0x8ab0
+#define GlintFBWindowBaseTag                          0x0156
+#define GlintFBWindowBaseReg                               1
+#define GlintFBWindowBaseOff                          0x7ab0
+#define GlintFBWindowBaseSec                          0x8ab0
+#define GlintFBWindowBaseSecReg                       3
+#define GlintFBWindowBaseSecOff                       0x7ab0
+
+#define GlintFBWriteMode                              0x8ab8
+#define GlintFBWriteModeTag                           0x0157
+#define GlintFBWriteModeReg                                1
+#define GlintFBWriteModeOff                           0x7ab8
+#define GlintFBWriteModeSec                           0x8ab8
+#define GlintFBWriteModeSecReg                        3
+#define GlintFBWriteModeSecOff                        0x7ab8
+
+#define GlintFBHardwareWriteMask                      0x8ac0
+#define GlintFBHardwareWriteMaskTag                   0x0158
+#define GlintFBHardwareWriteMaskReg                        1
+#define GlintFBHardwareWriteMaskOff                   0x7ac0
+#define GlintFBHardwareWriteMaskSec                   0x8ac0
+#define GlintFBHardwareWriteMaskSecReg                3
+#define GlintFBHardwareWriteMaskSecOff                0x7ac0
+
+#define GlintFBBlockColor                             0x8ac8
+#define GlintFBBlockColorTag                          0x0159
+#define GlintFBBlockColorReg                               1
+#define GlintFBBlockColorOff                          0x7ac8
+#define GlintFBBlockColorSec                          0x8ac8
+#define GlintFBBlockColorSecReg                       3
+#define GlintFBBlockColorSecOff                       0x7ac8
+
+#define GlintPatternRamMode                           0x8af8
+#define GlintPatternRamModeTag                        0x015f
+#define GlintPatternRamModeReg                             1
+#define GlintPatternRamModeOff                        0x7af8
+#define GlintPatternRamModeSec                        0x8af8
+#define GlintPatternRamModeSecReg                     3
+#define GlintPatternRamModeSecOff                     0x7af8
+
+#define GlintPatternRamData0                          0x8b00
+#define GlintPatternRamData0Tag                       0x0160
+#define GlintPatternRamData0Reg                            1
+#define GlintPatternRamData0Off                       0x7b00
+#define GlintPatternRamData0Sec                       0x8b00
+#define GlintPatternRamData0SecReg                    3
+#define GlintPatternRamData0SecOff                    0x7b00
+
+#define GlintPatternRamData1                          0x8b08
+#define GlintPatternRamData1Tag                       0x0161
+#define GlintPatternRamData1Reg                            1
+#define GlintPatternRamData1Off                       0x7b08
+#define GlintPatternRamData1Sec                       0x8b08
+#define GlintPatternRamData1SecReg                    3
+#define GlintPatternRamData1SecOff                    0x7b08
+
+#define GlintPatternRamData2                          0x8b10
+#define GlintPatternRamData2Tag                       0x0162
+#define GlintPatternRamData2Reg                            1
+#define GlintPatternRamData2Off                       0x7b10
+#define GlintPatternRamData2Sec                       0x8b10
+#define GlintPatternRamData2SecReg                    3
+#define GlintPatternRamData2SecOff                    0x7b10
+
+#define GlintPatternRamData3                          0x8b18
+#define GlintPatternRamData3Tag                       0x0163
+#define GlintPatternRamData3Reg                            1
+#define GlintPatternRamData3Off                       0x7b18
+#define GlintPatternRamData3Sec                       0x8b18
+#define GlintPatternRamData3SecReg                    3
+#define GlintPatternRamData3SecOff                    0x7b18
+
+#define GlintPatternRamData4                          0x8b20
+#define GlintPatternRamData4Tag                       0x0164
+#define GlintPatternRamData4Reg                            1
+#define GlintPatternRamData4Off                       0x7b20
+#define GlintPatternRamData4Sec                       0x8b20
+#define GlintPatternRamData4SecReg                    3
+#define GlintPatternRamData4SecOff                    0x7b20
+
+#define GlintPatternRamData5                          0x8b28
+#define GlintPatternRamData5Tag                       0x0165
+#define GlintPatternRamData5Reg                            1
+#define GlintPatternRamData5Off                       0x7b28
+#define GlintPatternRamData5Sec                       0x8b28
+#define GlintPatternRamData5SecReg                    3
+#define GlintPatternRamData5SecOff                    0x7b28
+
+#define GlintPatternRamData6                          0x8b30
+#define GlintPatternRamData6Tag                       0x0166
+#define GlintPatternRamData6Reg                            1
+#define GlintPatternRamData6Off                       0x7b30
+#define GlintPatternRamData6Sec                       0x8b30
+#define GlintPatternRamData6SecReg                    3
+#define GlintPatternRamData6SecOff                    0x7b30
+
+#define GlintPatternRamData7                          0x8b38
+#define GlintPatternRamData7Tag                       0x0167
+#define GlintPatternRamData7Reg                            1
+#define GlintPatternRamData7Off                       0x7b38
+#define GlintPatternRamData7Sec                       0x8b38
+#define GlintPatternRamData7SecReg                    3
+#define GlintPatternRamData7SecOff                    0x7b38
+
+#define GlintPatternRamData8                          0x8b40
+#define GlintPatternRamData8Tag                       0x0168
+#define GlintPatternRamData8Reg                            1
+#define GlintPatternRamData8Off                       0x7b40
+#define GlintPatternRamData8Sec                       0x8b40
+#define GlintPatternRamData8SecReg                    3
+#define GlintPatternRamData8SecOff                    0x7b40
+
+#define GlintPatternRamData9                          0x8b48
+#define GlintPatternRamData9Tag                       0x0169
+#define GlintPatternRamData9Reg                            1
+#define GlintPatternRamData9Off                       0x7b48
+#define GlintPatternRamData9Sec                       0x8b48
+#define GlintPatternRamData9SecReg                    3
+#define GlintPatternRamData9SecOff                    0x7b48
+
+#define GlintPatternRamData10                         0x8b50
+#define GlintPatternRamData10Tag                      0x016a
+#define GlintPatternRamData10Reg                           1
+#define GlintPatternRamData10Off                      0x7b50
+#define GlintPatternRamData10Sec                      0x8b50
+#define GlintPatternRamData10SecReg                   3
+#define GlintPatternRamData10SecOff                   0x7b50
+
+#define GlintPatternRamData11                         0x8b58
+#define GlintPatternRamData11Tag                      0x016b
+#define GlintPatternRamData11Reg                           1
+#define GlintPatternRamData11Off                      0x7b58
+#define GlintPatternRamData11Sec                      0x8b58
+#define GlintPatternRamData11SecReg                   3
+#define GlintPatternRamData11SecOff                   0x7b58
+
+#define GlintPatternRamData12                         0x8b60
+#define GlintPatternRamData12Tag                      0x016c
+#define GlintPatternRamData12Reg                           1
+#define GlintPatternRamData12Off                      0x7b60
+#define GlintPatternRamData12Sec                      0x8b60
+#define GlintPatternRamData12SecReg                   3
+#define GlintPatternRamData12SecOff                   0x7b60
+
+#define GlintPatternRamData13                         0x8b68
+#define GlintPatternRamData13Tag                      0x016d
+#define GlintPatternRamData13Reg                           1
+#define GlintPatternRamData13Off                      0x7b68
+#define GlintPatternRamData13Sec                      0x8b68
+#define GlintPatternRamData13SecReg                   3
+#define GlintPatternRamData13SecOff                   0x7b68
+
+#define GlintPatternRamData14                         0x8b70
+#define GlintPatternRamData14Tag                      0x016e
+#define GlintPatternRamData14Reg                           1
+#define GlintPatternRamData14Off                      0x7b70
+#define GlintPatternRamData14Sec                      0x8b70
+#define GlintPatternRamData14SecReg                   3
+#define GlintPatternRamData14SecOff                   0x7b70
+
+#define GlintPatternRamData15                         0x8b78
+#define GlintPatternRamData15Tag                      0x016f
+#define GlintPatternRamData15Reg                           1
+#define GlintPatternRamData15Off                      0x7b78
+#define GlintPatternRamData15Sec                      0x8b78
+#define GlintPatternRamData15SecReg                   3
+#define GlintPatternRamData15SecOff                   0x7b78
+
+#define GlintPatternRamData16                         0x8b80
+#define GlintPatternRamData16Tag                      0x0170
+#define GlintPatternRamData16Reg                           1
+#define GlintPatternRamData16Off                      0x7b80
+#define GlintPatternRamData16Sec                      0x8b80
+#define GlintPatternRamData16SecReg                   3
+#define GlintPatternRamData16SecOff                   0x7b80
+
+#define GlintPatternRamData17                         0x8b88
+#define GlintPatternRamData17Tag                      0x0171
+#define GlintPatternRamData17Reg                           1
+#define GlintPatternRamData17Off                      0x7b88
+#define GlintPatternRamData17Sec                      0x8b88
+#define GlintPatternRamData17SecReg                   3
+#define GlintPatternRamData17SecOff                   0x7b88
+
+#define GlintPatternRamData18                         0x8b90
+#define GlintPatternRamData18Tag                      0x0172
+#define GlintPatternRamData18Reg                           1
+#define GlintPatternRamData18Off                      0x7b90
+#define GlintPatternRamData18Sec                      0x8b90
+#define GlintPatternRamData18SecReg                   3
+#define GlintPatternRamData18SecOff                   0x7b90
+
+#define GlintPatternRamData19                         0x8b98
+#define GlintPatternRamData19Tag                      0x0173
+#define GlintPatternRamData19Reg                           1
+#define GlintPatternRamData19Off                      0x7b98
+#define GlintPatternRamData19Sec                      0x8b98
+#define GlintPatternRamData19SecReg                   3
+#define GlintPatternRamData19SecOff                   0x7b98
+
+#define GlintPatternRamData20                         0x8ba0
+#define GlintPatternRamData20Tag                      0x0174
+#define GlintPatternRamData20Reg                           1
+#define GlintPatternRamData20Off                      0x7ba0
+#define GlintPatternRamData20Sec                      0x8ba0
+#define GlintPatternRamData20SecReg                   3
+#define GlintPatternRamData20SecOff                   0x7ba0
+
+#define GlintPatternRamData21                         0x8ba8
+#define GlintPatternRamData21Tag                      0x0175
+#define GlintPatternRamData21Reg                           1
+#define GlintPatternRamData21Off                      0x7ba8
+#define GlintPatternRamData21Sec                      0x8ba8
+#define GlintPatternRamData21SecReg                   3
+#define GlintPatternRamData21SecOff                   0x7ba8
+
+#define GlintPatternRamData22                         0x8bb0
+#define GlintPatternRamData22Tag                      0x0176
+#define GlintPatternRamData22Reg                           1
+#define GlintPatternRamData22Off                      0x7bb0
+#define GlintPatternRamData22Sec                      0x8bb0
+#define GlintPatternRamData22SecReg                   3
+#define GlintPatternRamData22SecOff                   0x7bb0
+
+#define GlintPatternRamData23                         0x8bb8
+#define GlintPatternRamData23Tag                      0x0177
+#define GlintPatternRamData23Reg                           1
+#define GlintPatternRamData23Off                      0x7bb8
+#define GlintPatternRamData23Sec                      0x8bb8
+#define GlintPatternRamData23SecReg                   3
+#define GlintPatternRamData23SecOff                   0x7bb8
+
+#define GlintPatternRamData24                         0x8bc0
+#define GlintPatternRamData24Tag                      0x0178
+#define GlintPatternRamData24Reg                           1
+#define GlintPatternRamData24Off                      0x7bc0
+#define GlintPatternRamData24Sec                      0x8bc0
+#define GlintPatternRamData24SecReg                   3
+#define GlintPatternRamData24SecOff                   0x7bc0
+
+#define GlintPatternRamData25                         0x8bc8
+#define GlintPatternRamData25Tag                      0x0179
+#define GlintPatternRamData25Reg                           1
+#define GlintPatternRamData25Off                      0x7bc8
+#define GlintPatternRamData25Sec                      0x8bc8
+#define GlintPatternRamData25SecReg                   3
+#define GlintPatternRamData25SecOff                   0x7bc8
+
+#define GlintPatternRamData26                         0x8bd0
+#define GlintPatternRamData26Tag                      0x017a
+#define GlintPatternRamData26Reg                           1
+#define GlintPatternRamData26Off                      0x7bd0
+#define GlintPatternRamData26Sec                      0x8bd0
+#define GlintPatternRamData26SecReg                   3
+#define GlintPatternRamData26SecOff                   0x7bd0
+
+#define GlintPatternRamData27                         0x8bd8
+#define GlintPatternRamData27Tag                      0x017b
+#define GlintPatternRamData27Reg                           1
+#define GlintPatternRamData27Off                      0x7bd8
+#define GlintPatternRamData27Sec                      0x8bd8
+#define GlintPatternRamData27SecReg                   3
+#define GlintPatternRamData27SecOff                   0x7bd8
+
+#define GlintPatternRamData28                         0x8be0
+#define GlintPatternRamData28Tag                      0x017c
+#define GlintPatternRamData28Reg                           1
+#define GlintPatternRamData28Off                      0x7be0
+#define GlintPatternRamData28Sec                      0x8be0
+#define GlintPatternRamData28SecReg                   3
+#define GlintPatternRamData28SecOff                   0x7be0
+
+#define GlintPatternRamData29                         0x8be8
+#define GlintPatternRamData29Tag                      0x017d
+#define GlintPatternRamData29Reg                           1
+#define GlintPatternRamData29Off                      0x7be8
+#define GlintPatternRamData29Sec                      0x8be8
+#define GlintPatternRamData29SecReg                   3
+#define GlintPatternRamData29SecOff                   0x7be8
+
+#define GlintPatternRamData30                         0x8bf0
+#define GlintPatternRamData30Tag                      0x017e
+#define GlintPatternRamData30Reg                           1
+#define GlintPatternRamData30Off                      0x7bf0
+#define GlintPatternRamData30Sec                      0x8bf0
+#define GlintPatternRamData30SecReg                   3
+#define GlintPatternRamData30SecOff                   0x7bf0
+
+#define GlintPatternRamData31                         0x8bf8
+#define GlintPatternRamData31Tag                      0x017f
+#define GlintPatternRamData31Reg                           1
+#define GlintPatternRamData31Off                      0x7bf8
+#define GlintPatternRamData31Sec                      0x8bf8
+#define GlintPatternRamData31SecReg                   3
+#define GlintPatternRamData31SecOff                   0x7bf8
+
+#define GlintFBBlockColorU                            0x8c68
+#define GlintFBBlockColorUTag                         0x018d
+#define GlintFBBlockColorUReg                              1
+#define GlintFBBlockColorUOff                         0x7c68
+#define GlintFBBlockColorUSec                         0x8c68
+#define GlintFBBlockColorUSecReg                      3
+#define GlintFBBlockColorUSecOff                      0x7c68
+
+#define GlintFBBlockColorL                            0x8c70
+#define GlintFBBlockColorLTag                         0x018e
+#define GlintFBBlockColorLReg                              1
+#define GlintFBBlockColorLOff                         0x7c70
+#define GlintFBBlockColorLSec                         0x8c70
+#define GlintFBBlockColorLSecReg                      3
+#define GlintFBBlockColorLSecOff                      0x7c70
+
+#define GlintSuspendUntilFrameBlank                   0x8c78
+#define GlintSuspendUntilFrameBlankTag                0x018f
+#define GlintSuspendUntilFrameBlankReg                     1
+#define GlintSuspendUntilFrameBlankOff                0x7c78
+#define GlintSuspendUntilFrameBlankSec                0x8c78
+#define GlintSuspendUntilFrameBlankSecReg             3
+#define GlintSuspendUntilFrameBlankSecOff             0x7c78
+
+#define GlintFilterMode                               0x8c00
+#define GlintFilterModeTag                            0x0180
+#define GlintFilterModeReg                                 1
+#define GlintFilterModeOff                            0x7c00
+#define GlintFilterModeSec                            0x8c00
+#define GlintFilterModeSecReg                         3
+#define GlintFilterModeSecOff                         0x7c00
+
+#define GlintStatisticMode                            0x8c08
+#define GlintStatisticModeTag                         0x0181
+#define GlintStatisticModeReg                              1
+#define GlintStatisticModeOff                         0x7c08
+#define GlintStatisticModeSec                         0x8c08
+#define GlintStatisticModeSecReg                      3
+#define GlintStatisticModeSecOff                      0x7c08
+
+#define GlintMinRegion                                0x8c10
+#define GlintMinRegionTag                             0x0182
+#define GlintMinRegionReg                                  1
+#define GlintMinRegionOff                             0x7c10
+#define GlintMinRegionSec                             0x8c10
+#define GlintMinRegionSecReg                          3
+#define GlintMinRegionSecOff                          0x7c10
+
+#define GlintMaxRegion                                0x8c18
+#define GlintMaxRegionTag                             0x0183
+#define GlintMaxRegionReg                                  1
+#define GlintMaxRegionOff                             0x7c18
+#define GlintMaxRegionSec                             0x8c18
+#define GlintMaxRegionSecReg                          3
+#define GlintMaxRegionSecOff                          0x7c18
+
+#define GlintResetPickResult                          0x8c20
+#define GlintResetPickResultTag                       0x0184
+#define GlintResetPickResultReg                            1
+#define GlintResetPickResultOff                       0x7c20
+#define GlintResetPickResultSec                       0x8c20
+#define GlintResetPickResultSecReg                    3
+#define GlintResetPickResultSecOff                    0x7c20
+
+#define GlintMitHitRegion                             0x8c28
+#define GlintMitHitRegionTag                          0x0185
+#define GlintMitHitRegionReg                               1
+#define GlintMitHitRegionOff                          0x7c28
+#define GlintMitHitRegionSec                          0x8c28
+#define GlintMitHitRegionSecReg                       3
+#define GlintMitHitRegionSecOff                       0x7c28
+
+#define GlintMaxHitRegion                             0x8c30
+#define GlintMaxHitRegionTag                          0x0186
+#define GlintMaxHitRegionReg                               1
+#define GlintMaxHitRegionOff                          0x7c30
+#define GlintMaxHitRegionSec                          0x8c30
+#define GlintMaxHitRegionSecReg                       3
+#define GlintMaxHitRegionSecOff                       0x7c30
+
+#define GlintPickResult                               0x8c38
+#define GlintPickResultTag                            0x0187
+#define GlintPickResultReg                                 1
+#define GlintPickResultOff                            0x7c38
+#define GlintPickResultSec                            0x8c38
+#define GlintPickResultSecReg                         3
+#define GlintPickResultSecOff                         0x7c38
+
+#define GlintGLINTSync                                0x8c40
+#define GlintGLINTSyncTag                             0x0188
+#define GlintGLINTSyncReg                                  1
+#define GlintGLINTSyncOff                             0x7c40
+#define GlintGLINTSyncSec                             0x8c40
+#define GlintGLINTSyncSecReg                          3
+#define GlintGLINTSyncSecOff                          0x7c40
+
+#define GlintKsRStart                                 0x8c80
+#define GlintKsRStartTag                              0x0190
+#define GlintKsRStartReg                                   1
+#define GlintKsRStartOff                              0x7c80
+#define GlintKsRStartSec                              0x8c80
+#define GlintKsRStartSecReg                           3
+#define GlintKsRStartSecOff                           0x7c80
+
+#define GlintdKsRdx                                   0x8c88
+#define GlintdKsRdxTag                                0x0191
+#define GlintdKsRdxReg                                     1
+#define GlintdKsRdxOff                                0x7c88
+#define GlintdKsRdxSec                                0x8c88
+#define GlintdKsRdxSecReg                             3
+#define GlintdKsRdxSecOff                             0x7c88
+
+#define GlintdKsRdyDom                                0x8c90
+#define GlintdKsRdyDomTag                             0x0192
+#define GlintdKsRdyDomReg                                  1
+#define GlintdKsRdyDomOff                             0x7c90
+#define GlintdKsRdyDomSec                             0x8c90
+#define GlintdKsRdyDomSecReg                          3
+#define GlintdKsRdyDomSecOff                          0x7c90
+
+#define GlintKsGStart                                 0x8c98
+#define GlintKsGStartTag                              0x0193
+#define GlintKsGStartReg                                   1
+#define GlintKsGStartOff                              0x7c98
+#define GlintKsGStartSec                              0x8c98
+#define GlintKsGStartSecReg                           3
+#define GlintKsGStartSecOff                           0x7c98
+
+#define GlintdKsGdx                                   0x8ca0
+#define GlintdKsGdxTag                                0x0194
+#define GlintdKsGdxReg                                     1
+#define GlintdKsGdxOff                                0x7ca0
+#define GlintdKsGdxSec                                0x8ca0
+#define GlintdKsGdxSecReg                             3
+#define GlintdKsGdxSecOff                             0x7ca0
+
+#define GlintdKsGdyDom                                0x8ca8
+#define GlintdKsGdyDomTag                             0x0195
+#define GlintdKsGdyDomReg                                  1
+#define GlintdKsGdyDomOff                             0x7ca8
+#define GlintdKsGdyDomSec                             0x8ca8
+#define GlintdKsGdyDomSecReg                          3
+#define GlintdKsGdyDomSecOff                          0x7ca8
+
+#define GlintKsBStart                                 0x8cb0
+#define GlintKsBStartTag                              0x0196
+#define GlintKsBStartReg                                   1
+#define GlintKsBStartOff                              0x7cb0
+#define GlintKsBStartSec                              0x8cb0
+#define GlintKsBStartSecReg                           3
+#define GlintKsBStartSecOff                           0x7cb0
+
+#define GlintdKsBdx                                   0x8cb8
+#define GlintdKsBdxTag                                0x0197
+#define GlintdKsBdxReg                                     1
+#define GlintdKsBdxOff                                0x7cb8
+#define GlintdKsBdxSec                                0x8cb8
+#define GlintdKsBdxSecReg                             3
+#define GlintdKsBdxSecOff                             0x7cb8
+
+#define GlintdKsBdyDom                                0x8cc0
+#define GlintdKsBdyDomTag                             0x0198
+#define GlintdKsBdyDomReg                                  1
+#define GlintdKsBdyDomOff                             0x7cc0
+#define GlintdKsBdyDomSec                             0x8cc0
+#define GlintdKsBdyDomSecReg                          3
+#define GlintdKsBdyDomSecOff                          0x7cc0
+
+#define GlintKdRStart                                 0x8d00
+#define GlintKdRStartTag                              0x01a0
+#define GlintKdRStartReg                                   1
+#define GlintKdRStartOff                              0x7d00
+#define GlintKdRStartSec                              0x8d00
+#define GlintKdRStartSecReg                           3
+#define GlintKdRStartSecOff                           0x7d00
+
+#define GlintdKdRdx                                   0x8d08
+#define GlintdKdRdxTag                                0x01a1
+#define GlintdKdRdxReg                                     1
+#define GlintdKdRdxOff                                0x7d08
+#define GlintdKdRdxSec                                0x8d08
+#define GlintdKdRdxSecReg                             3
+#define GlintdKdRdxSecOff                             0x7d08
+
+#define GlintdKdRdyDom                                0x8d10
+#define GlintdKdRdyDomTag                             0x01a2
+#define GlintdKdRdyDomReg                                  1
+#define GlintdKdRdyDomOff                             0x7d10
+#define GlintdKdRdyDomSec                             0x8d10
+#define GlintdKdRdyDomSecReg                          3
+#define GlintdKdRdyDomSecOff                          0x7d10
+
+#define GlintKdGStart                                 0x8d18
+#define GlintKdGStartTag                              0x01a3
+#define GlintKdGStartReg                                   1
+#define GlintKdGStartOff                              0x7d18
+#define GlintKdGStartSec                              0x8d18
+#define GlintKdGStartSecReg                           3
+#define GlintKdGStartSecOff                           0x7d18
+
+#define GlintdKdGdx                                   0x8d20
+#define GlintdKdGdxTag                                0x01a4
+#define GlintdKdGdxReg                                     1
+#define GlintdKdGdxOff                                0x7d20
+#define GlintdKdGdxSec                                0x8d20
+#define GlintdKdGdxSecReg                             3
+#define GlintdKdGdxSecOff                             0x7d20
+
+#define GlintdKdGdyDom                                0x8d28
+#define GlintdKdGdyDomTag                             0x01a5
+#define GlintdKdGdyDomReg                                  1
+#define GlintdKdGdyDomOff                             0x7d28
+#define GlintdKdGdyDomSec                             0x8d28
+#define GlintdKdGdyDomSecReg                          3
+#define GlintdKdGdyDomSecOff                          0x7d28
+
+#define GlintKdBStart                                 0x8d30
+#define GlintKdBStartTag                              0x01a6
+#define GlintKdBStartReg                                   1
+#define GlintKdBStartOff                              0x7d30
+#define GlintKdBStartSec                              0x8d30
+#define GlintKdBStartSecReg                           3
+#define GlintKdBStartSecOff                           0x7d30
+
+#define GlintdKdBdx                                   0x8d38
+#define GlintdKdBdxTag                                0x01a7
+#define GlintdKdBdxReg                                     1
+#define GlintdKdBdxOff                                0x7d38
+#define GlintdKdBdxSec                                0x8d38
+#define GlintdKdBdxSecReg                             3
+#define GlintdKdBdxSecOff                             0x7d38
+
+#define GlintdKdBdyDom                                0x8d40
+#define GlintdKdBdyDomTag                             0x01a8
+#define GlintdKdBdyDomReg                                  1
+#define GlintdKdBdyDomOff                             0x7d40
+#define GlintdKdBdyDomSec                             0x8d40
+#define GlintdKdBdyDomSecReg                          3
+#define GlintdKdBdyDomSecOff                          0x7d40
+
+#define GlintContextDump                              0x8dc0
+#define GlintContextDumpTag                           0x01b8
+#define GlintContextDumpReg                                1
+#define GlintContextDumpOff                           0x7dc0
+
+#define GlintContextRestore                           0x8dc8
+#define GlintContextRestoreTag                        0x01b9
+#define GlintContextRestoreReg                             1
+#define GlintContextRestoreOff                        0x7dc8
+
+#define GlintContextData                              0x8dd0
+#define GlintContextDataTag                           0x01ba
+#define GlintContextDataReg                                1
+#define GlintContextDataOff                           0x7dd0
+
+#define GlintFeedbackToken                            0x8f80
+#define GlintFeedbackTokenTag                         0x01f0
+#define GlintFeedbackTokenReg                              1
+#define GlintFeedbackTokenOff                         0x7f80
+
+#define GlintFeedbackX                                0x8f88
+#define GlintFeedbackXTag                             0x01f1
+#define GlintFeedbackXReg                                  1
+#define GlintFeedbackXOff                             0x7f88
+
+#define GlintFeedbackY                                0x8f90
+#define GlintFeedbackYTag                             0x01f2
+#define GlintFeedbackYReg                                  1
+#define GlintFeedbackYOff                             0x7f90
+
+#define GlintFeedbackZ                                0x8f98
+#define GlintFeedbackZTag                             0x01f3
+#define GlintFeedbackZReg                                  1
+#define GlintFeedbackZOff                             0x7f98
+
+#define GlintFeedbackW                                0x8fa0
+#define GlintFeedbackWTag                             0x01f4
+#define GlintFeedbackWReg                                  1
+#define GlintFeedbackWOff                             0x7fa0
+
+#define GlintFeedbackRed                              0x8fa8
+#define GlintFeedbackRedTag                           0x01f5
+#define GlintFeedbackRedReg                                1
+#define GlintFeedbackRedOff                           0x7fa8
+
+#define GlintFeedbackGreen                            0x8fb0
+#define GlintFeedbackGreenTag                         0x01f6
+#define GlintFeedbackGreenReg                              1
+#define GlintFeedbackGreenOff                         0x7fb0
+
+#define GlintFeedbackBlue                             0x8fb8
+#define GlintFeedbackBlueTag                          0x01f7
+#define GlintFeedbackBlueReg                               1
+#define GlintFeedbackBlueOff                          0x7fb8
+
+#define GlintFeedbackAlpha                            0x8fc0
+#define GlintFeedbackAlphaTag                         0x01f8
+#define GlintFeedbackAlphaReg                              1
+#define GlintFeedbackAlphaOff                         0x7fc0
+
+#define GlintFeedbackS                                0x8fc8
+#define GlintFeedbackSTag                             0x01f9
+#define GlintFeedbackSReg                                  1
+#define GlintFeedbackSOff                             0x7fc8
+
+#define GlintFeedbackT                                0x8fd0
+#define GlintFeedbackTTag                             0x01fa
+#define GlintFeedbackTReg                                  1
+#define GlintFeedbackTOff                             0x7fd0
+
+#define GlintFeedbackR                                0x8fd8
+#define GlintFeedbackRTag                             0x01fb
+#define GlintFeedbackRReg                                  1
+#define GlintFeedbackROff                             0x7fd8
+
+#define GlintFeedbackQ                                0x8fe0
+#define GlintFeedbackQTag                             0x01fc
+#define GlintFeedbackQReg                                  1
+#define GlintFeedbackQOff                             0x7fe0
+
+#define GlintSelectRecord                             0x8fe8
+#define GlintSelectRecordTag                          0x01fd
+#define GlintSelectRecordReg                               1
+#define GlintSelectRecordOff                          0x7fe8
+
+#define GlintPassThrough                              0x8ff0
+#define GlintPassThroughTag                           0x01fe
+#define GlintPassThroughReg                                1
+#define GlintPassThroughOff                           0x7ff0
+
+#define GlintEndOfFeedback                            0x8ff8
+#define GlintEndOfFeedbackTag                         0x01ff
+#define GlintEndOfFeedbackReg                              1
+#define GlintEndOfFeedbackOff                         0x7ff8
+
+#define GlintV0FixedS                                 0x9000
+#define GlintV0FixedSTag                              0x0200
+#define GlintV0FixedSReg                                   1
+#define GlintV0FixedSOff                              0x8000
+
+#define GlintV0FixedT                                 0x9008
+#define GlintV0FixedTTag                              0x0201
+#define GlintV0FixedTReg                                   1
+#define GlintV0FixedTOff                              0x8008
+
+#define GlintV0FixedQ                                 0x9010
+#define GlintV0FixedQTag                              0x0202
+#define GlintV0FixedQReg                                   1
+#define GlintV0FixedQOff                              0x8010
+
+#define GlintV0FixedKs                                0x9018
+#define GlintV0FixedKsTag                             0x0203
+#define GlintV0FixedKsReg                                  1
+#define GlintV0FixedKsOff                             0x8018
+
+#define GlintV0FixedKd                                0x9020
+#define GlintV0FixedKdTag                             0x0204
+#define GlintV0FixedKdReg                                  1
+#define GlintV0FixedKdOff                             0x8020
+
+#define GlintV0FixedR                                 0x9028
+#define GlintV0FixedRTag                              0x0205
+#define GlintV0FixedRReg                                   1
+#define GlintV0FixedROff                              0x8028
+
+#define GlintV0FixedG                                 0x9030
+#define GlintV0FixedGTag                              0x0206
+#define GlintV0FixedGReg                                   1
+#define GlintV0FixedGOff                              0x8030
+
+#define GlintV0FixedB                                 0x9038
+#define GlintV0FixedBTag                              0x0207
+#define GlintV0FixedBReg                                   1
+#define GlintV0FixedBOff                              0x8038
+
+#define GlintV0FixedA                                 0x9040
+#define GlintV0FixedATag                              0x0208
+#define GlintV0FixedAReg                                   1
+#define GlintV0FixedAOff                              0x8040
+
+#define GlintV0FixedF                                 0x9048
+#define GlintV0FixedFTag                              0x0209
+#define GlintV0FixedFReg                                   1
+#define GlintV0FixedFOff                              0x8048
+
+#define GlintV0FixedX                                 0x9050
+#define GlintV0FixedXTag                              0x020a
+#define GlintV0FixedXReg                                   1
+#define GlintV0FixedXOff                              0x8050
+
+#define GlintV0FixedY                                 0x9058
+#define GlintV0FixedYTag                              0x020b
+#define GlintV0FixedYReg                                   1
+#define GlintV0FixedYOff                              0x8058
+
+#define GlintV0FixedZ                                 0x9060
+#define GlintV0FixedZTag                              0x020c
+#define GlintV0FixedZReg                                   1
+#define GlintV0FixedZOff                              0x8060
+
+#define GlintV1FixedS                                 0x9080
+#define GlintV1FixedSTag                              0x0210
+#define GlintV1FixedSReg                                   1
+#define GlintV1FixedSOff                              0x8080
+
+#define GlintV1FixedT                                 0x9088
+#define GlintV1FixedTTag                              0x0211
+#define GlintV1FixedTReg                                   1
+#define GlintV1FixedTOff                              0x8088
+
+#define GlintV1FixedQ                                 0x9090
+#define GlintV1FixedQTag                              0x0212
+#define GlintV1FixedQReg                                   1
+#define GlintV1FixedQOff                              0x8090
+
+#define GlintV1FixedKs                                0x9098
+#define GlintV1FixedKsTag                             0x0213
+#define GlintV1FixedKsReg                                  1
+#define GlintV1FixedKsOff                             0x8098
+
+#define GlintV1FixedKd                                0x90a0
+#define GlintV1FixedKdTag                             0x0214
+#define GlintV1FixedKdReg                                  1
+#define GlintV1FixedKdOff                             0x80a0
+
+#define GlintV1FixedR                                 0x90a8
+#define GlintV1FixedRTag                              0x0215
+#define GlintV1FixedRReg                                   1
+#define GlintV1FixedROff                              0x80a8
+
+#define GlintV1FixedG                                 0x90b0
+#define GlintV1FixedGTag                              0x0216
+#define GlintV1FixedGReg                                   1
+#define GlintV1FixedGOff                              0x80b0
+
+#define GlintV1FixedB                                 0x90b8
+#define GlintV1FixedBTag                              0x0217
+#define GlintV1FixedBReg                                   1
+#define GlintV1FixedBOff                              0x80b8
+
+#define GlintV1FixedA                                 0x90c0
+#define GlintV1FixedATag                              0x0218
+#define GlintV1FixedAReg                                   1
+#define GlintV1FixedAOff                              0x80c0
+
+#define GlintV1FixedF                                 0x90c8
+#define GlintV1FixedFTag                              0x0219
+#define GlintV1FixedFReg                                   1
+#define GlintV1FixedFOff                              0x80c8
+
+#define GlintV1FixedX                                 0x90d0
+#define GlintV1FixedXTag                              0x021a
+#define GlintV1FixedXReg                                   1
+#define GlintV1FixedXOff                              0x80d0
+
+#define GlintV1FixedY                                 0x90d8
+#define GlintV1FixedYTag                              0x021b
+#define GlintV1FixedYReg                                   1
+#define GlintV1FixedYOff                              0x80d8
+
+#define GlintV1FixedZ                                 0x90e0
+#define GlintV1FixedZTag                              0x021c
+#define GlintV1FixedZReg                                   1
+#define GlintV1FixedZOff                              0x80e0
+
+#define GlintV2FixedS                                 0x9100
+#define GlintV2FixedSTag                              0x0220
+#define GlintV2FixedSReg                                   1
+#define GlintV2FixedSOff                              0x8100
+
+#define GlintV2FixedT                                 0x9108
+#define GlintV2FixedTTag                              0x0221
+#define GlintV2FixedTReg                                   1
+#define GlintV2FixedTOff                              0x8108
+
+#define GlintV2FixedQ                                 0x9110
+#define GlintV2FixedQTag                              0x0222
+#define GlintV2FixedQReg                                   1
+#define GlintV2FixedQOff                              0x8110
+
+#define GlintV2FixedKs                                0x9118
+#define GlintV2FixedKsTag                             0x0223
+#define GlintV2FixedKsReg                                  1
+#define GlintV2FixedKsOff                             0x8118
+
+#define GlintV2FixedKd                                0x9120
+#define GlintV2FixedKdTag                             0x0224
+#define GlintV2FixedKdReg                                  1
+#define GlintV2FixedKdOff                             0x8120
+
+#define GlintV2FixedR                                 0x9128
+#define GlintV2FixedRTag                              0x0225
+#define GlintV2FixedRReg                                   1
+#define GlintV2FixedROff                              0x8128
+
+#define GlintV2FixedG                                 0x9130
+#define GlintV2FixedGTag                              0x0226
+#define GlintV2FixedGReg                                   1
+#define GlintV2FixedGOff                              0x8130
+
+#define GlintV2FixedB                                 0x9138
+#define GlintV2FixedBTag                              0x0227
+#define GlintV2FixedBReg                                   1
+#define GlintV2FixedBOff                              0x8138
+
+#define GlintV2FixedA                                 0x9140
+#define GlintV2FixedATag                              0x0228
+#define GlintV2FixedAReg                                   1
+#define GlintV2FixedAOff                              0x8140
+
+#define GlintV2FixedF                                 0x9148
+#define GlintV2FixedFTag                              0x0229
+#define GlintV2FixedFReg                                   1
+#define GlintV2FixedFOff                              0x8148
+
+#define GlintV2FixedX                                 0x9150
+#define GlintV2FixedXTag                              0x022a
+#define GlintV2FixedXReg                                   1
+#define GlintV2FixedXOff                              0x8150
+
+#define GlintV2FixedY                                 0x9158
+#define GlintV2FixedYTag                              0x022b
+#define GlintV2FixedYReg                                   1
+#define GlintV2FixedYOff                              0x8158
+
+#define GlintV2FixedZ                                 0x9160
+#define GlintV2FixedZTag                              0x022c
+#define GlintV2FixedZReg                                   1
+#define GlintV2FixedZOff                              0x8160
+
+#define GlintV0FloatS                                 0x9180
+#define GlintV0FloatSTag                              0x0230
+#define GlintV0FloatSReg                                   1
+#define GlintV0FloatSOff                              0x8180
+
+#define GlintV0FloatT                                 0x9188
+#define GlintV0FloatTTag                              0x0231
+#define GlintV0FloatTReg                                   1
+#define GlintV0FloatTOff                              0x8188
+
+#define GlintV0FloatQ                                 0x9190
+#define GlintV0FloatQTag                              0x0232
+#define GlintV0FloatQReg                                   1
+#define GlintV0FloatQOff                              0x8190
+
+#define GlintV0FloatKs                                0x9198
+#define GlintV0FloatKsTag                             0x0233
+#define GlintV0FloatKsReg                                  1
+#define GlintV0FloatKsOff                             0x8198
+
+#define GlintV0FloatKd                                0x91a0
+#define GlintV0FloatKdTag                             0x0234
+#define GlintV0FloatKdReg                                  1
+#define GlintV0FloatKdOff                             0x81a0
+
+#define GlintV0FloatR                                 0x91a8
+#define GlintV0FloatRTag                              0x0235
+#define GlintV0FloatRReg                                   1
+#define GlintV0FloatROff                              0x81a8
+
+#define GlintV0FloatG                                 0x91b0
+#define GlintV0FloatGTag                              0x0236
+#define GlintV0FloatGReg                                   1
+#define GlintV0FloatGOff                              0x81b0
+
+#define GlintV0FloatB                                 0x91b8
+#define GlintV0FloatBTag                              0x0237
+#define GlintV0FloatBReg                                   1
+#define GlintV0FloatBOff                              0x81b8
+
+#define GlintV0FloatA                                 0x91c0
+#define GlintV0FloatATag                              0x0238
+#define GlintV0FloatAReg                                   1
+#define GlintV0FloatAOff                              0x81c0
+
+#define GlintV0FloatF                                 0x91c8
+#define GlintV0FloatFTag                              0x0239
+#define GlintV0FloatFReg                                   1
+#define GlintV0FloatFOff                              0x81c8
+
+#define GlintV0FloatX                                 0x91d0
+#define GlintV0FloatXTag                              0x023a
+#define GlintV0FloatXReg                                   1
+#define GlintV0FloatXOff                              0x81d0
+
+#define GlintV0FloatY                                 0x91d8
+#define GlintV0FloatYTag                              0x023b
+#define GlintV0FloatYReg                                   1
+#define GlintV0FloatYOff                              0x81d8
+
+#define GlintV0FloatZ                                 0x91e0
+#define GlintV0FloatZTag                              0x023c
+#define GlintV0FloatZReg                                   1
+#define GlintV0FloatZOff                              0x81e0
+
+#define GlintV1FloatS                                 0x9200
+#define GlintV1FloatSTag                              0x0240
+#define GlintV1FloatSReg                                   1
+#define GlintV1FloatSOff                              0x8200
+
+#define GlintV1FloatT                                 0x9208
+#define GlintV1FloatTTag                              0x0241
+#define GlintV1FloatTReg                                   1
+#define GlintV1FloatTOff                              0x8208
+
+#define GlintV1FloatQ                                 0x9210
+#define GlintV1FloatQTag                              0x0242
+#define GlintV1FloatQReg                                   1
+#define GlintV1FloatQOff                              0x8210
+
+#define GlintV1FloatKs                                0x9218
+#define GlintV1FloatKsTag                             0x0243
+#define GlintV1FloatKsReg                                  1
+#define GlintV1FloatKsOff                             0x8218
+
+#define GlintV1FloatKd                                0x9220
+#define GlintV1FloatKdTag                             0x0244
+#define GlintV1FloatKdReg                                  1
+#define GlintV1FloatKdOff                             0x8220
+
+#define GlintV1FloatR                                 0x9228
+#define GlintV1FloatRTag                              0x0245
+#define GlintV1FloatRReg                                   1
+#define GlintV1FloatROff                              0x8228
+
+#define GlintV1FloatG                                 0x9230
+#define GlintV1FloatGTag                              0x0246
+#define GlintV1FloatGReg                                   1
+#define GlintV1FloatGOff                              0x8230
+
+#define GlintV1FloatB                                 0x9238
+#define GlintV1FloatBTag                              0x0247
+#define GlintV1FloatBReg                                   1
+#define GlintV1FloatBOff                              0x8238
+
+#define GlintV1FloatA                                 0x9240
+#define GlintV1FloatATag                              0x0248
+#define GlintV1FloatAReg                                   1
+#define GlintV1FloatAOff                              0x8240
+
+#define GlintV1FloatF                                 0x9248
+#define GlintV1FloatFTag                              0x0249
+#define GlintV1FloatFReg                                   1
+#define GlintV1FloatFOff                              0x8248
+
+#define GlintV1FloatX                                 0x9250
+#define GlintV1FloatXTag                              0x024a
+#define GlintV1FloatXReg                                   1
+#define GlintV1FloatXOff                              0x8250
+
+#define GlintV1FloatY                                 0x9258
+#define GlintV1FloatYTag                              0x024b
+#define GlintV1FloatYReg                                   1
+#define GlintV1FloatYOff                              0x8258
+
+#define GlintV1FloatZ                                 0x9260
+#define GlintV1FloatZTag                              0x024c
+#define GlintV1FloatZReg                                   1
+#define GlintV1FloatZOff                              0x8260
+
+#define GlintV2FloatS                                 0x9280
+#define GlintV2FloatSTag                              0x0250
+#define GlintV2FloatSReg                                   1
+#define GlintV2FloatSOff                              0x8280
+
+#define GlintV2FloatT                                 0x9288
+#define GlintV2FloatTTag                              0x0251
+#define GlintV2FloatTReg                                   1
+#define GlintV2FloatTOff                              0x8288
+
+#define GlintV2FloatQ                                 0x9290
+#define GlintV2FloatQTag                              0x0252
+#define GlintV2FloatQReg                                   1
+#define GlintV2FloatQOff                              0x8290
+
+#define GlintV2FloatKs                                0x9298
+#define GlintV2FloatKsTag                             0x0253
+#define GlintV2FloatKsReg                                  1
+#define GlintV2FloatKsOff                             0x8298
+
+#define GlintV2FloatKd                                0x92a0
+#define GlintV2FloatKdTag                             0x0254
+#define GlintV2FloatKdReg                                  1
+#define GlintV2FloatKdOff                             0x82a0
+
+#define GlintV2FloatR                                 0x92a8
+#define GlintV2FloatRTag                              0x0255
+#define GlintV2FloatRReg                                   1
+#define GlintV2FloatROff                              0x82a8
+
+#define GlintV2FloatG                                 0x92b0
+#define GlintV2FloatGTag                              0x0256
+#define GlintV2FloatGReg                                   1
+#define GlintV2FloatGOff                              0x82b0
+
+#define GlintV2FloatB                                 0x92b8
+#define GlintV2FloatBTag                              0x0257
+#define GlintV2FloatBReg                                   1
+#define GlintV2FloatBOff                              0x82b8
+
+#define GlintV2FloatA                                 0x92c0
+#define GlintV2FloatATag                              0x0258
+#define GlintV2FloatAReg                                   1
+#define GlintV2FloatAOff                              0x82c0
+
+#define GlintV2FloatF                                 0x92c8
+#define GlintV2FloatFTag                              0x0259
+#define GlintV2FloatFReg                                   1
+#define GlintV2FloatFOff                              0x82c8
+
+#define GlintV2FloatX                                 0x92d0
+#define GlintV2FloatXTag                              0x025a
+#define GlintV2FloatXReg                                   1
+#define GlintV2FloatXOff                              0x82d0
+
+#define GlintV2FloatY                                 0x92d8
+#define GlintV2FloatYTag                              0x025b
+#define GlintV2FloatYReg                                   1
+#define GlintV2FloatYOff                              0x82d8
+
+#define GlintV2FloatZ                                 0x92e0
+#define GlintV2FloatZTag                              0x025c
+#define GlintV2FloatZReg                                   1
+#define GlintV2FloatZOff                              0x82e0
+
+#define GlintDeltaMode                                0x9300
+#define GlintDeltaModeTag                             0x0260
+#define GlintDeltaModeReg                                  1
+#define GlintDeltaModeOff                             0x8300
+
+#define GlintDrawTriangle                             0x9308
+#define GlintDrawTriangleTag                          0x0261
+#define GlintDrawTriangleReg                               1
+#define GlintDrawTriangleOff                          0x8308
+
+#define GlintRepeatTriangle                           0x9310
+#define GlintRepeatTriangleTag                        0x0262
+#define GlintRepeatTriangleReg                             1
+#define GlintRepeatTriangleOff                        0x8310
+
+#define GlintDrawLine01                               0x9318
+#define GlintDrawLine01Tag                            0x0263
+#define GlintDrawLine01Reg                                 1
+#define GlintDrawLine01Off                            0x8318
+
+#define GlintDrawLine10                               0x9320
+#define GlintDrawLine10Tag                            0x0264
+#define GlintDrawLine10Reg                                 1
+#define GlintDrawLine10Off                            0x8320
+
+#define GlintRepeatLine                               0x9328
+#define GlintRepeatLineTag                            0x0265
+#define GlintRepeatLineReg                                 1
+#define GlintRepeatLineOff                            0x8328
+
+#define GlintEpilogueTag                              0x9368
+#define GlintEpilogueTagTag                           0x026d
+#define GlintEpilogueTagReg                                1
+#define GlintEpilogueTagOff                           0x8368
+
+#define GlintEpilogueData                             0x9370
+#define GlintEpilogueDataTag                          0x026e
+#define GlintEpilogueDataReg                               1
+#define GlintEpilogueDataOff                          0x8370
+
+#define GlintBroadcastMask                            0x9378
+#define GlintBroadcastMaskTag                         0x026f
+#define GlintBroadcastMaskReg                              1
+#define GlintBroadcastMaskOff                         0x8378
+
+#define GlintXBias                                    0x9480
+#define GlintXBiasTag                                 0x0290
+#define GlintXBiasReg                                      1
+#define GlintXBiasOff                                 0x8480
+
+#define GlintYBias                                    0x9488
+#define GlintYBiasTag                                 0x0291
+#define GlintYBiasReg                                      1
+#define GlintYBiasOff                                 0x8488
+
+#define GlintPointMode                                0x9490
+#define GlintPointModeTag                             0x0292
+#define GlintPointModeReg                                  1
+#define GlintPointModeOff                             0x8490
+
+#define GlintPointSize                                0x9498
+#define GlintPointSizeTag                             0x0293
+#define GlintPointSizeReg                                  1
+#define GlintPointSizeOff                             0x8498
+
+#define GlintAApointSize                              0x94a0
+#define GlintAApointSizeTag                           0x0294
+#define GlintAApointSizeReg                                1
+#define GlintAApointSizeOff                           0x84a0
+
+#define GlintLineMode                                 0x94a8
+#define GlintLineModeTag                              0x0295
+#define GlintLineModeReg                                   1
+#define GlintLineModeOff                              0x84a8
+
+#define GlintLineWidth                                0x94b0
+#define GlintLineWidthTag                             0x0296
+#define GlintLineWidthReg                                  1
+#define GlintLineWidthOff                             0x84b0
+
+#define GlintLineWidthOffset                          0x94b8
+#define GlintLineWidthOffsetTag                       0x0297
+#define GlintLineWidthOffsetReg                            1
+#define GlintLineWidthOffsetOff                       0x84b8
+
+#define GlintAAlineWidth                              0x94c0
+#define GlintAAlineWidthTag                           0x0298
+#define GlintAAlineWidthReg                                1
+#define GlintAAlineWidthOff                           0x84c0
+
+#define GlintTriangleMode                             0x94c8
+#define GlintTriangleModeTag                          0x0299
+#define GlintTriangleModeReg                               1
+#define GlintTriangleModeOff                          0x84c8
+
+#define GlintRectangleMode                            0x94d0
+#define GlintRectangleModeTag                         0x029a
+#define GlintRectangleModeReg                              1
+#define GlintRectangleModeOff                         0x84d0
+
+#define GlintRectangleWidth                           0x94d8
+#define GlintRectangleWidthTag                        0x029b
+#define GlintRectangleWidthReg                             1
+#define GlintRectangleWidthOff                        0x84d8
+
+#define GlintRectangleHeight                          0x94e0
+#define GlintRectangleHeightTag                       0x029c
+#define GlintRectangleHeightReg                            1
+#define GlintRectangleHeightOff                       0x84e0
+
+#define GlintRectangle2DMode                          0x94e8
+#define GlintRectangle2DModeTag                       0x029d
+#define GlintRectangle2DModeReg                            1
+#define GlintRectangle2DModeOff                       0x84e8
+
+#define GlintRectangle2DControl                       0x94f0
+#define GlintRectangle2DControlTag                    0x029e
+#define GlintRectangle2DControlReg                         1
+#define GlintRectangle2DControlOff                    0x84f0
+
+#define GlintTransformMode                            0x9508
+#define GlintTransformModeTag                         0x02a1
+#define GlintTransformModeReg                              1
+#define GlintTransformModeOff                         0x8508
+
+#define GlintGeometryMode                             0x9510
+#define GlintGeometryModeTag                          0x02a2
+#define GlintGeometryModeReg                               1
+#define GlintGeometryModeOff                          0x8510
+
+#define GlintNormalizeMode                            0x9518
+#define GlintNormalizeModeTag                         0x02a3
+#define GlintNormalizeModeReg                              1
+#define GlintNormalizeModeOff                         0x8518
+
+#define GlintLightingMode                             0x9520
+#define GlintLightingModeTag                          0x02a4
+#define GlintLightingModeReg                               1
+#define GlintLightingModeOff                          0x8520
+
+#define GlintColorMaterialMode                        0x9528
+#define GlintColorMaterialModeTag                     0x02a5
+#define GlintColorMaterialModeReg                          1
+#define GlintColorMaterialModeOff                     0x8528
+
+#define GlintMaterialMode                             0x9530
+#define GlintMaterialModeTag                          0x02a6
+#define GlintMaterialModeReg                               1
+#define GlintMaterialModeOff                          0x8530
+
+#define GlintSelectResult                             0x9580
+#define GlintSelectResultTag                          0x02b0
+#define GlintSelectResultReg                               1
+#define GlintSelectResultOff                          0x8580
+
+#define GlintBegin                                    0x9590
+#define GlintBeginTag                                 0x02b2
+#define GlintBeginReg                                      1
+#define GlintBeginOff                                 0x8590
+
+#define GlintEnd                                      0x9598
+#define GlintEndTag                                   0x02b3
+#define GlintEndReg                                        1
+#define GlintEndOff                                   0x8598
+
+#define GlintEdgeFlag                                 0x95a0
+#define GlintEdgeFlagTag                              0x02b4
+#define GlintEdgeFlagReg                                   1
+#define GlintEdgeFlagOff                              0x85a0
+
+#define GlintObjectIDvalue                            0x95a8
+#define GlintObjectIDvalueTag                         0x02b5
+#define GlintObjectIDvalueReg                              1
+#define GlintObjectIDvalueOff                         0x85a8
+
+#define GlintIncrementObjectID                        0x95b0
+#define GlintIncrementObjectIDTag                     0x02b6
+#define GlintIncrementObjectIDReg                          1
+#define GlintIncrementObjectIDOff                     0x85b0
+
+#define GlintTransformCurrent                         0x95b8
+#define GlintTransformCurrentTag                      0x02b7
+#define GlintTransformCurrentReg                           1
+#define GlintTransformCurrentOff                      0x85b8
+
+#define GlintSaveCurrent                              0x95c8
+#define GlintSaveCurrentTag                           0x02b9
+#define GlintSaveCurrentReg                                1
+#define GlintSaveCurrentOff                           0x85c8
+
+#define GlintRestoreCurrent                           0x95d0
+#define GlintRestoreCurrentTag                        0x02ba
+#define GlintRestoreCurrentReg                             1
+#define GlintRestoreCurrentOff                        0x85d0
+
+#define GlintInitNames                                0x95d8
+#define GlintInitNamesTag                             0x02bb
+#define GlintInitNamesReg                                  1
+#define GlintInitNamesOff                             0x85d8
+
+#define GlintPushName                                 0x95e0
+#define GlintPushNameTag                              0x02bc
+#define GlintPushNameReg                                   1
+#define GlintPushNameOff                              0x85e0
+
+#define GlintPopName                                  0x95e8
+#define GlintPopNameTag                               0x02bd
+#define GlintPopNameReg                                    1
+#define GlintPopNameOff                               0x85e8
+
+#define GlintLoadName                                 0x95f0
+#define GlintLoadNameTag                              0x02be
+#define GlintLoadNameReg                                   1
+#define GlintLoadNameOff                              0x85f0
+
+#define GlintGeomRectangle                            0x96a0
+#define GlintGeomRectangleTag                         0x02d4
+#define GlintGeomRectangleReg                              1
+#define GlintGeomRectangleOff                         0x86a0
+
+#define GlintDrawRectangle2D                          0x97a0
+#define GlintDrawRectangle2DTag                       0x02f4
+#define GlintDrawRectangle2DReg                            1
+#define GlintDrawRectangle2DOff                       0x87a0
+
+#define GlintNz                                       0x9800
+#define GlintNzTag                                    0x0300
+#define GlintNzReg                                         1
+#define GlintNzOff                                    0x8800
+
+#define GlintNy                                       0x9808
+#define GlintNyTag                                    0x0301
+#define GlintNyReg                                         1
+#define GlintNyOff                                    0x8808
+
+#define GlintNx                                       0x9810
+#define GlintNxTag                                    0x0302
+#define GlintNxReg                                         1
+#define GlintNxOff                                    0x8810
+
+#define GlintCa                                       0x9818
+#define GlintCaTag                                    0x0303
+#define GlintCaReg                                         1
+#define GlintCaOff                                    0x8818
+
+#define GlintCb                                       0x9820
+#define GlintCbTag                                    0x0304
+#define GlintCbReg                                         1
+#define GlintCbOff                                    0x8820
+
+#define GlintCg                                       0x9828
+#define GlintCgTag                                    0x0305
+#define GlintCgReg                                         1
+#define GlintCgOff                                    0x8828
+
+#define GlintCr3                                      0x9830
+#define GlintCr3Tag                                   0x0306
+#define GlintCr3Reg                                        1
+#define GlintCr3Off                                   0x8830
+
+#define GlintCr4                                      0x9838
+#define GlintCr4Tag                                   0x0307
+#define GlintCr4Reg                                        1
+#define GlintCr4Off                                   0x8838
+
+#define GlintTt2                                      0x9840
+#define GlintTt2Tag                                   0x0308
+#define GlintTt2Reg                                        1
+#define GlintTt2Off                                   0x8840
+
+#define GlintTs2                                      0x9848
+#define GlintTs2Tag                                   0x0309
+#define GlintTs2Reg                                        1
+#define GlintTs2Off                                   0x8848
+
+#define GlintVw                                       0x9850
+#define GlintVwTag                                    0x030a
+#define GlintVwReg                                         1
+#define GlintVwOff                                    0x8850
+
+#define GlintVz                                       0x9858
+#define GlintVzTag                                    0x030b
+#define GlintVzReg                                         1
+#define GlintVzOff                                    0x8858
+
+#define GlintVy                                       0x9860
+#define GlintVyTag                                    0x030c
+#define GlintVyReg                                         1
+#define GlintVyOff                                    0x8860
+
+#define GlintVx2                                      0x9868
+#define GlintVx2Tag                                   0x030d
+#define GlintVx2Reg                                        1
+#define GlintVx2Off                                   0x8868
+
+#define GlintVx3                                      0x9870
+#define GlintVx3Tag                                   0x030e
+#define GlintVx3Reg                                        1
+#define GlintVx3Off                                   0x8870
+
+#define GlintVx4                                      0x9878
+#define GlintVx4Tag                                   0x030f
+#define GlintVx4Reg                                        1
+#define GlintVx4Off                                   0x8878
+
+#define GlintFNz                                      0x9880
+#define GlintFNzTag                                   0x0310
+#define GlintFNzReg                                        1
+#define GlintFNzOff                                   0x8880
+
+#define GlintFNy                                      0x9888
+#define GlintFNyTag                                   0x0311
+#define GlintFNyReg                                        1
+#define GlintFNyOff                                   0x8888
+
+#define GlintFNx                                      0x9890
+#define GlintFNxTag                                   0x0312
+#define GlintFNxReg                                        1
+#define GlintFNxOff                                   0x8890
+
+#define GlintPackedColor3                             0x9898
+#define GlintPackedColor3Tag                          0x0313
+#define GlintPackedColor3Reg                               1
+#define GlintPackedColor3Off                          0x8898
+
+#define GlintPackedColor4                             0x98a0
+#define GlintPackedColor4Tag                          0x0314
+#define GlintPackedColor4Reg                               1
+#define GlintPackedColor4Off                          0x88a0
+
+#define GlintTq4                                      0x98a8
+#define GlintTq4Tag                                   0x0315
+#define GlintTq4Reg                                        1
+#define GlintTq4Off                                   0x88a8
+
+#define GlintTr4                                      0x98b0
+#define GlintTr4Tag                                   0x0316
+#define GlintTr4Reg                                        1
+#define GlintTr4Off                                   0x88b0
+
+#define GlintTt4                                      0x98b8
+#define GlintTt4Tag                                   0x0317
+#define GlintTt4Reg                                        1
+#define GlintTt4Off                                   0x88b8
+
+#define GlintTs4                                      0x98c0
+#define GlintTs4Tag                                   0x0318
+#define GlintTs4Reg                                        1
+#define GlintTs4Off                                   0x88c0
+
+#define GlintRPw                                      0x98c8
+#define GlintRPwTag                                   0x0319
+#define GlintRPwReg                                        1
+#define GlintRPwOff                                   0x88c8
+
+#define GlintRPz                                      0x98d0
+#define GlintRPzTag                                   0x031a
+#define GlintRPzReg                                        1
+#define GlintRPzOff                                   0x88d0
+
+#define GlintRPy                                      0x98d8
+#define GlintRPyTag                                   0x031b
+#define GlintRPyReg                                        1
+#define GlintRPyOff                                   0x88d8
+
+#define GlintRPx2                                     0x98e0
+#define GlintRPx2Tag                                  0x031c
+#define GlintRPx2Reg                                       1
+#define GlintRPx2Off                                  0x88e0
+
+#define GlintRPx3                                     0x98e8
+#define GlintRPx3Tag                                  0x031d
+#define GlintRPx3Reg                                       1
+#define GlintRPx3Off                                  0x88e8
+
+#define GlintRPx4                                     0x98f0
+#define GlintRPx4Tag                                  0x031e
+#define GlintRPx4Reg                                       1
+#define GlintRPx4Off                                  0x88f0
+
+#define GlintTs1                                      0x98f8
+#define GlintTs1Tag                                   0x031f
+#define GlintTs1Reg                                        1
+#define GlintTs1Off                                   0x88f8
+
+#define GlintModelViewMatrix0                         0x9900
+#define GlintModelViewMatrix0Tag                      0x0320
+#define GlintModelViewMatrix0Reg                           1
+#define GlintModelViewMatrix0Off                      0x8900
+
+#define GlintModelViewMatrix1                         0x9908
+#define GlintModelViewMatrix1Tag                      0x0321
+#define GlintModelViewMatrix1Reg                           1
+#define GlintModelViewMatrix1Off                      0x8908
+
+#define GlintModelViewMatrix2                         0x9910
+#define GlintModelViewMatrix2Tag                      0x0322
+#define GlintModelViewMatrix2Reg                           1
+#define GlintModelViewMatrix2Off                      0x8910
+
+#define GlintModelViewMatrix3                         0x9918
+#define GlintModelViewMatrix3Tag                      0x0323
+#define GlintModelViewMatrix3Reg                           1
+#define GlintModelViewMatrix3Off                      0x8918
+
+#define GlintModelViewMatrix4                         0x9920
+#define GlintModelViewMatrix4Tag                      0x0324
+#define GlintModelViewMatrix4Reg                           1
+#define GlintModelViewMatrix4Off                      0x8920
+
+#define GlintModelViewMatrix5                         0x9928
+#define GlintModelViewMatrix5Tag                      0x0325
+#define GlintModelViewMatrix5Reg                           1
+#define GlintModelViewMatrix5Off                      0x8928
+
+#define GlintModelViewMatrix6                         0x9930
+#define GlintModelViewMatrix6Tag                      0x0326
+#define GlintModelViewMatrix6Reg                           1
+#define GlintModelViewMatrix6Off                      0x8930
+
+#define GlintModelViewMatrix7                         0x9938
+#define GlintModelViewMatrix7Tag                      0x0327
+#define GlintModelViewMatrix7Reg                           1
+#define GlintModelViewMatrix7Off                      0x8938
+
+#define GlintModelViewMatrix8                         0x9940
+#define GlintModelViewMatrix8Tag                      0x0328
+#define GlintModelViewMatrix8Reg                           1
+#define GlintModelViewMatrix8Off                      0x8940
+
+#define GlintModelViewMatrix9                         0x9948
+#define GlintModelViewMatrix9Tag                      0x0329
+#define GlintModelViewMatrix9Reg                           1
+#define GlintModelViewMatrix9Off                      0x8948
+
+#define GlintModelViewMatrix10                        0x9950
+#define GlintModelViewMatrix10Tag                     0x032a
+#define GlintModelViewMatrix10Reg                          1
+#define GlintModelViewMatrix10Off                     0x8950
+
+#define GlintModelViewMatrix11                        0x9958
+#define GlintModelViewMatrix11Tag                     0x032b
+#define GlintModelViewMatrix11Reg                          1
+#define GlintModelViewMatrix11Off                     0x8958
+
+#define GlintModelViewMatrix12                        0x9960
+#define GlintModelViewMatrix12Tag                     0x032c
+#define GlintModelViewMatrix12Reg                          1
+#define GlintModelViewMatrix12Off                     0x8960
+
+#define GlintModelViewMatrix13                        0x9968
+#define GlintModelViewMatrix13Tag                     0x032d
+#define GlintModelViewMatrix13Reg                          1
+#define GlintModelViewMatrix13Off                     0x8968
+
+#define GlintModelViewMatrix14                        0x9970
+#define GlintModelViewMatrix14Tag                     0x032e
+#define GlintModelViewMatrix14Reg                          1
+#define GlintModelViewMatrix14Off                     0x8970
+
+#define GlintModelViewMatrix15                        0x9978
+#define GlintModelViewMatrix15Tag                     0x032f
+#define GlintModelViewMatrix15Reg                          1
+#define GlintModelViewMatrix15Off                     0x8978
+
+#define GlintModelViewProjectionMatrix0               0x9980
+#define GlintModelViewProjectionMatrix0Tag            0x0330
+#define GlintModelViewProjectionMatrix0Reg                 1
+#define GlintModelViewProjectionMatrix0Off            0x8980
+
+#define GlintModelViewProjectionMatrix1               0x9988
+#define GlintModelViewProjectionMatrix1Tag            0x0331
+#define GlintModelViewProjectionMatrix1Reg                 1
+#define GlintModelViewProjectionMatrix1Off            0x8988
+
+#define GlintModelViewProjectionMatrix2               0x9990
+#define GlintModelViewProjectionMatrix2Tag            0x0332
+#define GlintModelViewProjectionMatrix2Reg                 1
+#define GlintModelViewProjectionMatrix2Off            0x8990
+
+#define GlintModelViewProjectionMatrix3               0x9998
+#define GlintModelViewProjectionMatrix3Tag            0x0333
+#define GlintModelViewProjectionMatrix3Reg                 1
+#define GlintModelViewProjectionMatrix3Off            0x8998
+
+#define GlintModelViewProjectionMatrix4               0x99a0
+#define GlintModelViewProjectionMatrix4Tag            0x0334
+#define GlintModelViewProjectionMatrix4Reg                 1
+#define GlintModelViewProjectionMatrix4Off            0x89a0
+
+#define GlintModelViewProjectionMatrix5               0x99a8
+#define GlintModelViewProjectionMatrix5Tag            0x0335
+#define GlintModelViewProjectionMatrix5Reg                 1
+#define GlintModelViewProjectionMatrix5Off            0x89a8
+
+#define GlintModelViewProjectionMatrix6               0x99b0
+#define GlintModelViewProjectionMatrix6Tag            0x0336
+#define GlintModelViewProjectionMatrix6Reg                 1
+#define GlintModelViewProjectionMatrix6Off            0x89b0
+
+#define GlintModelViewProjectionMatrix7               0x99b8
+#define GlintModelViewProjectionMatrix7Tag            0x0337
+#define GlintModelViewProjectionMatrix7Reg                 1
+#define GlintModelViewProjectionMatrix7Off            0x89b8
+
+#define GlintModelViewProjectionMatrix8               0x99c0
+#define GlintModelViewProjectionMatrix8Tag            0x0338
+#define GlintModelViewProjectionMatrix8Reg                 1
+#define GlintModelViewProjectionMatrix8Off            0x89c0
+
+#define GlintModelViewProjectionMatrix9               0x99c8
+#define GlintModelViewProjectionMatrix9Tag            0x0339
+#define GlintModelViewProjectionMatrix9Reg                 1
+#define GlintModelViewProjectionMatrix9Off            0x89c8
+
+#define GlintModelViewProjectionMatrix10              0x99d0
+#define GlintModelViewProjectionMatrix10Tag           0x033a
+#define GlintModelViewProjectionMatrix10Reg                1
+#define GlintModelViewProjectionMatrix10Off           0x89d0
+
+#define GlintModelViewProjectionMatrix11              0x99d8
+#define GlintModelViewProjectionMatrix11Tag           0x033b
+#define GlintModelViewProjectionMatrix11Reg                1
+#define GlintModelViewProjectionMatrix11Off           0x89d8
+
+#define GlintModelViewProjectionMatrix12              0x99e0
+#define GlintModelViewProjectionMatrix12Tag           0x033c
+#define GlintModelViewProjectionMatrix12Reg                1
+#define GlintModelViewProjectionMatrix12Off           0x89e0
+
+#define GlintModelViewProjectionMatrix13              0x99e8
+#define GlintModelViewProjectionMatrix13Tag           0x033d
+#define GlintModelViewProjectionMatrix13Reg                1
+#define GlintModelViewProjectionMatrix13Off           0x89e8
+
+#define GlintModelViewProjectionMatrix14              0x99f0
+#define GlintModelViewProjectionMatrix14Tag           0x033e
+#define GlintModelViewProjectionMatrix14Reg                1
+#define GlintModelViewProjectionMatrix14Off           0x89f0
+
+#define GlintModelViewProjectionMatrix15              0x99f8
+#define GlintModelViewProjectionMatrix15Tag           0x033f
+#define GlintModelViewProjectionMatrix15Reg                1
+#define GlintModelViewProjectionMatrix15Off           0x89f8
+
+#define GlintNormalMatrix0                            0x9a00
+#define GlintNormalMatrix0Tag                         0x0340
+#define GlintNormalMatrix0Reg                              1
+#define GlintNormalMatrix0Off                         0x8a00
+
+#define GlintNormalMatrix1                            0x9a08
+#define GlintNormalMatrix1Tag                         0x0341
+#define GlintNormalMatrix1Reg                              1
+#define GlintNormalMatrix1Off                         0x8a08
+
+#define GlintNormalMatrix2                            0x9a10
+#define GlintNormalMatrix2Tag                         0x0342
+#define GlintNormalMatrix2Reg                              1
+#define GlintNormalMatrix2Off                         0x8a10
+
+#define GlintNormalMatrix3                            0x9a18
+#define GlintNormalMatrix3Tag                         0x0343
+#define GlintNormalMatrix3Reg                              1
+#define GlintNormalMatrix3Off                         0x8a18
+
+#define GlintNormalMatrix4                            0x9a20
+#define GlintNormalMatrix4Tag                         0x0344
+#define GlintNormalMatrix4Reg                              1
+#define GlintNormalMatrix4Off                         0x8a20
+
+#define GlintNormalMatrix5                            0x9a28
+#define GlintNormalMatrix5Tag                         0x0345
+#define GlintNormalMatrix5Reg                              1
+#define GlintNormalMatrix5Off                         0x8a28
+
+#define GlintNormalMatrix6                            0x9a30
+#define GlintNormalMatrix6Tag                         0x0346
+#define GlintNormalMatrix6Reg                              1
+#define GlintNormalMatrix6Off                         0x8a30
+
+#define GlintNormalMatrix7                            0x9a38
+#define GlintNormalMatrix7Tag                         0x0347
+#define GlintNormalMatrix7Reg                              1
+#define GlintNormalMatrix7Off                         0x8a38
+
+#define GlintNormalMatrix8                            0x9a40
+#define GlintNormalMatrix8Tag                         0x0348
+#define GlintNormalMatrix8Reg                              1
+#define GlintNormalMatrix8Off                         0x8a40
+
+#define GlintTextureMatrix0                           0x9a80
+#define GlintTextureMatrix0Tag                        0x0350
+#define GlintTextureMatrix0Reg                             1
+#define GlintTextureMatrix0Off                        0x8a80
+
+#define GlintTextureMatrix1                           0x9a88
+#define GlintTextureMatrix1Tag                        0x0351
+#define GlintTextureMatrix1Reg                             1
+#define GlintTextureMatrix1Off                        0x8a88
+
+#define GlintTextureMatrix2                           0x9a90
+#define GlintTextureMatrix2Tag                        0x0352
+#define GlintTextureMatrix2Reg                             1
+#define GlintTextureMatrix2Off                        0x8a90
+
+#define GlintTextureMatrix3                           0x9a98
+#define GlintTextureMatrix3Tag                        0x0353
+#define GlintTextureMatrix3Reg                             1
+#define GlintTextureMatrix3Off                        0x8a98
+
+#define GlintTextureMatrix4                           0x9aa0
+#define GlintTextureMatrix4Tag                        0x0354
+#define GlintTextureMatrix4Reg                             1
+#define GlintTextureMatrix4Off                        0x8aa0
+
+#define GlintTextureMatrix5                           0x9aa8
+#define GlintTextureMatrix5Tag                        0x0355
+#define GlintTextureMatrix5Reg                             1
+#define GlintTextureMatrix5Off                        0x8aa8
+
+#define GlintTextureMatrix6                           0x9ab0
+#define GlintTextureMatrix6Tag                        0x0356
+#define GlintTextureMatrix6Reg                             1
+#define GlintTextureMatrix6Off                        0x8ab0
+
+#define GlintTextureMatrix7                           0x9ab8
+#define GlintTextureMatrix7Tag                        0x0357
+#define GlintTextureMatrix7Reg                             1
+#define GlintTextureMatrix7Off                        0x8ab8
+
+#define GlintTextureMatrix8                           0x9ac0
+#define GlintTextureMatrix8Tag                        0x0358
+#define GlintTextureMatrix8Reg                             1
+#define GlintTextureMatrix8Off                        0x8ac0
+
+#define GlintTextureMatrix9                           0x9ac8
+#define GlintTextureMatrix9Tag                        0x0359
+#define GlintTextureMatrix9Reg                             1
+#define GlintTextureMatrix9Off                        0x8ac8
+
+#define GlintTextureMatrix10                          0x9ad0
+#define GlintTextureMatrix10Tag                       0x035a
+#define GlintTextureMatrix10Reg                            1
+#define GlintTextureMatrix10Off                       0x8ad0
+
+#define GlintTextureMatrix11                          0x9ad8
+#define GlintTextureMatrix11Tag                       0x035b
+#define GlintTextureMatrix11Reg                            1
+#define GlintTextureMatrix11Off                       0x8ad8
+
+#define GlintTextureMatrix12                          0x9ae0
+#define GlintTextureMatrix12Tag                       0x035c
+#define GlintTextureMatrix12Reg                            1
+#define GlintTextureMatrix12Off                       0x8ae0
+
+#define GlintTextureMatrix13                          0x9ae8
+#define GlintTextureMatrix13Tag                       0x035d
+#define GlintTextureMatrix13Reg                            1
+#define GlintTextureMatrix13Off                       0x8ae8
+
+#define GlintTextureMatrix14                          0x9af0
+#define GlintTextureMatrix14Tag                       0x035e
+#define GlintTextureMatrix14Reg                            1
+#define GlintTextureMatrix14Off                       0x8af0
+
+#define GlintTextureMatrix15                          0x9af8
+#define GlintTextureMatrix15Tag                       0x035f
+#define GlintTextureMatrix15Reg                            1
+#define GlintTextureMatrix15Off                       0x8af8
+
+#define GlintTexGen0                                  0x9b00
+#define GlintTexGen0Tag                               0x0360
+#define GlintTexGen0Reg                                    1
+#define GlintTexGen0Off                               0x8b00
+
+#define GlintTexGen1                                  0x9b08
+#define GlintTexGen1Tag                               0x0361
+#define GlintTexGen1Reg                                    1
+#define GlintTexGen1Off                               0x8b08
+
+#define GlintTexGen2                                  0x9b10
+#define GlintTexGen2Tag                               0x0362
+#define GlintTexGen2Reg                                    1
+#define GlintTexGen2Off                               0x8b10
+
+#define GlintTexGen3                                  0x9b18
+#define GlintTexGen3Tag                               0x0363
+#define GlintTexGen3Reg                                    1
+#define GlintTexGen3Off                               0x8b18
+
+#define GlintTexGen4                                  0x9b20
+#define GlintTexGen4Tag                               0x0364
+#define GlintTexGen4Reg                                    1
+#define GlintTexGen4Off                               0x8b20
+
+#define GlintTexGen5                                  0x9b28
+#define GlintTexGen5Tag                               0x0365
+#define GlintTexGen5Reg                                    1
+#define GlintTexGen5Off                               0x8b28
+
+#define GlintTexGen6                                  0x9b30
+#define GlintTexGen6Tag                               0x0366
+#define GlintTexGen6Reg                                    1
+#define GlintTexGen6Off                               0x8b30
+
+#define GlintTexGen7                                  0x9b38
+#define GlintTexGen7Tag                               0x0367
+#define GlintTexGen7Reg                                    1
+#define GlintTexGen7Off                               0x8b38
+
+#define GlintTexGen8                                  0x9b40
+#define GlintTexGen8Tag                               0x0368
+#define GlintTexGen8Reg                                    1
+#define GlintTexGen8Off                               0x8b40
+
+#define GlintTexGen9                                  0x9b48
+#define GlintTexGen9Tag                               0x0369
+#define GlintTexGen9Reg                                    1
+#define GlintTexGen9Off                               0x8b48
+
+#define GlintTexGen10                                 0x9b50
+#define GlintTexGen10Tag                              0x036a
+#define GlintTexGen10Reg                                   1
+#define GlintTexGen10Off                              0x8b50
+
+#define GlintTexGen11                                 0x9b58
+#define GlintTexGen11Tag                              0x036b
+#define GlintTexGen11Reg                                   1
+#define GlintTexGen11Off                              0x8b58
+
+#define GlintTexGen12                                 0x9b60
+#define GlintTexGen12Tag                              0x036c
+#define GlintTexGen12Reg                                   1
+#define GlintTexGen12Off                              0x8b60
+
+#define GlintTexGen13                                 0x9b68
+#define GlintTexGen13Tag                              0x036d
+#define GlintTexGen13Reg                                   1
+#define GlintTexGen13Off                              0x8b68
+
+#define GlintTexGen14                                 0x9b70
+#define GlintTexGen14Tag                              0x036e
+#define GlintTexGen14Reg                                   1
+#define GlintTexGen14Off                              0x8b70
+
+#define GlintTexGen15                                 0x9b78
+#define GlintTexGen15Tag                              0x036f
+#define GlintTexGen15Reg                                   1
+#define GlintTexGen15Off                              0x8b78
+
+#define GlintViewPortScaleX                           0x9b80
+#define GlintViewPortScaleXTag                        0x0370
+#define GlintViewPortScaleXReg                             1
+#define GlintViewPortScaleXOff                        0x8b80
+
+#define GlintViewPortScaleY                           0x9b88
+#define GlintViewPortScaleYTag                        0x0371
+#define GlintViewPortScaleYReg                             1
+#define GlintViewPortScaleYOff                        0x8b88
+
+#define GlintViewPortScaleZ                           0x9b90
+#define GlintViewPortScaleZTag                        0x0372
+#define GlintViewPortScaleZReg                             1
+#define GlintViewPortScaleZOff                        0x8b90
+
+#define GlintViewPortOffsetX                          0x9b98
+#define GlintViewPortOffsetXTag                       0x0373
+#define GlintViewPortOffsetXReg                            1
+#define GlintViewPortOffsetXOff                       0x8b98
+
+#define GlintViewPortOffsetY                          0x9ba0
+#define GlintViewPortOffsetYTag                       0x0374
+#define GlintViewPortOffsetYReg                            1
+#define GlintViewPortOffsetYOff                       0x8ba0
+
+#define GlintViewPortOffsetZ                          0x9ba8
+#define GlintViewPortOffsetZTag                       0x0375
+#define GlintViewPortOffsetZReg                            1
+#define GlintViewPortOffsetZOff                       0x8ba8
+
+#define GlintFogDensity                               0x9bb0
+#define GlintFogDensityTag                            0x0376
+#define GlintFogDensityReg                                 1
+#define GlintFogDensityOff                            0x8bb0
+
+#define GlintFogScale                                 0x9bb8
+#define GlintFogScaleTag                              0x0377
+#define GlintFogScaleReg                                   1
+#define GlintFogScaleOff                              0x8bb8
+
+#define GlintFogEnd                                   0x9bc0
+#define GlintFogEndTag                                0x0378
+#define GlintFogEndReg                                     1
+#define GlintFogEndOff                                0x8bc0
+
+#define GlintPolygonOffsetFactor                      0x9bc8
+#define GlintPolygonOffsetFactorTag                   0x0379
+#define GlintPolygonOffsetFactorReg                        1
+#define GlintPolygonOffsetFactorOff                   0x8bc8
+
+#define GlintPolygonOffsetBias                        0x9bd0
+#define GlintPolygonOffsetBiasTag                     0x037a
+#define GlintPolygonOffsetBiasReg                          1
+#define GlintPolygonOffsetBiasOff                     0x8bd0
+
+#define GlintLineClipLengthThreshold                  0x9bd8
+#define GlintLineClipLengthThresholdTag               0x037b
+#define GlintLineClipLengthThresholdReg                    1
+#define GlintLineClipLengthThresholdOff               0x8bd8
+
+#define GlintTriangleClipAreaThreshold                0x9be0
+#define GlintTriangleClipAreaThresholdTag             0x037c
+#define GlintTriangleClipAreaThresholdReg                  1
+#define GlintTriangleClipAreaThresholdOff             0x8be0
+
+#define GlintRasterPosXIncrement                      0x9be8
+#define GlintRasterPosXIncrementTag                   0x037d
+#define GlintRasterPosXIncrementReg                        1
+#define GlintRasterPosXIncrementOff                   0x8be8
+
+#define GlintRasterPosYIncrement                      0x9bf0
+#define GlintRasterPosYIncrementTag                   0x037e
+#define GlintRasterPosYIncrementReg                        1
+#define GlintRasterPosYIncrementOff                   0x8bf0
+
+#define GlintUserClip0X                               0x9c00
+#define GlintUserClip0XTag                            0x0380
+#define GlintUserClip0XReg                                 1
+#define GlintUserClip0XOff                            0x8c00
+
+#define GlintUserClip0Y                               0x9c08
+#define GlintUserClip0YTag                            0x0381
+#define GlintUserClip0YReg                                 1
+#define GlintUserClip0YOff                            0x8c08
+
+#define GlintUserClip0Z                               0x9c10
+#define GlintUserClip0ZTag                            0x0382
+#define GlintUserClip0ZReg                                 1
+#define GlintUserClip0ZOff                            0x8c10
+
+#define GlintUserClip0W                               0x9c18
+#define GlintUserClip0WTag                            0x0383
+#define GlintUserClip0WReg                                 1
+#define GlintUserClip0WOff                            0x8c18
+
+#define GlintUserClip1X                               0x9c20
+#define GlintUserClip1XTag                            0x0384
+#define GlintUserClip1XReg                                 1
+#define GlintUserClip1XOff                            0x8c20
+
+#define GlintUserClip1Y                               0x9c28
+#define GlintUserClip1YTag                            0x0385
+#define GlintUserClip1YReg                                 1
+#define GlintUserClip1YOff                            0x8c28
+
+#define GlintUserClip1Z                               0x9c30
+#define GlintUserClip1ZTag                            0x0386
+#define GlintUserClip1ZReg                                 1
+#define GlintUserClip1ZOff                            0x8c30
+
+#define GlintUserClip1W                               0x9c38
+#define GlintUserClip1WTag                            0x0387
+#define GlintUserClip1WReg                                 1
+#define GlintUserClip1WOff                            0x8c38
+
+#define GlintUserClip2X                               0x9c40
+#define GlintUserClip2XTag                            0x0388
+#define GlintUserClip2XReg                                 1
+#define GlintUserClip2XOff                            0x8c40
+
+#define GlintUserClip2Y                               0x9c48
+#define GlintUserClip2YTag                            0x0389
+#define GlintUserClip2YReg                                 1
+#define GlintUserClip2YOff                            0x8c48
+
+#define GlintUserClip2Z                               0x9c50
+#define GlintUserClip2ZTag                            0x038a
+#define GlintUserClip2ZReg                                 1
+#define GlintUserClip2ZOff                            0x8c50
+
+#define GlintUserClip2W                               0x9c58
+#define GlintUserClip2WTag                            0x038b
+#define GlintUserClip2WReg                                 1
+#define GlintUserClip2WOff                            0x8c58
+
+#define GlintUserClip3X                               0x9c60
+#define GlintUserClip3XTag                            0x038c
+#define GlintUserClip3XReg                                 1
+#define GlintUserClip3XOff                            0x8c60
+
+#define GlintUserClip3Y                               0x9c68
+#define GlintUserClip3YTag                            0x038d
+#define GlintUserClip3YReg                                 1
+#define GlintUserClip3YOff                            0x8c68
+
+#define GlintUserClip3Z                               0x9c70
+#define GlintUserClip3ZTag                            0x038e
+#define GlintUserClip3ZReg                                 1
+#define GlintUserClip3ZOff                            0x8c70
+
+#define GlintUserClip3W                               0x9c78
+#define GlintUserClip3WTag                            0x038f
+#define GlintUserClip3WReg                                 1
+#define GlintUserClip3WOff                            0x8c78
+
+#define GlintUserClip4X                               0x9c80
+#define GlintUserClip4XTag                            0x0390
+#define GlintUserClip4XReg                                 1
+#define GlintUserClip4XOff                            0x8c80
+
+#define GlintUserClip4Y                               0x9c88
+#define GlintUserClip4YTag                            0x0391
+#define GlintUserClip4YReg                                 1
+#define GlintUserClip4YOff                            0x8c88
+
+#define GlintUserClip4Z                               0x9c90
+#define GlintUserClip4ZTag                            0x0392
+#define GlintUserClip4ZReg                                 1
+#define GlintUserClip4ZOff                            0x8c90
+
+#define GlintUserClip4W                               0x9c98
+#define GlintUserClip4WTag                            0x0393
+#define GlintUserClip4WReg                                 1
+#define GlintUserClip4WOff                            0x8c98
+
+#define GlintUserClip5X                               0x9ca0
+#define GlintUserClip5XTag                            0x0394
+#define GlintUserClip5XReg                                 1
+#define GlintUserClip5XOff                            0x8ca0
+
+#define GlintUserClip5Y                               0x9ca8
+#define GlintUserClip5YTag                            0x0395
+#define GlintUserClip5YReg                                 1
+#define GlintUserClip5YOff                            0x8ca8
+
+#define GlintUserClip5Z                               0x9cb0
+#define GlintUserClip5ZTag                            0x0396
+#define GlintUserClip5ZReg                                 1
+#define GlintUserClip5ZOff                            0x8cb0
+
+#define GlintUserClip5W                               0x9cb8
+#define GlintUserClip5WTag                            0x0397
+#define GlintUserClip5WReg                                 1
+#define GlintUserClip5WOff                            0x8cb8
+
+#define GlintRasterPosXOffset                         0x9ce8
+#define GlintRasterPosXOffsetTag                      0x039d
+#define GlintRasterPosXOffsetReg                           1
+#define GlintRasterPosXOffsetOff                      0x8ce8
+
+#define GlintRasterPosYOffset                         0x9cf0
+#define GlintRasterPosYOffsetTag                      0x039e
+#define GlintRasterPosYOffsetReg                           1
+#define GlintRasterPosYOffsetOff                      0x8cf0
+
+#define GlintAttenuationCutOff                        0x9cf8
+#define GlintAttenuationCutOffTag                     0x039f
+#define GlintAttenuationCutOffReg                          1
+#define GlintAttenuationCutOffOff                     0x8cf8
+
+#define GlintLight0Mode                               0x9d00
+#define GlintLight0ModeTag                            0x03a0
+#define GlintLight0ModeReg                                 1
+#define GlintLight0ModeOff                            0x8d00
+
+#define GlintLight0AmbientIntensityRed                0x9d08
+#define GlintLight0AmbientIntensityRedTag             0x03a1
+#define GlintLight0AmbientIntensityRedReg                  1
+#define GlintLight0AmbientIntensityRedOff             0x8d08
+
+#define GlintLight0AmbientIntensityGreen              0x9d10
+#define GlintLight0AmbientIntensityGreenTag           0x03a2
+#define GlintLight0AmbientIntensityGreenReg                1
+#define GlintLight0AmbientIntensityGreenOff           0x8d10
+
+#define GlintLight0AmbientIntensityBlue               0x9d18
+#define GlintLight0AmbientIntensityBlueTag            0x03a3
+#define GlintLight0AmbientIntensityBlueReg                 1
+#define GlintLight0AmbientIntensityBlueOff            0x8d18
+
+#define GlintLight0DiffuseIntensityRed                0x9d20
+#define GlintLight0DiffuseIntensityRedTag             0x03a4
+#define GlintLight0DiffuseIntensityRedReg                  1
+#define GlintLight0DiffuseIntensityRedOff             0x8d20
+
+#define GlintLight0DiffuseIntensityGreen              0x9d28
+#define GlintLight0DiffuseIntensityGreenTag           0x03a5
+#define GlintLight0DiffuseIntensityGreenReg                1
+#define GlintLight0DiffuseIntensityGreenOff           0x8d28
+
+#define GlintLight0DiffuseIntensityBlue               0x9d30
+#define GlintLight0DiffuseIntensityBlueTag            0x03a6
+#define GlintLight0DiffuseIntensityBlueReg                 1
+#define GlintLight0DiffuseIntensityBlueOff            0x8d30
+
+#define GlintLight0SpecularIntensityRed               0x9d38
+#define GlintLight0SpecularIntensityRedTag            0x03a7
+#define GlintLight0SpecularIntensityRedReg                 1
+#define GlintLight0SpecularIntensityRedOff            0x8d38
+
+#define GlintLight0SpecularIntensityGreen             0x9d40
+#define GlintLight0SpecularIntensityGreenTag          0x03a8
+#define GlintLight0SpecularIntensityGreenReg               1
+#define GlintLight0SpecularIntensityGreenOff          0x8d40
+
+#define GlintLight0SpecularIntensityBlue              0x9d48
+#define GlintLight0SpecularIntensityBlueTag           0x03a9
+#define GlintLight0SpecularIntensityBlueReg                1
+#define GlintLight0SpecularIntensityBlueOff           0x8d48
+
+#define GlintLight0PositionX                          0x9d50
+#define GlintLight0PositionXTag                       0x03aa
+#define GlintLight0PositionXReg                            1
+#define GlintLight0PositionXOff                       0x8d50
+
+#define GlintLight0PositionY                          0x9d58
+#define GlintLight0PositionYTag                       0x03ab
+#define GlintLight0PositionYReg                            1
+#define GlintLight0PositionYOff                       0x8d58
+
+#define GlintLight0PositionZ                          0x9d60
+#define GlintLight0PositionZTag                       0x03ac
+#define GlintLight0PositionZReg                            1
+#define GlintLight0PositionZOff                       0x8d60
+
+#define GlintLight0PositionW                          0x9d68
+#define GlintLight0PositionWTag                       0x03ad
+#define GlintLight0PositionWReg                            1
+#define GlintLight0PositionWOff                       0x8d68
+
+#define GlintLight0SpotlightDirectionX                0x9d70
+#define GlintLight0SpotlightDirectionXTag             0x03ae
+#define GlintLight0SpotlightDirectionXReg                  1
+#define GlintLight0SpotlightDirectionXOff             0x8d70
+
+#define GlintLight0SpotlightDirectionY                0x9d78
+#define GlintLight0SpotlightDirectionYTag             0x03af
+#define GlintLight0SpotlightDirectionYReg                  1
+#define GlintLight0SpotlightDirectionYOff             0x8d78
+
+#define GlintLight0SpotlightDirectionZ                0x9d80
+#define GlintLight0SpotlightDirectionZTag             0x03b0
+#define GlintLight0SpotlightDirectionZReg                  1
+#define GlintLight0SpotlightDirectionZOff             0x8d80
+
+#define GlintLight0SpotlightExponent                  0x9d88
+#define GlintLight0SpotlightExponentTag               0x03b1
+#define GlintLight0SpotlightExponentReg                    1
+#define GlintLight0SpotlightExponentOff               0x8d88
+
+#define GlintLight0CosSpotlightCutoffAngle            0x9d90
+#define GlintLight0CosSpotlightCutoffAngleTag         0x03b2
+#define GlintLight0CosSpotlightCutoffAngleReg              1
+#define GlintLight0CosSpotlightCutoffAngleOff         0x8d90
+
+#define GlintLight0ConstantAttenuation                0x9d98
+#define GlintLight0ConstantAttenuationTag             0x03b3
+#define GlintLight0ConstantAttenuationReg                  1
+#define GlintLight0ConstantAttenuationOff             0x8d98
+
+#define GlintLight0LinearAttenuation                  0x9da0
+#define GlintLight0LinearAttenuationTag               0x03b4
+#define GlintLight0LinearAttenuationReg                    1
+#define GlintLight0LinearAttenuationOff               0x8da0
+
+#define GlintLight0QuadraticAttenuation               0x9da8
+#define GlintLight0QuadraticAttenuationTag            0x03b5
+#define GlintLight0QuadraticAttenuationReg                 1
+#define GlintLight0QuadraticAttenuationOff            0x8da8
+
+#define GlintLight1Mode                               0x9db0
+#define GlintLight1ModeTag                            0x03b6
+#define GlintLight1ModeReg                                 1
+#define GlintLight1ModeOff                            0x8db0
+
+#define GlintLight1AmbientIntensityRed                0x9db8
+#define GlintLight1AmbientIntensityRedTag             0x03b7
+#define GlintLight1AmbientIntensityRedReg                  1
+#define GlintLight1AmbientIntensityRedOff             0x8db8
+
+#define GlintLight1AmbientIntensityGreen              0x9dc0
+#define GlintLight1AmbientIntensityGreenTag           0x03b8
+#define GlintLight1AmbientIntensityGreenReg                1
+#define GlintLight1AmbientIntensityGreenOff           0x8dc0
+
+#define GlintLight1AmbientIntensityBlue               0x9dc8
+#define GlintLight1AmbientIntensityBlueTag            0x03b9
+#define GlintLight1AmbientIntensityBlueReg                 1
+#define GlintLight1AmbientIntensityBlueOff            0x8dc8
+
+#define GlintLight1DiffuseIntensityRed                0x9dd0
+#define GlintLight1DiffuseIntensityRedTag             0x03ba
+#define GlintLight1DiffuseIntensityRedReg                  1
+#define GlintLight1DiffuseIntensityRedOff             0x8dd0
+
+#define GlintLight1DiffuseIntensityGreen              0x9dd8
+#define GlintLight1DiffuseIntensityGreenTag           0x03bb
+#define GlintLight1DiffuseIntensityGreenReg                1
+#define GlintLight1DiffuseIntensityGreenOff           0x8dd8
+
+#define GlintLight1DiffuseIntensityBlue               0x9de0
+#define GlintLight1DiffuseIntensityBlueTag            0x03bc
+#define GlintLight1DiffuseIntensityBlueReg                 1
+#define GlintLight1DiffuseIntensityBlueOff            0x8de0
+
+#define GlintLight1SpecularIntensityRed               0x9de8
+#define GlintLight1SpecularIntensityRedTag            0x03bd
+#define GlintLight1SpecularIntensityRedReg                 1
+#define GlintLight1SpecularIntensityRedOff            0x8de8
+
+#define GlintLight1SpecularIntensityGreen             0x9df0
+#define GlintLight1SpecularIntensityGreenTag          0x03be
+#define GlintLight1SpecularIntensityGreenReg               1
+#define GlintLight1SpecularIntensityGreenOff          0x8df0
+
+#define GlintLight1SpecularIntensityBlue              0x9df8
+#define GlintLight1SpecularIntensityBlueTag           0x03bf
+#define GlintLight1SpecularIntensityBlueReg                1
+#define GlintLight1SpecularIntensityBlueOff           0x8df8
+
+#define GlintLight1PositionX                          0x9e00
+#define GlintLight1PositionXTag                       0x03c0
+#define GlintLight1PositionXReg                            1
+#define GlintLight1PositionXOff                       0x8e00
+
+#define GlintLight1PositionY                          0x9e08
+#define GlintLight1PositionYTag                       0x03c1
+#define GlintLight1PositionYReg                            1
+#define GlintLight1PositionYOff                       0x8e08
+
+#define GlintLight1PositionZ                          0x9e10
+#define GlintLight1PositionZTag                       0x03c2
+#define GlintLight1PositionZReg                            1
+#define GlintLight1PositionZOff                       0x8e10
+
+#define GlintLight1PositionW                          0x9e18
+#define GlintLight1PositionWTag                       0x03c3
+#define GlintLight1PositionWReg                            1
+#define GlintLight1PositionWOff                       0x8e18
+
+#define GlintLight1SpotlightDirectionX                0x9e20
+#define GlintLight1SpotlightDirectionXTag             0x03c4
+#define GlintLight1SpotlightDirectionXReg                  1
+#define GlintLight1SpotlightDirectionXOff             0x8e20
+
+#define GlintLight1SpotlightDirectionY                0x9e28
+#define GlintLight1SpotlightDirectionYTag             0x03c5
+#define GlintLight1SpotlightDirectionYReg                  1
+#define GlintLight1SpotlightDirectionYOff             0x8e28
+
+#define GlintLight1SpotlightDirectionZ                0x9e30
+#define GlintLight1SpotlightDirectionZTag             0x03c6
+#define GlintLight1SpotlightDirectionZReg                  1
+#define GlintLight1SpotlightDirectionZOff             0x8e30
+
+#define GlintLight1SpotlightExponent                  0x9e38
+#define GlintLight1SpotlightExponentTag               0x03c7
+#define GlintLight1SpotlightExponentReg                    1
+#define GlintLight1SpotlightExponentOff               0x8e38
+
+#define GlintLight1CosSpotlightCutoffAngle            0x9e40
+#define GlintLight1CosSpotlightCutoffAngleTag         0x03c8
+#define GlintLight1CosSpotlightCutoffAngleReg              1
+#define GlintLight1CosSpotlightCutoffAngleOff         0x8e40
+
+#define GlintLight1ConstantAttenuation                0x9e48
+#define GlintLight1ConstantAttenuationTag             0x03c9
+#define GlintLight1ConstantAttenuationReg                  1
+#define GlintLight1ConstantAttenuationOff             0x8e48
+
+#define GlintLight1LinearAttenuation                  0x9e50
+#define GlintLight1LinearAttenuationTag               0x03ca
+#define GlintLight1LinearAttenuationReg                    1
+#define GlintLight1LinearAttenuationOff               0x8e50
+
+#define GlintLight1QuadraticAttenuation               0x9e58
+#define GlintLight1QuadraticAttenuationTag            0x03cb
+#define GlintLight1QuadraticAttenuationReg                 1
+#define GlintLight1QuadraticAttenuationOff            0x8e58
+
+#define GlintLight2Mode                               0x9e60
+#define GlintLight2ModeTag                            0x03cc
+#define GlintLight2ModeReg                                 1
+#define GlintLight2ModeOff                            0x8e60
+
+#define GlintLight2AmbientIntensityRed                0x9e68
+#define GlintLight2AmbientIntensityRedTag             0x03cd
+#define GlintLight2AmbientIntensityRedReg                  1
+#define GlintLight2AmbientIntensityRedOff             0x8e68
+
+#define GlintLight2AmbientIntensityGreen              0x9e70
+#define GlintLight2AmbientIntensityGreenTag           0x03ce
+#define GlintLight2AmbientIntensityGreenReg                1
+#define GlintLight2AmbientIntensityGreenOff           0x8e70
+
+#define GlintLight2AmbientIntensityBlue               0x9e78
+#define GlintLight2AmbientIntensityBlueTag            0x03cf
+#define GlintLight2AmbientIntensityBlueReg                 1
+#define GlintLight2AmbientIntensityBlueOff            0x8e78
+
+#define GlintLight2DiffuseIntensityRed                0x9e80
+#define GlintLight2DiffuseIntensityRedTag             0x03d0
+#define GlintLight2DiffuseIntensityRedReg                  1
+#define GlintLight2DiffuseIntensityRedOff             0x8e80
+
+#define GlintLight2DiffuseIntensityGreen              0x9e88
+#define GlintLight2DiffuseIntensityGreenTag           0x03d1
+#define GlintLight2DiffuseIntensityGreenReg                1
+#define GlintLight2DiffuseIntensityGreenOff           0x8e88
+
+#define GlintLight2DiffuseIntensityBlue               0x9e90
+#define GlintLight2DiffuseIntensityBlueTag            0x03d2
+#define GlintLight2DiffuseIntensityBlueReg                 1
+#define GlintLight2DiffuseIntensityBlueOff            0x8e90
+
+#define GlintLight2SpecularIntensityRed               0x9e98
+#define GlintLight2SpecularIntensityRedTag            0x03d3
+#define GlintLight2SpecularIntensityRedReg                 1
+#define GlintLight2SpecularIntensityRedOff            0x8e98
+
+#define GlintLight2SpecularIntensityGreen             0x9ea0
+#define GlintLight2SpecularIntensityGreenTag          0x03d4
+#define GlintLight2SpecularIntensityGreenReg               1
+#define GlintLight2SpecularIntensityGreenOff          0x8ea0
+
+#define GlintLight2SpecularIntensityBlue              0x9ea8
+#define GlintLight2SpecularIntensityBlueTag           0x03d5
+#define GlintLight2SpecularIntensityBlueReg                1
+#define GlintLight2SpecularIntensityBlueOff           0x8ea8
+
+#define GlintLight2PositionX                          0x9eb0
+#define GlintLight2PositionXTag                       0x03d6
+#define GlintLight2PositionXReg                            1
+#define GlintLight2PositionXOff                       0x8eb0
+
+#define GlintLight2PositionY                          0x9eb8
+#define GlintLight2PositionYTag                       0x03d7
+#define GlintLight2PositionYReg                            1
+#define GlintLight2PositionYOff                       0x8eb8
+
+#define GlintLight2PositionZ                          0x9ec0
+#define GlintLight2PositionZTag                       0x03d8
+#define GlintLight2PositionZReg                            1
+#define GlintLight2PositionZOff                       0x8ec0
+
+#define GlintLight2PositionW                          0x9ec8
+#define GlintLight2PositionWTag                       0x03d9
+#define GlintLight2PositionWReg                            1
+#define GlintLight2PositionWOff                       0x8ec8
+
+#define GlintLight2SpotlightDirectionX                0x9ed0
+#define GlintLight2SpotlightDirectionXTag             0x03da
+#define GlintLight2SpotlightDirectionXReg                  1
+#define GlintLight2SpotlightDirectionXOff             0x8ed0
+
+#define GlintLight2SpotlightDirectionY                0x9ed8
+#define GlintLight2SpotlightDirectionYTag             0x03db
+#define GlintLight2SpotlightDirectionYReg                  1
+#define GlintLight2SpotlightDirectionYOff             0x8ed8
+
+#define GlintLight2SpotlightDirectionZ                0x9ee0
+#define GlintLight2SpotlightDirectionZTag             0x03dc
+#define GlintLight2SpotlightDirectionZReg                  1
+#define GlintLight2SpotlightDirectionZOff             0x8ee0
+
+#define GlintLight2SpotlightExponent                  0x9ee8
+#define GlintLight2SpotlightExponentTag               0x03dd
+#define GlintLight2SpotlightExponentReg                    1
+#define GlintLight2SpotlightExponentOff               0x8ee8
+
+#define GlintLight2CosSpotlightCutoffAngle            0x9ef0
+#define GlintLight2CosSpotlightCutoffAngleTag         0x03de
+#define GlintLight2CosSpotlightCutoffAngleReg              1
+#define GlintLight2CosSpotlightCutoffAngleOff         0x8ef0
+
+#define GlintLight2ConstantAttenuation                0x9ef8
+#define GlintLight2ConstantAttenuationTag             0x03df
+#define GlintLight2ConstantAttenuationReg                  1
+#define GlintLight2ConstantAttenuationOff             0x8ef8
+
+#define GlintLight2LinearAttenuation                  0x9f00
+#define GlintLight2LinearAttenuationTag               0x03e0
+#define GlintLight2LinearAttenuationReg                    1
+#define GlintLight2LinearAttenuationOff               0x8f00
+
+#define GlintLight2QuadraticAttenuation               0x9f08
+#define GlintLight2QuadraticAttenuationTag            0x03e1
+#define GlintLight2QuadraticAttenuationReg                 1
+#define GlintLight2QuadraticAttenuationOff            0x8f08
+
+#define GlintLight3Mode                               0x9f10
+#define GlintLight3ModeTag                            0x03e2
+#define GlintLight3ModeReg                                 1
+#define GlintLight3ModeOff                            0x8f10
+
+#define GlintLight3AmbientIntensityRed                0x9f18
+#define GlintLight3AmbientIntensityRedTag             0x03e3
+#define GlintLight3AmbientIntensityRedReg                  1
+#define GlintLight3AmbientIntensityRedOff             0x8f18
+
+#define GlintLight3AmbientIntensityGreen              0x9f20
+#define GlintLight3AmbientIntensityGreenTag           0x03e4
+#define GlintLight3AmbientIntensityGreenReg                1
+#define GlintLight3AmbientIntensityGreenOff           0x8f20
+
+#define GlintLight3AmbientIntensityBlue               0x9f28
+#define GlintLight3AmbientIntensityBlueTag            0x03e5
+#define GlintLight3AmbientIntensityBlueReg                 1
+#define GlintLight3AmbientIntensityBlueOff            0x8f28
+
+#define GlintLight3DiffuseIntensityRed                0x9f30
+#define GlintLight3DiffuseIntensityRedTag             0x03e6
+#define GlintLight3DiffuseIntensityRedReg                  1
+#define GlintLight3DiffuseIntensityRedOff             0x8f30
+
+#define GlintLight3DiffuseIntensityGreen              0x9f38
+#define GlintLight3DiffuseIntensityGreenTag           0x03e7
+#define GlintLight3DiffuseIntensityGreenReg                1
+#define GlintLight3DiffuseIntensityGreenOff           0x8f38
+
+#define GlintLight3DiffuseIntensityBlue               0x9f40
+#define GlintLight3DiffuseIntensityBlueTag            0x03e8
+#define GlintLight3DiffuseIntensityBlueReg                 1
+#define GlintLight3DiffuseIntensityBlueOff            0x8f40
+
+#define GlintLight3SpecularIntensityRed               0x9f48
+#define GlintLight3SpecularIntensityRedTag            0x03e9
+#define GlintLight3SpecularIntensityRedReg                 1
+#define GlintLight3SpecularIntensityRedOff            0x8f48
+
+#define GlintLight3SpecularIntensityGreen             0x9f50
+#define GlintLight3SpecularIntensityGreenTag          0x03ea
+#define GlintLight3SpecularIntensityGreenReg               1
+#define GlintLight3SpecularIntensityGreenOff          0x8f50
+
+#define GlintLight3SpecularIntensityBlue              0x9f58
+#define GlintLight3SpecularIntensityBlueTag           0x03eb
+#define GlintLight3SpecularIntensityBlueReg                1
+#define GlintLight3SpecularIntensityBlueOff           0x8f58
+
+#define GlintLight3PositionX                          0x9f60
+#define GlintLight3PositionXTag                       0x03ec
+#define GlintLight3PositionXReg                            1
+#define GlintLight3PositionXOff                       0x8f60
+
+#define GlintLight3PositionY                          0x9f68
+#define GlintLight3PositionYTag                       0x03ed
+#define GlintLight3PositionYReg                            1
+#define GlintLight3PositionYOff                       0x8f68
+
+#define GlintLight3PositionZ                          0x9f70
+#define GlintLight3PositionZTag                       0x03ee
+#define GlintLight3PositionZReg                            1
+#define GlintLight3PositionZOff                       0x8f70
+
+#define GlintLight3PositionW                          0x9f78
+#define GlintLight3PositionWTag                       0x03ef
+#define GlintLight3PositionWReg                            1
+#define GlintLight3PositionWOff                       0x8f78
+
+#define GlintLight3SpotlightDirectionX                0x9f80
+#define GlintLight3SpotlightDirectionXTag             0x03f0
+#define GlintLight3SpotlightDirectionXReg                  1
+#define GlintLight3SpotlightDirectionXOff             0x8f80
+
+#define GlintLight3SpotlightDirectionY                0x9f88
+#define GlintLight3SpotlightDirectionYTag             0x03f1
+#define GlintLight3SpotlightDirectionYReg                  1
+#define GlintLight3SpotlightDirectionYOff             0x8f88
+
+#define GlintLight3SpotlightDirectionZ                0x9f90
+#define GlintLight3SpotlightDirectionZTag             0x03f2
+#define GlintLight3SpotlightDirectionZReg                  1
+#define GlintLight3SpotlightDirectionZOff             0x8f90
+
+#define GlintLight3SpotlightExponent                  0x9f98
+#define GlintLight3SpotlightExponentTag               0x03f3
+#define GlintLight3SpotlightExponentReg                    1
+#define GlintLight3SpotlightExponentOff               0x8f98
+
+#define GlintLight3CosSpotlightCutoffAngle            0x9fa0
+#define GlintLight3CosSpotlightCutoffAngleTag         0x03f4
+#define GlintLight3CosSpotlightCutoffAngleReg              1
+#define GlintLight3CosSpotlightCutoffAngleOff         0x8fa0
+
+#define GlintLight3ConstantAttenuation                0x9fa8
+#define GlintLight3ConstantAttenuationTag             0x03f5
+#define GlintLight3ConstantAttenuationReg                  1
+#define GlintLight3ConstantAttenuationOff             0x8fa8
+
+#define GlintLight3LinearAttenuation                  0x9fb0
+#define GlintLight3LinearAttenuationTag               0x03f6
+#define GlintLight3LinearAttenuationReg                    1
+#define GlintLight3LinearAttenuationOff               0x8fb0
+
+#define GlintLight3QuadraticAttenuation               0x9fb8
+#define GlintLight3QuadraticAttenuationTag            0x03f7
+#define GlintLight3QuadraticAttenuationReg                 1
+#define GlintLight3QuadraticAttenuationOff            0x8fb8
+
+#define GlintLight4Mode                               0x9fc0
+#define GlintLight4ModeTag                            0x03f8
+#define GlintLight4ModeReg                                 1
+#define GlintLight4ModeOff                            0x8fc0
+
+#define GlintLight4AmbientIntensityRed                0x9fc8
+#define GlintLight4AmbientIntensityRedTag             0x03f9
+#define GlintLight4AmbientIntensityRedReg                  1
+#define GlintLight4AmbientIntensityRedOff             0x8fc8
+
+#define GlintLight4AmbientIntensityGreen              0x9fd0
+#define GlintLight4AmbientIntensityGreenTag           0x03fa
+#define GlintLight4AmbientIntensityGreenReg                1
+#define GlintLight4AmbientIntensityGreenOff           0x8fd0
+
+#define GlintLight4AmbientIntensityBlue               0x9fd8
+#define GlintLight4AmbientIntensityBlueTag            0x03fb
+#define GlintLight4AmbientIntensityBlueReg                 1
+#define GlintLight4AmbientIntensityBlueOff            0x8fd8
+
+#define GlintLight4DiffuseIntensityRed                0x9fe0
+#define GlintLight4DiffuseIntensityRedTag             0x03fc
+#define GlintLight4DiffuseIntensityRedReg                  1
+#define GlintLight4DiffuseIntensityRedOff             0x8fe0
+
+#define GlintLight4DiffuseIntensityGreen              0x9fe8
+#define GlintLight4DiffuseIntensityGreenTag           0x03fd
+#define GlintLight4DiffuseIntensityGreenReg                1
+#define GlintLight4DiffuseIntensityGreenOff           0x8fe8
+
+#define GlintLight4DiffuseIntensityBlue               0x9ff0
+#define GlintLight4DiffuseIntensityBlueTag            0x03fe
+#define GlintLight4DiffuseIntensityBlueReg                 1
+#define GlintLight4DiffuseIntensityBlueOff            0x8ff0
+
+#define GlintLight4SpecularIntensityRed               0x9ff8
+#define GlintLight4SpecularIntensityRedTag            0x03ff
+#define GlintLight4SpecularIntensityRedReg                 1
+#define GlintLight4SpecularIntensityRedOff            0x8ff8
+
+#define GlintLight4SpecularIntensityGreen             0xa000
+#define GlintLight4SpecularIntensityGreenTag          0x0400
+#define GlintLight4SpecularIntensityGreenReg               1
+#define GlintLight4SpecularIntensityGreenOff          0x9000
+
+#define GlintLight4SpecularIntensityBlue              0xa008
+#define GlintLight4SpecularIntensityBlueTag           0x0401
+#define GlintLight4SpecularIntensityBlueReg                1
+#define GlintLight4SpecularIntensityBlueOff           0x9008
+
+#define GlintLight4PositionX                          0xa010
+#define GlintLight4PositionXTag                       0x0402
+#define GlintLight4PositionXReg                            1
+#define GlintLight4PositionXOff                       0x9010
+
+#define GlintLight4PositionY                          0xa018
+#define GlintLight4PositionYTag                       0x0403
+#define GlintLight4PositionYReg                            1
+#define GlintLight4PositionYOff                       0x9018
+
+#define GlintLight4PositionZ                          0xa020
+#define GlintLight4PositionZTag                       0x0404
+#define GlintLight4PositionZReg                            1
+#define GlintLight4PositionZOff                       0x9020
+
+#define GlintLight4PositionW                          0xa028
+#define GlintLight4PositionWTag                       0x0405
+#define GlintLight4PositionWReg                            1
+#define GlintLight4PositionWOff                       0x9028
+
+#define GlintLight4SpotlightDirectionX                0xa030
+#define GlintLight4SpotlightDirectionXTag             0x0406
+#define GlintLight4SpotlightDirectionXReg                  1
+#define GlintLight4SpotlightDirectionXOff             0x9030
+
+#define GlintLight4SpotlightDirectionY                0xa038
+#define GlintLight4SpotlightDirectionYTag             0x0407
+#define GlintLight4SpotlightDirectionYReg                  1
+#define GlintLight4SpotlightDirectionYOff             0x9038
+
+#define GlintLight4SpotlightDirectionZ                0xa040
+#define GlintLight4SpotlightDirectionZTag             0x0408
+#define GlintLight4SpotlightDirectionZReg                  1
+#define GlintLight4SpotlightDirectionZOff             0x9040
+
+#define GlintLight4SpotlightExponent                  0xa048
+#define GlintLight4SpotlightExponentTag               0x0409
+#define GlintLight4SpotlightExponentReg                    1
+#define GlintLight4SpotlightExponentOff               0x9048
+
+#define GlintLight4CosSpotlightCutoffAngle            0xa050
+#define GlintLight4CosSpotlightCutoffAngleTag         0x040a
+#define GlintLight4CosSpotlightCutoffAngleReg              1
+#define GlintLight4CosSpotlightCutoffAngleOff         0x9050
+
+#define GlintLight4ConstantAttenuation                0xa058
+#define GlintLight4ConstantAttenuationTag             0x040b
+#define GlintLight4ConstantAttenuationReg                  1
+#define GlintLight4ConstantAttenuationOff             0x9058
+
+#define GlintLight4LinearAttenuation                  0xa060
+#define GlintLight4LinearAttenuationTag               0x040c
+#define GlintLight4LinearAttenuationReg                    1
+#define GlintLight4LinearAttenuationOff               0x9060
+
+#define GlintLight4QuadraticAttenuation               0xa068
+#define GlintLight4QuadraticAttenuationTag            0x040d
+#define GlintLight4QuadraticAttenuationReg                 1
+#define GlintLight4QuadraticAttenuationOff            0x9068
+
+#define GlintLight5Mode                               0xa070
+#define GlintLight5ModeTag                            0x040e
+#define GlintLight5ModeReg                                 1
+#define GlintLight5ModeOff                            0x9070
+
+#define GlintLight5AmbientIntensityRed                0xa078
+#define GlintLight5AmbientIntensityRedTag             0x040f
+#define GlintLight5AmbientIntensityRedReg                  1
+#define GlintLight5AmbientIntensityRedOff             0x9078
+
+#define GlintLight5AmbientIntensityGreen              0xa080
+#define GlintLight5AmbientIntensityGreenTag           0x0410
+#define GlintLight5AmbientIntensityGreenReg                1
+#define GlintLight5AmbientIntensityGreenOff           0x9080
+
+#define GlintLight5AmbientIntensityBlue               0xa088
+#define GlintLight5AmbientIntensityBlueTag            0x0411
+#define GlintLight5AmbientIntensityBlueReg                 1
+#define GlintLight5AmbientIntensityBlueOff            0x9088
+
+#define GlintLight5DiffuseIntensityRed                0xa090
+#define GlintLight5DiffuseIntensityRedTag             0x0412
+#define GlintLight5DiffuseIntensityRedReg                  1
+#define GlintLight5DiffuseIntensityRedOff             0x9090
+
+#define GlintLight5DiffuseIntensityGreen              0xa098
+#define GlintLight5DiffuseIntensityGreenTag           0x0413
+#define GlintLight5DiffuseIntensityGreenReg                1
+#define GlintLight5DiffuseIntensityGreenOff           0x9098
+
+#define GlintLight5DiffuseIntensityBlue               0xa0a0
+#define GlintLight5DiffuseIntensityBlueTag            0x0414
+#define GlintLight5DiffuseIntensityBlueReg                 1
+#define GlintLight5DiffuseIntensityBlueOff            0x90a0
+
+#define GlintLight5SpecularIntensityRed               0xa0a8
+#define GlintLight5SpecularIntensityRedTag            0x0415
+#define GlintLight5SpecularIntensityRedReg                 1
+#define GlintLight5SpecularIntensityRedOff            0x90a8
+
+#define GlintLight5SpecularIntensityGreen             0xa0b0
+#define GlintLight5SpecularIntensityGreenTag          0x0416
+#define GlintLight5SpecularIntensityGreenReg               1
+#define GlintLight5SpecularIntensityGreenOff          0x90b0
+
+#define GlintLight5SpecularIntensityBlue              0xa0b8
+#define GlintLight5SpecularIntensityBlueTag           0x0417
+#define GlintLight5SpecularIntensityBlueReg                1
+#define GlintLight5SpecularIntensityBlueOff           0x90b8
+
+#define GlintLight5PositionX                          0xa0c0
+#define GlintLight5PositionXTag                       0x0418
+#define GlintLight5PositionXReg                            1
+#define GlintLight5PositionXOff                       0x90c0
+
+#define GlintLight5PositionY                          0xa0c8
+#define GlintLight5PositionYTag                       0x0419
+#define GlintLight5PositionYReg                            1
+#define GlintLight5PositionYOff                       0x90c8
+
+#define GlintLight5PositionZ                          0xa0d0
+#define GlintLight5PositionZTag                       0x041a
+#define GlintLight5PositionZReg                            1
+#define GlintLight5PositionZOff                       0x90d0
+
+#define GlintLight5PositionW                          0xa0d8
+#define GlintLight5PositionWTag                       0x041b
+#define GlintLight5PositionWReg                            1
+#define GlintLight5PositionWOff                       0x90d8
+
+#define GlintLight5SpotlightDirectionX                0xa0e0
+#define GlintLight5SpotlightDirectionXTag             0x041c
+#define GlintLight5SpotlightDirectionXReg                  1
+#define GlintLight5SpotlightDirectionXOff             0x90e0
+
+#define GlintLight5SpotlightDirectionY                0xa0e8
+#define GlintLight5SpotlightDirectionYTag             0x041d
+#define GlintLight5SpotlightDirectionYReg                  1
+#define GlintLight5SpotlightDirectionYOff             0x90e8
+
+#define GlintLight5SpotlightDirectionZ                0xa0f0
+#define GlintLight5SpotlightDirectionZTag             0x041e
+#define GlintLight5SpotlightDirectionZReg                  1
+#define GlintLight5SpotlightDirectionZOff             0x90f0
+
+#define GlintLight5SpotlightExponent                  0xa0f8
+#define GlintLight5SpotlightExponentTag               0x041f
+#define GlintLight5SpotlightExponentReg                    1
+#define GlintLight5SpotlightExponentOff               0x90f8
+
+#define GlintLight5CosSpotlightCutoffAngle            0xa100
+#define GlintLight5CosSpotlightCutoffAngleTag         0x0420
+#define GlintLight5CosSpotlightCutoffAngleReg              1
+#define GlintLight5CosSpotlightCutoffAngleOff         0x9100
+
+#define GlintLight5ConstantAttenuation                0xa108
+#define GlintLight5ConstantAttenuationTag             0x0421
+#define GlintLight5ConstantAttenuationReg                  1
+#define GlintLight5ConstantAttenuationOff             0x9108
+
+#define GlintLight5LinearAttenuation                  0xa110
+#define GlintLight5LinearAttenuationTag               0x0422
+#define GlintLight5LinearAttenuationReg                    1
+#define GlintLight5LinearAttenuationOff               0x9110
+
+#define GlintLight5QuadraticAttenuation               0xa118
+#define GlintLight5QuadraticAttenuationTag            0x0423
+#define GlintLight5QuadraticAttenuationReg                 1
+#define GlintLight5QuadraticAttenuationOff            0x9118
+
+#define GlintLight6Mode                               0xa120
+#define GlintLight6ModeTag                            0x0424
+#define GlintLight6ModeReg                                 1
+#define GlintLight6ModeOff                            0x9120
+
+#define GlintLight6AmbientIntensityRed                0xa128
+#define GlintLight6AmbientIntensityRedTag             0x0425
+#define GlintLight6AmbientIntensityRedReg                  1
+#define GlintLight6AmbientIntensityRedOff             0x9128
+
+#define GlintLight6AmbientIntensityGreen              0xa130
+#define GlintLight6AmbientIntensityGreenTag           0x0426
+#define GlintLight6AmbientIntensityGreenReg                1
+#define GlintLight6AmbientIntensityGreenOff           0x9130
+
+#define GlintLight6AmbientIntensityBlue               0xa138
+#define GlintLight6AmbientIntensityBlueTag            0x0427
+#define GlintLight6AmbientIntensityBlueReg                 1
+#define GlintLight6AmbientIntensityBlueOff            0x9138
+
+#define GlintLight6DiffuseIntensityRed                0xa140
+#define GlintLight6DiffuseIntensityRedTag             0x0428
+#define GlintLight6DiffuseIntensityRedReg                  1
+#define GlintLight6DiffuseIntensityRedOff             0x9140
+
+#define GlintLight6DiffuseIntensityGreen              0xa148
+#define GlintLight6DiffuseIntensityGreenTag           0x0429
+#define GlintLight6DiffuseIntensityGreenReg                1
+#define GlintLight6DiffuseIntensityGreenOff           0x9148
+
+#define GlintLight6DiffuseIntensityBlue               0xa150
+#define GlintLight6DiffuseIntensityBlueTag            0x042a
+#define GlintLight6DiffuseIntensityBlueReg                 1
+#define GlintLight6DiffuseIntensityBlueOff            0x9150
+
+#define GlintLight6SpecularIntensityRed               0xa158
+#define GlintLight6SpecularIntensityRedTag            0x042b
+#define GlintLight6SpecularIntensityRedReg                 1
+#define GlintLight6SpecularIntensityRedOff            0x9158
+
+#define GlintLight6SpecularIntensityGreen             0xa160
+#define GlintLight6SpecularIntensityGreenTag          0x042c
+#define GlintLight6SpecularIntensityGreenReg               1
+#define GlintLight6SpecularIntensityGreenOff          0x9160
+
+#define GlintLight6SpecularIntensityBlue              0xa168
+#define GlintLight6SpecularIntensityBlueTag           0x042d
+#define GlintLight6SpecularIntensityBlueReg                1
+#define GlintLight6SpecularIntensityBlueOff           0x9168
+
+#define GlintLight6PositionX                          0xa170
+#define GlintLight6PositionXTag                       0x042e
+#define GlintLight6PositionXReg                            1
+#define GlintLight6PositionXOff                       0x9170
+
+#define GlintLight6PositionY                          0xa178
+#define GlintLight6PositionYTag                       0x042f
+#define GlintLight6PositionYReg                            1
+#define GlintLight6PositionYOff                       0x9178
+
+#define GlintLight6PositionZ                          0xa180
+#define GlintLight6PositionZTag                       0x0430
+#define GlintLight6PositionZReg                            1
+#define GlintLight6PositionZOff                       0x9180
+
+#define GlintLight6PositionW                          0xa188
+#define GlintLight6PositionWTag                       0x0431
+#define GlintLight6PositionWReg                            1
+#define GlintLight6PositionWOff                       0x9188
+
+#define GlintLight6SpotlightDirectionX                0xa190
+#define GlintLight6SpotlightDirectionXTag             0x0432
+#define GlintLight6SpotlightDirectionXReg                  1
+#define GlintLight6SpotlightDirectionXOff             0x9190
+
+#define GlintLight6SpotlightDirectionY                0xa198
+#define GlintLight6SpotlightDirectionYTag             0x0433
+#define GlintLight6SpotlightDirectionYReg                  1
+#define GlintLight6SpotlightDirectionYOff             0x9198
+
+#define GlintLight6SpotlightDirectionZ                0xa1a0
+#define GlintLight6SpotlightDirectionZTag             0x0434
+#define GlintLight6SpotlightDirectionZReg                  1
+#define GlintLight6SpotlightDirectionZOff             0x91a0
+
+#define GlintLight6SpotlightExponent                  0xa1a8
+#define GlintLight6SpotlightExponentTag               0x0435
+#define GlintLight6SpotlightExponentReg                    1
+#define GlintLight6SpotlightExponentOff               0x91a8
+
+#define GlintLight6CosSpotlightCutoffAngle            0xa1b0
+#define GlintLight6CosSpotlightCutoffAngleTag         0x0436
+#define GlintLight6CosSpotlightCutoffAngleReg              1
+#define GlintLight6CosSpotlightCutoffAngleOff         0x91b0
+
+#define GlintLight6ConstantAttenuation                0xa1b8
+#define GlintLight6ConstantAttenuationTag             0x0437
+#define GlintLight6ConstantAttenuationReg                  1
+#define GlintLight6ConstantAttenuationOff             0x91b8
+
+#define GlintLight6LinearAttenuation                  0xa1c0
+#define GlintLight6LinearAttenuationTag               0x0438
+#define GlintLight6LinearAttenuationReg                    1
+#define GlintLight6LinearAttenuationOff               0x91c0
+
+#define GlintLight6QuadraticAttenuation               0xa1c8
+#define GlintLight6QuadraticAttenuationTag            0x0439
+#define GlintLight6QuadraticAttenuationReg                 1
+#define GlintLight6QuadraticAttenuationOff            0x91c8
+
+#define GlintLight7Mode                               0xa1d0
+#define GlintLight7ModeTag                            0x043a
+#define GlintLight7ModeReg                                 1
+#define GlintLight7ModeOff                            0x91d0
+
+#define GlintLight7AmbientIntensityRed                0xa1d8
+#define GlintLight7AmbientIntensityRedTag             0x043b
+#define GlintLight7AmbientIntensityRedReg                  1
+#define GlintLight7AmbientIntensityRedOff             0x91d8
+
+#define GlintLight7AmbientIntensityGreen              0xa1e0
+#define GlintLight7AmbientIntensityGreenTag           0x043c
+#define GlintLight7AmbientIntensityGreenReg                1
+#define GlintLight7AmbientIntensityGreenOff           0x91e0
+
+#define GlintLight7AmbientIntensityBlue               0xa1e8
+#define GlintLight7AmbientIntensityBlueTag            0x043d
+#define GlintLight7AmbientIntensityBlueReg                 1
+#define GlintLight7AmbientIntensityBlueOff            0x91e8
+
+#define GlintLight7DiffuseIntensityRed                0xa1f0
+#define GlintLight7DiffuseIntensityRedTag             0x043e
+#define GlintLight7DiffuseIntensityRedReg                  1
+#define GlintLight7DiffuseIntensityRedOff             0x91f0
+
+#define GlintLight7DiffuseIntensityGreen              0xa1f8
+#define GlintLight7DiffuseIntensityGreenTag           0x043f
+#define GlintLight7DiffuseIntensityGreenReg                1
+#define GlintLight7DiffuseIntensityGreenOff           0x91f8
+
+#define GlintLight7DiffuseIntensityBlue               0xa200
+#define GlintLight7DiffuseIntensityBlueTag            0x0440
+#define GlintLight7DiffuseIntensityBlueReg                 1
+#define GlintLight7DiffuseIntensityBlueOff            0x9200
+
+#define GlintLight7SpecularIntensityRed               0xa208
+#define GlintLight7SpecularIntensityRedTag            0x0441
+#define GlintLight7SpecularIntensityRedReg                 1
+#define GlintLight7SpecularIntensityRedOff            0x9208
+
+#define GlintLight7SpecularIntensityGreen             0xa210
+#define GlintLight7SpecularIntensityGreenTag          0x0442
+#define GlintLight7SpecularIntensityGreenReg               1
+#define GlintLight7SpecularIntensityGreenOff          0x9210
+
+#define GlintLight7SpecularIntensityBlue              0xa218
+#define GlintLight7SpecularIntensityBlueTag           0x0443
+#define GlintLight7SpecularIntensityBlueReg                1
+#define GlintLight7SpecularIntensityBlueOff           0x9218
+
+#define GlintLight7PositionX                          0xa220
+#define GlintLight7PositionXTag                       0x0444
+#define GlintLight7PositionXReg                            1
+#define GlintLight7PositionXOff                       0x9220
+
+#define GlintLight7PositionY                          0xa228
+#define GlintLight7PositionYTag                       0x0445
+#define GlintLight7PositionYReg                            1
+#define GlintLight7PositionYOff                       0x9228
+
+#define GlintLight7PositionZ                          0xa230
+#define GlintLight7PositionZTag                       0x0446
+#define GlintLight7PositionZReg                            1
+#define GlintLight7PositionZOff                       0x9230
+
+#define GlintLight7PositionW                          0xa238
+#define GlintLight7PositionWTag                       0x0447
+#define GlintLight7PositionWReg                            1
+#define GlintLight7PositionWOff                       0x9238
+
+#define GlintLight7SpotlightDirectionX                0xa240
+#define GlintLight7SpotlightDirectionXTag             0x0448
+#define GlintLight7SpotlightDirectionXReg                  1
+#define GlintLight7SpotlightDirectionXOff             0x9240
+
+#define GlintLight7SpotlightDirectionY                0xa248
+#define GlintLight7SpotlightDirectionYTag             0x0449
+#define GlintLight7SpotlightDirectionYReg                  1
+#define GlintLight7SpotlightDirectionYOff             0x9248
+
+#define GlintLight7SpotlightDirectionZ                0xa250
+#define GlintLight7SpotlightDirectionZTag             0x044a
+#define GlintLight7SpotlightDirectionZReg                  1
+#define GlintLight7SpotlightDirectionZOff             0x9250
+
+#define GlintLight7SpotlightExponent                  0xa258
+#define GlintLight7SpotlightExponentTag               0x044b
+#define GlintLight7SpotlightExponentReg                    1
+#define GlintLight7SpotlightExponentOff               0x9258
+
+#define GlintLight7CosSpotlightCutoffAngle            0xa260
+#define GlintLight7CosSpotlightCutoffAngleTag         0x044c
+#define GlintLight7CosSpotlightCutoffAngleReg              1
+#define GlintLight7CosSpotlightCutoffAngleOff         0x9260
+
+#define GlintLight7ConstantAttenuation                0xa268
+#define GlintLight7ConstantAttenuationTag             0x044d
+#define GlintLight7ConstantAttenuationReg                  1
+#define GlintLight7ConstantAttenuationOff             0x9268
+
+#define GlintLight7LinearAttenuation                  0xa270
+#define GlintLight7LinearAttenuationTag               0x044e
+#define GlintLight7LinearAttenuationReg                    1
+#define GlintLight7LinearAttenuationOff               0x9270
+
+#define GlintLight7QuadraticAttenuation               0xa278
+#define GlintLight7QuadraticAttenuationTag            0x044f
+#define GlintLight7QuadraticAttenuationReg                 1
+#define GlintLight7QuadraticAttenuationOff            0x9278
+
+#define GlintLight8Mode                               0xa280
+#define GlintLight8ModeTag                            0x0450
+#define GlintLight8ModeReg                                 1
+#define GlintLight8ModeOff                            0x9280
+
+#define GlintLight8AmbientIntensityRed                0xa288
+#define GlintLight8AmbientIntensityRedTag             0x0451
+#define GlintLight8AmbientIntensityRedReg                  1
+#define GlintLight8AmbientIntensityRedOff             0x9288
+
+#define GlintLight8AmbientIntensityGreen              0xa290
+#define GlintLight8AmbientIntensityGreenTag           0x0452
+#define GlintLight8AmbientIntensityGreenReg                1
+#define GlintLight8AmbientIntensityGreenOff           0x9290
+
+#define GlintLight8AmbientIntensityBlue               0xa298
+#define GlintLight8AmbientIntensityBlueTag            0x0453
+#define GlintLight8AmbientIntensityBlueReg                 1
+#define GlintLight8AmbientIntensityBlueOff            0x9298
+
+#define GlintLight8DiffuseIntensityRed                0xa2a0
+#define GlintLight8DiffuseIntensityRedTag             0x0454
+#define GlintLight8DiffuseIntensityRedReg                  1
+#define GlintLight8DiffuseIntensityRedOff             0x92a0
+
+#define GlintLight8DiffuseIntensityGreen              0xa2a8
+#define GlintLight8DiffuseIntensityGreenTag           0x0455
+#define GlintLight8DiffuseIntensityGreenReg                1
+#define GlintLight8DiffuseIntensityGreenOff           0x92a8
+
+#define GlintLight8DiffuseIntensityBlue               0xa2b0
+#define GlintLight8DiffuseIntensityBlueTag            0x0456
+#define GlintLight8DiffuseIntensityBlueReg                 1
+#define GlintLight8DiffuseIntensityBlueOff            0x92b0
+
+#define GlintLight8SpecularIntensityRed               0xa2b8
+#define GlintLight8SpecularIntensityRedTag            0x0457
+#define GlintLight8SpecularIntensityRedReg                 1
+#define GlintLight8SpecularIntensityRedOff            0x92b8
+
+#define GlintLight8SpecularIntensityGreen             0xa2c0
+#define GlintLight8SpecularIntensityGreenTag          0x0458
+#define GlintLight8SpecularIntensityGreenReg               1
+#define GlintLight8SpecularIntensityGreenOff          0x92c0
+
+#define GlintLight8SpecularIntensityBlue              0xa2c8
+#define GlintLight8SpecularIntensityBlueTag           0x0459
+#define GlintLight8SpecularIntensityBlueReg                1
+#define GlintLight8SpecularIntensityBlueOff           0x92c8
+
+#define GlintLight8PositionX                          0xa2d0
+#define GlintLight8PositionXTag                       0x045a
+#define GlintLight8PositionXReg                            1
+#define GlintLight8PositionXOff                       0x92d0
+
+#define GlintLight8PositionY                          0xa2d8
+#define GlintLight8PositionYTag                       0x045b
+#define GlintLight8PositionYReg                            1
+#define GlintLight8PositionYOff                       0x92d8
+
+#define GlintLight8PositionZ                          0xa2e0
+#define GlintLight8PositionZTag                       0x045c
+#define GlintLight8PositionZReg                            1
+#define GlintLight8PositionZOff                       0x92e0
+
+#define GlintLight8PositionW                          0xa2e8
+#define GlintLight8PositionWTag                       0x045d
+#define GlintLight8PositionWReg                            1
+#define GlintLight8PositionWOff                       0x92e8
+
+#define GlintLight8SpotlightDirectionX                0xa2f0
+#define GlintLight8SpotlightDirectionXTag             0x045e
+#define GlintLight8SpotlightDirectionXReg                  1
+#define GlintLight8SpotlightDirectionXOff             0x92f0
+
+#define GlintLight8SpotlightDirectionY                0xa2f8
+#define GlintLight8SpotlightDirectionYTag             0x045f
+#define GlintLight8SpotlightDirectionYReg                  1
+#define GlintLight8SpotlightDirectionYOff             0x92f8
+
+#define GlintLight8SpotlightDirectionZ                0xa300
+#define GlintLight8SpotlightDirectionZTag             0x0460
+#define GlintLight8SpotlightDirectionZReg                  1
+#define GlintLight8SpotlightDirectionZOff             0x9300
+
+#define GlintLight8SpotlightExponent                  0xa308
+#define GlintLight8SpotlightExponentTag               0x0461
+#define GlintLight8SpotlightExponentReg                    1
+#define GlintLight8SpotlightExponentOff               0x9308
+
+#define GlintLight8CosSpotlightCutoffAngle            0xa310
+#define GlintLight8CosSpotlightCutoffAngleTag         0x0462
+#define GlintLight8CosSpotlightCutoffAngleReg              1
+#define GlintLight8CosSpotlightCutoffAngleOff         0x9310
+
+#define GlintLight8ConstantAttenuation                0xa318
+#define GlintLight8ConstantAttenuationTag             0x0463
+#define GlintLight8ConstantAttenuationReg                  1
+#define GlintLight8ConstantAttenuationOff             0x9318
+
+#define GlintLight8LinearAttenuation                  0xa320
+#define GlintLight8LinearAttenuationTag               0x0464
+#define GlintLight8LinearAttenuationReg                    1
+#define GlintLight8LinearAttenuationOff               0x9320
+
+#define GlintLight8QuadraticAttenuation               0xa328
+#define GlintLight8QuadraticAttenuationTag            0x0465
+#define GlintLight8QuadraticAttenuationReg                 1
+#define GlintLight8QuadraticAttenuationOff            0x9328
+
+#define GlintLight9Mode                               0xa330
+#define GlintLight9ModeTag                            0x0466
+#define GlintLight9ModeReg                                 1
+#define GlintLight9ModeOff                            0x9330
+
+#define GlintLight9AmbientIntensityRed                0xa338
+#define GlintLight9AmbientIntensityRedTag             0x0467
+#define GlintLight9AmbientIntensityRedReg                  1
+#define GlintLight9AmbientIntensityRedOff             0x9338
+
+#define GlintLight9AmbientIntensityGreen              0xa340
+#define GlintLight9AmbientIntensityGreenTag           0x0468
+#define GlintLight9AmbientIntensityGreenReg                1
+#define GlintLight9AmbientIntensityGreenOff           0x9340
+
+#define GlintLight9AmbientIntensityBlue               0xa348
+#define GlintLight9AmbientIntensityBlueTag            0x0469
+#define GlintLight9AmbientIntensityBlueReg                 1
+#define GlintLight9AmbientIntensityBlueOff            0x9348
+
+#define GlintLight9DiffuseIntensityRed                0xa350
+#define GlintLight9DiffuseIntensityRedTag             0x046a
+#define GlintLight9DiffuseIntensityRedReg                  1
+#define GlintLight9DiffuseIntensityRedOff             0x9350
+
+#define GlintLight9DiffuseIntensityGreen              0xa358
+#define GlintLight9DiffuseIntensityGreenTag           0x046b
+#define GlintLight9DiffuseIntensityGreenReg                1
+#define GlintLight9DiffuseIntensityGreenOff           0x9358
+
+#define GlintLight9DiffuseIntensityBlue               0xa360
+#define GlintLight9DiffuseIntensityBlueTag            0x046c
+#define GlintLight9DiffuseIntensityBlueReg                 1
+#define GlintLight9DiffuseIntensityBlueOff            0x9360
+
+#define GlintLight9SpecularIntensityRed               0xa368
+#define GlintLight9SpecularIntensityRedTag            0x046d
+#define GlintLight9SpecularIntensityRedReg                 1
+#define GlintLight9SpecularIntensityRedOff            0x9368
+
+#define GlintLight9SpecularIntensityGreen             0xa370
+#define GlintLight9SpecularIntensityGreenTag          0x046e
+#define GlintLight9SpecularIntensityGreenReg               1
+#define GlintLight9SpecularIntensityGreenOff          0x9370
+
+#define GlintLight9SpecularIntensityBlue              0xa378
+#define GlintLight9SpecularIntensityBlueTag           0x046f
+#define GlintLight9SpecularIntensityBlueReg                1
+#define GlintLight9SpecularIntensityBlueOff           0x9378
+
+#define GlintLight9PositionX                          0xa380
+#define GlintLight9PositionXTag                       0x0470
+#define GlintLight9PositionXReg                            1
+#define GlintLight9PositionXOff                       0x9380
+
+#define GlintLight9PositionY                          0xa388
+#define GlintLight9PositionYTag                       0x0471
+#define GlintLight9PositionYReg                            1
+#define GlintLight9PositionYOff                       0x9388
+
+#define GlintLight9PositionZ                          0xa390
+#define GlintLight9PositionZTag                       0x0472
+#define GlintLight9PositionZReg                            1
+#define GlintLight9PositionZOff                       0x9390
+
+#define GlintLight9PositionW                          0xa398
+#define GlintLight9PositionWTag                       0x0473
+#define GlintLight9PositionWReg                            1
+#define GlintLight9PositionWOff                       0x9398
+
+#define GlintLight9SpotlightDirectionX                0xa3a0
+#define GlintLight9SpotlightDirectionXTag             0x0474
+#define GlintLight9SpotlightDirectionXReg                  1
+#define GlintLight9SpotlightDirectionXOff             0x93a0
+
+#define GlintLight9SpotlightDirectionY                0xa3a8
+#define GlintLight9SpotlightDirectionYTag             0x0475
+#define GlintLight9SpotlightDirectionYReg                  1
+#define GlintLight9SpotlightDirectionYOff             0x93a8
+
+#define GlintLight9SpotlightDirectionZ                0xa3b0
+#define GlintLight9SpotlightDirectionZTag             0x0476
+#define GlintLight9SpotlightDirectionZReg                  1
+#define GlintLight9SpotlightDirectionZOff             0x93b0
+
+#define GlintLight9SpotlightExponent                  0xa3b8
+#define GlintLight9SpotlightExponentTag               0x0477
+#define GlintLight9SpotlightExponentReg                    1
+#define GlintLight9SpotlightExponentOff               0x93b8
+
+#define GlintLight9CosSpotlightCutoffAngle            0xa3c0
+#define GlintLight9CosSpotlightCutoffAngleTag         0x0478
+#define GlintLight9CosSpotlightCutoffAngleReg              1
+#define GlintLight9CosSpotlightCutoffAngleOff         0x93c0
+
+#define GlintLight9ConstantAttenuation                0xa3c8
+#define GlintLight9ConstantAttenuationTag             0x0479
+#define GlintLight9ConstantAttenuationReg                  1
+#define GlintLight9ConstantAttenuationOff             0x93c8
+
+#define GlintLight9LinearAttenuation                  0xa3d0
+#define GlintLight9LinearAttenuationTag               0x047a
+#define GlintLight9LinearAttenuationReg                    1
+#define GlintLight9LinearAttenuationOff               0x93d0
+
+#define GlintLight9QuadraticAttenuation               0xa3d8
+#define GlintLight9QuadraticAttenuationTag            0x047b
+#define GlintLight9QuadraticAttenuationReg                 1
+#define GlintLight9QuadraticAttenuationOff            0x93d8
+
+#define GlintLight10Mode                              0xa3e0
+#define GlintLight10ModeTag                           0x047c
+#define GlintLight10ModeReg                                1
+#define GlintLight10ModeOff                           0x93e0
+
+#define GlintLight10AmbientIntensityRed               0xa3e8
+#define GlintLight10AmbientIntensityRedTag            0x047d
+#define GlintLight10AmbientIntensityRedReg                 1
+#define GlintLight10AmbientIntensityRedOff            0x93e8
+
+#define GlintLight10AmbientIntensityGreen             0xa3f0
+#define GlintLight10AmbientIntensityGreenTag          0x047e
+#define GlintLight10AmbientIntensityGreenReg               1
+#define GlintLight10AmbientIntensityGreenOff          0x93f0
+
+#define GlintLight10AmbientIntensityBlue              0xa3f8
+#define GlintLight10AmbientIntensityBlueTag           0x047f
+#define GlintLight10AmbientIntensityBlueReg                1
+#define GlintLight10AmbientIntensityBlueOff           0x93f8
+
+#define GlintLight10DiffuseIntensityRed               0xa400
+#define GlintLight10DiffuseIntensityRedTag            0x0480
+#define GlintLight10DiffuseIntensityRedReg                 1
+#define GlintLight10DiffuseIntensityRedOff            0x9400
+
+#define GlintLight10DiffuseIntensityGreen             0xa408
+#define GlintLight10DiffuseIntensityGreenTag          0x0481
+#define GlintLight10DiffuseIntensityGreenReg               1
+#define GlintLight10DiffuseIntensityGreenOff          0x9408
+
+#define GlintLight10DiffuseIntensityBlue              0xa410
+#define GlintLight10DiffuseIntensityBlueTag           0x0482
+#define GlintLight10DiffuseIntensityBlueReg                1
+#define GlintLight10DiffuseIntensityBlueOff           0x9410
+
+#define GlintLight10SpecularIntensityRed              0xa418
+#define GlintLight10SpecularIntensityRedTag           0x0483
+#define GlintLight10SpecularIntensityRedReg                1
+#define GlintLight10SpecularIntensityRedOff           0x9418
+
+#define GlintLight10SpecularIntensityGreen            0xa420
+#define GlintLight10SpecularIntensityGreenTag         0x0484
+#define GlintLight10SpecularIntensityGreenReg              1
+#define GlintLight10SpecularIntensityGreenOff         0x9420
+
+#define GlintLight10SpecularIntensityBlue             0xa428
+#define GlintLight10SpecularIntensityBlueTag          0x0485
+#define GlintLight10SpecularIntensityBlueReg               1
+#define GlintLight10SpecularIntensityBlueOff          0x9428
+
+#define GlintLight10PositionX                         0xa430
+#define GlintLight10PositionXTag                      0x0486
+#define GlintLight10PositionXReg                           1
+#define GlintLight10PositionXOff                      0x9430
+
+#define GlintLight10PositionY                         0xa438
+#define GlintLight10PositionYTag                      0x0487
+#define GlintLight10PositionYReg                           1
+#define GlintLight10PositionYOff                      0x9438
+
+#define GlintLight10PositionZ                         0xa440
+#define GlintLight10PositionZTag                      0x0488
+#define GlintLight10PositionZReg                           1
+#define GlintLight10PositionZOff                      0x9440
+
+#define GlintLight10PositionW                         0xa448
+#define GlintLight10PositionWTag                      0x0489
+#define GlintLight10PositionWReg                           1
+#define GlintLight10PositionWOff                      0x9448
+
+#define GlintLight10SpotlightDirectionX               0xa450
+#define GlintLight10SpotlightDirectionXTag            0x048a
+#define GlintLight10SpotlightDirectionXReg                 1
+#define GlintLight10SpotlightDirectionXOff            0x9450
+
+#define GlintLight10SpotlightDirectionY               0xa458
+#define GlintLight10SpotlightDirectionYTag            0x048b
+#define GlintLight10SpotlightDirectionYReg                 1
+#define GlintLight10SpotlightDirectionYOff            0x9458
+
+#define GlintLight10SpotlightDirectionZ               0xa460
+#define GlintLight10SpotlightDirectionZTag            0x048c
+#define GlintLight10SpotlightDirectionZReg                 1
+#define GlintLight10SpotlightDirectionZOff            0x9460
+
+#define GlintLight10SpotlightExponent                 0xa468
+#define GlintLight10SpotlightExponentTag              0x048d
+#define GlintLight10SpotlightExponentReg                   1
+#define GlintLight10SpotlightExponentOff              0x9468
+
+#define GlintLight10CosSpotlightCutoffAngle           0xa470
+#define GlintLight10CosSpotlightCutoffAngleTag        0x048e
+#define GlintLight10CosSpotlightCutoffAngleReg             1
+#define GlintLight10CosSpotlightCutoffAngleOff        0x9470
+
+#define GlintLight10ConstantAttenuation               0xa478
+#define GlintLight10ConstantAttenuationTag            0x048f
+#define GlintLight10ConstantAttenuationReg                 1
+#define GlintLight10ConstantAttenuationOff            0x9478
+
+#define GlintLight10LinearAttenuation                 0xa480
+#define GlintLight10LinearAttenuationTag              0x0490
+#define GlintLight10LinearAttenuationReg                   1
+#define GlintLight10LinearAttenuationOff              0x9480
+
+#define GlintLight10QuadraticAttenuation              0xa488
+#define GlintLight10QuadraticAttenuationTag           0x0491
+#define GlintLight10QuadraticAttenuationReg                1
+#define GlintLight10QuadraticAttenuationOff           0x9488
+
+#define GlintLight11Mode                              0xa490
+#define GlintLight11ModeTag                           0x0492
+#define GlintLight11ModeReg                                1
+#define GlintLight11ModeOff                           0x9490
+
+#define GlintLight11AmbientIntensiveRed               0xa498
+#define GlintLight11AmbientIntensiveRedTag            0x0493
+#define GlintLight11AmbientIntensiveRedReg                 1
+#define GlintLight11AmbientIntensiveRedOff            0x9498
+
+#define GlintLight11AmbientIntensityGreen             0xa4a0
+#define GlintLight11AmbientIntensityGreenTag          0x0494
+#define GlintLight11AmbientIntensityGreenReg               1
+#define GlintLight11AmbientIntensityGreenOff          0x94a0
+
+#define GlintLight11AmbientIntensityBlue              0xa4a8
+#define GlintLight11AmbientIntensityBlueTag           0x0495
+#define GlintLight11AmbientIntensityBlueReg                1
+#define GlintLight11AmbientIntensityBlueOff           0x94a8
+
+#define GlintLight11DiffuseIntensityRed               0xa4b0
+#define GlintLight11DiffuseIntensityRedTag            0x0496
+#define GlintLight11DiffuseIntensityRedReg                 1
+#define GlintLight11DiffuseIntensityRedOff            0x94b0
+
+#define GlintLight11DiffuseIntensityGreen             0xa4b8
+#define GlintLight11DiffuseIntensityGreenTag          0x0497
+#define GlintLight11DiffuseIntensityGreenReg               1
+#define GlintLight11DiffuseIntensityGreenOff          0x94b8
+
+#define GlintLight11DiffuseIntensityBlue              0xa4c0
+#define GlintLight11DiffuseIntensityBlueTag           0x0498
+#define GlintLight11DiffuseIntensityBlueReg                1
+#define GlintLight11DiffuseIntensityBlueOff           0x94c0
+
+#define GlintLight11SpecularIntensityRed              0xa4c8
+#define GlintLight11SpecularIntensityRedTag           0x0499
+#define GlintLight11SpecularIntensityRedReg                1
+#define GlintLight11SpecularIntensityRedOff           0x94c8
+
+#define GlintLight11SpecularIntensityGreen            0xa4d0
+#define GlintLight11SpecularIntensityGreenTag         0x049a
+#define GlintLight11SpecularIntensityGreenReg              1
+#define GlintLight11SpecularIntensityGreenOff         0x94d0
+
+#define GlintLight11SpecularIntensityBlue             0xa4d8
+#define GlintLight11SpecularIntensityBlueTag          0x049b
+#define GlintLight11SpecularIntensityBlueReg               1
+#define GlintLight11SpecularIntensityBlueOff          0x94d8
+
+#define GlintLight11PositionX                         0xa4e0
+#define GlintLight11PositionXTag                      0x049c
+#define GlintLight11PositionXReg                           1
+#define GlintLight11PositionXOff                      0x94e0
+
+#define GlintLight11PositionY                         0xa4e8
+#define GlintLight11PositionYTag                      0x049d
+#define GlintLight11PositionYReg                           1
+#define GlintLight11PositionYOff                      0x94e8
+
+#define GlintLight11PositionZ                         0xa4f0
+#define GlintLight11PositionZTag                      0x049e
+#define GlintLight11PositionZReg                           1
+#define GlintLight11PositionZOff                      0x94f0
+
+#define GlintLight11PositionW                         0xa4f8
+#define GlintLight11PositionWTag                      0x049f
+#define GlintLight11PositionWReg                           1
+#define GlintLight11PositionWOff                      0x94f8
+
+#define GlintLight11SpotlightDirectionX               0xa500
+#define GlintLight11SpotlightDirectionXTag            0x04a0
+#define GlintLight11SpotlightDirectionXReg                 1
+#define GlintLight11SpotlightDirectionXOff            0x9500
+
+#define GlintLight11SpotlightDirectionY               0xa508
+#define GlintLight11SpotlightDirectionYTag            0x04a1
+#define GlintLight11SpotlightDirectionYReg                 1
+#define GlintLight11SpotlightDirectionYOff            0x9508
+
+#define GlintLight11SpotlightDirectionZ               0xa510
+#define GlintLight11SpotlightDirectionZTag            0x04a2
+#define GlintLight11SpotlightDirectionZReg                 1
+#define GlintLight11SpotlightDirectionZOff            0x9510
+
+#define GlintLight11SpotlightExponent                 0xa518
+#define GlintLight11SpotlightExponentTag              0x04a3
+#define GlintLight11SpotlightExponentReg                   1
+#define GlintLight11SpotlightExponentOff              0x9518
+
+#define GlintLight11CosSpotlightCutoffAngle           0xa520
+#define GlintLight11CosSpotlightCutoffAngleTag        0x04a4
+#define GlintLight11CosSpotlightCutoffAngleReg             1
+#define GlintLight11CosSpotlightCutoffAngleOff        0x9520
+
+#define GlintLight11ConstantAttenuation               0xa528
+#define GlintLight11ConstantAttenuationTag            0x04a5
+#define GlintLight11ConstantAttenuationReg                 1
+#define GlintLight11ConstantAttenuationOff            0x9528
+
+#define GlintLight11LinearAttenuation                 0xa530
+#define GlintLight11LinearAttenuationTag              0x04a6
+#define GlintLight11LinearAttenuationReg                   1
+#define GlintLight11LinearAttenuationOff              0x9530
+
+#define GlintLight11QuadraticAttenuation              0xa538
+#define GlintLight11QuadraticAttenuationTag           0x04a7
+#define GlintLight11QuadraticAttenuationReg                1
+#define GlintLight11QuadraticAttenuationOff           0x9538
+
+#define GlintLight12Mode                              0xa540
+#define GlintLight12ModeTag                           0x04a8
+#define GlintLight12ModeReg                                1
+#define GlintLight12ModeOff                           0x9540
+
+#define GlintLight12AmbientIntensityRed               0xa548
+#define GlintLight12AmbientIntensityRedTag            0x04a9
+#define GlintLight12AmbientIntensityRedReg                 1
+#define GlintLight12AmbientIntensityRedOff            0x9548
+
+#define GlintLight12AmbientIntensityGreen             0xa550
+#define GlintLight12AmbientIntensityGreenTag          0x04aa
+#define GlintLight12AmbientIntensityGreenReg               1
+#define GlintLight12AmbientIntensityGreenOff          0x9550
+
+#define GlintLight12AmbientIntensityBlue              0xa558
+#define GlintLight12AmbientIntensityBlueTag           0x04ab
+#define GlintLight12AmbientIntensityBlueReg                1
+#define GlintLight12AmbientIntensityBlueOff           0x9558
+
+#define GlintLight12DiffuseIntensityRed               0xa560
+#define GlintLight12DiffuseIntensityRedTag            0x04ac
+#define GlintLight12DiffuseIntensityRedReg                 1
+#define GlintLight12DiffuseIntensityRedOff            0x9560
+
+#define GlintLight12DiffuseIntensityGreen             0xa568
+#define GlintLight12DiffuseIntensityGreenTag          0x04ad
+#define GlintLight12DiffuseIntensityGreenReg               1
+#define GlintLight12DiffuseIntensityGreenOff          0x9568
+
+#define GlintLight12DiffuseIntensityBlue              0xa570
+#define GlintLight12DiffuseIntensityBlueTag           0x04ae
+#define GlintLight12DiffuseIntensityBlueReg                1
+#define GlintLight12DiffuseIntensityBlueOff           0x9570
+
+#define GlintLight12SpecularIntensityRed              0xa578
+#define GlintLight12SpecularIntensityRedTag           0x04af
+#define GlintLight12SpecularIntensityRedReg                1
+#define GlintLight12SpecularIntensityRedOff           0x9578
+
+#define GlintLight12SpecularIntensityGreen            0xa580
+#define GlintLight12SpecularIntensityGreenTag         0x04b0
+#define GlintLight12SpecularIntensityGreenReg              1
+#define GlintLight12SpecularIntensityGreenOff         0x9580
+
+#define GlintLight12SpecularIntensityBlue             0xa588
+#define GlintLight12SpecularIntensityBlueTag          0x04b1
+#define GlintLight12SpecularIntensityBlueReg               1
+#define GlintLight12SpecularIntensityBlueOff          0x9588
+
+#define GlintLight12PositionX                         0xa590
+#define GlintLight12PositionXTag                      0x04b2
+#define GlintLight12PositionXReg                           1
+#define GlintLight12PositionXOff                      0x9590
+
+#define GlintLight12PositionY                         0xa598
+#define GlintLight12PositionYTag                      0x04b3
+#define GlintLight12PositionYReg                           1
+#define GlintLight12PositionYOff                      0x9598
+
+#define GlintLight12PositionZ                         0xa5a0
+#define GlintLight12PositionZTag                      0x04b4
+#define GlintLight12PositionZReg                           1
+#define GlintLight12PositionZOff                      0x95a0
+
+#define GlintLight12PositionW                         0xa5a8
+#define GlintLight12PositionWTag                      0x04b5
+#define GlintLight12PositionWReg                           1
+#define GlintLight12PositionWOff                      0x95a8
+
+#define GlintLight12SpotlightDirectionX               0xa5b0
+#define GlintLight12SpotlightDirectionXTag            0x04b6
+#define GlintLight12SpotlightDirectionXReg                 1
+#define GlintLight12SpotlightDirectionXOff            0x95b0
+
+#define GlintLight12SpotlightDirectionY               0xa5b8
+#define GlintLight12SpotlightDirectionYTag            0x04b7
+#define GlintLight12SpotlightDirectionYReg                 1
+#define GlintLight12SpotlightDirectionYOff            0x95b8
+
+#define GlintLight12SpotlightDirectionZ               0xa5c0
+#define GlintLight12SpotlightDirectionZTag            0x04b8
+#define GlintLight12SpotlightDirectionZReg                 1
+#define GlintLight12SpotlightDirectionZOff            0x95c0
+
+#define GlintLight12SpotlightExponent                 0xa5c8
+#define GlintLight12SpotlightExponentTag              0x04b9
+#define GlintLight12SpotlightExponentReg                   1
+#define GlintLight12SpotlightExponentOff              0x95c8
+
+#define GlintLight12CosSpotlightCutoffAngle           0xa5d0
+#define GlintLight12CosSpotlightCutoffAngleTag        0x04ba
+#define GlintLight12CosSpotlightCutoffAngleReg             1
+#define GlintLight12CosSpotlightCutoffAngleOff        0x95d0
+
+#define GlintLight12ConstantAttenuation               0xa5d8
+#define GlintLight12ConstantAttenuationTag            0x04bb
+#define GlintLight12ConstantAttenuationReg                 1
+#define GlintLight12ConstantAttenuationOff            0x95d8
+
+#define GlintLight12LinearAttenuation                 0xa5e0
+#define GlintLight12LinearAttenuationTag              0x04bc
+#define GlintLight12LinearAttenuationReg                   1
+#define GlintLight12LinearAttenuationOff              0x95e0
+
+#define GlintLight12QuadraticAttenuation              0xa5e8
+#define GlintLight12QuadraticAttenuationTag           0x04bd
+#define GlintLight12QuadraticAttenuationReg                1
+#define GlintLight12QuadraticAttenuationOff           0x95e8
+
+#define GlintLight13Mode                              0xa5f0
+#define GlintLight13ModeTag                           0x04be
+#define GlintLight13ModeReg                                1
+#define GlintLight13ModeOff                           0x95f0
+
+#define GlintLight13AmbientIntensityRed               0xa5f8
+#define GlintLight13AmbientIntensityRedTag            0x04bf
+#define GlintLight13AmbientIntensityRedReg                 1
+#define GlintLight13AmbientIntensityRedOff            0x95f8
+
+#define GlintLight13AmbientIntensityGreen             0xa600
+#define GlintLight13AmbientIntensityGreenTag          0x04c0
+#define GlintLight13AmbientIntensityGreenReg               1
+#define GlintLight13AmbientIntensityGreenOff          0x9600
+
+#define GlintLight13AmbientIntensityBlue              0xa608
+#define GlintLight13AmbientIntensityBlueTag           0x04c1
+#define GlintLight13AmbientIntensityBlueReg                1
+#define GlintLight13AmbientIntensityBlueOff           0x9608
+
+#define GlintLight13DiffuseIntensityRed               0xa610
+#define GlintLight13DiffuseIntensityRedTag            0x04c2
+#define GlintLight13DiffuseIntensityRedReg                 1
+#define GlintLight13DiffuseIntensityRedOff            0x9610
+
+#define GlintLight13DiffuseIntensityGreen             0xa618
+#define GlintLight13DiffuseIntensityGreenTag          0x04c3
+#define GlintLight13DiffuseIntensityGreenReg               1
+#define GlintLight13DiffuseIntensityGreenOff          0x9618
+
+#define GlintLight13DiffuseIntensityBlue              0xa620
+#define GlintLight13DiffuseIntensityBlueTag           0x04c4
+#define GlintLight13DiffuseIntensityBlueReg                1
+#define GlintLight13DiffuseIntensityBlueOff           0x9620
+
+#define GlintLight13SpecularIntensityRed              0xa628
+#define GlintLight13SpecularIntensityRedTag           0x04c5
+#define GlintLight13SpecularIntensityRedReg                1
+#define GlintLight13SpecularIntensityRedOff           0x9628
+
+#define GlintLight13SpecularIntensityGreen            0xa630
+#define GlintLight13SpecularIntensityGreenTag         0x04c6
+#define GlintLight13SpecularIntensityGreenReg              1
+#define GlintLight13SpecularIntensityGreenOff         0x9630
+
+#define GlintLight13SpecularIntensityBlue             0xa638
+#define GlintLight13SpecularIntensityBlueTag          0x04c7
+#define GlintLight13SpecularIntensityBlueReg               1
+#define GlintLight13SpecularIntensityBlueOff          0x9638
+
+#define GlintLight13PositionX                         0xa640
+#define GlintLight13PositionXTag                      0x04c8
+#define GlintLight13PositionXReg                           1
+#define GlintLight13PositionXOff                      0x9640
+
+#define GlintLight13PositionY                         0xa648
+#define GlintLight13PositionYTag                      0x04c9
+#define GlintLight13PositionYReg                           1
+#define GlintLight13PositionYOff                      0x9648
+
+#define GlintLight13PositionZ                         0xa650
+#define GlintLight13PositionZTag                      0x04ca
+#define GlintLight13PositionZReg                           1
+#define GlintLight13PositionZOff                      0x9650
+
+#define GlintLight13PositionW                         0xa658
+#define GlintLight13PositionWTag                      0x04cb
+#define GlintLight13PositionWReg                           1
+#define GlintLight13PositionWOff                      0x9658
+
+#define GlintLight13SpotlightDirectionX               0xa660
+#define GlintLight13SpotlightDirectionXTag            0x04cc
+#define GlintLight13SpotlightDirectionXReg                 1
+#define GlintLight13SpotlightDirectionXOff            0x9660
+
+#define GlintLight13SpotlightDirectionY               0xa668
+#define GlintLight13SpotlightDirectionYTag            0x04cd
+#define GlintLight13SpotlightDirectionYReg                 1
+#define GlintLight13SpotlightDirectionYOff            0x9668
+
+#define GlintLight13SpotlightDirectionZ               0xa670
+#define GlintLight13SpotlightDirectionZTag            0x04ce
+#define GlintLight13SpotlightDirectionZReg                 1
+#define GlintLight13SpotlightDirectionZOff            0x9670
+
+#define GlintLight13SpotlightExponent                 0xa678
+#define GlintLight13SpotlightExponentTag              0x04cf
+#define GlintLight13SpotlightExponentReg                   1
+#define GlintLight13SpotlightExponentOff              0x9678
+
+#define GlintLight13CosSpotlightCutoffAngle           0xa680
+#define GlintLight13CosSpotlightCutoffAngleTag        0x04d0
+#define GlintLight13CosSpotlightCutoffAngleReg             1
+#define GlintLight13CosSpotlightCutoffAngleOff        0x9680
+
+#define GlintLight13ConstantAttenuation               0xa688
+#define GlintLight13ConstantAttenuationTag            0x04d1
+#define GlintLight13ConstantAttenuationReg                 1
+#define GlintLight13ConstantAttenuationOff            0x9688
+
+#define GlintLight13LinearAttenuation                 0xa690
+#define GlintLight13LinearAttenuationTag              0x04d2
+#define GlintLight13LinearAttenuationReg                   1
+#define GlintLight13LinearAttenuationOff              0x9690
+
+#define GlintLight13QuadraticAttenuation              0xa698
+#define GlintLight13QuadraticAttenuationTag           0x04d3
+#define GlintLight13QuadraticAttenuationReg                1
+#define GlintLight13QuadraticAttenuationOff           0x9698
+
+#define GlintLight14Mode                              0xa6a0
+#define GlintLight14ModeTag                           0x04d4
+#define GlintLight14ModeReg                                1
+#define GlintLight14ModeOff                           0x96a0
+
+#define GlintLight14AmbientIntensityRed               0xa6a8
+#define GlintLight14AmbientIntensityRedTag            0x04d5
+#define GlintLight14AmbientIntensityRedReg                 1
+#define GlintLight14AmbientIntensityRedOff            0x96a8
+
+#define GlintLight14AmbientIntensityGreen             0xa6b0
+#define GlintLight14AmbientIntensityGreenTag          0x04d6
+#define GlintLight14AmbientIntensityGreenReg               1
+#define GlintLight14AmbientIntensityGreenOff          0x96b0
+
+#define GlintLight14AmbientIntensityBlue              0xa6b8
+#define GlintLight14AmbientIntensityBlueTag           0x04d7
+#define GlintLight14AmbientIntensityBlueReg                1
+#define GlintLight14AmbientIntensityBlueOff           0x96b8
+
+#define GlintLight14DiffuseIntensityRed               0xa6c0
+#define GlintLight14DiffuseIntensityRedTag            0x04d8
+#define GlintLight14DiffuseIntensityRedReg                 1
+#define GlintLight14DiffuseIntensityRedOff            0x96c0
+
+#define GlintLight14DiffuseIntensityGreen             0xa6c8
+#define GlintLight14DiffuseIntensityGreenTag          0x04d9
+#define GlintLight14DiffuseIntensityGreenReg               1
+#define GlintLight14DiffuseIntensityGreenOff          0x96c8
+
+#define GlintLight14DiffuseIntensityBlue              0xa6d0
+#define GlintLight14DiffuseIntensityBlueTag           0x04da
+#define GlintLight14DiffuseIntensityBlueReg                1
+#define GlintLight14DiffuseIntensityBlueOff           0x96d0
+
+#define GlintLight14SpecularIntensityRed              0xa6d8
+#define GlintLight14SpecularIntensityRedTag           0x04db
+#define GlintLight14SpecularIntensityRedReg                1
+#define GlintLight14SpecularIntensityRedOff           0x96d8
+
+#define GlintLight14SpecularIntensityGreen            0xa6e0
+#define GlintLight14SpecularIntensityGreenTag         0x04dc
+#define GlintLight14SpecularIntensityGreenReg              1
+#define GlintLight14SpecularIntensityGreenOff         0x96e0
+
+#define GlintLight14SpecularIntensityBlue             0xa6e8
+#define GlintLight14SpecularIntensityBlueTag          0x04dd
+#define GlintLight14SpecularIntensityBlueReg               1
+#define GlintLight14SpecularIntensityBlueOff          0x96e8
+
+#define GlintLight14PositionX                         0xa6f0
+#define GlintLight14PositionXTag                      0x04de
+#define GlintLight14PositionXReg                           1
+#define GlintLight14PositionXOff                      0x96f0
+
+#define GlintLight14PositionY                         0xa6f8
+#define GlintLight14PositionYTag                      0x04df
+#define GlintLight14PositionYReg                           1
+#define GlintLight14PositionYOff                      0x96f8
+
+#define GlintLight14PositionZ                         0xa700
+#define GlintLight14PositionZTag                      0x04e0
+#define GlintLight14PositionZReg                           1
+#define GlintLight14PositionZOff                      0x9700
+
+#define GlintLight14PositionW                         0xa708
+#define GlintLight14PositionWTag                      0x04e1
+#define GlintLight14PositionWReg                           1
+#define GlintLight14PositionWOff                      0x9708
+
+#define GlintLight14SpotlightDirectionX               0xa710
+#define GlintLight14SpotlightDirectionXTag            0x04e2
+#define GlintLight14SpotlightDirectionXReg                 1
+#define GlintLight14SpotlightDirectionXOff            0x9710
+
+#define GlintLight14SpotlightDirectionY               0xa718
+#define GlintLight14SpotlightDirectionYTag            0x04e3
+#define GlintLight14SpotlightDirectionYReg                 1
+#define GlintLight14SpotlightDirectionYOff            0x9718
+
+#define GlintLight14SpotlightDirectionZ               0xa720
+#define GlintLight14SpotlightDirectionZTag            0x04e4
+#define GlintLight14SpotlightDirectionZReg                 1
+#define GlintLight14SpotlightDirectionZOff            0x9720
+
+#define GlintLight14SpotlightExponent                 0xa728
+#define GlintLight14SpotlightExponentTag              0x04e5
+#define GlintLight14SpotlightExponentReg                   1
+#define GlintLight14SpotlightExponentOff              0x9728
+
+#define GlintLight14CosSpotlightCutoffAngle           0xa730
+#define GlintLight14CosSpotlightCutoffAngleTag        0x04e6
+#define GlintLight14CosSpotlightCutoffAngleReg             1
+#define GlintLight14CosSpotlightCutoffAngleOff        0x9730
+
+#define GlintLight14ConstantAttenuation               0xa738
+#define GlintLight14ConstantAttenuationTag            0x04e7
+#define GlintLight14ConstantAttenuationReg                 1
+#define GlintLight14ConstantAttenuationOff            0x9738
+
+#define GlintLight14LinearAttenuation                 0xa740
+#define GlintLight14LinearAttenuationTag              0x04e8
+#define GlintLight14LinearAttenuationReg                   1
+#define GlintLight14LinearAttenuationOff              0x9740
+
+#define GlintLight14QuadraticAttenuation              0xa748
+#define GlintLight14QuadraticAttenuationTag           0x04e9
+#define GlintLight14QuadraticAttenuationReg                1
+#define GlintLight14QuadraticAttenuationOff           0x9748
+
+#define GlintLight15Mode                              0xa750
+#define GlintLight15ModeTag                           0x04ea
+#define GlintLight15ModeReg                                1
+#define GlintLight15ModeOff                           0x9750
+
+#define GlintLight15AmbientIntensityRed               0xa758
+#define GlintLight15AmbientIntensityRedTag            0x04eb
+#define GlintLight15AmbientIntensityRedReg                 1
+#define GlintLight15AmbientIntensityRedOff            0x9758
+
+#define GlintLight15AmbientIntensityGreen             0xa760
+#define GlintLight15AmbientIntensityGreenTag          0x04ec
+#define GlintLight15AmbientIntensityGreenReg               1
+#define GlintLight15AmbientIntensityGreenOff          0x9760
+
+#define GlintLight15AmbientIntensityBlue              0xa768
+#define GlintLight15AmbientIntensityBlueTag           0x04ed
+#define GlintLight15AmbientIntensityBlueReg                1
+#define GlintLight15AmbientIntensityBlueOff           0x9768
+
+#define GlintLight15DiffuseIntensityRed               0xa770
+#define GlintLight15DiffuseIntensityRedTag            0x04ee
+#define GlintLight15DiffuseIntensityRedReg                 1
+#define GlintLight15DiffuseIntensityRedOff            0x9770
+
+#define GlintLight15DiffuseIntensityGreen             0xa778
+#define GlintLight15DiffuseIntensityGreenTag          0x04ef
+#define GlintLight15DiffuseIntensityGreenReg               1
+#define GlintLight15DiffuseIntensityGreenOff          0x9778
+
+#define GlintLight15DiffuseIntensityBlue              0xa780
+#define GlintLight15DiffuseIntensityBlueTag           0x04f0
+#define GlintLight15DiffuseIntensityBlueReg                1
+#define GlintLight15DiffuseIntensityBlueOff           0x9780
+
+#define GlintLight15SpecularIntensityRed              0xa788
+#define GlintLight15SpecularIntensityRedTag           0x04f1
+#define GlintLight15SpecularIntensityRedReg                1
+#define GlintLight15SpecularIntensityRedOff           0x9788
+
+#define GlintLight15SpecularIntensityGreen            0xa790
+#define GlintLight15SpecularIntensityGreenTag         0x04f2
+#define GlintLight15SpecularIntensityGreenReg              1
+#define GlintLight15SpecularIntensityGreenOff         0x9790
+
+#define GlintLight15SpecularIntensityBlue             0xa798
+#define GlintLight15SpecularIntensityBlueTag          0x04f3
+#define GlintLight15SpecularIntensityBlueReg               1
+#define GlintLight15SpecularIntensityBlueOff          0x9798
+
+#define GlintLight15PositionX                         0xa7a0
+#define GlintLight15PositionXTag                      0x04f4
+#define GlintLight15PositionXReg                           1
+#define GlintLight15PositionXOff                      0x97a0
+
+#define GlintLight15PositionY                         0xa7a8
+#define GlintLight15PositionYTag                      0x04f5
+#define GlintLight15PositionYReg                           1
+#define GlintLight15PositionYOff                      0x97a8
+
+#define GlintLight15PositionZ                         0xa7b0
+#define GlintLight15PositionZTag                      0x04f6
+#define GlintLight15PositionZReg                           1
+#define GlintLight15PositionZOff                      0x97b0
+
+#define GlintLight15PositionW                         0xa7b8
+#define GlintLight15PositionWTag                      0x04f7
+#define GlintLight15PositionWReg                           1
+#define GlintLight15PositionWOff                      0x97b8
+
+#define GlintLight15SpotlightDirectionX               0xa7c0
+#define GlintLight15SpotlightDirectionXTag            0x04f8
+#define GlintLight15SpotlightDirectionXReg                 1
+#define GlintLight15SpotlightDirectionXOff            0x97c0
+
+#define GlintLight15SpotlightDirectionY               0xa7c8
+#define GlintLight15SpotlightDirectionYTag            0x04f9
+#define GlintLight15SpotlightDirectionYReg                 1
+#define GlintLight15SpotlightDirectionYOff            0x97c8
+
+#define GlintLight15SpotlightDirectionZ               0xa7d0
+#define GlintLight15SpotlightDirectionZTag            0x04fa
+#define GlintLight15SpotlightDirectionZReg                 1
+#define GlintLight15SpotlightDirectionZOff            0x97d0
+
+#define GlintLight15SpotlightExponent                 0xa7d8
+#define GlintLight15SpotlightExponentTag              0x04fb
+#define GlintLight15SpotlightExponentReg                   1
+#define GlintLight15SpotlightExponentOff              0x97d8
+
+#define GlintLight15CosSpotlightCutoffAngle           0xa7e0
+#define GlintLight15CosSpotlightCutoffAngleTag        0x04fc
+#define GlintLight15CosSpotlightCutoffAngleReg             1
+#define GlintLight15CosSpotlightCutoffAngleOff        0x97e0
+
+#define GlintLight15ConstantAttenuation               0xa7e8
+#define GlintLight15ConstantAttenuationTag            0x04fd
+#define GlintLight15ConstantAttenuationReg                 1
+#define GlintLight15ConstantAttenuationOff            0x97e8
+
+#define GlintLight15LinearAttenuation                 0xa7f0
+#define GlintLight15LinearAttenuationTag              0x04fe
+#define GlintLight15LinearAttenuationReg                   1
+#define GlintLight15LinearAttenuationOff              0x97f0
+
+#define GlintLight15QuadraticAttenuation              0xa7f8
+#define GlintLight15QuadraticAttenuationTag           0x04ff
+#define GlintLight15QuadraticAttenuationReg                1
+#define GlintLight15QuadraticAttenuationOff           0x97f8
+
+#define GlintSceneAmbientColorRed                     0xa800
+#define GlintSceneAmbientColorRedTag                  0x0500
+#define GlintSceneAmbientColorRedReg                       1
+#define GlintSceneAmbientColorRedOff                  0x9800
+
+#define GlintSceneAmbientColorGreen                   0xa808
+#define GlintSceneAmbientColorGreenTag                0x0501
+#define GlintSceneAmbientColorGreenReg                     1
+#define GlintSceneAmbientColorGreenOff                0x9808
+
+#define GlintSceneAmbientColorBlue                    0xa810
+#define GlintSceneAmbientColorBlueTag                 0x0502
+#define GlintSceneAmbientColorBlueReg                      1
+#define GlintSceneAmbientColorBlueOff                 0x9810
+
+#define GlintFrontAmbientColorRed                     0xa880
+#define GlintFrontAmbientColorRedTag                  0x0510
+#define GlintFrontAmbientColorRedReg                       1
+#define GlintFrontAmbientColorRedOff                  0x9880
+
+#define GlintFrontAmbientColorGreen                   0xa888
+#define GlintFrontAmbientColorGreenTag                0x0511
+#define GlintFrontAmbientColorGreenReg                     1
+#define GlintFrontAmbientColorGreenOff                0x9888
+
+#define GlintFrontAmbientColorBlue                    0xa890
+#define GlintFrontAmbientColorBlueTag                 0x0512
+#define GlintFrontAmbientColorBlueReg                      1
+#define GlintFrontAmbientColorBlueOff                 0x9890
+
+#define GlintFrontDiffuseColorRed                     0xa898
+#define GlintFrontDiffuseColorRedTag                  0x0513
+#define GlintFrontDiffuseColorRedReg                       1
+#define GlintFrontDiffuseColorRedOff                  0x9898
+
+#define GlintFrontDiffuseColorGreen                   0xa8a0
+#define GlintFrontDiffuseColorGreenTag                0x0514
+#define GlintFrontDiffuseColorGreenReg                     1
+#define GlintFrontDiffuseColorGreenOff                0x98a0
+
+#define GlintFrontDiffuseColorBlue                    0xa8a8
+#define GlintFrontDiffuseColorBlueTag                 0x0515
+#define GlintFrontDiffuseColorBlueReg                      1
+#define GlintFrontDiffuseColorBlueOff                 0x98a8
+
+#define GlintFrontAlpha                               0xa8b0
+#define GlintFrontAlphaTag                            0x0516
+#define GlintFrontAlphaReg                                 1
+#define GlintFrontAlphaOff                            0x98b0
+
+#define GlintFrontSpecularColorRed                    0xa8b8
+#define GlintFrontSpecularColorRedTag                 0x0517
+#define GlintFrontSpecularColorRedReg                      1
+#define GlintFrontSpecularColorRedOff                 0x98b8
+
+#define GlintFrontSpecularColorGreen                  0xa8c0
+#define GlintFrontSpecularColorGreenTag               0x0518
+#define GlintFrontSpecularColorGreenReg                    1
+#define GlintFrontSpecularColorGreenOff               0x98c0
+
+#define GlintFrontSpecularColorBlue                   0xa8c8
+#define GlintFrontSpecularColorBlueTag                0x0519
+#define GlintFrontSpecularColorBlueReg                     1
+#define GlintFrontSpecularColorBlueOff                0x98c8
+
+#define GlintFrontEmissiveColorRed                    0xa8d0
+#define GlintFrontEmissiveColorRedTag                 0x051a
+#define GlintFrontEmissiveColorRedReg                      1
+#define GlintFrontEmissiveColorRedOff                 0x98d0
+
+#define GlintFrontEmissiveColorGreen                  0xa8d8
+#define GlintFrontEmissiveColorGreenTag               0x051b
+#define GlintFrontEmissiveColorGreenReg                    1
+#define GlintFrontEmissiveColorGreenOff               0x98d8
+
+#define GlintFrontEmissiveColorBlue                   0xa8e0
+#define GlintFrontEmissiveColorBlueTag                0x051c
+#define GlintFrontEmissiveColorBlueReg                     1
+#define GlintFrontEmissiveColorBlueOff                0x98e0
+
+#define GlintFrontSpecularExponent                    0xa8e8
+#define GlintFrontSpecularExponentTag                 0x051d
+#define GlintFrontSpecularExponentReg                      1
+#define GlintFrontSpecularExponentOff                 0x98e8
+
+#define GlintBackAmbientColorRed                      0xa900
+#define GlintBackAmbientColorRedTag                   0x0520
+#define GlintBackAmbientColorRedReg                        1
+#define GlintBackAmbientColorRedOff                   0x9900
+
+#define GlintBackAmbientColorGreen                    0xa908
+#define GlintBackAmbientColorGreenTag                 0x0521
+#define GlintBackAmbientColorGreenReg                      1
+#define GlintBackAmbientColorGreenOff                 0x9908
+
+#define GlintBackAmbientColorBlue                     0xa910
+#define GlintBackAmbientColorBlueTag                  0x0522
+#define GlintBackAmbientColorBlueReg                       1
+#define GlintBackAmbientColorBlueOff                  0x9910
+
+#define GlintBackDiffuseColorRed                      0xa918
+#define GlintBackDiffuseColorRedTag                   0x0523
+#define GlintBackDiffuseColorRedReg                        1
+#define GlintBackDiffuseColorRedOff                   0x9918
+
+#define GlintBackDiffuseColorGreen                    0xa920
+#define GlintBackDiffuseColorGreenTag                 0x0524
+#define GlintBackDiffuseColorGreenReg                      1
+#define GlintBackDiffuseColorGreenOff                 0x9920
+
+#define GlintBackDiffuseColorBlue                     0xa928
+#define GlintBackDiffuseColorBlueTag                  0x0525
+#define GlintBackDiffuseColorBlueReg                       1
+#define GlintBackDiffuseColorBlueOff                  0x9928
+
+#define GlintBackAlpha                                0xa930
+#define GlintBackAlphaTag                             0x0526
+#define GlintBackAlphaReg                                  1
+#define GlintBackAlphaOff                             0x9930
+
+#define GlintBackSpecularColorRed                     0xa938
+#define GlintBackSpecularColorRedTag                  0x0527
+#define GlintBackSpecularColorRedReg                       1
+#define GlintBackSpecularColorRedOff                  0x9938
+
+#define GlintBackSpecularColorGreen                   0xa940
+#define GlintBackSpecularColorGreenTag                0x0528
+#define GlintBackSpecularColorGreenReg                     1
+#define GlintBackSpecularColorGreenOff                0x9940
+
+#define GlintBackSpecularColorBlue                    0xa948
+#define GlintBackSpecularColorBlueTag                 0x0529
+#define GlintBackSpecularColorBlueReg                      1
+#define GlintBackSpecularColorBlueOff                 0x9948
+
+#define GlintBackEmissiveColorRed                     0xa950
+#define GlintBackEmissiveColorRedTag                  0x052a
+#define GlintBackEmissiveColorRedReg                       1
+#define GlintBackEmissiveColorRedOff                  0x9950
+
+#define GlintBackEmissiveColorGreen                   0xa958
+#define GlintBackEmissiveColorGreenTag                0x052b
+#define GlintBackEmissiveColorGreenReg                     1
+#define GlintBackEmissiveColorGreenOff                0x9958
+
+#define GlintBackEmissiveColorBlue                    0xa960
+#define GlintBackEmissiveColorBlueTag                 0x052c
+#define GlintBackEmissiveColorBlueReg                      1
+#define GlintBackEmissiveColorBlueOff                 0x9960
+
+#define GlintBackSpecularExponent                     0xa968
+#define GlintBackSpecularExponentTag                  0x052d
+#define GlintBackSpecularExponentReg                       1
+#define GlintBackSpecularExponentOff                  0x9968
+
+#define GlintDMAAddr                                  0xa980
+#define GlintDMAAddrTag                               0x0530
+#define GlintDMAAddrReg                                    1
+#define GlintDMAAddrOff                               0x9980
+
+#define GlintGammaDMACount                            0xa988
+#define GlintGammaDMACountTag                         0x0531
+#define GlintGammaDMACountReg                              1
+#define GlintGammaDMACountOff                         0x9988
+
+#define GlintCommandInterrupt                         0xa990
+#define GlintCommandInterruptTag                      0x0532
+#define GlintCommandInterruptReg                           1
+#define GlintCommandInterruptOff                      0x9990
+
+#define GlintDMACall                                  0xa998
+#define GlintDMACallTag                               0x0533
+#define GlintDMACallReg                                    1
+#define GlintDMACallOff                               0x9998
+
+#define GlintDMAReturn                                0xa9a0
+#define GlintDMAReturnTag                             0x0534
+#define GlintDMAReturnReg                                  1
+#define GlintDMAReturnOff                             0x99a0
+
+#define GlintDMARectangularRead                       0xa9a8
+#define GlintDMARectangularReadTag                    0x0535
+#define GlintDMARectangularReadReg                         1
+#define GlintDMARectangularReadOff                    0x99a8
+
+#define GlintDMARectangleReadAddress                  0xa9b0
+#define GlintDMARectangleReadAddressTag               0x0536
+#define GlintDMARectangleReadAddressReg                    1
+#define GlintDMARectangleReadAddressOff               0x99b0
+
+#define GlintDMARectangleReadLinePitch                0xa9b8
+#define GlintDMARectangleReadLinePitchTag             0x0537
+#define GlintDMARectangleReadLinePitchReg                  1
+#define GlintDMARectangleReadLinePitchOff             0x99b8
+
+#define GlintDMARectangleReadTarget                   0xa9c0
+#define GlintDMARectangleReadTargetTag                0x0538
+#define GlintDMARectangleReadTargetReg                     1
+#define GlintDMARectangleReadTargetOff                0x99c0
+
+#define GlintDMARectangleWrite                        0xa9c8
+#define GlintDMARectangleWriteTag                     0x0539
+#define GlintDMARectangleWriteReg                          1
+#define GlintDMARectangleWriteOff                     0x99c8
+
+#define GlintDMARectangleWriteAddress                 0xa9d0
+#define GlintDMARectangleWriteAddressTag              0x053a
+#define GlintDMARectangleWriteAddressReg                   1
+#define GlintDMARectangleWriteAddressOff              0x99d0
+
+#define GlintDMARectangleWriteLinePitch               0xa9d8
+#define GlintDMARectangleWriteLinePitchTag            0x053b
+#define GlintDMARectangleWriteLinePitchReg                 1
+#define GlintDMARectangleWriteLinePitchOff            0x99d8
+
+#define GlintDMAOutputAddress                         0xa9e0
+#define GlintDMAOutputAddressTag                      0x053c
+#define GlintDMAOutputAddressReg                           1
+#define GlintDMAOutputAddressOff                      0x99e0
+
+#define GlintDMAOutputCount                           0xa9e8
+#define GlintDMAOutputCountTag                        0x053d
+#define GlintDMAOutputCountReg                             1
+#define GlintDMAOutputCountOff                        0x99e8
+
+#define GlintDMAReadGLINTSource                       0xa9f0
+#define GlintDMAReadGLINTSourceTag                    0x053e
+#define GlintDMAReadGLINTSourceReg                         1
+#define GlintDMAReadGLINTSourceOff                    0x99f0
+
+#define GlintDMAFeedback                              0xaa10
+#define GlintDMAFeedbackTag                           0x0542
+#define GlintDMAFeedbackReg                                1
+#define GlintDMAFeedbackOff                           0x9a10
+
+#define GlintTransformModeAnd                         0xaa80
+#define GlintTransformModeAndTag                      0x0550
+#define GlintTransformModeAndReg                           1
+#define GlintTransformModeAndOff                      0x9a80
+
+#define GlintTransformModeOr                          0xaa88
+#define GlintTransformModeOrTag                       0x0551
+#define GlintTransformModeOrReg                            1
+#define GlintTransformModeOrOff                       0x9a88
+
+#define GlintGeometryModeAnd                          0xaa90
+#define GlintGeometryModeAndTag                       0x0552
+#define GlintGeometryModeAndReg                            1
+#define GlintGeometryModeAndOff                       0x9a90
+
+#define GlintGeometryModeOr                           0xaa98
+#define GlintGeometryModeOrTag                        0x0553
+#define GlintGeometryModeOrReg                             1
+#define GlintGeometryModeOrOff                        0x9a98
+
+#define GlintNormalizeModeAnd                         0xaaa0
+#define GlintNormalizeModeAndTag                      0x0554
+#define GlintNormalizeModeAndReg                           1
+#define GlintNormalizeModeAndOff                      0x9aa0
+
+#define GlintNormalizeModeOr                          0xaaa8
+#define GlintNormalizeModeOrTag                       0x0555
+#define GlintNormalizeModeOrReg                            1
+#define GlintNormalizeModeOrOff                       0x9aa8
+
+#define GlintLightingModeAnd                          0xaab0
+#define GlintLightingModeAndTag                       0x0556
+#define GlintLightingModeAndReg                            1
+#define GlintLightingModeAndOff                       0x9ab0
+
+#define GlintLightingModeOr                           0xaab8
+#define GlintLightingModeOrTag                        0x0557
+#define GlintLightingModeOrReg                             1
+#define GlintLightingModeOrOff                        0x9ab8
+
+#define GlintColorMaterialModeAnd                     0xaac0
+#define GlintColorMaterialModeAndTag                  0x0558
+#define GlintColorMaterialModeAndReg                       1
+#define GlintColorMaterialModeAndOff                  0x9ac0
+
+#define GlintColorMaterialModeOr                      0xaac8
+#define GlintColorMaterialModeOrTag                   0x0559
+#define GlintColorMaterialModeOrReg                        1
+#define GlintColorMaterialModeOrOff                   0x9ac8
+
+#define GlintDeltaModeAnd                             0xaad0
+#define GlintDeltaModeAndTag                          0x055a
+#define GlintDeltaModeAndReg                               1
+#define GlintDeltaModeAndOff                          0x9ad0
+
+#define GlintDeltaModeOr                              0xaad8
+#define GlintDeltaModeOrTag                           0x055b
+#define GlintDeltaModeOrReg                                1
+#define GlintDeltaModeOrOff                           0x9ad8
+
+#define GlintPointModeAnd                             0xaae0
+#define GlintPointModeAndTag                          0x055c
+#define GlintPointModeAndReg                               1
+#define GlintPointModeAndOff                          0x9ae0
+
+#define GlintPointModeOr                              0xaae8
+#define GlintPointModeOrTag                           0x055d
+#define GlintPointModeOrReg                                1
+#define GlintPointModeOrOff                           0x9ae8
+
+#define GlintLineModeAnd                              0xaaf0
+#define GlintLineModeAndTag                           0x055e
+#define GlintLineModeAndReg                                1
+#define GlintLineModeAndOff                           0x9af0
+
+#define GlintLineModeOr                               0xaaf8
+#define GlintLineModeOrTag                            0x055f
+#define GlintLineModeOrReg                                 1
+#define GlintLineModeOrOff                            0x9af8
+
+#define GlintTriangleModeAnd                          0xab00
+#define GlintTriangleModeAndTag                       0x0560
+#define GlintTriangleModeAndReg                            1
+#define GlintTriangleModeAndOff                       0x9b00
+
+#define GlintTriangleModeOr                           0xab08
+#define GlintTriangleModeOrTag                        0x0561
+#define GlintTriangleModeOrReg                             1
+#define GlintTriangleModeOrOff                        0x9b08
+
+#define GlintMaterialModeAnd                          0xab10
+#define GlintMaterialModeAndTag                       0x0562
+#define GlintMaterialModeAndReg                            1
+#define GlintMaterialModeAndOff                       0x9b10
+
+#define GlintMaterialModeOr                           0xab18
+#define GlintMaterialModeOrTag                        0x0563
+#define GlintMaterialModeOrReg                             1
+#define GlintMaterialModeOrOff                        0x9b18
+
+#define GlintWindowAnd                                0xab80
+#define GlintWindowAndTag                             0x0570
+#define GlintWindowAndReg                                  1
+#define GlintWindowAndOff                             0x9b80
+
+#define GlintWindowOr                                 0xab88
+#define GlintWindowOrTag                              0x0571
+#define GlintWindowOrReg                                   1
+#define GlintWindowOrOff                              0x9b88
+
+#define GlintLBReadModeAnd                            0xab90
+#define GlintLBReadModeAndTag                         0x0572
+#define GlintLBReadModeAndReg                              1
+#define GlintLBReadModeAndOff                         0x9b90
+
+#define GlintLBReadModeOr                             0xab98
+#define GlintLBReadModeOrTag                          0x0573
+#define GlintLBReadModeOrReg                               1
+#define GlintLBReadModeOrOff                          0x9b98
+#endif
diff --git a/src/mesa/drivers/dri/gamma/gamma_context.c b/src/mesa/drivers/dri/gamma/gamma_context.c
new file mode 100644 (file)
index 0000000..f7db2ad
--- /dev/null
@@ -0,0 +1,209 @@
+/*
+ * Copyright 2001 by Alan Hourihane.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Alan Hourihane not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission.  Alan Hourihane makes no representations
+ * about the suitability of this software for any purpose.  It is provided
+ * "as is" without express or implied warranty.
+ *
+ * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
+ *
+ * 3DLabs Gamma driver.
+ *
+ */
+#include "gamma_context.h"
+
+#include "swrast/swrast.h"
+#include "swrast_setup/swrast_setup.h"
+#include "array_cache/acache.h"
+
+#include "tnl/tnl.h"
+#include "tnl/t_pipeline.h"
+
+#include "context.h"
+#include "simple_list.h"
+#include "imports.h"
+#include "matrix.h"
+#include "extensions.h"
+#if defined(USE_X86_ASM)
+#include "X86/common_x86_asm.h"
+#endif
+#include "simple_list.h"
+#include "mm.h"
+
+
+#include "gamma_vb.h"
+#include "gamma_tris.h"
+
+extern const struct gl_pipeline_stage _gamma_render_stage;
+
+static const struct gl_pipeline_stage *gamma_pipeline[] = {
+   &_tnl_vertex_transform_stage,
+   &_tnl_normal_transform_stage,
+   &_tnl_lighting_stage,
+   &_tnl_fog_coordinate_stage,
+   &_tnl_texgen_stage,
+   &_tnl_texture_transform_stage,
+                               /* REMOVE: point attenuation stage */
+#if 1
+   &_gamma_render_stage,       /* ADD: unclipped rastersetup-to-dma */
+#endif
+   &_tnl_render_stage,
+   0,
+};
+
+GLboolean gammaCreateContext( const __GLcontextModes *glVisual,
+                            __DRIcontextPrivate *driContextPriv,
+                            void *sharedContextPrivate)
+{
+   GLcontext *ctx, *shareCtx;
+   __DRIscreenPrivate *sPriv = driContextPriv->driScreenPriv;
+   gammaContextPtr gmesa;
+   gammaScreenPtr gammascrn;
+   GLINTSAREADRIPtr saPriv=(GLINTSAREADRIPtr)(((char*)sPriv->pSAREA)+
+                                                sizeof(XF86DRISAREARec));
+
+   gmesa = (gammaContextPtr) CALLOC( sizeof(*gmesa) );
+   if ( !gmesa ) return GL_FALSE;
+
+   /* Allocate the Mesa context */
+   if (sharedContextPrivate)
+      shareCtx = ((gammaContextPtr) sharedContextPrivate)->glCtx;
+   else
+      shareCtx = NULL;
+
+   gmesa->glCtx = _mesa_create_context(glVisual, shareCtx, (void *) gmesa, GL_TRUE);
+   if (!gmesa->glCtx) {
+      FREE(gmesa);
+      return GL_FALSE;
+   }
+
+   gmesa->driContext = driContextPriv;
+   gmesa->driScreen = sPriv;
+   gmesa->driDrawable = NULL; /* Set by XMesaMakeCurrent */
+
+   gmesa->hHWContext = driContextPriv->hHWContext;
+   gmesa->driHwLock = &sPriv->pSAREA->lock;
+   gmesa->driFd = sPriv->fd;
+   gmesa->sarea = saPriv;
+
+   gammascrn = gmesa->gammaScreen = (gammaScreenPtr)(sPriv->private);
+
+   ctx = gmesa->glCtx;
+
+   ctx->Const.MaxTextureLevels = 13;  /* 4K by 4K?  Is that right? */
+   ctx->Const.MaxTextureUnits = 1; /* Permedia 3 */
+
+   ctx->Const.MinLineWidth = 0.0;
+   ctx->Const.MaxLineWidth = 255.0;
+
+   ctx->Const.MinLineWidthAA = 0.0;
+   ctx->Const.MaxLineWidthAA = 65536.0;
+
+   ctx->Const.MinPointSize = 0.0;
+   ctx->Const.MaxPointSize = 255.0;
+
+   ctx->Const.MinPointSizeAA = 0.5; /* 4x4 quality mode */
+   ctx->Const.MaxPointSizeAA = 16.0; 
+   ctx->Const.PointSizeGranularity = 0.25;
+
+   gmesa->texHeap = mmInit( 0, gmesa->gammaScreen->textureSize );
+
+   make_empty_list(&gmesa->TexObjList);
+   make_empty_list(&gmesa->SwappedOut);
+
+   gmesa->CurrentTexObj[0] = 0;
+   gmesa->CurrentTexObj[1] = 0; /* Permedia 3, second texture */
+
+   gmesa->RenderIndex = ~0;
+
+
+   /* Initialize the software rasterizer and helper modules.
+    */
+   _swrast_CreateContext( ctx );
+   _ac_CreateContext( ctx );
+   _tnl_CreateContext( ctx );
+   _swsetup_CreateContext( ctx );
+
+   /* Install the customized pipeline:
+    */
+   _tnl_destroy_pipeline( ctx );
+   _tnl_install_pipeline( ctx, gamma_pipeline );
+
+   /* Configure swrast to match hardware characteristics:
+    */
+   _swrast_allow_pixel_fog( ctx, GL_FALSE );
+   _swrast_allow_vertex_fog( ctx, GL_TRUE );
+
+   gammaInitVB( ctx );
+   gammaDDInitExtensions( ctx );
+   gammaDDInitDriverFuncs( ctx );
+   gammaDDInitStateFuncs( ctx );
+   gammaDDInitSpanFuncs( ctx );
+   gammaDDInitTextureFuncs( ctx );
+   gammaDDInitTriFuncs( ctx );
+   gammaDDInitState( gmesa );
+
+   driContextPriv->driverPrivate = (void *)gmesa;
+
+   GET_FIRST_DMA(gmesa->driFd, gmesa->hHWContext,
+                 1, &gmesa->bufIndex, &gmesa->bufSize,
+                 &gmesa->buf, &gmesa->bufCount, gammascrn);
+
+#ifdef DO_VALIDATE
+    GET_FIRST_DMA(gmesa->driFd, gmesa->hHWContext,
+                 1, &gmesa->WCbufIndex, &gmesa->WCbufSize,
+                 &gmesa->WCbuf, &gmesa->WCbufCount, gammascrn);
+#endif
+
+    switch (glVisual->depthBits) {
+    case 16:
+       gmesa->DeltaMode = DM_Depth16;
+       gmesa->depth_scale = 1.0f / 0xffff;
+       break;
+    case 24:
+       gmesa->DeltaMode = DM_Depth24;
+       gmesa->depth_scale = 1.0f / 0xffffff;
+       break;
+    case 32:
+       gmesa->DeltaMode = DM_Depth32;
+       gmesa->depth_scale = 1.0f / 0xffffffff;
+       break;
+    default:
+       break;
+    }
+
+    gmesa->DepthSize = glVisual->depthBits;
+    gmesa->Flags  = GAMMA_FRONT_BUFFER;
+    gmesa->Flags |= (glVisual->doubleBufferMode ? GAMMA_BACK_BUFFER : 0);
+    gmesa->Flags |= (gmesa->DepthSize > 0 ? GAMMA_DEPTH_BUFFER : 0);
+
+    gmesa->EnabledFlags = GAMMA_FRONT_BUFFER;
+    gmesa->EnabledFlags |= (glVisual->doubleBufferMode ? GAMMA_BACK_BUFFER : 0);
+
+
+    if (gmesa->Flags & GAMMA_BACK_BUFFER) {
+        gmesa->readOffset = gmesa->drawOffset = gmesa->driScreen->fbHeight * gmesa->driScreen->fbWidth * gmesa->gammaScreen->cpp;
+    } else {
+       gmesa->readOffset = gmesa->drawOffset = 0;
+    }
+
+    gammaInitHW( gmesa );
+
+    driContextPriv->driverPrivate = (void *)gmesa;
+
+    return GL_TRUE;
+}
diff --git a/src/mesa/drivers/dri/gamma/gamma_context.h b/src/mesa/drivers/dri/gamma/gamma_context.h
new file mode 100644 (file)
index 0000000..84b54e2
--- /dev/null
@@ -0,0 +1,405 @@
+/* $XFree86: xc/lib/GL/mesa/src/drv/gamma/gamma_context.h,v 1.6 2002/12/16 16:18:50 dawes Exp $ */
+/*
+ * Copyright 2001 by Alan Hourihane.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Alan Hourihane not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission.  Alan Hourihane makes no representations
+ * about the suitability of this software for any purpose.  It is provided
+ * "as is" without express or implied warranty.
+ *
+ * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
+ *
+ */
+
+#ifndef _GAMMA_CONTEXT_H_
+#define _GAMMA_CONTEXT_H_
+
+#include "dri_util.h"
+#include "colormac.h"
+#include "gamma_regs.h"
+#include "gamma_macros.h"
+#include "gamma_screen.h"
+#include "macros.h"
+#include "mtypes.h"
+#include "glint_dri.h"
+#include "mm.h"
+
+typedef union {
+    unsigned int i;
+    float        f;
+} dmaBufRec, *dmaBuf;
+
+/* Flags for context */
+#define GAMMA_FRONT_BUFFER    0x00000001
+#define GAMMA_BACK_BUFFER     0x00000002
+#define GAMMA_DEPTH_BUFFER    0x00000004
+#define GAMMA_STENCIL_BUFFER  0x00000008
+#define GAMMA_ACCUM_BUFFER    0x00000010
+
+#define GAMMA_MAX_TEXTURE_SIZE    2048
+
+/* These are the minimum requirements and should probably be increased */
+#define MAX_MODELVIEW_STACK    16
+#define MAX_PROJECTION_STACK    2
+#define MAX_TEXTURE_STACK       2
+
+extern void      gammaDDUpdateHWState(GLcontext *ctx);
+extern gammaScreenPtr    gammaCreateScreen(__DRIscreenPrivate *sPriv);
+extern void      gammaDestroyScreen(__DRIscreenPrivate *sPriv);
+extern GLboolean gammaCreateContext( const __GLcontextModes *glVisual,
+                                     __DRIcontextPrivate *driContextPriv,
+                                     void *sharedContextPrivate);
+
+#define GAMMA_UPLOAD_ALL       0xffffffff
+#define GAMMA_UPLOAD_CLIPRECTS 0x00000002
+#define GAMMA_UPLOAD_ALPHA     0x00000004
+#define GAMMA_UPLOAD_BLEND     0x00000008
+#define GAMMA_UPLOAD_DEPTH     0x00000010
+#define GAMMA_UPLOAD_VIEWPORT  0x00000020
+#define GAMMA_UPLOAD_SHADE     0x00000040
+#define GAMMA_UPLOAD_CLIP      0x00000080
+#define GAMMA_UPLOAD_MASKS     0x00000100
+#define GAMMA_UPLOAD_WINDOW    0x00000200 /* defunct */
+#define GAMMA_UPLOAD_GEOMETRY  0x00000400
+#define GAMMA_UPLOAD_POLYGON   0x00000800
+#define GAMMA_UPLOAD_DITHER    0x00001000
+#define GAMMA_UPLOAD_LOGICOP   0x00002000
+#define GAMMA_UPLOAD_FOG       0x00004000
+#define GAMMA_UPLOAD_LIGHT     0x00008000
+#define GAMMA_UPLOAD_CONTEXT   0x00010000
+#define GAMMA_UPLOAD_TEX0      0x00020000
+#define GAMMA_UPLOAD_STIPPLE   0x00040000
+#define GAMMA_UPLOAD_TRANSFORM 0x00080000
+#define GAMMA_UPLOAD_LINEMODE  0x00100000
+#define GAMMA_UPLOAD_POINTMODE 0x00200000
+#define GAMMA_UPLOAD_TRIMODE   0x00400000
+
+#define GAMMA_NEW_CLIP         0x00000001
+#define GAMMA_NEW_WINDOW       0x00000002
+#define GAMMA_NEW_CONTEXT      0x00000004
+#define GAMMA_NEW_TEXTURE      0x00000008 /* defunct */
+#define GAMMA_NEW_ALPHA                0x00000010
+#define GAMMA_NEW_DEPTH                0x00000020
+#define GAMMA_NEW_MASKS                0x00000040
+#define GAMMA_NEW_POLYGON      0x00000080
+#define GAMMA_NEW_CULL         0x00000100
+#define GAMMA_NEW_LOGICOP      0x00000200
+#define GAMMA_NEW_FOG          0x00000400
+#define GAMMA_NEW_LIGHT                0x00000800
+#define GAMMA_NEW_STIPPLE      0x00001000
+#define GAMMA_NEW_ALL          0xffffffff
+
+#define GAMMA_FALLBACK_TRI     0x00000001
+#define GAMMA_FALLBACK_TEXTURE 0x00000002
+
+#define FLUSH_BATCH(gmesa) do {                                                \
+       /*FLUSH_DMA_BUFFER(gmesa);*/                                    \
+} while(0)
+
+struct gamma_context;
+typedef struct gamma_context gammaContextRec;
+typedef struct gamma_context *gammaContextPtr;
+typedef struct gamma_texture_object_t *gammaTextureObjectPtr;
+
+#define VALID_GAMMA_TEXTURE_OBJECT(tobj)  (tobj) 
+
+#define GAMMA_TEX_MAXLEVELS 12
+
+/* For shared texture space managment, these texture objects may also
+ * be used as proxies for regions of texture memory containing other
+ * client's textures.  Such proxy textures (not to be confused with GL
+ * proxy textures) are subject to the same LRU aging we use for our
+ * own private textures, and thus we have a mechanism where we can
+ * fairly decide between kicking out our own textures and those of
+ * other clients.
+ *
+ * Non-local texture objects have a valid MemBlock to describe the
+ * region managed by the other client, and can be identified by
+ * 't->globj == 0' 
+ */
+struct gamma_texture_object_t {
+   struct gamma_texture_object_t *next, *prev;
+
+   GLuint age;   
+   struct gl_texture_object *globj;
+     
+   int Pitch;
+   int Height;
+   int texelBytes;
+   int totalSize;
+   int bound;
+
+   PMemBlock MemBlock;   
+   char * BufAddr;
+   
+   GLuint min_level;
+   GLuint max_level;
+   GLuint dirty_images;
+
+   GLint firstLevel, lastLevel;  /* upload tObj->Image[first .. lastLevel] */
+
+   struct { 
+      const struct gl_texture_image *image;
+      int offset;              /* into BufAddr */
+      int height;
+      int internalFormat;
+   } image[GAMMA_TEX_MAXLEVELS];
+
+   CARD32 TextureBaseAddr[GAMMA_TEX_MAXLEVELS];
+   CARD32 TextureAddressMode;
+   CARD32 TextureColorMode;
+   CARD32 TextureFilterMode;
+   CARD32 TextureFormat;
+   CARD32 TextureReadMode;
+   CARD32 TextureBorderColor;
+};             
+
+#define GAMMA_NO_PALETTE        0x0
+#define GAMMA_USE_PALETTE       0x1
+#define GAMMA_UPDATE_PALETTE    0x2
+#define GAMMA_FALLBACK_PALETTE  0x4
+
+void gammaUpdateTextureState( GLcontext *ctx );
+
+void gammaDestroyTexObj( gammaContextPtr gmesa, gammaTextureObjectPtr t );
+void gammaSwapOutTexObj( gammaContextPtr gmesa, gammaTextureObjectPtr t );
+void gammaUploadTexImages( gammaContextPtr gmesa, gammaTextureObjectPtr t );
+
+void gammaResetGlobalLRU( gammaContextPtr gmesa );
+void gammaUpdateTexLRU( gammaContextPtr gmesa, gammaTextureObjectPtr t );
+void gammaTexturesGone( gammaContextPtr gmesa, 
+                      GLuint start, GLuint end, 
+                      GLuint in_use ); 
+
+void gammaEmitHwState( gammaContextPtr gmesa );
+void gammaDDInitExtensions( GLcontext *ctx );
+void gammaDDInitDriverFuncs( GLcontext *ctx );
+void gammaDDInitSpanFuncs( GLcontext *ctx );
+void gammaDDInitState( gammaContextPtr gmesa );
+void gammaInitHW( gammaContextPtr gmesa );
+void gammaDDInitStateFuncs( GLcontext *ctx );
+void gammaDDInitTextureFuncs( GLcontext *ctx );
+void gammaDDInitTriFuncs( GLcontext *ctx );
+
+void gammaUpdateWindow( GLcontext *ctx );
+void gammaUpdateViewportOffset( GLcontext *ctx );
+
+void gammaPrintLocalLRU( gammaContextPtr gmesa );
+void gammaPrintGlobalLRU( gammaContextPtr gmesa );
+
+extern void gammaFallback( gammaContextPtr gmesa, GLuint bit, GLboolean mode );
+#define FALLBACK( imesa, bit, mode ) gammaFallback( imesa, bit, mode )
+
+/* Use the templated vertex formats.  Only one of these is used in gamma.
+ */
+#define TAG(x) gamma##x
+#include "tnl_dd/t_dd_vertex.h"
+#undef TAG
+
+typedef void (*gamma_quad_func)( gammaContextPtr, 
+                                const gammaVertex *, 
+                                const gammaVertex *,
+                                const gammaVertex *,
+                                const gammaVertex * );
+typedef void (*gamma_tri_func)( gammaContextPtr, 
+                               const gammaVertex *, 
+                               const gammaVertex *,
+                               const gammaVertex * );
+typedef void (*gamma_line_func)( gammaContextPtr, 
+                                const gammaVertex *, 
+                                const gammaVertex * );
+typedef void (*gamma_point_func)( gammaContextPtr, 
+                                 const gammaVertex * );
+
+
+struct gamma_context {
+       GLcontext               *glCtx;         /* Mesa context */
+
+       __DRIcontextPrivate     *driContext;
+       __DRIscreenPrivate      *driScreen;
+       __DRIdrawablePrivate    *driDrawable;
+
+       GLuint                  new_gl_state;
+       GLuint                  new_state;
+       GLuint                  dirty;
+
+       GLINTSAREADRIPtr        sarea; 
+
+        /* Temporaries for translating away float colors:
+        */
+        struct gl_client_array UbyteColor;
+        struct gl_client_array UbyteSecondaryColor;
+
+       /* Mirrors of some DRI state
+        */
+       drmContext hHWContext;
+       drmLock *driHwLock;
+       int driFd;
+
+       GLuint numClipRects;               /* Cliprects for the draw buffer */
+       XF86DRIClipRectPtr pClipRects;
+
+       dmaBuf              buf;           /* DMA buffer for regular cmds */
+       int                 bufIndex;
+       int                 bufSize;
+       int                 bufCount;
+
+       dmaBuf              WCbuf;         /* DMA buffer for window changed cmds */
+       int                 WCbufIndex;
+       int                 WCbufSize;
+       int                 WCbufCount;
+
+       gammaScreenPtr gammaScreen;             /* Screen private DRI data */
+
+       int                     drawOffset;
+       int                     readOffset;
+
+       gamma_point_func    draw_point;
+       gamma_line_func     draw_line;
+       gamma_tri_func      draw_tri;
+       gamma_quad_func     draw_quad;
+
+       GLuint Fallback;
+       GLuint RenderIndex;
+       GLuint SetupNewInputs;
+       GLuint SetupIndex;
+
+       GLuint vertex_format;
+       GLuint vertex_size;
+       GLuint vertex_stride_shift;
+       GLubyte *verts;
+
+       GLfloat hw_viewport[16];
+       GLuint hw_primitive;
+       GLenum render_primitive;
+
+       GLfloat depth_scale;
+
+       gammaTextureObjectPtr CurrentTexObj[2];
+       struct gamma_texture_object_t TexObjList;
+       struct gamma_texture_object_t SwappedOut; 
+       GLenum TexEnvImageFmt[2];
+
+       memHeap_t *texHeap;
+
+       unsigned int lastSwap;
+       int texAge;
+       int ctxAge;
+       int dirtyAge;
+       unsigned int lastStamp;
+   
+
+       CARD32                  ClearColor;
+       CARD32                  Color;
+       CARD32                  DitherMode;
+       CARD32                  ClearDepth;
+       CARD32                  FogMode;
+       CARD32                  AreaStippleMode;
+       CARD32                  LBReadFormat;
+       CARD32                  LBWriteFormat;
+       CARD32                  LineMode;
+       CARD32                  PointMode;
+       CARD32                  TriangleMode;
+       CARD32                  AntialiasMode;
+       GLfloat                 ViewportScaleX;
+       GLfloat                 ViewportScaleY;
+       GLfloat                 ViewportScaleZ;
+       GLfloat                 ViewportOffsetX;
+       GLfloat                 ViewportOffsetY;
+       GLfloat                 ViewportOffsetZ;
+    int                 MatrixMode;
+    int                 DepthMode;
+    int                        TransformMode;
+    int                 LBReadMode;
+    int                 FBReadMode;
+    int                 FBWindowBase;
+    int                 LBWindowBase;
+    int                 ColorDDAMode;
+    int                 GeometryMode;
+    int                 AlphaTestMode;
+    int                 AlphaBlendMode;
+    int                 AB_FBReadMode;
+    int                 AB_FBReadMode_Save;
+    int                 DeltaMode;
+    int                        ColorMaterialMode;
+    int                        FBHardwareWriteMask;
+    int                        MaterialMode;
+    int                        NormalizeMode;
+    int                        LightingMode;
+    int                        Light0Mode;
+    int                        Light1Mode;
+    int                        Light2Mode;
+    int                        Light3Mode;
+    int                        Light4Mode;
+    int                        Light5Mode;
+    int                        Light6Mode;
+    int                        Light7Mode;
+    int                        Light8Mode;
+    int                        Light9Mode;
+    int                        Light10Mode;
+    int                        Light11Mode;
+    int                        Light12Mode;
+    int                        Light13Mode;
+    int                        Light14Mode;
+    int                        Light15Mode;
+    int                        LogicalOpMode;
+    int                        ScissorMode;
+    int                        ScissorMaxXY;
+    int                        ScissorMinXY;
+    int                 Window; /* GID part probably should be in draw priv */
+    int                 WindowOrigin;
+    int                 x, y, w, h; /* Probably should be in drawable priv */
+    int                 FrameCount; /* Probably should be in drawable priv */
+    int                 NotClipped; /* Probably should be in drawable priv */
+    int                 WindowChanged; /* Probably should be in drawabl... */
+    int                 Flags;
+    int                 EnabledFlags;
+    int                 DepthSize;
+    int                 Begin;
+    GLenum              ErrorValue;
+    int                 Texture1DEnabled;
+    int                 Texture2DEnabled;
+
+    float               ModelView[16];
+    float               Proj[16];
+    float               ModelViewProj[16];
+    float               Texture[16];
+
+    float               ModelViewStack[(MAX_MODELVIEW_STACK-1)*16];
+    int                 ModelViewCount;
+    float               ProjStack[(MAX_PROJECTION_STACK-1)*16];
+    int                 ProjCount;
+    float               TextureStack[(MAX_TEXTURE_STACK-1)*16];
+    int                 TextureCount;
+};
+
+static __inline GLuint gammaPackColor( GLuint cpp,
+                                       GLubyte r, GLubyte g,
+                                       GLubyte b, GLubyte a )
+{
+   switch ( cpp ) {
+   case 2:
+      return PACK_COLOR_565( r, g, b );
+   case 4:
+      return PACK_COLOR_8888( a, r, g, b );
+   default:
+      return 0;
+   }
+}
+
+#define GAMMA_CONTEXT(ctx)             ((gammaContextPtr)(ctx->DriverCtx))
+
+#endif /* _GAMMA_CONTEXT_H_ */
diff --git a/src/mesa/drivers/dri/gamma/gamma_dd.c b/src/mesa/drivers/dri/gamma/gamma_dd.c
new file mode 100644 (file)
index 0000000..5bd8402
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * Copyright 2001 by Alan Hourihane.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Alan Hourihane not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission.  Alan Hourihane makes no representations
+ * about the suitability of this software for any purpose.  It is provided
+ * "as is" without express or implied warranty.
+ *
+ * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
+ *
+ */
+
+#include "gamma_context.h"
+#include "gamma_vb.h"
+#include "gamma_lock.h"
+#if defined(USE_X86_ASM)
+#include "X86/common_x86_asm.h"
+#endif
+
+#include "context.h"
+#include "swrast/swrast.h"
+
+#define GAMMA_DATE     "20021125"
+
+
+/* Return the width and height of the current color buffer.
+ */
+static void gammaDDGetBufferSize( GLframebuffer *buffer,
+                                GLuint *width, GLuint *height )
+{
+   GET_CURRENT_CONTEXT(ctx);
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   GAMMAHW_LOCK( gmesa );
+   *width  = gmesa->driDrawable->w;
+   *height = gmesa->driDrawable->h;
+   GAMMAHW_UNLOCK( gmesa );
+}
+
+
+/* Return various strings for glGetString().
+ */
+static const GLubyte *gammaDDGetString( GLcontext *ctx, GLenum name )
+{
+   static char buffer[128];
+
+   switch ( name ) {
+   case GL_VENDOR:
+      return (GLubyte *)"VA Linux Systems, Inc.";
+
+   case GL_RENDERER:
+      sprintf( buffer, "Mesa DRI Gamma " GAMMA_DATE );
+
+      /* Append any CPU-specific information.
+       */
+#ifdef USE_X86_ASM
+      if ( _mesa_x86_cpu_features ) {
+        strncat( buffer, " x86", 4 );
+      }
+#ifdef USE_MMX_ASM
+      if ( cpu_has_mmx ) {
+        strncat( buffer, "/MMX", 4 );
+      }
+#endif
+#ifdef USE_3DNOW_ASM
+      if ( cpu_has_3dnow ) {
+        strncat( buffer, "/3DNow!", 7 );
+      }
+#endif
+#ifdef USE_SSE_ASM
+      if ( cpu_has_xmm ) {
+        strncat( buffer, "/SSE", 4 );
+      }
+#endif
+#endif
+      return (GLubyte *)buffer;
+
+   default:
+      return NULL;
+   }
+}
+
+/* Enable the extensions supported by this driver.
+ */
+void gammaDDInitExtensions( GLcontext *ctx )
+{
+   /* None... */
+}
+
+/* Initialize the driver's misc functions.
+ */
+void gammaDDInitDriverFuncs( GLcontext *ctx )
+{
+   ctx->Driver.GetBufferSize           = gammaDDGetBufferSize;
+   ctx->Driver.ResizeBuffers            = _swrast_alloc_buffers;
+   ctx->Driver.GetString               = gammaDDGetString;
+
+   ctx->Driver.Error                   = NULL;
+
+   /* Pixel path fallbacks
+    */
+   ctx->Driver.Accum                    = _swrast_Accum;
+   ctx->Driver.Bitmap                   = _swrast_Bitmap;
+   ctx->Driver.CopyPixels               = _swrast_CopyPixels;
+   ctx->Driver.DrawPixels               = _swrast_DrawPixels;
+   ctx->Driver.ReadPixels               = _swrast_ReadPixels;
+   ctx->Driver.ResizeBuffers            = _swrast_alloc_buffers;
+
+   /* Swrast hooks for imaging extensions:
+    */
+   ctx->Driver.CopyColorTable          = _swrast_CopyColorTable;
+   ctx->Driver.CopyColorSubTable       = _swrast_CopyColorSubTable;
+   ctx->Driver.CopyConvolutionFilter1D = _swrast_CopyConvolutionFilter1D;
+   ctx->Driver.CopyConvolutionFilter2D = _swrast_CopyConvolutionFilter2D;
+}
diff --git a/src/mesa/drivers/dri/gamma/gamma_inithw.c b/src/mesa/drivers/dri/gamma/gamma_inithw.c
new file mode 100644 (file)
index 0000000..47eb802
--- /dev/null
@@ -0,0 +1,551 @@
+/*
+ * Copyright 2001 by Alan Hourihane.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Alan Hourihane not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission.  Alan Hourihane makes no representations
+ * about the suitability of this software for any purpose.  It is provided
+ * "as is" without express or implied warranty.
+ *
+ * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
+ *           Kevin E. Martin <martin@valinux.com>
+ *
+ */
+/* $XFree86: xc/lib/GL/mesa/src/drv/gamma/gamma_inithw.c,v 1.9 2002/10/30 12:51:29 alanh Exp $ */
+
+#include "gamma_context.h"
+#include "glint_dri.h"
+
+void gammaInitHW( gammaContextPtr gmesa )
+{
+    GLINTDRIPtr gDRIPriv = (GLINTDRIPtr)gmesa->driScreen->pDevPriv;
+    int i;
+
+    if (gDRIPriv->numMultiDevices == 2) {
+       /* Set up each MX's ScanLineOwnership for OpenGL */
+       CHECK_DMA_BUFFER(gmesa, 5);
+       WRITE(gmesa->buf, BroadcastMask, 1);
+       WRITE(gmesa->buf, ScanLineOwnership, 5); /* Use bottom left as [0,0] */
+       WRITE(gmesa->buf, BroadcastMask, 2);
+       WRITE(gmesa->buf, ScanLineOwnership, 1); /* Use bottom left as [0,0] */
+       /* Broadcast to both MX's */
+       WRITE(gmesa->buf, BroadcastMask, 3);
+       FLUSH_DMA_BUFFER(gmesa); 
+    }
+
+    gmesa->AlphaBlendMode = (AlphaBlendModeDisable |
+                            AB_Src_One |
+                            AB_Dst_Zero |
+                            AB_NoAlphaBufferPresent |
+                            AB_ColorFmt_8888 |
+                            AB_ColorOrder_RGB |
+                            AB_OpenGLType |
+                            AB_AlphaDst_FBData |
+                            AB_ColorConversionScale |
+                            AB_AlphaConversionScale);
+
+    gmesa->DitherMode = DitherModeEnable | DM_ColorOrder_RGB;
+
+    switch (gmesa->gammaScreen->cpp) {
+       case 2:
+               gmesa->DitherMode |= DM_ColorFmt_5555;
+               gmesa->AlphaBlendMode |= AB_ColorFmt_5555;
+               CHECK_DMA_BUFFER(gmesa, 1);
+               WRITE(gmesa->buf, PixelSize, 1);
+               break;
+       case 4:
+               gmesa->DitherMode |= DM_ColorFmt_8888;
+               gmesa->AlphaBlendMode |= AB_ColorFmt_8888;
+               WRITE(gmesa->buf, PixelSize, 0);
+               break;
+    }
+
+    /* FIXME for stencil, gid, etc */
+    switch (gmesa->DepthSize) {
+       case 16:
+               gmesa->LBReadFormat = 
+                        (LBRF_DepthWidth16    | 
+                          LBRF_StencilWidth8   |
+                          LBRF_StencilPos16    |
+                          LBRF_FrameCount8     |
+                          LBRF_FrameCountPos24 |
+                          LBRF_GIDWidth4       |
+                          LBRF_GIDPos32         );
+               gmesa->LBWriteFormat = 
+                        (LBRF_DepthWidth16    | 
+                          LBRF_StencilWidth8   |
+                          LBRF_StencilPos16    |
+                          LBRF_FrameCount8     |
+                          LBRF_FrameCountPos24 |
+                          LBRF_GIDWidth4       |
+                          LBRF_GIDPos32         );
+               break;
+       case 24:
+               gmesa->LBReadFormat = 
+                        (LBRF_DepthWidth24    | 
+                          LBRF_StencilWidth8   |
+                          LBRF_StencilPos24    |
+                          LBRF_FrameCount8     |
+                          LBRF_FrameCountPos32 |
+                          LBRF_GIDWidth4       |
+                          LBRF_GIDPos36         );
+               gmesa->LBWriteFormat = 
+                        (LBRF_DepthWidth24    | 
+                          LBRF_StencilWidth8   |
+                          LBRF_StencilPos24    |
+                          LBRF_FrameCount8     |
+                          LBRF_FrameCountPos32 |
+                          LBRF_GIDWidth4       |
+                          LBRF_GIDPos36         );
+               break;
+       case 32:
+               gmesa->LBReadFormat = 
+                        (LBRF_DepthWidth32    | 
+                          LBRF_StencilWidth8   |
+                          LBRF_StencilPos32    |
+                          LBRF_FrameCount8     |
+                          LBRF_FrameCountPos40 |
+                          LBRF_GIDWidth4       |
+                          LBRF_GIDPos44         );
+               gmesa->LBWriteFormat = 
+                        (LBRF_DepthWidth32    | 
+                          LBRF_StencilWidth8   |
+                          LBRF_StencilPos32    |
+                          LBRF_FrameCount8     |
+                          LBRF_FrameCountPos40 |
+                          LBRF_GIDWidth4       |
+                          LBRF_GIDPos44         );
+               break;
+    }
+
+    gmesa->FBHardwareWriteMask = 0xffffffff;
+    gmesa->FogMode = FogModeDisable;
+    gmesa->ClearDepth = 0xffffffff;
+    gmesa->AreaStippleMode = AreaStippleModeDisable;
+    gmesa->x = 0;
+    gmesa->y = 0;
+    gmesa->w = 0;
+    gmesa->h = 0;
+    gmesa->FrameCount = 0;
+    gmesa->MatrixMode = GL_MODELVIEW;
+    gmesa->ModelViewCount = 0;
+    gmesa->ProjCount = 0;
+    gmesa->TextureCount = 0;
+    gmesa->PointMode = PM_AntialiasQuality_4x4;
+    gmesa->LineMode = LM_AntialiasQuality_4x4;
+    gmesa->TriangleMode = TM_AntialiasQuality_4x4;
+    gmesa->AntialiasMode = AntialiasModeDisable;
+
+    for (i = 0; i < 16; i++)
+       if (i % 5 == 0)
+           gmesa->ModelView[i] =
+               gmesa->Proj[i] =
+               gmesa->ModelViewProj[i] =
+               gmesa->Texture[i] = 1.0;
+       else
+           gmesa->ModelView[i] =
+               gmesa->Proj[i] =
+               gmesa->ModelViewProj[i] =
+               gmesa->Texture[i] = 0.0;
+
+    gmesa->LBReadMode = (LBReadSrcDisable |
+                        LBReadDstDisable |
+                        LBDataTypeDefault |
+                        LBWindowOriginBot | 
+                        gDRIPriv->pprod);
+    gmesa->FBReadMode = (FBReadSrcDisable |
+                        FBReadDstDisable |
+                        FBDataTypeDefault |
+                        FBWindowOriginBot |  
+                        gDRIPriv->pprod);
+    if (gDRIPriv->numMultiDevices == 2) {
+       gmesa->LBReadMode |= LBScanLineInt2;
+       gmesa->FBReadMode |= FBScanLineInt2;
+        gmesa->LBWindowBase = gmesa->driScreen->fbWidth *
+                            (gmesa->driScreen->fbHeight/2 - 1);
+       gmesa->FBWindowBase = gmesa->driScreen->fbWidth * 
+                            (gmesa->driScreen->fbHeight/2 - 1);
+    } else {
+        gmesa->LBWindowBase = gmesa->driScreen->fbWidth *
+                            (gmesa->driScreen->fbHeight - 1);
+       gmesa->FBWindowBase = gmesa->driScreen->fbWidth * 
+                            (gmesa->driScreen->fbHeight - 1);
+    }
+
+    gmesa->Begin = (B_AreaStippleDisable |
+                   B_LineStippleDisable |
+                   B_AntiAliasDisable |
+                   B_TextureDisable |
+                   B_FogDisable |
+                   B_SubPixelCorrectEnable |
+                   B_PrimType_Null);
+
+    gmesa->ColorDDAMode = (ColorDDAEnable |
+                          ColorDDAGouraud);
+
+    gmesa->GeometryMode = (GM_TextureDisable |
+                          GM_FogDisable |
+                          GM_FogExp |
+                          GM_FrontPolyFill |
+                          GM_BackPolyFill |
+                          GM_FrontFaceCCW |
+                          GM_PolyCullDisable |
+                          GM_PolyCullBack |
+                          GM_ClipShortLinesDisable |
+                          GM_ClipSmallTrisDisable |
+                          GM_RenderMode |
+                          GM_Feedback2D |
+                          GM_CullFaceNormDisable |
+                          GM_AutoFaceNormDisable |
+                          GM_GouraudShading |
+                          GM_UserClipNone |
+                          GM_PolyOffsetPointDisable |
+                          GM_PolyOffsetLineDisable |
+                          GM_PolyOffsetFillDisable |
+                          GM_InvertFaceNormCullDisable);
+
+    gmesa->AlphaTestMode = (AlphaTestModeDisable |
+                           AT_Always);
+
+    gmesa->AB_FBReadMode_Save = gmesa->AB_FBReadMode = 0;
+
+    gmesa->Window = (WindowEnable  | /* For GID testing */
+                    W_PassIfEqual |
+                    (0 << 5)); /* GID part is set from draw priv (below) */
+
+    gmesa->NotClipped = GL_FALSE;
+    gmesa->WindowChanged = GL_TRUE;
+
+    gmesa->Texture1DEnabled = GL_FALSE;
+    gmesa->Texture2DEnabled = GL_FALSE;
+
+    gmesa->DepthMode |= (DepthModeDisable |
+                       DM_WriteMask |
+                       DM_Less);
+
+    gmesa->DeltaMode |= (DM_SubPixlCorrectionEnable |
+                       DM_SmoothShadingEnable |
+                       DM_Target500TXMX);
+
+    gmesa->LightingMode = LightingModeDisable | LightingModeSpecularEnable;
+    gmesa->Light0Mode = LNM_Off;
+    gmesa->Light1Mode = LNM_Off;
+    gmesa->Light2Mode = LNM_Off;
+    gmesa->Light3Mode = LNM_Off;
+    gmesa->Light4Mode = LNM_Off;
+    gmesa->Light5Mode = LNM_Off;
+    gmesa->Light6Mode = LNM_Off;
+    gmesa->Light7Mode = LNM_Off;
+    gmesa->Light8Mode = LNM_Off;
+    gmesa->Light9Mode = LNM_Off;
+    gmesa->Light10Mode = LNM_Off;
+    gmesa->Light11Mode = LNM_Off;
+    gmesa->Light12Mode = LNM_Off;
+    gmesa->Light13Mode = LNM_Off;
+    gmesa->Light14Mode = LNM_Off;
+    gmesa->Light15Mode = LNM_Off;
+
+    gmesa->LogicalOpMode = LogicalOpModeDisable;
+
+    gmesa->MaterialMode = MaterialModeDisable;
+
+    gmesa->ScissorMode = UserScissorDisable | ScreenScissorDisable;
+
+    gmesa->TransformMode = XM_UseModelViewProjMatrix |
+                                   XM_TexGenModeS_None |
+                                   XM_TexGenModeT_None |
+                                   XM_TexGenModeR_None |
+                                   XM_TexGenModeQ_None;
+
+    CHECK_DMA_BUFFER(gmesa, 20);
+    WRITE(gmesa->buf, LineStippleMode, 0);
+    WRITE(gmesa->buf, RouterMode, 0);
+    WRITE(gmesa->buf, TextureAddressMode, 0);
+    WRITE(gmesa->buf, TextureReadMode, 0);
+    WRITE(gmesa->buf, TextureFilterMode, 0);
+    WRITE(gmesa->buf, TextureColorMode, 0);
+    WRITE(gmesa->buf, StencilMode, 0);
+    WRITE(gmesa->buf, PatternRamMode, 0);
+    WRITE(gmesa->buf, ChromaTestMode, 0);
+    WRITE(gmesa->buf, StatisticMode, 0);
+    WRITE(gmesa->buf, AreaStippleMode, gmesa->AreaStippleMode);
+    WRITE(gmesa->buf, ScissorMode, gmesa->ScissorMode);
+    WRITE(gmesa->buf, FogMode, gmesa->FogMode);
+    WRITE(gmesa->buf, AntialiasMode, gmesa->AntialiasMode);
+    WRITE(gmesa->buf, LogicalOpMode, gmesa->LogicalOpMode);
+    WRITE(gmesa->buf, TriangleMode, gmesa->TriangleMode);
+    WRITE(gmesa->buf, PointMode, gmesa->PointMode);
+    WRITE(gmesa->buf, LineMode, gmesa->LineMode);
+    WRITE(gmesa->buf, LBWriteFormat, gmesa->LBWriteFormat);
+    WRITE(gmesa->buf, LBReadFormat,  gmesa->LBReadFormat);
+
+    /* Framebuffer initialization */
+    CHECK_DMA_BUFFER(gmesa, 10);
+    WRITE(gmesa->buf, FBSourceData, 0);
+    WRITE(gmesa->buf, FBReadMode, gmesa->FBReadMode);
+    if (gmesa->EnabledFlags & GAMMA_BACK_BUFFER) {
+       if (gDRIPriv->numMultiDevices == 2) {
+           WRITE(gmesa->buf, FBPixelOffset,
+             (gmesa->driScreen->fbHeight/2)*gmesa->driScreen->fbWidth);
+       } else {
+           WRITE(gmesa->buf, FBPixelOffset,
+             gmesa->driScreen->fbHeight*gmesa->driScreen->fbWidth);
+       }
+    } else
+       WRITE(gmesa->buf, FBPixelOffset, 0);
+    WRITE(gmesa->buf, FBSourceOffset, 0);
+    WRITE(gmesa->buf, FBHardwareWriteMask, 0xffffffff);
+    WRITE(gmesa->buf, FBSoftwareWriteMask, 0xffffffff);
+    WRITE(gmesa->buf, FBWriteMode, FBWriteModeEnable);
+    WRITE(gmesa->buf, FBWindowBase, gmesa->FBWindowBase);
+    WRITE(gmesa->buf, ScreenSize, ((gmesa->driScreen->fbHeight << 16) |
+                                (gmesa->driScreen->fbWidth)));
+    WRITE(gmesa->buf, WindowOrigin, 0x00000000);
+
+    /* Localbuffer initialization */
+    CHECK_DMA_BUFFER(gmesa, 5);
+    WRITE(gmesa->buf, LBReadMode, gmesa->LBReadMode);
+    WRITE(gmesa->buf, LBSourceOffset, 0);
+    WRITE(gmesa->buf, LBWriteMode, LBWriteModeEnable);
+    WRITE(gmesa->buf, LBWindowOffset, 0);
+    WRITE(gmesa->buf, LBWindowBase, gmesa->LBWindowBase);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, Rectangle2DControl, 1);
+
+    CHECK_DMA_BUFFER(gmesa, 11);
+    WRITE(gmesa->buf, DepthMode, gmesa->DepthMode);
+    WRITE(gmesa->buf, ColorDDAMode, gmesa->ColorDDAMode);
+    WRITE(gmesa->buf, FBBlockColor, 0x00000000);
+    WRITE(gmesa->buf, ConstantColor, 0x00000000);
+    WRITE(gmesa->buf, AlphaTestMode, gmesa->AlphaTestMode);
+    WRITE(gmesa->buf, AlphaBlendMode, gmesa->AlphaBlendMode);
+    WRITE(gmesa->buf, DitherMode, gmesa->DitherMode);
+    if (gDRIPriv->numMultiDevices == 2)
+       WRITE(gmesa->buf, RasterizerMode, RM_MultiGLINT | RM_BiasCoordNearHalf);
+    else
+       WRITE(gmesa->buf, RasterizerMode, RM_BiasCoordNearHalf);
+    WRITE(gmesa->buf, GLINTWindow, gmesa->Window);
+    WRITE(gmesa->buf, FastClearDepth, gmesa->ClearDepth);
+    WRITE(gmesa->buf, GLINTDepth, gmesa->ClearDepth);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, EdgeFlag, EdgeFlagEnable);
+
+    CHECK_DMA_BUFFER(gmesa, 16);
+    WRITEF(gmesa->buf, ModelViewMatrix0,  1.0);
+    WRITEF(gmesa->buf, ModelViewMatrix1,  0.0);
+    WRITEF(gmesa->buf, ModelViewMatrix2,  0.0);
+    WRITEF(gmesa->buf, ModelViewMatrix3,  0.0);
+    WRITEF(gmesa->buf, ModelViewMatrix4,  0.0);
+    WRITEF(gmesa->buf, ModelViewMatrix5,  1.0);
+    WRITEF(gmesa->buf, ModelViewMatrix6,  0.0);
+    WRITEF(gmesa->buf, ModelViewMatrix7,  0.0);
+    WRITEF(gmesa->buf, ModelViewMatrix8,  0.0);
+    WRITEF(gmesa->buf, ModelViewMatrix9,  0.0);
+    WRITEF(gmesa->buf, ModelViewMatrix10, 1.0);
+    WRITEF(gmesa->buf, ModelViewMatrix11, 0.0);
+    WRITEF(gmesa->buf, ModelViewMatrix12, 0.0);
+    WRITEF(gmesa->buf, ModelViewMatrix13, 0.0);
+    WRITEF(gmesa->buf, ModelViewMatrix14, 0.0);
+    WRITEF(gmesa->buf, ModelViewMatrix15, 1.0);
+
+    CHECK_DMA_BUFFER(gmesa, 16);
+    WRITEF(gmesa->buf, ModelViewProjectionMatrix0,  1.0);
+    WRITEF(gmesa->buf, ModelViewProjectionMatrix1,  0.0);
+    WRITEF(gmesa->buf, ModelViewProjectionMatrix2,  0.0);
+    WRITEF(gmesa->buf, ModelViewProjectionMatrix3,  0.0);
+    WRITEF(gmesa->buf, ModelViewProjectionMatrix4,  0.0);
+    WRITEF(gmesa->buf, ModelViewProjectionMatrix5,  1.0);
+    WRITEF(gmesa->buf, ModelViewProjectionMatrix6,  0.0);
+    WRITEF(gmesa->buf, ModelViewProjectionMatrix7,  0.0);
+    WRITEF(gmesa->buf, ModelViewProjectionMatrix8,  0.0);
+    WRITEF(gmesa->buf, ModelViewProjectionMatrix9,  0.0);
+    WRITEF(gmesa->buf, ModelViewProjectionMatrix10, 1.0);
+    WRITEF(gmesa->buf, ModelViewProjectionMatrix11, 0.0);
+    WRITEF(gmesa->buf, ModelViewProjectionMatrix12, 0.0);
+    WRITEF(gmesa->buf, ModelViewProjectionMatrix13, 0.0);
+    WRITEF(gmesa->buf, ModelViewProjectionMatrix14, 0.0);
+    WRITEF(gmesa->buf, ModelViewProjectionMatrix15, 1.0);
+
+    CHECK_DMA_BUFFER(gmesa, 16);
+    WRITEF(gmesa->buf, TextureMatrix0,  1.0);
+    WRITEF(gmesa->buf, TextureMatrix1,  0.0);
+    WRITEF(gmesa->buf, TextureMatrix2,  0.0);
+    WRITEF(gmesa->buf, TextureMatrix3,  0.0);
+    WRITEF(gmesa->buf, TextureMatrix4,  0.0);
+    WRITEF(gmesa->buf, TextureMatrix5,  1.0);
+    WRITEF(gmesa->buf, TextureMatrix6,  0.0);
+    WRITEF(gmesa->buf, TextureMatrix7,  0.0);
+    WRITEF(gmesa->buf, TextureMatrix8,  0.0);
+    WRITEF(gmesa->buf, TextureMatrix9,  0.0);
+    WRITEF(gmesa->buf, TextureMatrix10, 1.0);
+    WRITEF(gmesa->buf, TextureMatrix11, 0.0);
+    WRITEF(gmesa->buf, TextureMatrix12, 0.0);
+    WRITEF(gmesa->buf, TextureMatrix13, 0.0);
+    WRITEF(gmesa->buf, TextureMatrix14, 0.0);
+    WRITEF(gmesa->buf, TextureMatrix15, 1.0);
+
+    CHECK_DMA_BUFFER(gmesa, 16);
+    WRITEF(gmesa->buf, TexGen0,  0.0);
+    WRITEF(gmesa->buf, TexGen1,  0.0);
+    WRITEF(gmesa->buf, TexGen2,  0.0);
+    WRITEF(gmesa->buf, TexGen3,  0.0);
+    WRITEF(gmesa->buf, TexGen4,  0.0);
+    WRITEF(gmesa->buf, TexGen5,  0.0);
+    WRITEF(gmesa->buf, TexGen6,  0.0);
+    WRITEF(gmesa->buf, TexGen7,  0.0);
+    WRITEF(gmesa->buf, TexGen8,  0.0);
+    WRITEF(gmesa->buf, TexGen9,  0.0);
+    WRITEF(gmesa->buf, TexGen10, 0.0);
+    WRITEF(gmesa->buf, TexGen11, 0.0);
+    WRITEF(gmesa->buf, TexGen12, 0.0);
+    WRITEF(gmesa->buf, TexGen13, 0.0);
+    WRITEF(gmesa->buf, TexGen14, 0.0);
+    WRITEF(gmesa->buf, TexGen15, 0.0);
+
+    CHECK_DMA_BUFFER(gmesa, 9);
+    WRITEF(gmesa->buf, NormalMatrix0, 1.0);
+    WRITEF(gmesa->buf, NormalMatrix1, 0.0);
+    WRITEF(gmesa->buf, NormalMatrix2, 0.0);
+    WRITEF(gmesa->buf, NormalMatrix3, 0.0);
+    WRITEF(gmesa->buf, NormalMatrix4, 1.0);
+    WRITEF(gmesa->buf, NormalMatrix5, 0.0);
+    WRITEF(gmesa->buf, NormalMatrix6, 0.0);
+    WRITEF(gmesa->buf, NormalMatrix7, 0.0);
+    WRITEF(gmesa->buf, NormalMatrix8, 1.0);
+
+    CHECK_DMA_BUFFER(gmesa, 3);
+    WRITEF(gmesa->buf, FogDensity, 0.0);
+    WRITEF(gmesa->buf, FogEnd,     0.0);
+    WRITEF(gmesa->buf, FogScale,   0.0);
+
+    CHECK_DMA_BUFFER(gmesa, 2);
+    WRITEF(gmesa->buf, LineClipLengthThreshold,   0.0);
+    WRITEF(gmesa->buf, TriangleClipAreaThreshold, 0.0);
+
+    CHECK_DMA_BUFFER(gmesa, 5);
+    WRITE(gmesa->buf, GeometryMode, gmesa->GeometryMode);
+    WRITE(gmesa->buf, NormalizeMode, NormalizeModeDisable);
+    WRITE(gmesa->buf, LightingMode, gmesa->LightingMode);
+    WRITE(gmesa->buf, ColorMaterialMode, ColorMaterialModeDisable);
+    WRITE(gmesa->buf, MaterialMode, MaterialModeDisable);
+
+    CHECK_DMA_BUFFER(gmesa, 2);
+    WRITE(gmesa->buf, FrontSpecularExponent, 0); /* fixed point */
+    WRITE(gmesa->buf, BackSpecularExponent,  0); /* fixed point */
+
+    CHECK_DMA_BUFFER(gmesa, 29);
+    WRITEF(gmesa->buf, FrontAmbientColorRed,    0.2);
+    WRITEF(gmesa->buf, FrontAmbientColorGreen,  0.2);
+    WRITEF(gmesa->buf, FrontAmbientColorBlue,   0.2);
+    WRITEF(gmesa->buf, BackAmbientColorRed,     0.2);
+    WRITEF(gmesa->buf, BackAmbientColorGreen,   0.2);
+    WRITEF(gmesa->buf, BackAmbientColorBlue,    0.2);
+    WRITEF(gmesa->buf, FrontDiffuseColorRed,    0.8);
+    WRITEF(gmesa->buf, FrontDiffuseColorGreen,  0.8);
+    WRITEF(gmesa->buf, FrontDiffuseColorBlue,   0.8);
+    WRITEF(gmesa->buf, BackDiffuseColorRed,     0.8);
+    WRITEF(gmesa->buf, BackDiffuseColorGreen,   0.8);
+    WRITEF(gmesa->buf, BackDiffuseColorBlue,    0.8);
+    WRITEF(gmesa->buf, FrontSpecularColorRed,   0.0);
+    WRITEF(gmesa->buf, FrontSpecularColorGreen, 0.0);
+    WRITEF(gmesa->buf, FrontSpecularColorBlue,  0.0);
+    WRITEF(gmesa->buf, BackSpecularColorRed,    0.0);
+    WRITEF(gmesa->buf, BackSpecularColorGreen,  0.0);
+    WRITEF(gmesa->buf, BackSpecularColorBlue,   0.0);
+    WRITEF(gmesa->buf, FrontEmissiveColorRed,   0.0);
+    WRITEF(gmesa->buf, FrontEmissiveColorGreen, 0.0);
+    WRITEF(gmesa->buf, FrontEmissiveColorBlue,  0.0);
+    WRITEF(gmesa->buf, BackEmissiveColorRed,    0.0);
+    WRITEF(gmesa->buf, BackEmissiveColorGreen,  0.0);
+    WRITEF(gmesa->buf, BackEmissiveColorBlue,   0.0);
+    WRITEF(gmesa->buf, SceneAmbientColorRed,    0.2);
+    WRITEF(gmesa->buf, SceneAmbientColorGreen,  0.2);
+    WRITEF(gmesa->buf, SceneAmbientColorBlue,   0.2);
+    WRITEF(gmesa->buf, FrontAlpha,              1.0);
+    WRITEF(gmesa->buf, BackAlpha,               1.0);
+
+    CHECK_DMA_BUFFER(gmesa, 7);
+    WRITE(gmesa->buf, PointSize, 1);
+    WRITEF(gmesa->buf, AApointSize, 1.0);
+    WRITE(gmesa->buf, LineWidth, 1);
+    WRITEF(gmesa->buf, AAlineWidth, 1.0);
+    WRITE(gmesa->buf, LineWidthOffset, 0);
+    WRITE(gmesa->buf, TransformMode, gmesa->TransformMode);
+    WRITE(gmesa->buf, DeltaMode, gmesa->DeltaMode);
+
+    CHECK_DMA_BUFFER(gmesa, 16);
+    WRITE(gmesa->buf, Light0Mode,  LNM_Off);
+    WRITE(gmesa->buf, Light1Mode,  LNM_Off);
+    WRITE(gmesa->buf, Light2Mode,  LNM_Off);
+    WRITE(gmesa->buf, Light3Mode,  LNM_Off);
+    WRITE(gmesa->buf, Light4Mode,  LNM_Off);
+    WRITE(gmesa->buf, Light5Mode,  LNM_Off);
+    WRITE(gmesa->buf, Light6Mode,  LNM_Off);
+    WRITE(gmesa->buf, Light7Mode,  LNM_Off);
+    WRITE(gmesa->buf, Light8Mode,  LNM_Off);
+    WRITE(gmesa->buf, Light9Mode,  LNM_Off);
+    WRITE(gmesa->buf, Light10Mode, LNM_Off);
+    WRITE(gmesa->buf, Light11Mode, LNM_Off);
+    WRITE(gmesa->buf, Light12Mode, LNM_Off);
+    WRITE(gmesa->buf, Light13Mode, LNM_Off);
+    WRITE(gmesa->buf, Light14Mode, LNM_Off);
+    WRITE(gmesa->buf, Light15Mode, LNM_Off);
+
+    CHECK_DMA_BUFFER(gmesa, 22);
+    WRITEF(gmesa->buf, Light0AmbientIntensityBlue, 0.0);
+    WRITEF(gmesa->buf, Light0AmbientIntensityGreen, 0.0);
+    WRITEF(gmesa->buf, Light0AmbientIntensityRed, 0.0);
+    WRITEF(gmesa->buf, Light0DiffuseIntensityBlue, 1.0);
+    WRITEF(gmesa->buf, Light0DiffuseIntensityGreen, 1.0);
+    WRITEF(gmesa->buf, Light0DiffuseIntensityRed, 1.0);
+    WRITEF(gmesa->buf, Light0SpecularIntensityBlue, 1.0);
+    WRITEF(gmesa->buf, Light0SpecularIntensityGreen, 1.0);
+    WRITEF(gmesa->buf, Light0SpecularIntensityRed, 1.0);
+    WRITEF(gmesa->buf, Light0SpotlightDirectionZ, 0.0);
+    WRITEF(gmesa->buf, Light0SpotlightDirectionY, 0.0);
+    WRITEF(gmesa->buf, Light0SpotlightDirectionX, -1.0);
+    WRITEF(gmesa->buf, Light0SpotlightExponent, 0.0);
+    WRITEF(gmesa->buf, Light0PositionZ, 0.0);
+    WRITEF(gmesa->buf, Light0PositionY, 0.0);
+    WRITEF(gmesa->buf, Light0PositionX, 1.0);
+    WRITEF(gmesa->buf, Light0PositionW, 0.0);
+    WRITEF(gmesa->buf, Light0CosSpotlightCutoffAngle, -1.0);
+    WRITEF(gmesa->buf, Light0ConstantAttenuation, 1.0);
+    WRITEF(gmesa->buf, Light0LinearAttenuation,   0.0);
+    WRITEF(gmesa->buf, Light0QuadraticAttenuation,0.0);
+
+    CHECK_DMA_BUFFER(gmesa, 2);
+    WRITEF(gmesa->buf, XBias, 0.0);
+    WRITEF(gmesa->buf, YBias, 0.0);
+
+    CHECK_DMA_BUFFER(gmesa, 6);
+    WRITEF(gmesa->buf, ViewPortScaleX, gmesa->driScreen->fbWidth/4);
+    WRITEF(gmesa->buf, ViewPortScaleY, gmesa->driScreen->fbHeight/4);
+    WRITEF(gmesa->buf, ViewPortScaleZ, 1.0f);
+    WRITEF(gmesa->buf, ViewPortOffsetX, gmesa->x);
+    WRITEF(gmesa->buf, ViewPortOffsetY, gmesa->y);
+    WRITEF(gmesa->buf, ViewPortOffsetZ, 0.0f);
+
+    CHECK_DMA_BUFFER(gmesa, 3);
+    WRITEF(gmesa->buf, Nz, 1.0);
+    WRITEF(gmesa->buf, Ny, 0.0);
+    WRITEF(gmesa->buf, Nx, 0.0);
+
+    /* Send the initialization commands to the HW */
+    FLUSH_DMA_BUFFER(gmesa);
+}
diff --git a/src/mesa/drivers/dri/gamma/gamma_lock.c b/src/mesa/drivers/dri/gamma/gamma_lock.c
new file mode 100644 (file)
index 0000000..4c0970f
--- /dev/null
@@ -0,0 +1,59 @@
+/* $XFree86: xc/lib/GL/mesa/src/drv/gamma/gamma_lock.c,v 1.4 2002/11/05 17:46:07 tsi Exp $ */
+
+#include "gamma_context.h"
+#include "gamma_lock.h"
+
+#ifdef DEBUG_LOCKING
+char *prevLockFile = NULL;
+int prevLockLine = 0;
+#endif
+
+
+/* Update the hardware state.  This is called if another context has
+ * grabbed the hardware lock, which includes the X server.  This
+ * function also updates the driver's window state after the X server
+ * moves, resizes or restacks a window -- the change will be reflected
+ * in the drawable position and clip rects.  Since the X server grabs
+ * the hardware lock when it changes the window state, this routine will
+ * automatically be called after such a change.
+ */
+void gammaGetLock( gammaContextPtr gmesa, GLuint flags )
+{
+   __DRIdrawablePrivate *dPriv = gmesa->driDrawable;
+   __DRIscreenPrivate *sPriv = gmesa->driScreen;
+
+   drmGetLock( gmesa->driFd, gmesa->hHWContext, flags );
+
+   /* The window might have moved, so we might need to get new clip
+    * rects.
+    *
+    * NOTE: This releases and regrabs the hw lock to allow the X server
+    * to respond to the DRI protocol request for new drawable info.
+    * Since the hardware state depends on having the latest drawable
+    * clip rects, all state checking must be done _after_ this call.
+    */
+   DRI_VALIDATE_DRAWABLE_INFO( sPriv, dPriv );
+
+   if ( gmesa->lastStamp != dPriv->lastStamp ) {
+      gmesa->lastStamp = dPriv->lastStamp;
+      gmesa->new_state |= GAMMA_NEW_WINDOW | GAMMA_NEW_CLIP;
+   }
+
+   gmesa->numClipRects = dPriv->numClipRects;
+   gmesa->pClipRects = dPriv->pClipRects;
+
+#if 0
+   gmesa->dirty = ~0;
+
+   if ( sarea->ctxOwner != gmesa->hHWContext ) {
+      sarea->ctxOwner = gmesa->hHWContext;
+      gmesa->dirty = GAMMA_UPLOAD_ALL;
+   }
+
+   for ( i = 0 ; i < gmesa->lastTexHeap ; i++ ) {
+      if ( sarea->texAge[i] != gmesa->lastTexAge[i] ) {
+        gammaAgeTextures( gmesa, i );
+      }
+   }
+#endif
+}
diff --git a/src/mesa/drivers/dri/gamma/gamma_lock.h b/src/mesa/drivers/dri/gamma/gamma_lock.h
new file mode 100644 (file)
index 0000000..8b66e19
--- /dev/null
@@ -0,0 +1,88 @@
+#ifndef __GAMMA_LOCK_H__
+#define __GAMMA_LOCK_H__
+
+#ifdef GLX_DIRECT_RENDERING
+
+extern void gammaGetLock( gammaContextPtr gmesa, GLuint flags );
+
+/* Turn DEBUG_LOCKING on to find locking conflicts.
+ */
+#define DEBUG_LOCKING  0
+
+#if DEBUG_LOCKING
+extern char *prevLockFile;
+extern int prevLockLine;
+
+#define DEBUG_LOCK()                                                   \
+   do {                                                                        \
+      prevLockFile = (__FILE__);                                       \
+      prevLockLine = (__LINE__);                                       \
+   } while (0)
+
+#define DEBUG_RESET()                                                  \
+   do {                                                                        \
+      prevLockFile = 0;                                                        \
+      prevLockLine = 0;                                                        \
+   } while (0)
+
+#define DEBUG_CHECK_LOCK()                                             \
+   do {                                                                        \
+      if ( prevLockFile ) {                                            \
+        fprintf( stderr,                                               \
+                 "LOCK SET!\n\tPrevious %s:%d\n\tCurrent: %s:%d\n",    \
+                 prevLockFile, prevLockLine, __FILE__, __LINE__ );     \
+        exit( 1 );                                                     \
+      }                                                                        \
+   } while (0)
+
+#else
+
+#define DEBUG_LOCK()
+#define DEBUG_RESET()
+#define DEBUG_CHECK_LOCK()
+
+#endif
+
+/*
+ * !!! We may want to separate locks from locks with validation.  This
+ * could be used to improve performance for those things commands that
+ * do not do any drawing !!!
+ */
+
+/* Lock the hardware and validate our state.
+ */
+#define LOCK_HARDWARE( gmesa )                                         \
+   do {                                                                        \
+      char __ret = 0;                                                  \
+      DEBUG_CHECK_LOCK();                                              \
+      DRM_CAS( gmesa->driHwLock, gmesa->hHWContext,                    \
+              (DRM_LOCK_HELD | gmesa->hHWContext), __ret );            \
+      if ( __ret )                                                     \
+        gammaGetLock( gmesa, 0 );                                      \
+      DEBUG_LOCK();                                                    \
+   } while (0)
+
+/* Unlock the hardware.
+ */
+#define UNLOCK_HARDWARE( gmesa )                                       \
+   do {                                                                        \
+      DRM_UNLOCK( gmesa->driFd,                                                \
+                 gmesa->driHwLock,                                     \
+                 gmesa->hHWContext );                                  \
+      DEBUG_RESET();                                                   \
+   } while (0)
+
+#endif
+
+#define GAMMAHW_LOCK( gmesa )                                          \
+   DRM_UNLOCK(gmesa->driFd, gmesa->driHwLock, gmesa->hHWContext);      \
+   DRM_SPINLOCK(&gmesa->driScreen->pSAREA->drawable_lock,              \
+                gmesa->driScreen->drawLockID);                         \
+   VALIDATE_DRAWABLE_INFO_NO_LOCK(gmesa);
+
+#define GAMMAHW_UNLOCK( gmesa )                                                \
+    DRM_SPINUNLOCK(&gmesa->driScreen->pSAREA->drawable_lock,           \
+                  gmesa->driScreen->drawLockID);                       \
+    VALIDATE_DRAWABLE_INFO_NO_LOCK_POST(gmesa);
+
+#endif /* __GAMMA_LOCK_H__ */
diff --git a/src/mesa/drivers/dri/gamma/gamma_macros.h b/src/mesa/drivers/dri/gamma/gamma_macros.h
new file mode 100644 (file)
index 0000000..bf9cf5f
--- /dev/null
@@ -0,0 +1,328 @@
+/* $XFree86: xc/lib/GL/mesa/src/drv/gamma/gamma_macros.h,v 1.5 2002/02/22 21:33:02 dawes Exp $ */
+/**************************************************************************
+
+Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
+All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sub license, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+**************************************************************************/
+
+/*
+ * Authors:
+ *   Kevin E. Martin <kevin@precisioninsight.com>
+ *
+ */
+
+#ifndef _GAMMA_MACROS_H_
+#define _GAMMA_MACROS_H_
+
+#ifdef GLX_DIRECT_RENDERING
+
+#define DEBUG_DRMDMA
+#define DEBUG_ERRORS
+#define DEBUG_COMMANDS_NOT
+#define DEBUG_VERBOSE_NOT
+#define DEBUG_VERBOSE_EXTRA_NOT
+
+#define RANDOMIZE_COLORS_NOT
+#define TURN_OFF_CLEARS_NOT
+#define CULL_ALL_PRIMS_NOT
+#define TURN_OFF_DEPTH_NOT
+#define TURN_OFF_BLEND_NOT
+#define FAST_CLEAR_4_NOT
+#define FORCE_DEPTH32_NOT
+#define DONT_SEND_DMA_NOT
+#define TURN_OFF_FCP_NOT
+#define TURN_OFF_TEXTURES_NOT
+#define DO_VALIDATE
+
+#define GAMMA_DMA_BUFFER_SIZE 4096
+
+#if 0
+#define GAMMA_DMA_SEND_FLAGS    DRM_DMA_PRIORITY
+#define GAMMA_DMA_SEND_FLAGS    DRM_DMA_BLOCK
+#else
+/* MUST use non-blocking dma flags for drawable lock routines */
+#define GAMMA_DMA_SEND_FLAGS    0
+#endif
+
+#if 0
+#define GAMMA_DMA_GET_FLAGS     \
+    (DRM_DMA_SMALLER_OK | DRM_DMA_LARGER_OK | DRM_DMA_WAIT)
+#else
+#define GAMMA_DMA_GET_FLAGS     DRM_DMA_WAIT
+#endif
+
+#if defined(DEBUG_DRMDMA) || defined(DEBUG_COMMANDS) || defined(DEBUG_VERBOSE)
+#include <stdio.h>
+#endif
+
+/* Note: The argument to DEBUG_GLCMDS() _must_ be enclosed in parenthesis */
+#ifdef DEBUG_VERBOSE
+#define DEBUG_GLCMDS(s) printf s
+#else
+#define DEBUG_GLCMDS(s)
+#endif
+
+/* Note: The argument to DEBUG_DMACMDS() _must_ be enclosed in parenthesis */
+#ifdef DEBUG_DRMDMA
+#define DEBUG_DMACMDS(s) printf s
+#else
+#define DEBUG_DMACMDS(s)
+#endif
+
+/* Note: The argument to DEBUG_WRITE() _must_ be enclosed in parenthesis */
+#ifdef DEBUG_COMMANDS
+#define DEBUG_WRITE(s) printf s
+#else
+#define DEBUG_WRITE(s)
+#endif
+
+/* Note: The argument to DEBUG_ERROR() _must_ be enclosed in parenthesis */
+#ifdef DEBUG_ERRORS
+#define DEBUG_ERROR(s) printf s
+#else
+#define DEBUG_ERROR(s)
+#endif
+
+#define WRITEV(buf,val1,val2,val3,val4)                               \
+do {                                                                  \
+    buf++->i = 0x9C008300;                        \
+    buf++->f = val1;                                                   \
+    buf++->f = val2;                                                   \
+    buf++->f = val3;                                                   \
+    buf++->f = val4;                                                   \
+} while (0)
+
+#define WRITE(buf,reg,val)                                            \
+do {                                                                  \
+    buf++->i = Glint##reg##Tag;                                       \
+    buf++->i = val;                                                   \
+    DEBUG_WRITE(("WRITE(buf, %s, 0x%08x);\n", #reg, (int)val));       \
+} while (0)
+
+#define WRITEF(buf,reg,val)                                           \
+do {                                                                  \
+    buf++->i = Glint##reg##Tag;                                       \
+    buf++->f = val;                                                   \
+    DEBUG_WRITE(("WRITEF(buf, %s, %f);\n", #reg, (float)val));        \
+} while (0)
+
+#define CHECK_WC_DMA_BUFFER(gcp,n)                                    \
+do {                                                                  \
+    (gcp)->WCbufCount += (n<<1);                                      \
+} while (0)
+
+#define CHECK_DMA_BUFFER(gcp,n)                                   \
+do {                                                                  \
+    if ((gcp)->bufCount+(n<<1) >= (gcp)->bufSize)                     \
+       PROCESS_DMA_BUFFER(gcp);                                  \
+    (gcp)->bufCount += (n<<1);                                        \
+} while (0)
+
+#define CHECK_DMA_BUFFER2(gcp,n)                                   \
+do {                                                                  \
+    if ((gcp)->bufCount+n >= (gcp)->bufSize)                     \
+       PROCESS_DMA_BUFFER(gcp);                                  \
+    (gcp)->bufCount += n;                                        \
+} while (0)
+
+#define FLUSH_DMA_BUFFER(gcp)                                     \
+do {                                                                  \
+   if (gcp->bufCount)                                                \
+       PROCESS_DMA_BUFFER(gcp);                                  \
+} while (0)
+
+#ifdef DONT_SEND_DMA
+#define GET_DMA(fd, hHWCtx, n, idx, size)
+#define SEND_DMA(fd, hHWCtx,n, idx, cnt)
+#else
+#define GET_DMA(fd, hHWCtx, n, idx, size)                                  \
+do {                                                                       \
+    drmDMAReq dma;                                                         \
+    int retcode, i;                                                        \
+                                                                           \
+    dma.context       = (hHWCtx);                                          \
+    dma.send_count    = 0;                                                 \
+    dma.send_list     = NULL;                                              \
+    dma.send_sizes    = NULL;                                              \
+    dma.flags         = GAMMA_DMA_GET_FLAGS;                               \
+    dma.request_count = (n);                                               \
+    dma.request_size  = GAMMA_DMA_BUFFER_SIZE;                             \
+    dma.request_list  = (idx);                                             \
+    dma.request_sizes = (size);                                            \
+                                                                           \
+    do {                                                                   \
+       if ((retcode = drmDMA((fd), &dma))) {                              \
+           DEBUG_DMACMDS(("drmDMA returned %d\n", retcode));              \
+       }                                                                  \
+    } while (!(dma).granted_count);                                        \
+                                                                           \
+    for (i = 0; i < (n); i++) {                                            \
+       (size)[i] >>= 2; /* Convert from bytes to words */                 \
+    }                                                                      \
+} while (0)
+
+#define SEND_DMA(fd, hHWCtx, n, idx, cnt)                                  \
+do {                                                                       \
+    drmDMAReq dma;                                                         \
+    int retcode, i;                                                        \
+                                                                           \
+    for (i = 0; i < (n); i++) {                                            \
+       (cnt)[i] <<= 2; /* Convert from words to bytes */                  \
+    }                                                                      \
+                                                                           \
+    dma.context       = (hHWCtx);                                          \
+    dma.send_count    = 1;                                                 \
+    dma.send_list     = (idx);                                             \
+    dma.send_sizes    = (cnt);                                             \
+    dma.flags         = GAMMA_DMA_SEND_FLAGS;                              \
+    dma.request_count = 0;                                                 \
+    dma.request_size  = 0;                                                 \
+    dma.request_list  = NULL;                                              \
+    dma.request_sizes = NULL;                                              \
+                                                                           \
+    if ((retcode = drmDMA((fd), &dma))) {                                  \
+       DEBUG_DMACMDS(("drmDMA returned %d\n", retcode));                  \
+    }                                                                      \
+                                                                           \
+    for (i = 0; i < (n); i++) {                                            \
+       (cnt)[i] = 0;                                                      \
+    }                                                                      \
+} while (0)
+#endif
+
+#define GET_FIRST_DMA(fd, hHWCtx, n, idx, size, buf, cnt, gPriv)           \
+do {                                                                       \
+    int i;                                                                 \
+                                                                           \
+    GET_DMA(fd, hHWCtx, n, idx, size);                                     \
+                                                                           \
+    for (i = 0; i < (n); i++) {                                            \
+       (buf)[i] = (dmaBuf)(gPriv)->bufs->list[(idx)[i]].address;          \
+       (cnt)[i] = 0;                                                      \
+    }                                                                      \
+} while (0)
+
+#define PROCESS_DMA_BUFFER_TOP_HALF(gcp)                                   \
+do {                                                                       \
+    SEND_DMA((gcp)->driFd,                        \
+            (gcp)->hHWContext, 1, &(gcp)->bufIndex, &(gcp)->bufCount);    \
+} while (0)
+
+#define PROCESS_DMA_BUFFER_BOTTOM_HALF(gcp)                                \
+do {                                                                       \
+    GET_DMA((gcp)->driFd,                         \
+           (gcp)->hHWContext, 1, &(gcp)->bufIndex, &(gcp)->bufSize);      \
+                                                                           \
+    (gcp)->buf =                                                           \
+       (dmaBuf)(gcp)->gammaScreen->bufs->list[(gcp)->bufIndex].address; \
+} while (0)
+
+#define PROCESS_DMA_BUFFER(gcp)                                        \
+do {                                                                       \
+    VALIDATE_DRAWABLE_INFO(gcp);                             \
+    PROCESS_DMA_BUFFER_TOP_HALF(gcp);                                      \
+    PROCESS_DMA_BUFFER_BOTTOM_HALF(gcp);                                   \
+} while (0)
+
+#ifdef DO_VALIDATE
+#define VALIDATE_DRAWABLE_INFO_NO_LOCK(gcp)                                \
+do {                                                                       \
+    /*__DRIscreenPrivate *psp = gcp->driScreen;*/                          \
+    __DRIdrawablePrivate *pdp = gcp->driDrawable;                          \
+                                                                           \
+    if (*(pdp->pStamp) != pdp->lastStamp) {                                \
+       int old_index = pdp->index;                                        \
+       while (*(pdp->pStamp) != pdp->lastStamp) {                         \
+           DRI_VALIDATE_DRAWABLE_INFO_ONCE(pdp);                          \
+        }                                                                  \
+       if (pdp->index != old_index) {                                     \
+           gcp->Window &= ~W_GIDMask;                                     \
+           gcp->Window |= (pdp->index << 5);                              \
+           CHECK_WC_DMA_BUFFER(gcp, 1);                                   \
+           WRITE(gcp->WCbuf, GLINTWindow, gcp->Window|(gcp->FrameCount<<9));\
+       }                                                                  \
+                                                                          \
+       gammaUpdateViewportOffset( gcp->glCtx);                            \
+                                                                           \
+       if (pdp->numClipRects == 1 &&                                      \
+           pdp->pClipRects->x1 ==  pdp->x &&                              \
+           pdp->pClipRects->x2 == (pdp->x+pdp->w) &&                      \
+           pdp->pClipRects->y1 ==  pdp->y &&                              \
+           pdp->pClipRects->y2 == (pdp->y+pdp->h)) {                      \
+           CHECK_WC_DMA_BUFFER(gcp, 1);                                   \
+           WRITE(gcp->WCbuf, Rectangle2DControl, 0);                     \
+           gcp->NotClipped = GL_TRUE;                                     \
+       } else {                                                           \
+           CHECK_WC_DMA_BUFFER(gcp, 1);                                   \
+           WRITE(gcp->WCbuf, Rectangle2DControl, 1);                     \
+           gcp->NotClipped = GL_FALSE;                                    \
+       }                                                                  \
+       gcp->WindowChanged = GL_TRUE;                                      \
+                                                                           \
+       if (gcp->WCbufCount) {                                             \
+           SEND_DMA((gcp)->gammaScreen->driScreen->fd,                \
+                    (gcp)->hHWContext, 1, &(gcp)->WCbufIndex,             \
+                    &(gcp)->WCbufCount);                                  \
+           (gcp)->WCbufIndex = -1;                                        \
+       }                                                                  \
+    }                                                                      \
+} while (0)
+
+#define VALIDATE_DRAWABLE_INFO_NO_LOCK_POST(gcp)                       \
+do {                                                                       \
+    if ((gcp)->WCbufIndex < 0) {                                           \
+       GET_DMA((gcp)->gammaScreen->driScreen->fd,                     \
+               (gcp)->hHWContext, 1, &(gcp)->WCbufIndex,                  \
+               &(gcp)->WCbufSize);                                        \
+                                                                           \
+       (gcp)->WCbuf =                                                     \
+           (dmaBuf)(gcp)->gammaScreen->bufs->                           \
+               list[(gcp)->WCbufIndex].address;                           \
+    }                                                                      \
+} while (0)
+
+#define VALIDATE_DRAWABLE_INFO(gcp)                                    \
+do {                                                                       \
+    __DRIscreenPrivate *psp = gcp->driScreen;                          \
+if (gcp->driDrawable) { \
+    DRM_SPINLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID);            \
+    VALIDATE_DRAWABLE_INFO_NO_LOCK(gcp);                               \
+    DRM_SPINUNLOCK(&psp->pSAREA->drawable_lock, psp->drawLockID);          \
+    VALIDATE_DRAWABLE_INFO_NO_LOCK_POST(gcp);                          \
+} \
+} while (0)
+#else
+#define VALIDATE_DRAWABLE_INFO(gcp)
+#endif
+
+#define CALC_LOG2(l2,s)                       \
+do {                                          \
+    int __s = s;                              \
+    l2 = 0;                                   \
+    while (__s > 1) { ++l2; __s >>= 1; }      \
+} while (0)
+
+#endif
+
+#endif /* _GAMMA_MACROS_H_ */
diff --git a/src/mesa/drivers/dri/gamma/gamma_regs.h b/src/mesa/drivers/dri/gamma/gamma_regs.h
new file mode 100644 (file)
index 0000000..2edda07
--- /dev/null
@@ -0,0 +1,659 @@
+/* $XFree86: xc/lib/GL/mesa/src/drv/gamma/gamma_regs.h,v 1.5 2002/02/22 21:33:02 dawes Exp $ */
+/**************************************************************************
+
+Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
+All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sub license, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+**************************************************************************/
+
+/*
+ * Authors:
+ *   Kevin E. Martin <kevin@precisioninsight.com>
+ *
+ */
+
+#ifndef _GAMMA_REGS_H_
+#define _GAMMA_REGS_H_
+
+#include "gamma_client.h"
+
+/**************** MX FLAGS ****************/
+/* FBReadMode */
+#define FBReadSrcDisable              0x00000000
+#define FBReadSrcEnable               0x00000200
+#define FBReadDstDisable              0x00000000
+#define FBReadDstEnable               0x00000400
+#define FBDataTypeDefault             0x00000000
+#define FBDataTypeColor               0x00008000
+#define FBWindowOriginTop             0x00000000
+#define FBWindowOriginBot             0x00010000
+#define FBScanLineInt1                0x00000000
+#define FBScanLineInt2                0x00800000
+#define FBScanLineInt4                0x01000000
+#define FBScanLineInt8                0x01800000
+#define FBSrcAddrConst                0x00000000
+#define FBSrcAddrIndex                0x10000000
+#define FBSrcAddrCoord                0x20000000
+
+/* LBReadMode */
+#define LBPartialProdMask             0x000001ff
+#define LBReadSrcDisable              0x00000000
+#define LBReadSrcEnable               0x00000200
+#define LBReadDstDisable              0x00000000
+#define LBReadDstEnable               0x00000400
+#define LBDataTypeDefault             0x00000000
+#define LBDataTypeStencil             0x00010000
+#define LBDataTypeDepth               0x00020000
+#define LBWindowOriginTop             0x00000000
+#define LBWindowOriginBot             0x00040000
+#define LBScanLineInt1                0x00000000
+#define LBScanLineInt2                0x00100000
+#define LBScanLineInt4                0x00200000
+#define LBScanLineInt8                0x00300000
+
+/* ColorDDAMode */
+#define ColorDDADisable               0x00000000
+#define ColorDDAEnable                0x00000001
+#define ColorDDAFlat                  0x00000000
+#define ColorDDAGouraud               0x00000002
+#define ColorDDAShadingMask           0x00000002
+
+/* AlphaTestMode */
+#define AlphaTestModeDisable          0x00000000
+#define AlphaTestModeEnable           0x00000001
+#define AT_Never                      0x00000000
+#define AT_Less                       0x00000002
+#define AT_Equal                      0x00000004
+#define AT_LessEqual                  0x00000006
+#define AT_Greater                    0x00000008
+#define AT_NotEqual                   0x0000000a
+#define AT_GreaterEqual               0x0000000c
+#define AT_Always                     0x0000000e
+#define AT_CompareMask                0x0000000e
+#define AT_RefValueMask               0x00000ff0
+
+/* AlphaBlendMode */
+#define AlphaBlendModeDisable         0x00000000
+#define AlphaBlendModeEnable          0x00000001
+#define AB_Src_Zero                   0x00000000
+#define AB_Src_One                    0x00000002
+#define AB_Src_DstColor               0x00000004
+#define AB_Src_OneMinusDstColor       0x00000006
+#define AB_Src_SrcAlpha               0x00000008
+#define AB_Src_OneMinusSrcAlpha       0x0000000a
+#define AB_Src_DstAlpha               0x0000000c
+#define AB_Src_OneMinusDstAlpha       0x0000000e
+#define AB_Src_SrcAlphaSaturate       0x00000010
+#define AB_SrcBlendMask               0x0000001e
+#define AB_Dst_Zero                   0x00000000
+#define AB_Dst_One                    0x00000020
+#define AB_Dst_SrcColor               0x00000040
+#define AB_Dst_OneMinusSrcColor       0x00000060
+#define AB_Dst_SrcAlpha               0x00000080
+#define AB_Dst_OneMinusSrcAlpha       0x000000a0
+#define AB_Dst_DstAlpha               0x000000c0
+#define AB_Dst_OneMinusDstAlpha       0x000000e0
+#define AB_DstBlendMask               0x000000e0
+#define AB_ColorFmt_8888              0x00000000
+#define AB_ColorFmt_5555              0x00000100
+#define AB_ColorFmt_4444              0x00000200
+#define AB_ColorFmt_4444Front         0x00000300
+#define AB_ColorFmt_4444Back          0x00000400
+#define AB_ColorFmt_332Front          0x00000500
+#define AB_ColorFmt_332Back           0x00000600
+#define AB_ColorFmt_121Front          0x00000700
+#define AB_ColorFmt_121Back           0x00000800
+#define AB_ColorFmt_555Back           0x00000d00
+#define AB_ColorFmt_CI8               0x00000e00
+#define AB_ColorFmt_CI4               0x00000f00
+#define AB_AlphaBufferPresent         0x00000000
+#define AB_NoAlphaBufferPresent       0x00001000
+#define AB_ColorOrder_BGR             0x00000000
+#define AB_ColorOrder_RGB             0x00002000
+#define AB_OpenGLType                 0x00000000
+#define AB_QuickDraw3DType            0x00004000
+#define AB_AlphaDst_FBData            0x00000000
+#define AB_AlphaDst_FBSourceData      0x00008000
+#define AB_ColorConversionScale       0x00000000
+#define AB_ColorConversionShift       0x00010000
+#define AB_AlphaConversionScale       0x00000000
+#define AB_AlphaConversionShift       0x00020000
+
+/* AntialiasMode */
+#define AntialiasModeDisable          0x00000000
+#define AntialiasModeEnable           0x00000001
+
+/* AreaStippleMode */
+#define AreaStippleModeDisable        0x00000000
+#define AreaStippleModeEnable         0x00000001
+#define ASM_X32                       0x00000008
+#define ASM_Y32                       0x00000040
+
+/* DepthMode */
+#define DepthModeDisable              0x00000000
+#define DepthModeEnable               0x00000001
+#define DM_WriteMask                  0x00000002
+#define DM_SourceFragment             0x00000000
+#define DM_SourceLBData               0x00000004
+#define DM_SourceDepthRegister        0x00000008
+#define DM_SourceLBSourceData         0x0000000c
+#define DM_SourceMask                 0x0000000c
+#define DM_Never                      0x00000000
+#define DM_Less                       0x00000010
+#define DM_Equal                      0x00000020
+#define DM_LessEqual                  0x00000030
+#define DM_Greater                    0x00000040
+#define DM_NotEqual                   0x00000050
+#define DM_GreaterEqual               0x00000060
+#define DM_Always                     0x00000070
+#define DM_CompareMask                0x00000070
+
+/* FBWriteMode */
+#define FBWriteModeDisable            0x00000000
+#define FBWriteModeEnable             0x00000001
+#define FBW_UploadColorData           0x00000008
+
+/* FogMode */
+#define FogModeDisable                0x00000000
+#define FogModeEnable                 0x00000001
+
+/* LBWriteMode */
+#define LBWriteModeDisable            0x00000000
+#define LBWriteModeEnable             0x00000001
+#define LBW_UploadNone                0x00000000
+#define LBW_UploadDepth               0x00000002
+#define LBW_UploadStencil             0x00000004
+
+/* LBRead/Write Format */
+#define LBRF_DepthWidth15   0x03  /* only permedia */
+#define LBRF_DepthWidth16   0x00
+#define LBRF_DepthWidth24   0x01
+#define LBRF_DepthWidth32   0x02
+#define LBRF_StencilWidth0  (0 << 2)
+#define LBRF_StencilWidth4  (1 << 2)
+#define LBRF_StencilWidth8  (2 << 2)
+#define LBRF_StencilPos16   (0 << 4)
+#define LBRF_StencilPos20   (1 << 4)
+#define LBRF_StencilPos24   (2 << 4)
+#define LBRF_StencilPos28   (3 << 4)
+#define LBRF_StencilPos32   (4 << 4)
+#define LBRF_FrameCount0    (0 << 7)
+#define LBRF_FrameCount4    (1 << 7)
+#define LBRF_FrameCount8    (2 << 7)
+#define LBRF_FrameCountPos16  (0 << 9)
+#define LBRF_FrameCountPos20  (1 << 9)
+#define LBRF_FrameCountPos24  (2 << 9)
+#define LBRF_FrameCountPos28  (3 << 9)
+#define LBRF_FrameCountPos32  (4 << 9)
+#define LBRF_FrameCountPos36  (5 << 9)
+#define LBRF_FrameCountPos40  (6 << 9)
+#define LBRF_GIDWidth0 (0 << 12)
+#define LBRF_GIDWidth4 (1 << 12)
+#define LBRF_GIDPos16  (0 << 13)
+#define LBRF_GIDPos20  (1 << 13)
+#define LBRF_GIDPos24  (2 << 13)
+#define LBRF_GIDPos28  (3 << 13)
+#define LBRF_GIDPos32  (4 << 13)
+#define LBRF_GIDPos36  (5 << 13)
+#define LBRF_GIDPos40  (6 << 13)
+#define LBRF_GIDPos44  (7 << 13)
+#define LBRF_GIDPos48  (8 << 13)
+#define LBRF_Compact32  (1 << 17)
+
+/* StencilMode */
+#define StencilDisable                0x00000000
+#define StencilEnable                 0x00000001
+
+/* RouterMode */
+#define R_Order_TextureDepth          0x00000000
+#define R_Order_DepthTexture          0x00000001
+
+/* ScissorMode */
+#define UserScissorDisable            0x00000000
+#define UserScissorEnable             0x00000001
+#define ScreenScissorDisable          0x00000000
+#define ScreenScissorEnable           0x00000002
+
+/* DitherMode */
+#define DitherModeDisable             0x00000000
+#define DitherModeEnable              0x00000001
+#define DM_DitherDisable              0x00000000
+#define DM_DitherEnable               0x00000002
+#define DM_ColorFmt_8888              0x00000000
+#define DM_ColorFmt_5555              0x00000004
+#define DM_ColorFmt_4444              0x00000008
+#define DM_ColorFmt_4444Front         0x0000000c
+#define DM_ColorFmt_4444Back          0x00000010
+#define DM_ColorFmt_332Front          0x00000014
+#define DM_ColorFmt_332Back           0x00000018
+#define DM_ColorFmt_121Front          0x0000001c
+#define DM_ColorFmt_121Back           0x00000020
+#define DM_ColorFmt_555Back           0x00000024
+#define DM_ColorFmt_CI8               0x00000028
+#define DM_ColorFmt_CI4               0x0000002c
+#define DM_XOffsetMask                0x000000c0
+#define DM_YOffsetMask                0x00000300
+#define DM_ColorOrder_BGR             0x00000000
+#define DM_ColorOrder_RGB             0x00000400
+#define DM_AlphaDitherDefault         0x00000000
+#define DM_AlphaDitherNone            0x00004000
+#define DM_Truncate                   0x00000000
+#define DM_Round                      0x00008000
+
+/* RasterizerMode */
+#define RM_MirrorBitMask              0x00000001
+#define RM_InvertBitMask              0x00000002
+#define RM_FractionAdjNo              0x00000000
+#define RM_FractionAdjZero            0x00000004
+#define RM_FractionAdjHalf            0x00000008
+#define RM_FractionAdjNearHalf        0x0000000c
+#define RM_BiasCoordZero              0x00000000
+#define RM_BiasCoordHalf              0x00000010
+#define RM_BiasCoordNearHalf          0x00000020
+#define RM_BitMaskByteSwap_ABCD       0x00000000
+#define RM_BitMaskByteSwap_BADC       0x00000080
+#define RM_BitMaskByteSwap_CDAB       0x00000100
+#define RM_BitMaskByteSwap_DCBA       0x00000180
+#define RM_BitMaskPacked              0x00000000
+#define RM_BitMaskEveryScanline       0x00000200
+#define RM_BitMaskOffsetMask          0x00007c00
+#define RM_HostDataByteSwap_ABCD      0x00000000
+#define RM_HostDataByteSwap_BADC      0x00008000
+#define RM_HostDataByteSwap_CDAB      0x00010000
+#define RM_HostDataByteSwap_DCBA      0x00018000
+#define RM_SingleGLINT                0x00000000
+#define RM_MultiGLINT                 0x00020000
+#define RM_YLimitsEnable              0x00040000
+
+/* Window */
+#define WindowDisable                 0x00000000
+#define WindowEnable                  0x00000001
+#define W_AlwaysPass                  0x00000000
+#define W_NeverPass                   0x00000002
+#define W_PassIfEqual                 0x00000004
+#define W_PassIfNotEqual              0x00000006
+#define W_CompareMask                 0x00000006
+#define W_ForceLBUpdate               0x00000008
+#define W_LBUpdateFromSource          0x00000000
+#define W_LBUpdateFromRegisters       0x00000010
+#define W_GIDMask                     0x000001e0
+#define W_FrameCountMask              0x0001fe00
+#define W_StencilFCP                  0x00020000
+#define W_DepthFCP                    0x00040000
+#define W_OverrideWriteFiltering      0x00080000
+
+/* TextureAddressMode */
+#define TextureAddressModeDisable     0x00000000
+#define TextureAddressModeEnable      0x00000001
+#define TAM_SWrap_Clamp               0x00000000
+#define TAM_SWrap_Repeat              0x00000002
+#define TAM_SWrap_Mirror              0x00000004
+#define TAM_SWrap_Mask                0x00000006
+#define TAM_TWrap_Clamp               0x00000000
+#define TAM_TWrap_Repeat              0x00000008
+#define TAM_TWrap_Mirror              0x00000010
+#define TAM_TWrap_Mask                0x00000018
+#define TAM_Operation_2D              0x00000000
+#define TAM_Operation_3D              0x00000020
+#define TAM_InhibitDDAInit            0x00000040
+#define TAM_LODDisable                0x00000000
+#define TAM_LODEnable                 0x00000080
+#define TAM_DY_Disable                0x00000000
+#define TAM_DY_Enable                 0x00000100
+#define TAM_WidthMask                 0x00001e00
+#define TAM_HeightMask                0x0001e000
+#define TAM_TexMapType_1D             0x00000000
+#define TAM_TexMapType_2D             0x00020000
+#define TAM_TexMapType_Mask           0x00020000
+
+/* TextureReadMode */
+#define TextureReadModeDisable        0x00000000
+#define TextureReadModeEnable         0x00000001
+#define TRM_WidthMask                 0x0000001e
+#define TRM_HeightMask                0x000001e0
+#define TRM_Depth1                    0x00000000
+#define TRM_Depth2                    0x00000200
+#define TRM_Depth4                    0x00000400
+#define TRM_Depth8                    0x00000600
+#define TRM_Depth16                   0x00000800
+#define TRM_Depth32                   0x00000a00
+#define TRM_DepthMask                 0x00000e00
+#define TRM_Border                    0x00001000
+#define TRM_Patch                     0x00002000
+#define TRM_Mag_Nearest               0x00000000
+#define TRM_Mag_Linear                0x00004000
+#define TRM_Mag_Mask                  0x00004000
+#define TRM_Min_Nearest               0x00000000
+#define TRM_Min_Linear                0x00008000
+#define TRM_Min_NearestMMNearest      0x00010000
+#define TRM_Min_NearestMMLinear       0x00018000
+#define TRM_Min_LinearMMNearest       0x00020000
+#define TRM_Min_LinearMMLinear        0x00028000
+#define TRM_Min_Mask                  0x00038000
+#define TRM_UWrap_Clamp               0x00000000
+#define TRM_UWrap_Repeat              0x00040000
+#define TRM_UWrap_Mirror              0x00080000
+#define TRM_UWrap_Mask                0x000c0000
+#define TRM_VWrap_Clamp               0x00000000
+#define TRM_VWrap_Repeat              0x00100000
+#define TRM_VWrap_Mirror              0x00200000
+#define TRM_VWrap_Mask                0x00300000
+#define TRM_TexMapType_1D             0x00000000
+#define TRM_TexMapType_2D             0x00400000
+#define TRM_TexMapType_Mask           0x00400000
+#define TRM_MipMapDisable             0x00000000
+#define TRM_MipMapEnable              0x00800000
+#define TRM_PrimaryCacheDisable       0x00000000
+#define TRM_PrimaryCacheEnable        0x01000000
+#define TRM_FBSourceAddr_None         0x00000000
+#define TRM_FBSourceAddr_Index        0x02000000
+#define TRM_FBSourceAddr_Coord        0x04000000
+#define TRM_BorderClamp               0x08000000
+
+/* TextureColorMode */
+#define TextureColorModeDisable       0x00000000
+#define TextureColorModeEnable        0x00000001
+#define TCM_Modulate                  0x00000000
+#define TCM_Decal                     0x00000002
+#define TCM_Blend                     0x00000004
+#define TCM_Replace                   0x00000006
+#define TCM_ApplicationMask           0x0000000e
+#define TCM_OpenGLType                0x00000000
+#define TCM_QuickDraw3DType           0x00000010
+#define TCM_KdDDA_Disable             0x00000000
+#define TCM_KdDDA_Enable              0x00000020
+#define TCM_KsDDA_Disable             0x00000000
+#define TCM_KsDDA_Enable              0x00000040
+#define TCM_BaseFormat_Alpha          0x00000000
+#define TCM_BaseFormat_Lum            0x00000080
+#define TCM_BaseFormat_LumAlpha       0x00000100
+#define TCM_BaseFormat_Intensity      0x00000180
+#define TCM_BaseFormat_RGB            0x00000200
+#define TCM_BaseFormat_RGBA           0x00000280
+#define TCM_BaseFormatMask            0x00000380
+#define TCM_LoadMode_None             0x00000000
+#define TCM_LoadMode_Ks               0x00000400
+#define TCM_LoadMode_Kd               0x00000800
+
+/* TextureCacheControl */
+#define TCC_Invalidate                0x00000001
+#define TCC_Disable                   0x00000000
+#define TCC_Enable                    0x00000002
+
+/* TextureFilterMode */
+#define TextureFilterModeDisable      0x00000000
+#define TextureFilterModeEnable       0x00000001
+#define TFM_AlphaMapEnable            0x00000002
+#define TFM_AlphaMapSense             0x00000004
+
+/* TextureFormat */
+#define TF_LittleEndian               0x00000000
+#define TF_BigEndian                  0x00000001
+#define TF_16Bit_565                  0x00000000
+#define TF_16Bit_555                  0x00000002
+#define TF_ColorOrder_BGR             0x00000000
+#define TF_ColorOrder_RGB             0x00000004
+#define TF_Compnents_1                0x00000000
+#define TF_Compnents_2                0x00000008
+#define TF_Compnents_3                0x00000010
+#define TF_Compnents_4                0x00000018
+#define TF_CompnentsMask              0x00000018
+#define TF_OutputFmt_Texel            0x00000000
+#define TF_OutputFmt_Color            0x00000020
+#define TF_OutputFmt_BitMask          0x00000040
+#define TF_OutputFmtMask              0x00000060
+#define TF_MirrorEnable               0x00000080
+#define TF_InvertEnable               0x00000100
+#define TF_ByteSwapEnable             0x00000200
+#define TF_LUTOffsetMask              0x0003fc00
+#define TF_OneCompFmt_Lum             0x00000000
+#define TF_OneCompFmt_Alpha           0x00040000
+#define TF_OneCompFmt_Intensity        0x00080000
+#define TF_OneCompFmt_Mask            0x000c0000
+/**************** MX FLAGS ****************/
+
+/************** GAMMA FLAGS ***************/
+/* GeometryMode */
+#define GM_TextureDisable             0x00000000
+#define GM_TextureEnable              0x00000001
+#define GM_FogDisable                 0x00000000
+#define GM_FogEnable                  0x00000002
+#define GM_FogLinear                  0x00000000
+#define GM_FogExp                     0x00000004
+#define GM_FogExpSquared              0x00000008
+#define GM_FogMask                    0x0000000C
+#define GM_FrontPolyPoint             0x00000000
+#define GM_FrontPolyLine              0x00000010
+#define GM_FrontPolyFill              0x00000020
+#define GM_BackPolyPoint              0x00000000
+#define GM_BackPolyLine               0x00000040
+#define GM_BackPolyFill               0x00000080
+#define GM_FB_PolyMask                0x000000F0
+#define GM_FrontFaceCW                0x00000000
+#define GM_FrontFaceCCW               0x00000100
+#define GM_FFMask                     0x00000100
+#define GM_PolyCullDisable            0x00000000
+#define GM_PolyCullEnable             0x00000200
+#define GM_PolyCullFront              0x00000000
+#define GM_PolyCullBack               0x00000400
+#define GM_PolyCullBoth               0x00000800
+#define GM_PolyCullMask               0x00000c00
+#define GM_ClipShortLinesDisable      0x00000000
+#define GM_ClipShortLinesEnable       0x00001000
+#define GM_ClipSmallTrisDisable       0x00000000
+#define GM_ClipSmallTrisEnable        0x00002000
+#define GM_RenderMode                 0x00000000
+#define GM_SelectMode                 0x00004000
+#define GM_FeedbackMode               0x00008000
+#define GM_Feedback2D                 0x00000000
+#define GM_Feedback3D                 0x00010000
+#define GM_Feedback3DColor            0x00020000
+#define GM_Feedback3DColorTexture     0x00030000
+#define GM_Feedback4DColorTexture     0x00040000
+#define GM_CullFaceNormDisable        0x00000000
+#define GM_CullFaceNormEnable         0x00080000
+#define GM_AutoFaceNormDisable        0x00000000
+#define GM_AutoFaceNormEnable         0x00100000
+#define GM_GouraudShading             0x00000000
+#define GM_FlatShading                0x00200000
+#define GM_ShadingMask                0x00200000
+#define GM_UserClipNone               0x00000000
+#define GM_UserClip0                  0x00400000
+#define GM_UserClip1                  0x00800000
+#define GM_UserClip2                  0x01000000
+#define GM_UserClip3                  0x02000000
+#define GM_UserClip4                  0x04000000
+#define GM_UserClip5                  0x08000000
+#define GM_PolyOffsetPointDisable     0x00000000
+#define GM_PolyOffsetPointEnable      0x10000000
+#define GM_PolyOffsetLineDisable      0x00000000
+#define GM_PolyOffsetLineEnable       0x20000000
+#define GM_PolyOffsetFillDisable      0x00000000
+#define GM_PolyOffsetFillEnable       0x40000000
+#define GM_InvertFaceNormCullDisable  0x00000000
+#define GM_InvertFaceNormCullEnable   0x80000000
+
+/* Begin */
+#define B_AreaStippleDisable          0x00000000
+#define B_AreaStippleEnable           0x00000001
+#define B_LineStippleDisable          0x00000000
+#define B_LineStippleEnable           0x00000002
+#define B_AntiAliasDisable            0x00000000
+#define B_AntiAliasEnable             0x00000100
+#define B_TextureDisable              0x00000000
+#define B_TextureEnable               0x00002000
+#define B_FogDisable                  0x00000000
+#define B_FogEnable                   0x00004000
+#define B_SubPixelCorrectDisable      0x00000000
+#define B_SubPixelCorrectEnable       0x00010000
+#define B_PrimType_Null               0x00000000
+#define B_PrimType_Points             0x10000000
+#define B_PrimType_Lines              0x20000000
+#define B_PrimType_LineLoop           0x30000000
+#define B_PrimType_LineStrip          0x40000000
+#define B_PrimType_Triangles          0x50000000
+#define B_PrimType_TriangleStrip      0x60000000
+#define B_PrimType_TriangleFan        0x70000000
+#define B_PrimType_Quads              0x80000000
+#define B_PrimType_QuadStrip          0x90000000
+#define B_PrimType_Polygon            0xa0000000
+#define B_PrimType_Mask               0xf0000000
+
+/* EdgeFlag */
+#define EdgeFlagDisable               0x00000000
+#define EdgeFlagEnable                0x00000001
+
+/* NormalizeMode */
+#define NormalizeModeDisable          0x00000000
+#define NormalizeModeEnable           0x00000001
+#define FaceNormalDisable             0x00000000
+#define FaceNormalEnable              0x00000002
+#define InvertAutoFaceNormal          0x00000004
+
+/* LightingMode */
+#define LightingModeDisable           0x00000000
+#define LightingModeEnable            0x00000001
+#define LightingModeTwoSides          0x00000004
+#define LightingModeLocalViewer       0x00000008
+#define LightingModeSpecularEnable    0x00008000
+
+/* Light0Mode */
+#define Light0ModeDisable             0x00000000
+#define Light0ModeEnable              0x00000001
+#define Light0ModeSpotLight           0x00000002
+#define Light0ModeAttenuation         0x00000004
+#define Light0ModeLocal               0x00000008
+
+/* Light0Mode */
+#define Light1ModeDisable             0x00000000
+#define Light1ModeEnable              0x00000001
+#define Light1ModeSpotLight           0x00000002
+#define Light1ModeAttenuation         0x00000004
+#define Light1ModeLocal               0x00000008
+
+/* ColorMaterialMode */
+#define ColorMaterialModeDisable      0x00000000
+#define ColorMaterialModeEnable       0x00000001
+#define ColorMaterialModeFront        0x00000000
+#define ColorMaterialModeBack         0x00000002
+#define ColorMaterialModeFrontAndBack 0x00000004
+#define ColorMaterialModeEmission     0x00000000
+#define ColorMaterialModeAmbient      0x00000008
+#define ColorMaterialModeDiffuse      0x00000010
+#define ColorMaterialModeSpecular     0x00000018
+#define ColorMaterialModeAmbAndDiff   0x00000020
+#define ColorMaterialModeMask         0x0000003e
+
+/* MaterialMode */
+#define MaterialModeDisable           0x00000000
+#define MaterialModeEnable            0x00000001
+#define MaterialModeTwoSides          0x00000080
+
+/* DeltaMode */
+#define DM_Target300SX                0x00000000
+#define DM_Target500TXMX              0x00000001
+#define DM_Depth16                    0x00000004
+#define DM_Depth24                    0x00000008
+#define DM_Depth32                    0x0000000c
+#define DM_FogEnable                  0x00000010
+#define DM_TextureEnable              0x00000020
+#define DM_SmoothShadingEnable        0x00000040
+#define DM_DepthEnable                0x00000080
+#define DM_SpecularEnable             0x00000100
+#define DM_DiffuseEnable              0x00000200
+#define DM_SubPixlCorrectionEnable    0x00000400
+#define DM_DiamondExit                0x00000800
+#define DM_NoDraw                     0x00001000
+#define DM_ClampEnable                0x00002000
+#define DM_TextureParameterAsGiven    0x00000000
+#define DM_TextureParameterClamped    0x00004000
+#define DM_TextureParameterNormalized 0x00008000
+#define DM_BiasCoords                 0x00080000
+#define DM_ColorDiffuse               0x00100000
+#define DM_ColorSpecular              0x00200000
+#define DM_FlatShadingMethod          0x00400000
+
+/* PointMode */
+#define PM_AntialiasDisable           0x00000000
+#define PM_AntialiasEnable            0x00000001
+#define PM_AntialiasQuality_4x4       0x00000000
+#define PM_AntialiasQuality_8x8       0x00000002
+
+/* LogicalOpMode */
+#define LogicalOpModeDisable          0x00000000
+#define LogicalOpModeEnable           0x00000001
+#define LogicalOpModeMask             0x0000001e
+
+/* LineMode */
+#define LM_StippleDisable             0x00000000
+#define LM_StippleEnable              0x00000001
+#define LM_RepeatFactorMask           0x000003fe
+#define LM_StippleMask                0x03fffc00
+#define LM_MirrorDisable              0x00000000
+#define LM_MirrorEnable               0x04000000
+#define LM_AntialiasDisable           0x00000000
+#define LM_AntialiasEnable            0x08000000
+#define LM_AntialiasQuality_4x4       0x00000000
+#define LM_AntialiasQuality_8x8       0x10000000
+
+/* TriangleMode */
+#define TM_AntialiasDisable           0x00000000
+#define TM_AntialiasEnable            0x00000001
+#define TM_AntialiasQuality_4x4       0x00000000
+#define TM_AntialiasQuality_8x8       0x00000002
+#define TM_UseTriPacketInterface      0x00000004
+
+/* TransformMode */
+#define XM_UseModelViewMatrix         0x00000001
+#define XM_UseModelViewProjMatrix     0x00000002
+#define XM_XformNormals               0x00000004
+#define XM_XformFaceNormals           0x00000008
+#define XM_XformTexture               0x00000010
+#define XM_XMask                      0x00000013
+#define XM_TexGenModeS_None           0x00000000
+#define XM_TexGenModeS_ObjLinear      0x00000020
+#define XM_TexGenModeS_EyeLinear      0x00000040
+#define XM_TexGenModeS_SphereMap      0x00000060
+#define XM_TexGenModeT_None           0x00000000
+#define XM_TexGenModeT_ObjLinear      0x00000080
+#define XM_TexGenModeT_EyeLinear      0x00000100
+#define XM_TexGenModeT_SphereMap      0x00000180
+#define XM_TexGenModeR_None           0x00000000
+#define XM_TexGenModeR_ObjLinear      0x00000200
+#define XM_TexGenModeR_EyeLinear      0x00000400
+#define XM_TexGenModeR_SphereMap      0x00000600
+#define XM_TexGenModeQ_None           0x00000000
+#define XM_TexGenModeQ_ObjLinear      0x00000800
+#define XM_TexGenModeQ_EyeLinear      0x00001000
+#define XM_TexGenModeQQSphereMap      0x00001800
+#define XM_TexGenS                    0x00002000
+#define XM_TexGenT                    0x00004000
+#define XM_TexGenR                    0x00008000
+#define XM_TexGenQ                    0x00010000
+
+/* LightNMode */
+#define LNM_Off                       0x00000000
+#define LNM_On                        0x00000001
+/************** GAMMA FLAGS ***************/
+
+#endif /* _GAMMA_REGS_H_ */
diff --git a/src/mesa/drivers/dri/gamma/gamma_render.c b/src/mesa/drivers/dri/gamma/gamma_render.c
new file mode 100644 (file)
index 0000000..b8bf617
--- /dev/null
@@ -0,0 +1,316 @@
+/*
+ * Copyright 2001 by Alan Hourihane.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Alan Hourihane not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission.  Alan Hourihane makes no representations
+ * about the suitability of this software for any purpose.  It is provided
+ * "as is" without express or implied warranty.
+ *
+ * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
+ *
+ * 3DLabs Gamma driver.
+ *
+ */
+
+#include "glheader.h"
+#include "context.h"
+#include "macros.h"
+#include "imports.h"
+#include "mtypes.h"
+
+#include "tnl/t_context.h"
+
+#include "gamma_context.h"
+#include "gamma_tris.h"
+#include "gamma_vb.h"
+
+
+/* !! Should template this eventually !! */
+
+static void gamma_emit( GLcontext *ctx, GLuint start, GLuint end)
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
+   GLfloat (*coord)[4];
+   GLuint coord_stride;
+   GLubyte (*col)[4];
+   GLuint col_stride;
+   int i;
+   GLuint tc0_stride = 0;
+   GLfloat (*tc0)[4] = 0;
+   GLuint tc0_size = 0;
+
+   if (VB->ColorPtr[0]->Type != GL_UNSIGNED_BYTE) 
+      gamma_import_float_colors( ctx );
+   
+   col = VB->ColorPtr[0]->Ptr;
+   col_stride = VB->ColorPtr[0]->StrideB;
+
+   if (ctx->Texture.Unit[0]._ReallyEnabled) {
+      tc0_stride = VB->TexCoordPtr[0]->stride;
+      tc0 = VB->TexCoordPtr[0]->data;
+      tc0_size = VB->TexCoordPtr[0]->size;
+      coord = VB->ClipPtr->data;
+      coord_stride = VB->ClipPtr->stride;
+   } else {
+      coord = VB->NdcPtr->data;
+      coord_stride = VB->NdcPtr->stride;
+   }
+
+   if (VB->importable_data) {
+      if (start) {
+         coord =  (GLfloat (*)[4])((GLubyte *)coord + start * coord_stride);
+         STRIDE_4UB(col, start * col_stride);
+         if (ctx->Texture.Unit[0]._ReallyEnabled)
+           tc0 =  (GLfloat (*)[4])((GLubyte *)tc0 + start * tc0_stride);
+      }
+
+      if (ctx->Texture.Unit[0]._ReallyEnabled && tc0_size == 4) {
+         for (i=start; i < end; i++) {
+           CHECK_DMA_BUFFER(gmesa, 9);
+           WRITEF(gmesa->buf, Tq4, tc0[0][3]);
+           WRITEF(gmesa->buf, Tr4, tc0[0][2]);
+           WRITEF(gmesa->buf, Tt4, tc0[0][0]);
+           WRITEF(gmesa->buf, Ts4, tc0[0][1]);
+           WRITE(gmesa->buf, PackedColor4, *(CARD32*)col[0]);
+           WRITEF(gmesa->buf, Vw, coord[0][3]);
+           WRITEF(gmesa->buf, Vz, coord[0][2]);
+           WRITEF(gmesa->buf, Vy, coord[0][1]);
+           WRITEF(gmesa->buf, Vx4, coord[0][0]);
+           STRIDE_4UB(col, col_stride);            
+           tc0 =  (GLfloat (*)[4])((GLubyte *)tc0 +  tc0_stride);
+           coord =  (GLfloat (*)[4])((GLubyte *)coord +  coord_stride);
+         }
+      } else if (ctx->Texture.Unit[0]._ReallyEnabled && tc0_size == 2) {
+         for (i=start; i < end; i++) {
+           CHECK_DMA_BUFFER(gmesa, 7);
+           WRITEF(gmesa->buf, Tt2, tc0[0][0]);
+           WRITEF(gmesa->buf, Ts2, tc0[0][1]);
+           WRITE(gmesa->buf, PackedColor4, *(CARD32*)col[0]);
+           WRITEF(gmesa->buf, Vw, coord[0][3]);
+           WRITEF(gmesa->buf, Vz, coord[0][2]);
+           WRITEF(gmesa->buf, Vy, coord[0][1]);
+           WRITEF(gmesa->buf, Vx4, coord[0][0]);
+           STRIDE_4UB(col, col_stride);            
+           tc0 =  (GLfloat (*)[4])((GLubyte *)tc0 +  tc0_stride);
+           coord =  (GLfloat (*)[4])((GLubyte *)coord +  coord_stride);
+         }
+      } else {
+         for (i=start; i < end; i++) {
+           CHECK_DMA_BUFFER(gmesa, 4);
+           WRITE(gmesa->buf, PackedColor4, *(CARD32*)col[0]);
+           WRITEF(gmesa->buf, Vz, coord[0][2]);
+           WRITEF(gmesa->buf, Vy, coord[0][1]);
+           WRITEF(gmesa->buf, Vx3, coord[0][0]);
+           STRIDE_4UB(col, col_stride);            
+           coord =  (GLfloat (*)[4])((GLubyte *)coord +  coord_stride);
+         }
+      }
+   } else {
+      if (ctx->Texture.Unit[0]._ReallyEnabled && tc0_size == 4) {
+         for (i=start; i < end; i++) {
+           CHECK_DMA_BUFFER(gmesa, 9);
+           WRITEF(gmesa->buf, Tq4, tc0[i][3]);
+           WRITEF(gmesa->buf, Tr4, tc0[i][2]);
+           WRITEF(gmesa->buf, Tt4, tc0[i][0]);
+           WRITEF(gmesa->buf, Ts4, tc0[i][1]);
+           WRITE(gmesa->buf, PackedColor4, *(CARD32*)col[i]);
+           WRITEF(gmesa->buf, Vw, coord[i][3]);
+           WRITEF(gmesa->buf, Vz, coord[i][2]);
+           WRITEF(gmesa->buf, Vy, coord[i][1]);
+           WRITEF(gmesa->buf, Vx4, coord[i][0]);
+         }
+      } else if (ctx->Texture.Unit[0]._ReallyEnabled && tc0_size == 2) {
+         for (i=start; i < end; i++) {
+           CHECK_DMA_BUFFER(gmesa, 7);
+           WRITEF(gmesa->buf, Tt2, tc0[i][0]);
+           WRITEF(gmesa->buf, Ts2, tc0[i][1]);
+           WRITE(gmesa->buf, PackedColor4, *(CARD32*)col[i]);
+           WRITEF(gmesa->buf, Vw, coord[i][3]);
+           WRITEF(gmesa->buf, Vz, coord[i][2]);
+           WRITEF(gmesa->buf, Vy, coord[i][1]);
+           WRITEF(gmesa->buf, Vx4, coord[i][0]);
+         }
+      } else {
+         for (i=start; i < end; i++) {
+           CHECK_DMA_BUFFER(gmesa, 4);
+           WRITE(gmesa->buf, PackedColor4, *(CARD32*)col[i]);
+           WRITEF(gmesa->buf, Vz, coord[i][2]);
+           WRITEF(gmesa->buf, Vy, coord[i][1]);
+           WRITEF(gmesa->buf, Vx3, coord[i][0]);
+         }
+      }
+   }
+}
+
+#define HAVE_POINTS      1
+#define HAVE_LINES       1
+#define HAVE_LINE_STRIPS 1
+#define HAVE_TRIANGLES   1
+#define HAVE_TRI_STRIPS  1
+#define HAVE_TRI_STRIP_1 0
+#define HAVE_TRI_FANS    1
+#define HAVE_QUADS       1
+#define HAVE_QUAD_STRIPS 1
+#define HAVE_POLYGONS    1
+
+#define HAVE_ELTS        0
+
+static void VERT_FALLBACK( GLcontext *ctx,
+                          GLuint start,
+                          GLuint count,
+                          GLuint flags )
+{
+   TNLcontext *tnl = TNL_CONTEXT(ctx);
+   tnl->Driver.Render.PrimitiveNotify( ctx, flags & PRIM_MODE_MASK );
+   tnl->Driver.Render.BuildVertices( ctx, start, count, ~0 );
+   tnl->Driver.Render.PrimTabVerts[flags&PRIM_MODE_MASK]( ctx, start, count, flags );
+   GAMMA_CONTEXT(ctx)->SetupNewInputs = VERT_BIT_CLIP;
+}
+
+static const GLuint hw_prim[GL_POLYGON+1] = {
+   B_PrimType_Points,
+   B_PrimType_Lines,
+   B_PrimType_LineLoop,
+   B_PrimType_LineStrip,
+   B_PrimType_Triangles,
+   B_PrimType_TriangleStrip,
+   B_PrimType_TriangleFan,
+   B_PrimType_Quads,
+   B_PrimType_QuadStrip,
+   B_PrimType_Polygon
+};
+
+static __inline void gammaStartPrimitive( gammaContextPtr gmesa, GLenum prim )
+{
+   CHECK_DMA_BUFFER(gmesa, 1);
+   WRITE(gmesa->buf, Begin, gmesa->Begin | hw_prim[prim]);
+}
+
+static __inline void gammaEndPrimitive( gammaContextPtr gmesa )
+{
+   GLcontext *ctx = gmesa->glCtx;
+
+   if ( ctx->Line.SmoothFlag || 
+        ctx->Polygon.SmoothFlag || 
+        ctx->Point.SmoothFlag ) {
+      CHECK_DMA_BUFFER(gmesa, 1);
+      WRITE(gmesa->buf, FlushSpan, 0);
+   }
+
+   CHECK_DMA_BUFFER(gmesa, 1);
+   WRITE(gmesa->buf, End, 0);
+}
+
+#define LOCAL_VARS gammaContextPtr gmesa = GAMMA_CONTEXT(ctx)
+#define INIT( prim ) gammaStartPrimitive( gmesa, prim )
+#define FINISH gammaEndPrimitive( gmesa )
+#define NEW_PRIMITIVE()  /* GAMMA_STATECHANGE( gmesa, 0 ) */
+#define NEW_BUFFER()  /* GAMMA_FIREVERTICES( gmesa ) */
+#define GET_CURRENT_VB_MAX_VERTS() \
+  (gmesa->bufSize - gmesa->bufCount) / 2
+#define GET_SUBSEQUENT_VB_MAX_VERTS() \
+  GAMMA_DMA_BUFFER_SIZE / 2
+#define EMIT_VERTS( ctx, j, nr ) gamma_emit(ctx, j, (j)+(nr))
+
+#define TAG(x) gamma_##x
+#include "tnl_dd/t_dd_dmatmp.h"
+
+
+/**********************************************************************/
+/*                          Render pipeline stage                     */
+/**********************************************************************/
+
+
+static GLboolean gamma_run_render( GLcontext *ctx,
+                                 struct gl_pipeline_stage *stage )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   TNLcontext *tnl = TNL_CONTEXT(ctx);
+   struct vertex_buffer *VB = &tnl->vb;
+   GLuint i, length, flags = 0;
+   render_func *tab;
+
+                               /* GH: THIS IS A HACK!!! */
+   if (VB->ClipOrMask || gmesa->RenderIndex != 0)
+      return GL_TRUE;          /* don't handle clipping here */
+
+   /* We don't do elts */
+   if (VB->Elts)
+      return GL_TRUE;
+
+   tab = TAG(render_tab_verts);
+
+   tnl->Driver.Render.Start( ctx );
+
+   for (i = VB->FirstPrimitive ; !(flags & PRIM_LAST) ; i += length)
+   {
+      flags = VB->Primitive[i];
+      length = VB->PrimitiveLength[i];
+      if (length)
+        tab[flags & PRIM_MODE_MASK]( ctx, i, i + length, flags );
+   }
+
+   tnl->Driver.Render.Finish( ctx );
+
+   return GL_FALSE;            /* finished the pipe */
+}
+
+
+static void gamma_check_render( GLcontext *ctx,
+                                struct gl_pipeline_stage *stage )
+{
+   GLuint inputs = VERT_BIT_CLIP | VERT_BIT_COLOR0;
+
+   if (ctx->RenderMode == GL_RENDER) {
+      if (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR)
+        inputs |= VERT_BIT_COLOR1;
+
+      if (ctx->Texture.Unit[0]._ReallyEnabled)
+        inputs |= VERT_BIT_TEX0;
+
+      if (ctx->Texture.Unit[1]._ReallyEnabled)
+        inputs |= VERT_BIT_TEX1;
+
+      if (ctx->Fog.Enabled)
+        inputs |= VERT_BIT_FOG;
+   }
+
+   stage->inputs = inputs;
+}
+
+
+static void dtr( struct gl_pipeline_stage *stage )
+{
+   (void)stage;
+}
+
+
+const struct gl_pipeline_stage _gamma_render_stage =
+{
+   "gamma render",
+   (_DD_NEW_SEPARATE_SPECULAR |
+    _NEW_TEXTURE|
+    _NEW_FOG|
+    _NEW_RENDERMODE),          /* re-check (new inputs) */
+   0,                          /* re-run (always runs) */
+   GL_TRUE,                    /* active */
+   0, 0,                       /* inputs (set in check_render), outputs */
+   0, 0,                       /* changed_inputs, private */
+   dtr,                                /* destructor */
+   gamma_check_render,         /* check - initially set to alloc data */
+   gamma_run_render            /* run */
+};
diff --git a/src/mesa/drivers/dri/gamma/gamma_screen.c b/src/mesa/drivers/dri/gamma/gamma_screen.c
new file mode 100644 (file)
index 0000000..bc6b254
--- /dev/null
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2001 by Alan Hourihane.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Alan Hourihane not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission.  Alan Hourihane makes no representations
+ * about the suitability of this software for any purpose.  It is provided
+ * "as is" without express or implied warranty.
+ *
+ * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
+ *
+ */
+
+#include "gamma_context.h"
+#include "gamma_vb.h"
+#include "glint_dri.h"
+
+#include "imports.h"
+
+gammaScreenPtr gammaCreateScreen( __DRIscreenPrivate *sPriv )
+{
+   gammaScreenPtr gammaScreen;
+   GLINTDRIPtr gDRIPriv = (GLINTDRIPtr)sPriv->pDevPriv;
+   int i;
+
+#if 0
+   /* Check the DRI externsion version */
+   if ( sPriv->driMajor != 3 || sPriv->driMinor != 1 ) {
+      __driUtilMessage( "Gamma DRI driver expected DRI version 4.0.x "
+                        "but got version %d.%d.%d",
+                        sPriv->driMajor, sPriv->driMinor, sPriv->driPatch );
+      return NULL;
+   }
+
+   /* Check that the DDX driver version is compatible */
+   if ( sPriv->ddxMajor != 4 ||
+       sPriv->ddxMinor != 0 ||
+       sPriv->ddxPatch < 0 ) {
+      __driUtilMessage( "r128 DRI driver expected DDX driver version 4.0.x but got version %d.%d.%d", sPriv->ddxMajor, sPriv->ddxMinor, sPriv->ddxPatch );
+      return GL_FALSE;
+   }
+
+   /* Check that the DRM driver version is compatible */
+   if ( sPriv->drmMajor != 2 ||
+       sPriv->drmMinor != 1 ||
+       sPriv->drmPatch < 0 ) {
+      __driUtilMessage( "r128 DRI driver expected DRM driver version 2.1.x but got version %d.%d.%d", sPriv->drmMajor, sPriv->drmMinor, sPriv->drmPatch );
+      return GL_FALSE;
+   }
+#endif
+
+    /* Allocate the private area */
+    gammaScreen = (gammaScreenPtr) CALLOC( sizeof(*gammaScreen) );
+    if ( !gammaScreen ) return NULL;
+
+    gammaScreen->regionCount  = 4;     /* Magic number.  Can we fix this? */
+    
+    gammaScreen->regions = CALLOC(gammaScreen->regionCount * 
+                                                       sizeof(gammaRegion));
+
+    gammaScreen->regions[0].handle = gDRIPriv->registers0.handle;
+    gammaScreen->regions[0].size   = gDRIPriv->registers0.size;
+    gammaScreen->regions[1].handle = gDRIPriv->registers1.handle;
+    gammaScreen->regions[1].size   = gDRIPriv->registers1.size;
+    gammaScreen->regions[2].handle = gDRIPriv->registers2.handle;
+    gammaScreen->regions[2].size   = gDRIPriv->registers2.size;
+    gammaScreen->regions[3].handle = gDRIPriv->registers3.handle;
+    gammaScreen->regions[3].size   = gDRIPriv->registers3.size;
+    
+    /* Next, map all the regions */
+    for (i = 0; i < gammaScreen->regionCount; i++) {
+       if (drmMap(sPriv->fd,
+                  gammaScreen->regions[i].handle,
+                  gammaScreen->regions[i].size,
+                  &gammaScreen->regions[i].map)) {
+           while (--i > 0) {
+               (void)drmUnmap(gammaScreen->regions[i].map, 
+                              gammaScreen->regions[i].size);
+           }
+           return GL_FALSE;
+       }
+    }
+
+    /* Get the list of dma buffers */
+    gammaScreen->bufs = drmMapBufs(sPriv->fd);
+
+    if (!gammaScreen->bufs) {
+       while (gammaScreen->regionCount > 0) {
+           (void)drmUnmap(gammaScreen->regions[gammaScreen->regionCount].map,
+                          gammaScreen->regions[gammaScreen->regionCount].size);
+           gammaScreen->regionCount--;
+       }
+       return GL_FALSE;
+    }
+
+   gammaScreen->textureSize    = gDRIPriv->textureSize;
+   gammaScreen->logTextureGranularity = gDRIPriv->logTextureGranularity;
+   gammaScreen->cpp = gDRIPriv->cpp;
+   gammaScreen->frontOffset    = gDRIPriv->frontOffset;
+   gammaScreen->frontPitch     = gDRIPriv->frontPitch;
+   gammaScreen->backOffset     = gDRIPriv->backOffset;
+   gammaScreen->backPitch      = gDRIPriv->backPitch;
+   gammaScreen->backX          = gDRIPriv->backX;
+   gammaScreen->backY          = gDRIPriv->backY;
+   gammaScreen->depthOffset    = gDRIPriv->depthOffset;
+   gammaScreen->depthPitch     = gDRIPriv->depthPitch;
+
+   gammaScreen->driScreen = sPriv;
+
+   return gammaScreen;
+}
+
+/* Destroy the device specific screen private data struct.
+ */
+void gammaDestroyScreen( __DRIscreenPrivate *sPriv )
+{
+    gammaScreenPtr gammaScreen = (gammaScreenPtr)sPriv->private;
+
+    /* First, unmap the dma buffers */
+    drmUnmapBufs( gammaScreen->bufs );
+
+    /* Next, unmap all the regions */
+    while (gammaScreen->regionCount > 0) {
+       (void)drmUnmap(gammaScreen->regions[gammaScreen->regionCount].map,
+                      gammaScreen->regions[gammaScreen->regionCount].size);
+       gammaScreen->regionCount--;
+    }
+    FREE(gammaScreen->regions);
+    FREE(gammaScreen);
+}
diff --git a/src/mesa/drivers/dri/gamma/gamma_screen.h b/src/mesa/drivers/dri/gamma/gamma_screen.h
new file mode 100644 (file)
index 0000000..6f3cf1e
--- /dev/null
@@ -0,0 +1,30 @@
+typedef struct _gammaRegion {
+    drmHandle  handle;
+    drmSize    size;
+    drmAddress map;
+} gammaRegion, *gammaRegionPtr;
+
+typedef struct {
+
+    int           regionCount;       /* Count of register regions */
+    gammaRegion  *regions;           /* Vector of mapped region info */
+
+    drmBufMapPtr  bufs;              /* Map of DMA buffers */
+
+    __DRIscreenPrivate *driScreen; /* Back pointer to DRI screen */
+
+    int                cpp;
+    int                frontPitch;
+    int                frontOffset;
+
+    int                backPitch;
+    int                backOffset;
+    int                backX;
+    int                backY;
+
+    int                depthOffset;
+    int                depthPitch;
+
+    int                textureSize;
+    int                logTextureGranularity;
+} gammaScreenRec, *gammaScreenPtr;
diff --git a/src/mesa/drivers/dri/gamma/gamma_span.c b/src/mesa/drivers/dri/gamma/gamma_span.c
new file mode 100644 (file)
index 0000000..8d523c4
--- /dev/null
@@ -0,0 +1,342 @@
+/* $XFree86: xc/lib/GL/mesa/src/drv/gamma/gamma_span.c,v 1.4 2002/11/05 17:46:07 tsi Exp $ */
+
+#include "gamma_context.h"
+#include "gamma_lock.h"
+#include "colormac.h"
+
+#include "swrast/swrast.h"
+
+#define DBG 0
+
+#define LOCAL_VARS                                                     \
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);                         \
+   gammaScreenPtr gammascrn = gmesa->gammaScreen;                      \
+   __DRIscreenPrivate *sPriv = gmesa->driScreen;                       \
+   __DRIdrawablePrivate *dPriv = gmesa->driDrawable;                   \
+   GLuint pitch = sPriv->fbWidth * gammascrn->cpp;             \
+   GLuint height = dPriv->h;                                           \
+   char *buf = (char *)(sPriv->pFB +                                   \
+                       gmesa->drawOffset +                             \
+                       (dPriv->x * gammascrn->cpp) +                   \
+                       (dPriv->y * pitch));                            \
+   char *read_buf = (char *)(sPriv->pFB +                              \
+                            gmesa->readOffset +                        \
+                            (dPriv->x * gammascrn->cpp) +              \
+                            (dPriv->y * pitch));                       \
+   GLuint p;                                                           \
+   (void) read_buf; (void) buf; (void) p
+
+/* FIXME! Depth/Stencil read/writes don't work ! */
+#define LOCAL_DEPTH_VARS                               \
+   gammaScreenPtr gammascrn = gmesa->gammaScreen;      \
+   __DRIdrawablePrivate *dPriv = gmesa->driDrawable;   \
+   __DRIscreenPrivate *sPriv = gmesa->driScreen;       \
+   GLuint pitch = gammascrn->depthPitch;               \
+   GLuint height = dPriv->h;                           \
+   char *buf = (char *)(sPriv->pFB +                   \
+                       gammascrn->depthOffset +        \
+                       dPriv->x * gammascrn->cpp +     \
+                       dPriv->y * pitch)
+
+#define LOCAL_STENCIL_VARS     LOCAL_DEPTH_VARS
+
+
+#define CLIPPIXEL( _x, _y )                                            \
+   ((_x >= minx) && (_x < maxx) && (_y >= miny) && (_y < maxy))
+
+
+#define CLIPSPAN( _x, _y, _n, _x1, _n1, _i )                           \
+   if ( _y < miny || _y >= maxy ) {                                    \
+      _n1 = 0, _x1 = x;                                                        \
+   } else {                                                            \
+      _n1 = _n;                                                                \
+      _x1 = _x;                                                                \
+      if ( _x1 < minx ) _i += (minx-_x1), n1 -= (minx-_x1), _x1 = minx; \
+      if ( _x1 + _n1 >= maxx ) n1 -= (_x1 + n1 - maxx);                        \
+   }
+
+#define Y_FLIP( _y )           (height - _y - 1)
+
+#define HW_LOCK()                                                      \
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);                         \
+   FLUSH_DMA_BUFFER(gmesa);                                            \
+   gammaGetLock( gmesa, DRM_LOCK_FLUSH | DRM_LOCK_QUIESCENT );         \
+   GAMMAHW_LOCK( gmesa );
+
+#define HW_CLIPLOOP()                                                  \
+   do {                                                                        \
+      __DRIdrawablePrivate *dPriv = gmesa->driDrawable;                        \
+      int _nc = dPriv->numClipRects;                                   \
+                                                                       \
+      while ( _nc-- ) {                                                        \
+        int minx = dPriv->pClipRects[_nc].x1 - dPriv->x;               \
+        int miny = dPriv->pClipRects[_nc].y1 - dPriv->y;               \
+        int maxx = dPriv->pClipRects[_nc].x2 - dPriv->x;               \
+        int maxy = dPriv->pClipRects[_nc].y2 - dPriv->y;
+
+#define HW_ENDCLIPLOOP()                                               \
+      }                                                                        \
+   } while (0)
+
+#define HW_UNLOCK() GAMMAHW_UNLOCK( gmesa )
+
+
+
+/* ================================================================
+ * Color buffer
+ */
+
+/* 16 bit, RGB565 color spanline and pixel functions
+ */
+#define INIT_MONO_PIXEL(p, color) \
+  p = PACK_COLOR_565( color[0], color[1], color[2] )
+
+#define WRITE_RGBA( _x, _y, r, g, b, a )                               \
+   *(GLushort *)(buf + _x*2 + _y*pitch) = ((((int)r & 0xf8) << 8) |    \
+                                          (((int)g & 0xfc) << 3) |     \
+                                          (((int)b & 0xf8) >> 3))
+
+#define WRITE_PIXEL( _x, _y, p )                                       \
+   *(GLushort *)(buf + _x*2 + _y*pitch) = p
+
+#define READ_RGBA( rgba, _x, _y )                                      \
+   do {                                                                        \
+      GLushort p = *(GLushort *)(read_buf + _x*2 + _y*pitch);          \
+      rgba[0] = (p >> 8) & 0xf8;                                       \
+      rgba[1] = (p >> 3) & 0xfc;                                       \
+      rgba[2] = (p << 3) & 0xf8;                                       \
+      rgba[3] = 0xff;                                                  \
+      if ( rgba[0] & 0x08 ) rgba[0] |= 0x07;                           \
+      if ( rgba[1] & 0x04 ) rgba[1] |= 0x03;                           \
+      if ( rgba[2] & 0x08 ) rgba[2] |= 0x07;                           \
+   } while (0)
+
+#define TAG(x) gamma##x##_RGB565
+#include "spantmp.h"
+
+
+/* 32 bit, ARGB8888 color spanline and pixel functions
+ */
+
+#undef INIT_MONO_PIXEL
+#define INIT_MONO_PIXEL(p, color) \
+  p = PACK_COLOR_8888( color[3], color[0], color[1], color[2] )
+
+#define WRITE_RGBA( _x, _y, r, g, b, a )                               \
+   *(GLuint *)(buf + _x*4 + _y*pitch) = ((b <<  0) |                   \
+                                        (g <<  8) |                    \
+                                        (r << 16) |                    \
+                                        (a << 24) )
+
+#define WRITE_PIXEL( _x, _y, p )                                       \
+   *(GLuint *)(buf + _x*4 + _y*pitch) = p
+
+#define READ_RGBA( rgba, _x, _y )                                      \
+do {                                                                   \
+   GLuint p = *(GLuint *)(read_buf + _x*4 + _y*pitch);                 \
+   rgba[0] = (p >> 16) & 0xff;                                         \
+   rgba[1] = (p >>  8) & 0xff;                                         \
+   rgba[2] = (p >>  0) & 0xff;                                         \
+   rgba[3] = (p >> 24) & 0xff;                                         \
+} while (0)
+
+#define TAG(x) gamma##x##_ARGB8888
+#include "spantmp.h"
+
+
+/* 16 bit depthbuffer functions.
+ */
+#define WRITE_DEPTH( _x, _y, d )       \
+   *(GLushort *)(buf + _x*2 + _y*pitch) = d;
+
+#define READ_DEPTH( d, _x, _y )                \
+   d = *(GLushort *)(buf + _x*2 + _y*pitch);   
+
+#define TAG(x) gamma##x##_16
+#include "depthtmp.h"
+
+
+
+#if 0 /* Unused */
+/* 32 bit depthbuffer functions.
+ */
+#define WRITE_DEPTH( _x, _y, d )       \
+   *(GLuint *)(buf + _x*4 + _y*pitch) = d;
+
+#define READ_DEPTH( d, _x, _y )                \
+   d = *(GLuint *)(buf + _x*4 + _y*pitch);     
+
+#define TAG(x) gamma##x##_32
+#include "depthtmp.h"
+#endif
+
+
+/* 24/8 bit interleaved depth/stencil functions
+ */
+#define WRITE_DEPTH( _x, _y, d ) {                     \
+   GLuint tmp = *(GLuint *)(buf + _x*4 + _y*pitch);    \
+   tmp &= 0xff;                                                \
+   tmp |= (d) & 0xffffff00;                            \
+   *(GLuint *)(buf + _x*4 + _y*pitch) = tmp;           \
+}
+
+#define READ_DEPTH( d, _x, _y )                \
+   d = *(GLuint *)(buf + _x*4 + _y*pitch) & ~0xff;     
+
+
+#define TAG(x) gamma##x##_24_8
+#include "depthtmp.h"
+
+#if 0
+#define WRITE_STENCIL( _x, _y, d ) {                   \
+   GLuint tmp = *(GLuint *)(buf + _x*4 + _y*pitch);    \
+   tmp &= 0xffffff00;                                  \
+   tmp |= d & 0xff;                                    \
+   *(GLuint *)(buf + _x*4 + _y*pitch) = tmp;           \
+}
+
+#define READ_STENCIL( d, _x, _y )              \
+   d = *(GLuint *)(buf + _x*4 + _y*pitch) & 0xff;      
+
+#define TAG(x) gamma##x##_24_8
+#include "stenciltmp.h"
+
+static void gammaReadRGBASpan8888( const GLcontext *ctx,
+                              GLuint n, GLint x, GLint y,
+                              GLubyte rgba[][4])
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   gammaScreenPtr gammascrn = gmesa->gammaScreen;
+   CARD32 dwords1, dwords2, i = 0;
+   char *src = (char *)rgba[0];
+   GLuint read = n * gammascrn->cpp; /* Number of bytes we are expecting */
+   CARD32 data;
+
+   FLUSH_DMA_BUFFER(gmesa);
+   CHECK_DMA_BUFFER(gmesa, 16);
+   WRITE(gmesa->buf, LBReadMode, gmesa->LBReadMode & ~(LBReadSrcEnable | LBReadDstEnable));
+   WRITE(gmesa->buf, ColorDDAMode, ColorDDAEnable);
+   WRITE(gmesa->buf, LBWriteMode, LBWriteModeDisable);
+   WRITE(gmesa->buf, FBReadMode, (gmesa->FBReadMode & ~FBReadSrcEnable) | FBReadDstEnable | FBDataTypeColor);
+   WRITE(gmesa->buf, FilterMode, 0x200); /* Pass FBColorData */
+   WRITE(gmesa->buf, FBWriteMode, FBW_UploadColorData | FBWriteModeDisable);
+   WRITE(gmesa->buf, StartXSub, (x+n)<<16);
+   WRITE(gmesa->buf, StartXDom, x<<16);
+   WRITE(gmesa->buf, StartY, y<<16);
+   WRITE(gmesa->buf, GLINTCount, 1);
+   WRITE(gmesa->buf, dXDom, 0<<16);
+   WRITE(gmesa->buf, dXSub, 0<<16);
+   WRITE(gmesa->buf, dY, 1<<16);
+   WRITE(gmesa->buf, Render, PrimitiveTrapezoid);
+   FLUSH_DMA_BUFFER(gmesa);
+
+moredata:
+
+   dwords1 = *(volatile CARD32*)(void *)(((CARD8*)gammascrn->regions[0].map) + (GlintOutFIFOWords));
+   dwords2 = *(volatile CARD32*)(void *)(((CARD8*)gammascrn->regions[2].map) + (GlintOutFIFOWords));
+
+   if (dwords1) {
+       memcpy(src, (char*)gammascrn->regions[1].map + 0x1000, dwords1 << 2);
+       src += dwords1 << 2;
+       read -= dwords1 << 2;
+   }
+   if (dwords2) {
+       memcpy(src, (char*)gammascrn->regions[3].map + 0x1000, dwords2 << 2);
+       src += dwords2 << 2;
+       read -= dwords2 << 2;
+   }
+
+   if (read)
+       goto moredata;
+
+done:
+
+   CHECK_DMA_BUFFER(gmesa, 6);
+   WRITE(gmesa->buf, ColorDDAMode, gmesa->ColorDDAMode);
+   WRITE(gmesa->buf, LBWriteMode, LBWriteModeEnable);
+   WRITE(gmesa->buf, LBReadMode, gmesa->LBReadMode);
+   WRITE(gmesa->buf, FBReadMode, gmesa->FBReadMode);
+   WRITE(gmesa->buf, FBWriteMode, FBWriteModeEnable);
+   WRITE(gmesa->buf, FilterMode, 0x400);
+}
+#endif
+
+static void gammaSetBuffer( GLcontext *ctx,
+                            GLframebuffer *colorBuffer,
+                            GLuint bufferBit )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   switch ( bufferBit ) {
+   case FRONT_LEFT_BIT:
+      gmesa->readOffset = 0;
+      break;
+   case BACK_LEFT_BIT:
+      gmesa->readOffset = gmesa->driScreen->fbHeight * gmesa->driScreen->fbWidth * gmesa->gammaScreen->cpp; 
+      break;
+   }
+}
+
+
+void gammaDDInitSpanFuncs( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   struct swrast_device_driver *swdd = _swrast_GetDeviceDriverReference(ctx);
+
+   swdd->SetBuffer = gammaSetBuffer;
+
+   switch ( gmesa->gammaScreen->cpp ) {
+   case 2:
+      swdd->WriteRGBASpan      = gammaWriteRGBASpan_RGB565;
+      swdd->WriteRGBSpan       = gammaWriteRGBSpan_RGB565;
+      swdd->WriteMonoRGBASpan  = gammaWriteMonoRGBASpan_RGB565;
+      swdd->WriteRGBAPixels    = gammaWriteRGBAPixels_RGB565;
+      swdd->WriteMonoRGBAPixels        = gammaWriteMonoRGBAPixels_RGB565;
+      swdd->ReadRGBASpan       = gammaReadRGBASpan_RGB565;
+      swdd->ReadRGBAPixels      = gammaReadRGBAPixels_RGB565;
+      break;
+
+   case 4:
+      swdd->WriteRGBASpan      = gammaWriteRGBASpan_ARGB8888;
+      swdd->WriteRGBSpan       = gammaWriteRGBSpan_ARGB8888;
+      swdd->WriteMonoRGBASpan   = gammaWriteMonoRGBASpan_ARGB8888;
+      swdd->WriteRGBAPixels     = gammaWriteRGBAPixels_ARGB8888;
+      swdd->WriteMonoRGBAPixels = gammaWriteMonoRGBAPixels_ARGB8888;
+#if 1
+      swdd->ReadRGBASpan       = gammaReadRGBASpan_ARGB8888;
+#else
+      swdd->ReadRGBASpan       = gammaReadRGBASpan8888;
+#endif
+      swdd->ReadRGBAPixels      = gammaReadRGBAPixels_ARGB8888;
+      break;
+
+   default:
+      break;
+   }
+
+   switch ( gmesa->glCtx->Visual.depthBits ) {
+   case 16:
+      swdd->ReadDepthSpan      = gammaReadDepthSpan_16;
+      swdd->WriteDepthSpan     = gammaWriteDepthSpan_16;
+      swdd->ReadDepthPixels    = gammaReadDepthPixels_16;
+      swdd->WriteDepthPixels   = gammaWriteDepthPixels_16;
+      break;
+
+   case 24:
+      swdd->ReadDepthSpan      = gammaReadDepthSpan_24_8;
+      swdd->WriteDepthSpan     = gammaWriteDepthSpan_24_8;
+      swdd->ReadDepthPixels    = gammaReadDepthPixels_24_8;
+      swdd->WriteDepthPixels   = gammaWriteDepthPixels_24_8;
+
+#if 0
+      swdd->ReadStencilSpan    = gammaReadStencilSpan_24_8;
+      swdd->WriteStencilSpan   = gammaWriteStencilSpan_24_8;
+      swdd->ReadStencilPixels  = gammaReadStencilPixels_24_8;
+      swdd->WriteStencilPixels = gammaWriteStencilPixels_24_8;
+#endif
+      break;
+
+   default:
+      break;
+   }
+}
diff --git a/src/mesa/drivers/dri/gamma/gamma_state.c b/src/mesa/drivers/dri/gamma/gamma_state.c
new file mode 100644 (file)
index 0000000..8a76720
--- /dev/null
@@ -0,0 +1,1734 @@
+/* $XFree86: xc/lib/GL/mesa/src/drv/gamma/gamma_state.c,v 1.5 2002/11/05 17:46:07 tsi Exp $ */
+/*
+ * Copyright 2001 by Alan Hourihane.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Alan Hourihane not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission.  Alan Hourihane makes no representations
+ * about the suitability of this software for any purpose.  It is provided
+ * "as is" without express or implied warranty.
+ *
+ * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
+ *
+ * 3DLabs Gamma driver
+ */
+
+#include "gamma_context.h"
+#include "gamma_macros.h"
+#include "macros.h"
+#include "glint_dri.h"
+#include "colormac.h"
+#include "swrast/swrast.h"
+#include "swrast_setup/swrast_setup.h"
+#include "array_cache/acache.h"
+#include "tnl/tnl.h"
+
+#define ENABLELIGHTING 0
+
+/* =============================================================
+ * Alpha blending
+ */
+
+static void gammaUpdateAlphaMode( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   CARD32 a = gmesa->AlphaTestMode;
+   CARD32 b = gmesa->AlphaBlendMode;
+   CARD32 f = gmesa->AB_FBReadMode_Save = 0;
+   GLubyte refByte = (GLint) (ctx->Color.AlphaRef * 255.0);
+
+   a &= ~(AT_CompareMask | AT_RefValueMask);
+   b &= ~(AB_SrcBlendMask | AB_DstBlendMask);
+
+   a |= refByte << 4;
+
+   switch ( ctx->Color.AlphaFunc ) {
+      case GL_NEVER:
+        a |= AT_Never;
+        break;
+      case GL_LESS:
+        a |= AT_Less;
+         break;
+      case GL_EQUAL:
+        a |= AT_Equal;
+        break;
+      case GL_LEQUAL:
+        a |= AT_LessEqual;
+        break;
+      case GL_GEQUAL:
+        a |= AT_GreaterEqual;
+        break;
+      case GL_GREATER:
+        a |= AT_Greater;
+        break;
+      case GL_NOTEQUAL:
+        a |= AT_NotEqual;
+        break;
+      case GL_ALWAYS:
+        a |= AT_Always;
+        break;
+   }
+
+   if ( ctx->Color.AlphaEnabled ) {
+      f |= FBReadDstEnable;
+      a |= AlphaTestModeEnable;
+   } else {
+      a &= ~AlphaTestModeEnable;
+   }
+
+   switch ( ctx->Color.BlendSrcRGB ) {
+      case GL_ZERO:
+        b |= AB_Src_Zero; 
+        break;
+      case GL_ONE:
+        b |= AB_Src_One;
+        break;
+      case GL_DST_COLOR:
+        b |= AB_Src_DstColor;
+        break;
+      case GL_ONE_MINUS_DST_COLOR:
+        b |= AB_Src_OneMinusDstColor;
+        break;
+      case GL_SRC_ALPHA:
+        b |= AB_Src_SrcAlpha;
+        break;
+      case GL_ONE_MINUS_SRC_ALPHA:
+        b |= AB_Src_OneMinusSrcAlpha;
+        break;
+      case GL_DST_ALPHA:
+        b |= AB_Src_DstAlpha;
+         f |= FBReadSrcEnable;
+        break;
+      case GL_ONE_MINUS_DST_ALPHA:
+        b |= AB_Src_OneMinusDstAlpha;
+         f |= FBReadSrcEnable;
+        break;
+      case GL_SRC_ALPHA_SATURATE:
+        b |= AB_Src_SrcAlphaSaturate;
+        break;
+   }
+
+   switch ( ctx->Color.BlendDstRGB ) {
+      case GL_ZERO:
+        b |= AB_Dst_Zero;
+        break;
+      case GL_ONE:
+        b |= AB_Dst_One;
+        break;
+      case GL_SRC_COLOR:
+        b |= AB_Dst_SrcColor;
+        break;
+      case GL_ONE_MINUS_SRC_COLOR:
+        b |= AB_Dst_OneMinusSrcColor;
+        break;
+      case GL_SRC_ALPHA:
+        b |= AB_Dst_SrcAlpha;
+        break;
+      case GL_ONE_MINUS_SRC_ALPHA:
+        b |= AB_Dst_OneMinusSrcAlpha;
+        break;
+      case GL_DST_ALPHA:
+        b |= AB_Dst_DstAlpha;
+         f |= FBReadSrcEnable;
+        break;
+      case GL_ONE_MINUS_DST_ALPHA:
+        b |= AB_Dst_OneMinusDstAlpha;
+         f |= FBReadSrcEnable;
+        break;
+   }
+
+   if ( ctx->Color.BlendEnabled ) {
+      f |= FBReadDstEnable;
+      b |= AlphaBlendModeEnable;
+   } else {
+      b &= ~AlphaBlendModeEnable;
+   }
+
+   if ( gmesa->AlphaTestMode != a ) {
+      gmesa->AlphaTestMode = a;
+      gmesa->dirty |= GAMMA_UPLOAD_ALPHA;
+   }
+   if ( gmesa->AlphaBlendMode != b) {
+      gmesa->AlphaBlendMode = b;
+      gmesa->dirty |= GAMMA_UPLOAD_BLEND;
+   }
+   gmesa->AB_FBReadMode_Save = f;
+}
+
+static void gammaDDAlphaFunc( GLcontext *ctx, GLenum func, GLfloat ref )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   (void) ref;
+
+   FLUSH_BATCH( gmesa );
+
+   gmesa->new_state |= GAMMA_NEW_ALPHA;
+}
+
+static void gammaDDBlendEquation( GLcontext *ctx, GLenum mode )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   FLUSH_BATCH( gmesa );
+
+   gmesa->new_state |= GAMMA_NEW_ALPHA;
+}
+
+static void gammaDDBlendFunc( GLcontext *ctx, GLenum sfactor, GLenum dfactor )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   FLUSH_BATCH( gmesa );
+
+   gmesa->new_state |= GAMMA_NEW_ALPHA;
+}
+
+static void gammaDDBlendFuncSeparate( GLcontext *ctx,
+                                    GLenum sfactorRGB, GLenum dfactorRGB,
+                                    GLenum sfactorA, GLenum dfactorA )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   FLUSH_BATCH( gmesa );
+
+   gmesa->new_state |= GAMMA_NEW_ALPHA;
+}
+
+
+/* ================================================================
+ * Buffer clear
+ */
+
+static void gammaDDClear( GLcontext *ctx, GLbitfield mask, GLboolean all,
+                              GLint cx, GLint cy, GLint cw, GLint ch )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   GLINTDRIPtr gDRIPriv = (GLINTDRIPtr)gmesa->driScreen->pDevPriv;
+   GLuint temp = 0;
+
+   FLUSH_BATCH( gmesa );
+
+   /* Update and emit any new state.  We need to do this here to catch
+    * changes to the masks.
+    * FIXME: Just update the masks?
+    */
+   if ( gmesa->new_state )
+      gammaDDUpdateHWState( ctx );
+
+#ifdef DO_VALIDATE
+    /* Flush any partially filled buffers */
+    FLUSH_DMA_BUFFER(gmesa);
+
+    DRM_SPINLOCK(&gmesa->driScreen->pSAREA->drawable_lock,
+                gmesa->driScreen->drawLockID);
+    VALIDATE_DRAWABLE_INFO_NO_LOCK(gmesa);
+#endif
+
+    if (mask & DD_DEPTH_BIT) {
+        /* Turn off writes the FB */
+        CHECK_DMA_BUFFER(gmesa, 1);
+        WRITE(gmesa->buf, FBWriteMode, FBWriteModeDisable);
+
+        mask &= ~DD_DEPTH_BIT;
+
+        /*
+         * Turn Rectangle2DControl off when the window is not clipped
+         * (i.e., the GID tests are not necessary).  This dramatically
+         * increases the performance of the depth clears.
+         */
+        if (!gmesa->NotClipped) {
+           CHECK_DMA_BUFFER(gmesa, 1);
+           WRITE(gmesa->buf, Rectangle2DControl, 1);
+        }
+
+        temp = (gmesa->LBReadMode & LBPartialProdMask) | LBWindowOriginBot;
+        if (gDRIPriv->numMultiDevices == 2) temp |= LBScanLineInt2;
+        
+        CHECK_DMA_BUFFER(gmesa, 5);
+        WRITE(gmesa->buf, LBReadMode, temp);
+        WRITE(gmesa->buf, DeltaMode, DM_DepthEnable);
+        WRITE(gmesa->buf, DepthMode, (DepthModeEnable |
+                                       DM_Always |
+                                       DM_SourceDepthRegister |
+                                       DM_WriteMask));
+        WRITE(gmesa->buf, GLINTDepth, gmesa->ClearDepth);
+
+        /* Increment the frame count */
+        gmesa->FrameCount++;
+#ifdef FAST_CLEAR_4
+        gmesa->FrameCount &= 0x0f;
+#else
+        gmesa->FrameCount &= 0xff;
+#endif
+
+        /* Force FCP to be written */
+        WRITE(gmesa->buf, GLINTWindow, (WindowEnable |
+                                         W_PassIfEqual |
+                                         (gmesa->Window & W_GIDMask) |
+                                         W_DepthFCP |
+                                         W_LBUpdateFromRegisters |
+                                         W_OverrideWriteFiltering |
+                                         (gmesa->FrameCount << 9)));
+
+       /* Clear part of the depth and FCP buffers */
+       {
+           int y = gmesa->driScreen->fbHeight - gmesa->driDrawable->y - gmesa->driDrawable->h;
+           int x = gmesa->driDrawable->x;
+           int w = gmesa->driDrawable->w;
+           int h = gmesa->driDrawable->h;
+#ifndef TURN_OFF_FCP
+           float hsub = h;
+
+           if (gmesa->WindowChanged) {
+               gmesa->WindowChanged = GL_FALSE;
+           } else {
+#ifdef FAST_CLEAR_4
+               hsub /= 16;
+#else
+               hsub /= 256;
+#endif
+
+               /* Handle the case where the height < # of FCPs */
+               if (hsub < 1.0) {
+                   if (gmesa->FrameCount > h)
+                       gmesa->FrameCount = 0;
+                   h = 1;
+                   y += gmesa->FrameCount;
+               } else {
+                   h = (gmesa->FrameCount+1)*hsub;
+                   h -= (int)(gmesa->FrameCount*hsub);
+                   y += gmesa->FrameCount*hsub;
+               }
+           }
+#endif
+           if (h && w) {
+#if 0
+               CHECK_DMA_BUFFER(gmesa, 2);
+               WRITE(gmesa->buf, Rectangle2DMode, ((h & 0xfff)<<12) |
+                                                  (w & 0xfff) );
+               WRITE(gmesa->buf, DrawRectangle2D, ((y & 0xffff)<<16) |
+                                                  (x & 0xffff) );
+#else
+               CHECK_DMA_BUFFER(gmesa, 8);
+               WRITE(gmesa->buf, StartXDom,   x<<16);
+               WRITE(gmesa->buf, StartY,      y<<16);
+               WRITE(gmesa->buf, StartXSub,   (x+w)<<16);
+               WRITE(gmesa->buf, GLINTCount,  h);
+               WRITE(gmesa->buf, dY,          1<<16);
+               WRITE(gmesa->buf, dXDom,       0<<16);
+               WRITE(gmesa->buf, dXSub,       0<<16);
+               WRITE(gmesa->buf, Render,      0x00000040); /* NOT_DONE */
+#endif
+           }
+       }
+
+       CHECK_DMA_BUFFER(gmesa, 6);
+       WRITE(gmesa->buf, DepthMode, gmesa->DepthMode);
+       WRITE(gmesa->buf, DeltaMode, gmesa->DeltaMode);
+       WRITE(gmesa->buf, LBReadMode, gmesa->LBReadMode);
+       WRITE(gmesa->buf, GLINTWindow, gmesa->Window);
+       WRITE(gmesa->buf, FastClearDepth, gmesa->ClearDepth);
+       WRITE(gmesa->buf, FBWriteMode, FBWriteModeEnable);
+
+       /* Turn on Depth FCP */
+       if (gmesa->Window & W_DepthFCP) {
+           CHECK_DMA_BUFFER(gmesa, 1);
+           WRITE(gmesa->buf, WindowOr, (gmesa->FrameCount << 9));
+       }
+
+       /* Turn off GID clipping if window is not clipped */
+       if (gmesa->NotClipped) {
+           CHECK_DMA_BUFFER(gmesa, 1);
+           WRITE(gmesa->buf, Rectangle2DControl, 0);
+       }
+    }
+
+    if (mask & (DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT)) {
+       int y = gmesa->driScreen->fbHeight - gmesa->driDrawable->y - gmesa->driDrawable->h;
+       int x = gmesa->driDrawable->x;
+       int w = gmesa->driDrawable->w;
+       int h = gmesa->driDrawable->h;
+
+       mask &= ~(DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT);
+
+       if (x < 0) { w -= -x; x = 0; }
+
+       /* Turn on GID clipping if window is clipped */
+       if (!gmesa->NotClipped) {
+           CHECK_DMA_BUFFER(gmesa, 1);
+           WRITE(gmesa->buf, Rectangle2DControl, 1);
+       }
+
+        CHECK_DMA_BUFFER(gmesa, 18);
+        WRITE(gmesa->buf, FBBlockColor, gmesa->ClearColor);
+        WRITE(gmesa->buf, ColorDDAMode, ColorDDADisable);
+       WRITE(gmesa->buf, FBWriteMode, FBWriteModeEnable);
+       WRITE(gmesa->buf, DepthMode, 0);
+       WRITE(gmesa->buf, DeltaMode, 0);
+       WRITE(gmesa->buf, AlphaBlendMode, 0);
+#if 1
+       WRITE(gmesa->buf, dY,          1<<16);
+       WRITE(gmesa->buf, dXDom,       0<<16);
+       WRITE(gmesa->buf, dXSub,       0<<16);
+       WRITE(gmesa->buf, StartXSub,   (x+w)<<16);
+       WRITE(gmesa->buf, GLINTCount,  h);
+       WRITE(gmesa->buf, StartXDom,   x<<16);
+       WRITE(gmesa->buf, StartY,      y<<16);
+       WRITE(gmesa->buf, Render,      0x00000048); /* NOT_DONE */
+#else
+       WRITE(gmesa->buf, Rectangle2DMode, (((h & 0xfff)<<12) |
+                                             (w & 0xfff)));
+       WRITE(gmesa->buf, DrawRectangle2D, (((y & 0xffff)<<16) |
+                                             (x & 0xffff)));
+#endif
+       WRITE(gmesa->buf, DepthMode, gmesa->DepthMode);
+       WRITE(gmesa->buf, DeltaMode, gmesa->DeltaMode);
+       WRITE(gmesa->buf, AlphaBlendMode, gmesa->AlphaBlendMode);
+       WRITE(gmesa->buf, ColorDDAMode, gmesa->ColorDDAMode);
+
+       /* Turn off GID clipping if window is clipped */
+       if (gmesa->NotClipped) {
+           CHECK_DMA_BUFFER(gmesa, 1);
+           WRITE(gmesa->buf, Rectangle2DControl, 0);
+       }
+    }
+
+#ifdef DO_VALIDATE
+    PROCESS_DMA_BUFFER_TOP_HALF(gmesa);
+
+    DRM_SPINUNLOCK(&gmesa->driScreen->pSAREA->drawable_lock,
+                  gmesa->driScreen->drawLockID);
+    VALIDATE_DRAWABLE_INFO_NO_LOCK_POST(gmesa);
+
+    PROCESS_DMA_BUFFER_BOTTOM_HALF(gmesa);
+#endif
+
+   if ( mask )
+      _swrast_Clear( ctx, mask, all, cx, cy, cw, ch );
+}
+
+/* =============================================================
+ * Depth testing
+ */
+
+static void gammaUpdateZMode( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   CARD32 z = gmesa->DepthMode;
+   CARD32 delta = gmesa->DeltaMode;
+   CARD32 window = gmesa->Window;
+   CARD32 lbread = gmesa->LBReadMode;
+
+   z &= ~DM_CompareMask;
+
+   switch ( ctx->Depth.Func ) {
+      case GL_NEVER:
+        z |= DM_Never;
+        break;
+      case GL_ALWAYS:
+        z |= DM_Always;
+        break;
+      case GL_LESS:
+        z |= DM_Less;
+        break;
+      case GL_LEQUAL:
+        z |= DM_LessEqual;
+        break;
+      case GL_EQUAL:
+        z |= DM_Equal;
+        break;
+      case GL_GEQUAL:
+        z |= DM_GreaterEqual;
+        break;
+      case GL_GREATER:
+        z |= DM_Greater;
+        break;
+      case GL_NOTEQUAL:
+        z |= DM_NotEqual;
+        break;
+   }
+
+   if ( ctx->Depth.Test ) {
+      z      |= DepthModeEnable;
+      delta  |= DM_DepthEnable;
+      window |= W_DepthFCP;
+      lbread |= LBReadDstEnable;
+   } else {
+      z      &= ~DepthModeEnable;
+      delta  &= ~DM_DepthEnable;
+      window &= ~W_DepthFCP;
+      lbread &= ~LBReadDstEnable;
+   }
+
+   if ( ctx->Depth.Mask ) {
+      z |= DM_WriteMask;
+   } else {
+      z &= ~DM_WriteMask;
+   }
+
+#if 0
+   if ( gmesa->DepthMode != z ){
+#endif
+      gmesa->DepthMode = z;
+      gmesa->DeltaMode = delta;
+      gmesa->Window = window;
+      gmesa->LBReadMode = lbread;
+      gmesa->dirty |= GAMMA_UPLOAD_DEPTH;
+#if 0
+   }
+#endif
+}
+
+static void gammaDDDepthFunc( GLcontext *ctx, GLenum func )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   FLUSH_BATCH( gmesa );
+   gmesa->new_state |= GAMMA_NEW_DEPTH;
+}
+
+static void gammaDDDepthMask( GLcontext *ctx, GLboolean flag )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   FLUSH_BATCH( gmesa );
+   gmesa->new_state |= GAMMA_NEW_DEPTH;
+}
+
+static void gammaDDClearDepth( GLcontext *ctx, GLclampd d )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   switch ( gmesa->DepthSize ) {
+   case 16:
+      gmesa->ClearDepth = d * 0x0000ffff;
+      break;
+   case 24:
+      gmesa->ClearDepth = d * 0x00ffffff;
+      break;
+   case 32:
+      gmesa->ClearDepth = d * 0xffffffff;
+      break;
+   }
+}
+
+static void gammaDDFinish( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   FLUSH_DMA_BUFFER(gmesa);
+}
+
+static void gammaDDFlush( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   FLUSH_DMA_BUFFER(gmesa);
+}
+
+/* =============================================================
+ * Fog
+ */
+
+static void gammaUpdateFogAttrib( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   CARD32 f = gmesa->FogMode;
+   CARD32 g = gmesa->GeometryMode;
+   CARD32 d = gmesa->DeltaMode;
+
+   if (ctx->Fog.Enabled) {
+      f |= FogModeEnable;
+      g |= GM_FogEnable;
+      d |= DM_FogEnable;
+   } else {
+      f &= ~FogModeEnable;
+      g &= ~GM_FogEnable;
+      d &= ~DM_FogEnable;
+   }
+
+   g &= ~GM_FogMask;
+
+   switch (ctx->Fog.Mode) {
+      case GL_LINEAR:
+         g |= GM_FogLinear;
+         break;
+      case GL_EXP:
+         g |= GM_FogExp;
+         break;
+      case GL_EXP2:
+         g |= GM_FogExpSquared;
+         break;
+   }
+
+   if ( gmesa->FogMode != f ) {
+      gmesa->FogMode = f;
+      gmesa->dirty |= GAMMA_UPLOAD_FOG;
+   }
+   if ( gmesa->GeometryMode != g ) {
+      gmesa->GeometryMode = g;
+      gmesa->dirty |= GAMMA_UPLOAD_GEOMETRY;
+   }
+
+   if ( gmesa->DeltaMode != d ) {
+      gmesa->DeltaMode = d;
+      gmesa->dirty |= GAMMA_UPLOAD_DEPTH;
+   }
+}
+
+static void gammaDDFogfv( GLcontext *ctx, GLenum pname, const GLfloat *param )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   FLUSH_BATCH( gmesa );
+   gmesa->new_state |= GAMMA_NEW_FOG;
+}
+
+/* =============================================================
+ * Lines
+ */
+static void gammaDDLineWidth( GLcontext *ctx, GLfloat width )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   CHECK_DMA_BUFFER(gmesa, 3);
+   WRITE(gmesa->buf, LineWidth, (GLuint)width);
+   WRITEF(gmesa->buf, AAlineWidth, width);
+   WRITE(gmesa->buf, LineWidthOffset, (GLuint)(width-1)/2);
+}
+
+static void gammaDDLineStipple( GLcontext *ctx, GLint factor, GLushort pattern )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   gmesa->LineMode &= ~(LM_StippleMask | LM_RepeatFactorMask);
+   gmesa->LineMode |= ((GLuint)(factor - 1) << 1) | ((GLuint)pattern << 10); 
+
+   gmesa->dirty |= GAMMA_UPLOAD_LINEMODE;
+}
+
+
+
+/* =============================================================
+ * Points
+ */
+static void gammaDDPointSize( GLcontext *ctx, GLfloat size )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   CHECK_DMA_BUFFER(gmesa, 2);
+   WRITE(gmesa->buf, PointSize, (GLuint)size);
+   WRITEF(gmesa->buf, AApointSize, size);
+}
+
+/* =============================================================
+ * Polygon 
+ */
+
+static void gammaUpdatePolygon( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   CARD32 g = gmesa->GeometryMode;
+
+   g &= ~(GM_PolyOffsetFillEnable | GM_PolyOffsetPointEnable |
+          GM_PolyOffsetLineEnable);
+
+   if (ctx->Polygon.OffsetFill) g |= GM_PolyOffsetFillEnable;
+   if (ctx->Polygon.OffsetPoint) g |= GM_PolyOffsetPointEnable;
+   if (ctx->Polygon.OffsetLine) g |= GM_PolyOffsetLineEnable;
+
+   g &= ~GM_FB_PolyMask;
+
+   switch (ctx->Polygon.FrontMode) {
+      case GL_FILL:
+         g |= GM_FrontPolyFill;
+         break;
+      case GL_LINE:
+         g |= GM_FrontPolyLine;
+         break;
+      case GL_POINT:
+         g |= GM_FrontPolyPoint;
+         break;
+   }
+
+   switch (ctx->Polygon.BackMode) {
+      case GL_FILL:
+         g |= GM_BackPolyFill;
+         break;
+      case GL_LINE:
+         g |= GM_BackPolyLine;
+         break;
+      case GL_POINT:
+         g |= GM_BackPolyPoint;
+         break;
+   }
+
+   if ( gmesa->GeometryMode != g ) {
+      gmesa->GeometryMode = g;
+      gmesa->dirty |= GAMMA_UPLOAD_GEOMETRY;
+   }
+
+   gmesa->dirty |= GAMMA_UPLOAD_POLYGON;
+}
+
+static void gammaDDPolygonMode( GLcontext *ctx, GLenum face, GLenum mode)
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   FLUSH_BATCH( gmesa );
+
+   gmesa->new_state |= GAMMA_NEW_POLYGON;
+}
+
+static void gammaUpdateStipple( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   FLUSH_BATCH( gmesa );
+
+   if (ctx->Polygon.StippleFlag) {
+      gmesa->AreaStippleMode |= AreaStippleModeEnable/* | ASM_X32 | ASM_Y32*/;
+   } else {
+      gmesa->AreaStippleMode &= ~AreaStippleModeEnable;
+   }
+
+   gmesa->dirty |= GAMMA_UPLOAD_STIPPLE;
+}
+
+static void gammaDDPolygonStipple( GLcontext *ctx, const GLubyte *mask)
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   FLUSH_BATCH( gmesa );
+   gmesa->new_state |= GAMMA_NEW_STIPPLE;
+}
+
+/* =============================================================
+ * Clipping
+ */
+
+static void gammaUpdateClipping( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   GLint x1, y1, x2, y2;
+
+   if ( gmesa->driDrawable ) {
+      x1 = gmesa->driDrawable->x + ctx->Scissor.X;
+      y1 = gmesa->driScreen->fbHeight -
+       (gmesa->driDrawable->y +
+        gmesa->driDrawable->h) + ctx->Scissor.Y;
+      x2 = x1 + ctx->Scissor.Width;
+      y2 = y1 + ctx->Scissor.Height;
+
+      gmesa->ScissorMinXY = x1 | (y1 << 16);
+      gmesa->ScissorMaxXY = x2 | (y2 << 16);
+      if (ctx->Scissor.Enabled) 
+         gmesa->ScissorMode |= UserScissorEnable;
+      else
+         gmesa->ScissorMode &= ~UserScissorEnable;
+
+      gmesa->dirty |= GAMMA_UPLOAD_CLIP;
+   }
+}
+
+static void gammaDDScissor( GLcontext *ctx,
+                          GLint x, GLint y, GLsizei w, GLsizei h )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   FLUSH_BATCH( gmesa );
+   gmesa->new_state |= GAMMA_NEW_CLIP;
+}
+
+/* =============================================================
+ * Culling
+ */
+
+static void gammaUpdateCull( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   CARD32 g = gmesa->GeometryMode;
+
+   g &= ~(GM_PolyCullMask | GM_FFMask);
+
+   if (ctx->Polygon.FrontFace == GL_CCW) {
+      g |= GM_FrontFaceCCW;
+   } else {
+      g |= GM_FrontFaceCW;
+   }
+
+   switch ( ctx->Polygon.CullFaceMode ) {
+      case GL_FRONT:
+        g |= GM_PolyCullFront;
+        break;
+      case GL_BACK:
+        g |= GM_PolyCullBack;
+        break;
+      case GL_FRONT_AND_BACK:
+        g |= GM_PolyCullBoth;
+        break;
+   }
+
+   if ( ctx->Polygon.CullFlag ) {
+      g |= GM_PolyCullEnable;
+   } else {
+      g &= ~GM_PolyCullEnable;
+   }
+
+   if ( gmesa->GeometryMode != g ) {
+      gmesa->GeometryMode = g;
+      gmesa->dirty |= GAMMA_UPLOAD_GEOMETRY;
+   }
+}
+
+static void gammaDDCullFace( GLcontext *ctx, GLenum mode )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   FLUSH_BATCH( gmesa );
+   gmesa->new_state |= GAMMA_NEW_CULL;
+}
+
+static void gammaDDFrontFace( GLcontext *ctx, GLenum mode )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   FLUSH_BATCH( gmesa );
+   gmesa->new_state |= GAMMA_NEW_CULL;
+}
+
+/* =============================================================
+ * Masks
+ */
+
+static void gammaUpdateMasks( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+
+   GLuint mask = gammaPackColor( gmesa->gammaScreen->cpp,
+                               ctx->Color.ColorMask[RCOMP],
+                               ctx->Color.ColorMask[GCOMP],
+                               ctx->Color.ColorMask[BCOMP],
+                               ctx->Color.ColorMask[ACOMP] );
+
+   if (gmesa->gammaScreen->cpp == 2) mask |= mask << 16;
+
+   if ( gmesa->FBHardwareWriteMask != mask ) {
+      gmesa->FBHardwareWriteMask = mask;
+      gmesa->dirty |= GAMMA_UPLOAD_MASKS;
+   }
+}
+
+static void gammaDDColorMask( GLcontext *ctx, GLboolean r, GLboolean g,
+                             GLboolean b, GLboolean a)
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   FLUSH_BATCH( gmesa );
+   gmesa->new_state |= GAMMA_NEW_MASKS;
+}
+
+/* =============================================================
+ * Rendering attributes
+ *
+ * We really don't want to recalculate all this every time we bind a
+ * texture.  These things shouldn't change all that often, so it makes
+ * sense to break them out of the core texture state update routines.
+ */
+
+#if ENABLELIGHTING
+static void gammaDDLightfv(GLcontext *ctx, GLenum light, GLenum pname, 
+                               const GLfloat *params, GLint nParams)
+{
+    gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+    GLfloat l,x,y,z,w;
+
+    switch(light) {
+    case GL_LIGHT0:
+       switch (pname) {
+       case GL_AMBIENT:
+           CHECK_DMA_BUFFER(gmesa, 3);
+           /* We don't do alpha */
+           WRITEF(gmesa->buf, Light0AmbientIntensityBlue, params[2]);
+           WRITEF(gmesa->buf, Light0AmbientIntensityGreen, params[1]);
+           WRITEF(gmesa->buf, Light0AmbientIntensityRed, params[0]);
+           break;
+       case GL_DIFFUSE:
+           CHECK_DMA_BUFFER(gmesa, 3);
+           /* We don't do alpha */
+           WRITEF(gmesa->buf, Light0DiffuseIntensityBlue, params[2]);
+           WRITEF(gmesa->buf, Light0DiffuseIntensityGreen, params[1]);
+           WRITEF(gmesa->buf, Light0DiffuseIntensityRed, params[0]);
+           break;
+       case GL_SPECULAR:
+           CHECK_DMA_BUFFER(gmesa, 3);
+           /* We don't do alpha */
+           WRITEF(gmesa->buf, Light0SpecularIntensityBlue, params[2]);
+           WRITEF(gmesa->buf, Light0SpecularIntensityGreen, params[1]);
+           WRITEF(gmesa->buf, Light0SpecularIntensityRed, params[0]);
+           break;
+       case GL_POSITION:
+           /* Normalize <x,y,z> */
+           x = params[0]; y = params[1]; z = params[2]; w = params[3];
+           l = sqrt(x*x + y*y + z*z + w*w);
+           w /= l;
+           x /= l;
+           y /= l;
+           z /= l;
+           if (params[3] != 0.0) {
+               gmesa->Light0Mode |= Light0ModeAttenuation;
+               gmesa->Light0Mode |= Light0ModeLocal;
+           } else {
+               gmesa->Light0Mode &= ~Light0ModeAttenuation;
+               gmesa->Light0Mode &= ~Light0ModeLocal;
+           }
+           CHECK_DMA_BUFFER(gmesa, 5);
+           WRITE(gmesa->buf, Light0Mode, gmesa->Light0Mode);
+           WRITEF(gmesa->buf, Light0PositionW, w);
+           WRITEF(gmesa->buf, Light0PositionZ, z);
+           WRITEF(gmesa->buf, Light0PositionY, y);
+           WRITEF(gmesa->buf, Light0PositionX, x);
+           break;
+       case GL_SPOT_DIRECTION:
+           CHECK_DMA_BUFFER(gmesa, 3);
+           /* WRITEF(gmesa->buf, Light0SpotlightDirectionW, params[3]); */
+           WRITEF(gmesa->buf, Light0SpotlightDirectionZ, params[2]);
+           WRITEF(gmesa->buf, Light0SpotlightDirectionY, params[1]);
+           WRITEF(gmesa->buf, Light0SpotlightDirectionX, params[0]);
+           break;
+       case GL_SPOT_EXPONENT:
+           CHECK_DMA_BUFFER(gmesa, 1);
+           WRITEF(gmesa->buf, Light0SpotlightExponent, params[0]);
+           break;
+       case GL_SPOT_CUTOFF:
+           if (params[0] != 180.0) 
+               gmesa->Light0Mode |= Light0ModeSpotLight;
+           else
+               gmesa->Light0Mode &= ~Light0ModeSpotLight;
+           CHECK_DMA_BUFFER(gmesa, 2);
+           WRITE(gmesa->buf, Light0Mode, gmesa->Light0Mode);
+           WRITEF(gmesa->buf, Light0CosSpotlightCutoffAngle, cos(params[0]*DEG2RAD));
+           break;
+       case GL_CONSTANT_ATTENUATION:
+           CHECK_DMA_BUFFER(gmesa, 1);
+           WRITEF(gmesa->buf, Light0ConstantAttenuation, params[0]);
+           break;
+       case GL_LINEAR_ATTENUATION:
+           CHECK_DMA_BUFFER(gmesa, 1);
+           WRITEF(gmesa->buf, Light0LinearAttenuation, params[0]);
+           break;
+       case GL_QUADRATIC_ATTENUATION:
+           CHECK_DMA_BUFFER(gmesa, 1);
+           WRITEF(gmesa->buf, Light0QuadraticAttenuation, params[0]);
+           break;
+       }
+       break;
+    }
+}
+
+static void gammaDDLightModelfv( GLcontext *ctx, GLenum pname,
+                               const GLfloat *params )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   switch (pname) {
+   case GL_LIGHT_MODEL_AMBIENT:
+       CHECK_DMA_BUFFER(gmesa, 3);
+       /* We don't do alpha */
+       WRITEF(gmesa->buf, SceneAmbientColorBlue, params[2]);
+       WRITEF(gmesa->buf, SceneAmbientColorGreen, params[1]);
+       WRITEF(gmesa->buf, SceneAmbientColorRed, params[0]);
+       break;
+    case GL_LIGHT_MODEL_LOCAL_VIEWER:
+       if (params[0] != 0.0)
+           gmesa->LightingMode |= LightingModeLocalViewer;
+       else
+           gmesa->LightingMode &= ~LightingModeLocalViewer;
+       CHECK_DMA_BUFFER(gmesa, 1);
+       WRITE(gmesa->buf, LightingMode, gmesa->LightingMode);
+       break;
+    case GL_LIGHT_MODEL_TWO_SIDE:
+       if (params[0] == 1.0f) {
+           gmesa->LightingMode |= LightingModeTwoSides;
+           gmesa->MaterialMode |= MaterialModeTwoSides;
+       } else {
+           gmesa->LightingMode &= ~LightingModeTwoSides;
+           gmesa->MaterialMode &= ~MaterialModeTwoSides;
+       }
+       CHECK_DMA_BUFFER(gmesa, 2);
+       WRITE(gmesa->buf, LightingMode, gmesa->LightingMode);
+       WRITE(gmesa->buf, MaterialMode, gmesa->MaterialMode);
+       break;
+    }
+}
+#endif
+
+static void gammaDDShadeModel( GLcontext *ctx, GLenum mode )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   CARD32 g = gmesa->GeometryMode;
+   CARD32 c = gmesa->ColorDDAMode;
+
+   g &= ~GM_ShadingMask;
+   c &= ~ColorDDAShadingMask;
+
+   switch ( mode ) {
+   case GL_FLAT:
+      g |= GM_FlatShading;
+      c |= ColorDDAFlat;
+      break;
+   case GL_SMOOTH:
+      g |= GM_GouraudShading;
+      c |= ColorDDAGouraud;
+      break;
+   default:
+      return;
+   }
+
+   if ( gmesa->ColorDDAMode != c ) {
+      FLUSH_BATCH( gmesa );
+      gmesa->ColorDDAMode = c;
+
+      gmesa->dirty |= GAMMA_UPLOAD_SHADE;
+   }
+
+   if ( gmesa->GeometryMode != g ) {
+      FLUSH_BATCH( gmesa );
+      gmesa->GeometryMode = g;
+
+      gmesa->dirty |= GAMMA_UPLOAD_GEOMETRY;
+   }
+}
+
+/* =============================================================
+ * Miscellaneous
+ */
+
+static void gammaDDClearColor( GLcontext *ctx, const GLfloat color[4])
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   GLubyte c[4];
+   UNCLAMPED_FLOAT_TO_UBYTE(c[0], color[0]);
+   UNCLAMPED_FLOAT_TO_UBYTE(c[1], color[1]);
+   UNCLAMPED_FLOAT_TO_UBYTE(c[2], color[2]);
+   UNCLAMPED_FLOAT_TO_UBYTE(c[3], color[3]);
+
+   gmesa->ClearColor = gammaPackColor( gmesa->gammaScreen->cpp,
+                                       c[0], c[1], c[2], c[3] );
+
+   if (gmesa->gammaScreen->cpp == 2) gmesa->ClearColor |= gmesa->ClearColor<<16;
+}
+
+
+static void gammaDDLogicalOpcode( GLcontext *ctx, GLenum opcode )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   FLUSH_BATCH( gmesa );
+
+   if ( ctx->Color.ColorLogicOpEnabled ) {
+      gmesa->LogicalOpMode = opcode << 1 | LogicalOpModeEnable;
+   } else {
+      gmesa->LogicalOpMode = LogicalOpModeDisable;
+   }
+
+   gmesa->dirty |= GAMMA_UPLOAD_LOGICOP;
+}
+
+static void gammaDDDrawBuffer( GLcontext *ctx, GLenum mode )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   FLUSH_BATCH( gmesa );
+
+   switch ( mode ) {
+   case GL_FRONT_LEFT:
+      gmesa->drawOffset = gmesa->readOffset = 0;
+      break;
+   case GL_BACK_LEFT:
+      gmesa->drawOffset = gmesa->readOffset = gmesa->driScreen->fbHeight * gmesa->driScreen->fbWidth * gmesa->gammaScreen->cpp; 
+      break;
+   }
+}
+
+static void gammaDDReadBuffer( GLcontext *ctx, GLenum mode )
+{
+   /* XXX anything? */
+}
+
+/* =============================================================
+ * Window position and viewport transformation
+ */
+
+void gammaUpdateWindow( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   __DRIdrawablePrivate *dPriv = gmesa->driDrawable;
+   GLfloat xoffset = (GLfloat)dPriv->x;
+   GLfloat yoffset = gmesa->driScreen->fbHeight - (GLfloat)dPriv->y - dPriv->h;
+   const GLfloat *v = ctx->Viewport._WindowMap.m;
+
+   GLfloat sx = v[MAT_SX];
+   GLfloat tx = v[MAT_TX] + xoffset;
+   GLfloat sy = v[MAT_SY];
+   GLfloat ty = v[MAT_TY] + yoffset;
+   GLfloat sz = v[MAT_SZ] * gmesa->depth_scale;
+   GLfloat tz = v[MAT_TZ] * gmesa->depth_scale;
+
+   gmesa->dirty |= GAMMA_UPLOAD_VIEWPORT;
+
+   gmesa->ViewportScaleX = sx;
+   gmesa->ViewportScaleY = sy;
+   gmesa->ViewportScaleZ = sz;
+   gmesa->ViewportOffsetX = tx;
+   gmesa->ViewportOffsetY = ty;
+   gmesa->ViewportOffsetZ = tz;
+}
+
+
+
+static void gammaDDViewport( GLcontext *ctx, GLint x, GLint y,
+                           GLsizei width, GLsizei height )
+{
+   gammaUpdateWindow( ctx );
+}
+
+static void gammaDDDepthRange( GLcontext *ctx, GLclampd nearval,
+                             GLclampd farval )
+{
+   gammaUpdateWindow( ctx );
+}
+
+void gammaUpdateViewportOffset( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   __DRIdrawablePrivate *dPriv = gmesa->driDrawable;
+   GLfloat xoffset = (GLfloat)dPriv->x;
+   GLfloat yoffset = gmesa->driScreen->fbHeight - (GLfloat)dPriv->y - dPriv->h;
+   const GLfloat *v = ctx->Viewport._WindowMap.m;
+
+   GLfloat tx = v[MAT_TX] + xoffset;
+   GLfloat ty = v[MAT_TY] + yoffset;
+
+   if ( gmesa->ViewportOffsetX != tx ||
+        gmesa->ViewportOffsetY != ty )
+   {
+      gmesa->ViewportOffsetX = tx;
+      gmesa->ViewportOffsetY = ty;
+
+      gmesa->new_state |= GAMMA_NEW_WINDOW;
+   }
+
+   gmesa->new_state |= GAMMA_NEW_CLIP;
+}
+
+#if 0
+/* 
+ * Matrix 
+ */
+
+static void gammaLoadHWMatrix(GLcontext *ctx)
+{
+    gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+    const GLfloat *m;
+
+    gmesa->TransformMode &= ~XM_XformTexture;
+
+    switch (ctx->Transform.MatrixMode) {
+    case GL_MODELVIEW:
+       gmesa->TransformMode |= XM_UseModelViewMatrix;
+        m = ctx->ModelviewMatrixStack.Top->m;
+       CHECK_DMA_BUFFER(gmesa, 16);
+       WRITEF(gmesa->buf, ModelViewMatrix0,  m[0]);
+       WRITEF(gmesa->buf, ModelViewMatrix1,  m[1]);
+       WRITEF(gmesa->buf, ModelViewMatrix2,  m[2]);
+       WRITEF(gmesa->buf, ModelViewMatrix3,  m[3]);
+       WRITEF(gmesa->buf, ModelViewMatrix4,  m[4]);
+       WRITEF(gmesa->buf, ModelViewMatrix5,  m[5]);
+       WRITEF(gmesa->buf, ModelViewMatrix6,  m[6]);
+       WRITEF(gmesa->buf, ModelViewMatrix7,  m[7]);
+       WRITEF(gmesa->buf, ModelViewMatrix8,  m[8]);
+       WRITEF(gmesa->buf, ModelViewMatrix9,  m[9]);
+       WRITEF(gmesa->buf, ModelViewMatrix10, m[10]);
+       WRITEF(gmesa->buf, ModelViewMatrix11, m[11]);
+       WRITEF(gmesa->buf, ModelViewMatrix12, m[12]);
+       WRITEF(gmesa->buf, ModelViewMatrix13, m[13]);
+       WRITEF(gmesa->buf, ModelViewMatrix14, m[14]);
+       WRITEF(gmesa->buf, ModelViewMatrix15, m[15]);
+       break;
+    case GL_PROJECTION:
+        m = ctx->ProjectionMatrixStack.Top->m;
+       CHECK_DMA_BUFFER(gmesa, 16);
+       WRITEF(gmesa->buf, ModelViewProjectionMatrix0, m[0]);
+       WRITEF(gmesa->buf, ModelViewProjectionMatrix1, m[1]);
+       WRITEF(gmesa->buf, ModelViewProjectionMatrix2, m[2]);
+       WRITEF(gmesa->buf, ModelViewProjectionMatrix3, m[3]);
+       WRITEF(gmesa->buf, ModelViewProjectionMatrix4, m[4]);
+       WRITEF(gmesa->buf, ModelViewProjectionMatrix5, m[5]);
+       WRITEF(gmesa->buf, ModelViewProjectionMatrix6, m[6]);
+       WRITEF(gmesa->buf, ModelViewProjectionMatrix7, m[7]);
+       WRITEF(gmesa->buf, ModelViewProjectionMatrix8, m[8]);
+       WRITEF(gmesa->buf, ModelViewProjectionMatrix9, m[9]);
+       WRITEF(gmesa->buf, ModelViewProjectionMatrix10, m[10]);
+       WRITEF(gmesa->buf, ModelViewProjectionMatrix11, m[11]);
+       WRITEF(gmesa->buf, ModelViewProjectionMatrix12, m[12]);
+       WRITEF(gmesa->buf, ModelViewProjectionMatrix13, m[13]);
+       WRITEF(gmesa->buf, ModelViewProjectionMatrix14, m[14]);
+       WRITEF(gmesa->buf, ModelViewProjectionMatrix15, m[15]);
+       break;
+    case GL_TEXTURE:
+        m = ctx->TextureMatrixStack[0].Top->m;
+       CHECK_DMA_BUFFER(gmesa, 16);
+       gmesa->TransformMode |= XM_XformTexture;
+       WRITEF(gmesa->buf, TextureMatrix0,  m[0]);
+       WRITEF(gmesa->buf, TextureMatrix1,  m[1]);
+       WRITEF(gmesa->buf, TextureMatrix2,  m[2]);
+       WRITEF(gmesa->buf, TextureMatrix3,  m[3]);
+       WRITEF(gmesa->buf, TextureMatrix4,  m[4]);
+       WRITEF(gmesa->buf, TextureMatrix5,  m[5]);
+       WRITEF(gmesa->buf, TextureMatrix6,  m[6]);
+       WRITEF(gmesa->buf, TextureMatrix7,  m[7]);
+       WRITEF(gmesa->buf, TextureMatrix8,  m[8]);
+       WRITEF(gmesa->buf, TextureMatrix9,  m[9]);
+       WRITEF(gmesa->buf, TextureMatrix10,  m[10]);
+       WRITEF(gmesa->buf, TextureMatrix11,  m[11]);
+       WRITEF(gmesa->buf, TextureMatrix12,  m[12]);
+       WRITEF(gmesa->buf, TextureMatrix13,  m[13]);
+       WRITEF(gmesa->buf, TextureMatrix14,  m[14]);
+       WRITEF(gmesa->buf, TextureMatrix15,  m[15]);
+       break;
+
+    default:
+       /* ERROR!!! -- how did this happen? */
+       break;
+    }
+
+    gmesa->dirty |= GAMMA_UPLOAD_TRANSFORM;
+}
+#endif
+
+/* =============================================================
+ * State enable/disable
+ */
+
+static void gammaDDEnable( GLcontext *ctx, GLenum cap, GLboolean state )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   switch ( cap ) {
+   case GL_ALPHA_TEST:
+   case GL_BLEND:
+      FLUSH_BATCH( gmesa );
+      gmesa->new_state |= GAMMA_NEW_ALPHA;
+      break;
+
+   case GL_CULL_FACE:
+      FLUSH_BATCH( gmesa );
+      gmesa->new_state |= GAMMA_NEW_CULL;
+      break;
+
+   case GL_DEPTH_TEST:
+      FLUSH_BATCH( gmesa );
+      gmesa->new_state |= GAMMA_NEW_DEPTH;
+      break;
+
+   case GL_DITHER:
+      do {
+        CARD32 d = gmesa->DitherMode;
+        FLUSH_BATCH( gmesa );
+
+        if ( state ) {
+           d |=  DM_DitherEnable;
+        } else {
+           d &= ~DM_DitherEnable;
+        }
+
+        if ( gmesa->DitherMode != d ) {
+           gmesa->DitherMode = d;
+           gmesa->dirty |= GAMMA_UPLOAD_DITHER;
+        }
+      } while (0);
+      break;
+
+#if 0
+   case GL_FOG:
+      FLUSH_BATCH( gmesa );
+      gmesa->new_state |= GAMMA_NEW_FOG;
+      break;
+#endif
+
+   case GL_INDEX_LOGIC_OP:
+   case GL_COLOR_LOGIC_OP:
+      FLUSH_BATCH( gmesa );
+      gmesa->new_state |= GAMMA_NEW_LOGICOP;
+      break;
+
+#if ENABLELIGHTING
+   case GL_LIGHTING:
+      do {
+        CARD32 l = gmesa->LightingMode;
+        FLUSH_BATCH( gmesa );
+
+        if ( state ) {
+           l |=  LightingModeEnable;
+        } else {
+           l &= ~LightingModeEnable;
+        }
+
+        if ( gmesa->LightingMode != l ) {
+           gmesa->LightingMode = l;
+           gmesa->dirty |= GAMMA_UPLOAD_LIGHT;
+        }
+      } while (0);
+      break;
+
+   case GL_COLOR_MATERIAL:
+      do {
+        CARD32 m = gmesa->MaterialMode;
+        FLUSH_BATCH( gmesa );
+
+        if ( state ) {
+           m |=  MaterialModeEnable;
+        } else {
+           m &= ~MaterialModeEnable;
+        }
+
+        if ( gmesa->MaterialMode != m ) {
+           gmesa->MaterialMode = m;
+           gmesa->dirty |= GAMMA_UPLOAD_LIGHT;
+        }
+      } while (0);
+      break;
+#endif
+
+   case GL_LINE_SMOOTH:
+      FLUSH_BATCH( gmesa );
+      if ( state ) {
+         gmesa->AntialiasMode |= AntialiasModeEnable;
+         gmesa->LineMode |= LM_AntialiasEnable;
+      } else {
+         gmesa->AntialiasMode &= ~AntialiasModeEnable;
+         gmesa->LineMode &= ~LM_AntialiasEnable;
+      }
+      gmesa->dirty |= GAMMA_UPLOAD_LINEMODE;
+      break;
+
+   case GL_POINT_SMOOTH:
+      FLUSH_BATCH( gmesa );
+      if ( state ) {
+         gmesa->AntialiasMode |= AntialiasModeEnable;
+         gmesa->PointMode |= PM_AntialiasEnable;
+      } else {
+         gmesa->AntialiasMode &= ~AntialiasModeEnable;
+         gmesa->PointMode &= ~PM_AntialiasEnable;
+      }
+      gmesa->dirty |= GAMMA_UPLOAD_POINTMODE;
+      break;
+
+   case GL_POLYGON_SMOOTH:
+      FLUSH_BATCH( gmesa );
+      if ( state ) {
+         gmesa->AntialiasMode |= AntialiasModeEnable;
+         gmesa->TriangleMode |= TM_AntialiasEnable;
+      } else {
+         gmesa->AntialiasMode &= ~AntialiasModeEnable;
+         gmesa->TriangleMode &= ~TM_AntialiasEnable;
+      }
+      gmesa->dirty |= GAMMA_UPLOAD_TRIMODE;
+      break;
+
+   case GL_SCISSOR_TEST:
+      FLUSH_BATCH( gmesa );
+      gmesa->new_state |= GAMMA_NEW_CLIP;
+      break;
+
+   case GL_POLYGON_OFFSET_FILL:
+   case GL_POLYGON_OFFSET_POINT:
+   case GL_POLYGON_OFFSET_LINE:
+      FLUSH_BATCH( gmesa );
+      gmesa->new_state |= GAMMA_NEW_POLYGON;
+      break;
+
+   case GL_LINE_STIPPLE:
+      FLUSH_BATCH( gmesa );
+      if ( state )
+         gmesa->LineMode |= LM_StippleEnable;
+      else
+         gmesa->LineMode &= ~LM_StippleEnable;
+      gmesa->dirty |= GAMMA_UPLOAD_LINEMODE;
+      break;
+
+   case GL_POLYGON_STIPPLE:
+      FLUSH_BATCH( gmesa );
+      gmesa->new_state |= GAMMA_NEW_STIPPLE;
+      break;
+
+   default:
+      return;
+   }
+}
+
+/* =============================================================
+ * State initialization, management
+ */
+
+
+/*
+ * Load the current context's state into the hardware.
+ *
+ * NOTE: Be VERY careful about ensuring the context state is marked for
+ * upload, the only place it shouldn't be uploaded is when the setup
+ * state has changed in ReducedPrimitiveChange as this comes right after
+ * a state update.
+ *
+ * Blits of any type should always upload the context and masks after
+ * they are done.
+ */
+void gammaEmitHwState( gammaContextPtr gmesa )
+{
+    if (!gmesa->driDrawable) return;
+
+    if (!gmesa->dirty) return;
+
+#ifdef DO_VALIDATE
+    /* Flush any partially filled buffers */
+    FLUSH_DMA_BUFFER(gmesa);
+
+    DRM_SPINLOCK(&gmesa->driScreen->pSAREA->drawable_lock,
+                gmesa->driScreen->drawLockID);
+    VALIDATE_DRAWABLE_INFO_NO_LOCK(gmesa);
+#endif
+
+    if (gmesa->dirty & GAMMA_UPLOAD_VIEWPORT) {
+       gmesa->dirty &= ~GAMMA_UPLOAD_VIEWPORT;
+       CHECK_DMA_BUFFER(gmesa, 6);
+       WRITEF(gmesa->buf, ViewPortOffsetX, gmesa->ViewportOffsetX);
+       WRITEF(gmesa->buf, ViewPortOffsetY, gmesa->ViewportOffsetY);
+       WRITEF(gmesa->buf, ViewPortOffsetZ, gmesa->ViewportOffsetZ);
+       WRITEF(gmesa->buf, ViewPortScaleX, gmesa->ViewportScaleX);
+       WRITEF(gmesa->buf, ViewPortScaleY, gmesa->ViewportScaleY);
+       WRITEF(gmesa->buf, ViewPortScaleZ, gmesa->ViewportScaleZ);
+    }
+    if ( (gmesa->dirty & GAMMA_UPLOAD_POINTMODE) ||
+        (gmesa->dirty & GAMMA_UPLOAD_LINEMODE) ||
+        (gmesa->dirty & GAMMA_UPLOAD_TRIMODE) ) {
+       CHECK_DMA_BUFFER(gmesa, 1);
+       WRITE(gmesa->buf, AntialiasMode, gmesa->AntialiasMode);
+    }
+    if (gmesa->dirty & GAMMA_UPLOAD_POINTMODE) {
+       gmesa->dirty &= ~GAMMA_UPLOAD_POINTMODE;
+       CHECK_DMA_BUFFER(gmesa, 1);
+       WRITE(gmesa->buf, PointMode, gmesa->PointMode);
+    }
+    if (gmesa->dirty & GAMMA_UPLOAD_LINEMODE) {
+       gmesa->dirty &= ~GAMMA_UPLOAD_LINEMODE;
+       CHECK_DMA_BUFFER(gmesa, 2);
+       WRITE(gmesa->buf, LineMode, gmesa->LineMode);
+       WRITE(gmesa->buf, LineStippleMode, gmesa->LineMode);
+    }
+    if (gmesa->dirty & GAMMA_UPLOAD_TRIMODE) {
+       gmesa->dirty &= ~GAMMA_UPLOAD_TRIMODE;
+       CHECK_DMA_BUFFER(gmesa, 1);
+       WRITE(gmesa->buf, TriangleMode, gmesa->TriangleMode);
+    }
+    if (gmesa->dirty & GAMMA_UPLOAD_FOG) {
+       GLchan c[3], col;
+       UNCLAMPED_FLOAT_TO_RGB_CHAN( c, gmesa->glCtx->Fog.Color );
+       col = gammaPackColor(4, c[0], c[1], c[2], 0);
+       gmesa->dirty &= ~GAMMA_UPLOAD_FOG;
+       CHECK_DMA_BUFFER(gmesa, 5);
+#if 0
+       WRITE(gmesa->buf, FogMode, gmesa->FogMode);
+       WRITE(gmesa->buf, FogColor, col);
+       WRITEF(gmesa->buf, FStart, gmesa->glCtx->Fog.Start);
+#endif
+       WRITEF(gmesa->buf, FogEnd, gmesa->glCtx->Fog.End);
+       WRITEF(gmesa->buf, FogDensity, gmesa->glCtx->Fog.Density);
+       WRITEF(gmesa->buf, FogScale, 
+               1.0f/(gmesa->glCtx->Fog.End - gmesa->glCtx->Fog.Start));
+    }
+    if (gmesa->dirty & GAMMA_UPLOAD_DITHER) {
+       gmesa->dirty &= ~GAMMA_UPLOAD_DITHER;
+       CHECK_DMA_BUFFER(gmesa, 1);
+       WRITE(gmesa->buf, DitherMode, gmesa->DitherMode);
+    }
+    if (gmesa->dirty & GAMMA_UPLOAD_LOGICOP) {
+       gmesa->dirty &= ~GAMMA_UPLOAD_LOGICOP;
+       CHECK_DMA_BUFFER(gmesa, 1);
+       WRITE(gmesa->buf, LogicalOpMode, gmesa->LogicalOpMode);
+    }
+    if (gmesa->dirty & GAMMA_UPLOAD_CLIP) {
+       gmesa->dirty &= ~GAMMA_UPLOAD_CLIP;
+       CHECK_DMA_BUFFER(gmesa, 3);
+       WRITE(gmesa->buf, ScissorMinXY, gmesa->ScissorMinXY);
+       WRITE(gmesa->buf, ScissorMaxXY, gmesa->ScissorMaxXY);
+       WRITE(gmesa->buf, ScissorMode, gmesa->ScissorMode);
+    }
+    if (gmesa->dirty & GAMMA_UPLOAD_MASKS) {
+       gmesa->dirty &= ~GAMMA_UPLOAD_MASKS;
+       CHECK_DMA_BUFFER(gmesa, 1);
+       WRITE(gmesa->buf, FBHardwareWriteMask, gmesa->FBHardwareWriteMask);
+    }
+    if (gmesa->dirty & GAMMA_UPLOAD_ALPHA) {
+       gmesa->dirty &= ~GAMMA_UPLOAD_ALPHA;
+       CHECK_DMA_BUFFER(gmesa, 1);
+       WRITE(gmesa->buf, AlphaTestMode, gmesa->AlphaTestMode);
+    }
+    if (gmesa->dirty & GAMMA_UPLOAD_BLEND) {
+       gmesa->dirty &= ~GAMMA_UPLOAD_BLEND;
+       CHECK_DMA_BUFFER(gmesa, 1);
+       WRITE(gmesa->buf, AlphaBlendMode, gmesa->AlphaBlendMode);
+    } 
+    CHECK_DMA_BUFFER(gmesa, 1);
+    if (gmesa->glCtx->Color.BlendEnabled || gmesa->glCtx->Color.AlphaEnabled) {
+       WRITE(gmesa->buf, FBReadMode, gmesa->FBReadMode | gmesa->AB_FBReadMode_Save);
+    } else {
+       WRITE(gmesa->buf, FBReadMode, gmesa->FBReadMode);
+    }
+    if (gmesa->dirty & GAMMA_UPLOAD_LIGHT) {
+       gmesa->dirty &= ~GAMMA_UPLOAD_LIGHT;
+       CHECK_DMA_BUFFER(gmesa, 2);
+       WRITE(gmesa->buf, LightingMode, gmesa->LightingMode);
+       WRITE(gmesa->buf, MaterialMode, gmesa->MaterialMode);
+    }
+    if (gmesa->dirty & GAMMA_UPLOAD_SHADE) {
+       gmesa->dirty &= ~GAMMA_UPLOAD_SHADE;
+       CHECK_DMA_BUFFER(gmesa, 1);
+       WRITE(gmesa->buf, ColorDDAMode, gmesa->ColorDDAMode);
+    }
+    if (gmesa->dirty & GAMMA_UPLOAD_POLYGON) {
+       gmesa->dirty &= ~GAMMA_UPLOAD_POLYGON;
+       CHECK_DMA_BUFFER(gmesa, 2);
+       WRITEF(gmesa->buf, PolygonOffsetBias, gmesa->glCtx->Polygon.OffsetUnits);
+       WRITEF(gmesa->buf, PolygonOffsetFactor, gmesa->glCtx->Polygon.OffsetFactor);
+    }
+    if (gmesa->dirty & GAMMA_UPLOAD_STIPPLE) {
+       gmesa->dirty &= ~GAMMA_UPLOAD_STIPPLE;
+       CHECK_DMA_BUFFER(gmesa, 33);
+       WRITE(gmesa->buf, AreaStippleMode, gmesa->AreaStippleMode);
+       WRITE(gmesa->buf, AreaStipplePattern0, gmesa->glCtx->PolygonStipple[0]);
+       WRITE(gmesa->buf, AreaStipplePattern1, gmesa->glCtx->PolygonStipple[1]);
+       WRITE(gmesa->buf, AreaStipplePattern2, gmesa->glCtx->PolygonStipple[2]);
+       WRITE(gmesa->buf, AreaStipplePattern3, gmesa->glCtx->PolygonStipple[3]);
+       WRITE(gmesa->buf, AreaStipplePattern4, gmesa->glCtx->PolygonStipple[4]);
+       WRITE(gmesa->buf, AreaStipplePattern5, gmesa->glCtx->PolygonStipple[5]);
+       WRITE(gmesa->buf, AreaStipplePattern6, gmesa->glCtx->PolygonStipple[6]);
+       WRITE(gmesa->buf, AreaStipplePattern7, gmesa->glCtx->PolygonStipple[7]);
+       WRITE(gmesa->buf, AreaStipplePattern8, gmesa->glCtx->PolygonStipple[8]);
+       WRITE(gmesa->buf, AreaStipplePattern9, gmesa->glCtx->PolygonStipple[9]);
+       WRITE(gmesa->buf, AreaStipplePattern10, gmesa->glCtx->PolygonStipple[10]);
+       WRITE(gmesa->buf, AreaStipplePattern11, gmesa->glCtx->PolygonStipple[11]);
+       WRITE(gmesa->buf, AreaStipplePattern12, gmesa->glCtx->PolygonStipple[12]);
+       WRITE(gmesa->buf, AreaStipplePattern13, gmesa->glCtx->PolygonStipple[13]);
+       WRITE(gmesa->buf, AreaStipplePattern14, gmesa->glCtx->PolygonStipple[14]);
+       WRITE(gmesa->buf, AreaStipplePattern15, gmesa->glCtx->PolygonStipple[15]);
+       WRITE(gmesa->buf, AreaStipplePattern16, gmesa->glCtx->PolygonStipple[16]);
+       WRITE(gmesa->buf, AreaStipplePattern17, gmesa->glCtx->PolygonStipple[17]);
+       WRITE(gmesa->buf, AreaStipplePattern18, gmesa->glCtx->PolygonStipple[18]);
+       WRITE(gmesa->buf, AreaStipplePattern19, gmesa->glCtx->PolygonStipple[19]);
+       WRITE(gmesa->buf, AreaStipplePattern20, gmesa->glCtx->PolygonStipple[20]);
+       WRITE(gmesa->buf, AreaStipplePattern21, gmesa->glCtx->PolygonStipple[21]);
+       WRITE(gmesa->buf, AreaStipplePattern22, gmesa->glCtx->PolygonStipple[22]);
+       WRITE(gmesa->buf, AreaStipplePattern23, gmesa->glCtx->PolygonStipple[23]);
+       WRITE(gmesa->buf, AreaStipplePattern24, gmesa->glCtx->PolygonStipple[24]);
+       WRITE(gmesa->buf, AreaStipplePattern25, gmesa->glCtx->PolygonStipple[25]);
+       WRITE(gmesa->buf, AreaStipplePattern26, gmesa->glCtx->PolygonStipple[26]);
+       WRITE(gmesa->buf, AreaStipplePattern27, gmesa->glCtx->PolygonStipple[27]);
+       WRITE(gmesa->buf, AreaStipplePattern28, gmesa->glCtx->PolygonStipple[28]);
+       WRITE(gmesa->buf, AreaStipplePattern29, gmesa->glCtx->PolygonStipple[29]);
+       WRITE(gmesa->buf, AreaStipplePattern30, gmesa->glCtx->PolygonStipple[30]);
+       WRITE(gmesa->buf, AreaStipplePattern31, gmesa->glCtx->PolygonStipple[31]);
+    }
+    if (gmesa->dirty & GAMMA_UPLOAD_DEPTH) {
+       gmesa->dirty &= ~GAMMA_UPLOAD_DEPTH;
+       CHECK_DMA_BUFFER(gmesa, 4);
+       WRITE(gmesa->buf, DepthMode,  gmesa->DepthMode);
+       WRITE(gmesa->buf, DeltaMode,  gmesa->DeltaMode);
+       WRITE(gmesa->buf, GLINTWindow,gmesa->Window | (gmesa->FrameCount << 9));
+       WRITE(gmesa->buf, LBReadMode, gmesa->LBReadMode);
+    }
+    if (gmesa->dirty & GAMMA_UPLOAD_GEOMETRY) {
+       gmesa->dirty &= ~GAMMA_UPLOAD_GEOMETRY;
+       CHECK_DMA_BUFFER(gmesa, 1);
+       WRITE(gmesa->buf, GeometryMode, gmesa->GeometryMode);
+    }
+    if (gmesa->dirty & GAMMA_UPLOAD_TRANSFORM) {
+       gmesa->dirty &= ~GAMMA_UPLOAD_TRANSFORM;
+       CHECK_DMA_BUFFER(gmesa, 1);
+       WRITE(gmesa->buf, TransformMode, gmesa->TransformMode);
+    }
+    if (gmesa->dirty & GAMMA_UPLOAD_TEX0) {
+       gammaTextureObjectPtr curTex = gmesa->CurrentTexObj[0];
+       gmesa->dirty &= ~GAMMA_UPLOAD_TEX0;
+       if (curTex) {
+       CHECK_DMA_BUFFER(gmesa, 21);
+       WRITE(gmesa->buf, GeometryMode, gmesa->GeometryMode | GM_TextureEnable);
+       WRITE(gmesa->buf, DeltaMode, gmesa->DeltaMode | DM_TextureEnable);
+       WRITE(gmesa->buf, TextureAddressMode, curTex->TextureAddressMode);
+       WRITE(gmesa->buf, TextureReadMode, curTex->TextureReadMode);
+       WRITE(gmesa->buf, TextureColorMode, curTex->TextureColorMode);
+       WRITE(gmesa->buf, TextureFilterMode, curTex->TextureFilterMode);
+       WRITE(gmesa->buf, TextureFormat, curTex->TextureFormat);
+       WRITE(gmesa->buf, GLINTBorderColor, curTex->TextureBorderColor);
+       WRITE(gmesa->buf, TxBaseAddr0, curTex->TextureBaseAddr[0]);
+       WRITE(gmesa->buf, TxBaseAddr1, curTex->TextureBaseAddr[1]);
+       WRITE(gmesa->buf, TxBaseAddr2, curTex->TextureBaseAddr[2]);
+       WRITE(gmesa->buf, TxBaseAddr3, curTex->TextureBaseAddr[3]);
+       WRITE(gmesa->buf, TxBaseAddr4, curTex->TextureBaseAddr[4]);
+       WRITE(gmesa->buf, TxBaseAddr5, curTex->TextureBaseAddr[5]);
+       WRITE(gmesa->buf, TxBaseAddr6, curTex->TextureBaseAddr[6]);
+       WRITE(gmesa->buf, TxBaseAddr7, curTex->TextureBaseAddr[7]);
+       WRITE(gmesa->buf, TxBaseAddr8, curTex->TextureBaseAddr[8]);
+       WRITE(gmesa->buf, TxBaseAddr9, curTex->TextureBaseAddr[9]);
+       WRITE(gmesa->buf, TxBaseAddr10, curTex->TextureBaseAddr[10]);
+       WRITE(gmesa->buf, TxBaseAddr11, curTex->TextureBaseAddr[11]);
+       WRITE(gmesa->buf, TxBaseAddr12, curTex->TextureBaseAddr[12]);
+       WRITE(gmesa->buf, TextureCacheControl, (TCC_Enable | TCC_Invalidate));
+       } else {
+       CHECK_DMA_BUFFER(gmesa, 6);
+       WRITE(gmesa->buf, GeometryMode, gmesa->GeometryMode);
+       WRITE(gmesa->buf, DeltaMode, gmesa->DeltaMode);
+       WRITE(gmesa->buf, TextureAddressMode, TextureAddressModeDisable);
+       WRITE(gmesa->buf, TextureReadMode, TextureReadModeDisable);
+       WRITE(gmesa->buf, TextureFilterMode, TextureFilterModeDisable);
+       WRITE(gmesa->buf, TextureColorMode, TextureColorModeDisable);
+       }
+    }
+#ifdef DO_VALIDATE
+    PROCESS_DMA_BUFFER_TOP_HALF(gmesa);
+
+    DRM_SPINUNLOCK(&gmesa->driScreen->pSAREA->drawable_lock,
+                  gmesa->driScreen->drawLockID);
+    VALIDATE_DRAWABLE_INFO_NO_LOCK_POST(gmesa);
+
+    PROCESS_DMA_BUFFER_BOTTOM_HALF(gmesa);
+#endif
+}
+
+void gammaDDUpdateHWState( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   int new_state = gmesa->new_state;
+
+   if ( new_state )
+   {
+      FLUSH_BATCH( gmesa );
+
+      gmesa->new_state = 0;
+
+      /* Update the various parts of the context's state.
+       */
+      if ( new_state & GAMMA_NEW_ALPHA )
+        gammaUpdateAlphaMode( ctx );
+
+      if ( new_state & GAMMA_NEW_DEPTH )
+        gammaUpdateZMode( ctx );
+
+      if ( new_state & GAMMA_NEW_FOG )
+        gammaUpdateFogAttrib( ctx );
+
+      if ( new_state & GAMMA_NEW_CLIP )
+        gammaUpdateClipping( ctx );
+
+      if ( new_state & GAMMA_NEW_POLYGON )
+        gammaUpdatePolygon( ctx );
+
+      if ( new_state & GAMMA_NEW_CULL )
+        gammaUpdateCull( ctx );
+
+      if ( new_state & GAMMA_NEW_MASKS )
+        gammaUpdateMasks( ctx );
+
+      if ( new_state & GAMMA_NEW_WINDOW )
+        gammaUpdateWindow( ctx );
+
+      if ( new_state & GAMMA_NEW_STIPPLE )
+        gammaUpdateStipple( ctx );
+   }
+
+   /* HACK ! */
+
+   gammaEmitHwState( gmesa );
+}
+
+
+static void gammaDDUpdateState( GLcontext *ctx, GLuint new_state )
+{
+   _swrast_InvalidateState( ctx, new_state );
+   _swsetup_InvalidateState( ctx, new_state );
+   _ac_InvalidateState( ctx, new_state );
+   _tnl_InvalidateState( ctx, new_state );
+   GAMMA_CONTEXT(ctx)->new_gl_state |= new_state;
+}
+
+
+/* Initialize the context's hardware state.
+ */
+void gammaDDInitState( gammaContextPtr gmesa )
+{
+   gmesa->new_state = 0;
+}
+
+/* Initialize the driver's state functions.
+ */
+void gammaDDInitStateFuncs( GLcontext *ctx )
+{
+   ctx->Driver.UpdateState             = gammaDDUpdateState;
+
+   ctx->Driver.Clear                   = gammaDDClear;
+   ctx->Driver.ClearIndex              = NULL;
+   ctx->Driver.ClearColor              = gammaDDClearColor;
+   ctx->Driver.DrawBuffer              = gammaDDDrawBuffer;
+   ctx->Driver.ReadBuffer              = gammaDDReadBuffer;
+
+   ctx->Driver.IndexMask               = NULL;
+   ctx->Driver.ColorMask               = gammaDDColorMask;
+
+   ctx->Driver.AlphaFunc               = gammaDDAlphaFunc;
+   ctx->Driver.BlendEquation           = gammaDDBlendEquation;
+   ctx->Driver.BlendFunc               = gammaDDBlendFunc;
+   ctx->Driver.BlendFuncSeparate       = gammaDDBlendFuncSeparate;
+   ctx->Driver.ClearDepth              = gammaDDClearDepth;
+   ctx->Driver.CullFace                        = gammaDDCullFace;
+   ctx->Driver.FrontFace               = gammaDDFrontFace;
+   ctx->Driver.DepthFunc               = gammaDDDepthFunc;
+   ctx->Driver.DepthMask               = gammaDDDepthMask;
+   ctx->Driver.DepthRange              = gammaDDDepthRange;
+   ctx->Driver.Enable                  = gammaDDEnable;
+   ctx->Driver.Finish                  = gammaDDFinish;
+   ctx->Driver.Flush                   = gammaDDFlush;
+#if 0
+   ctx->Driver.Fogfv                   = gammaDDFogfv;
+#endif
+   ctx->Driver.Hint                    = NULL;
+   ctx->Driver.LineWidth               = gammaDDLineWidth;
+   ctx->Driver.LineStipple             = gammaDDLineStipple;
+#if ENABLELIGHTING
+   ctx->Driver.Lightfv                 = gammaDDLightfv; 
+   ctx->Driver.LightModelfv            = gammaDDLightModelfv;
+#endif
+   ctx->Driver.LogicOpcode             = gammaDDLogicalOpcode;
+   ctx->Driver.PointSize               = gammaDDPointSize;
+   ctx->Driver.PolygonMode             = gammaDDPolygonMode;
+   ctx->Driver.PolygonStipple          = gammaDDPolygonStipple;
+   ctx->Driver.Scissor                 = gammaDDScissor;
+   ctx->Driver.ShadeModel              = gammaDDShadeModel;
+   ctx->Driver.ClearStencil            = NULL;
+   ctx->Driver.StencilFunc             = NULL;
+   ctx->Driver.StencilMask             = NULL;
+   ctx->Driver.StencilOp               = NULL;
+   ctx->Driver.Viewport                        = gammaDDViewport;
+}
diff --git a/src/mesa/drivers/dri/gamma/gamma_tex.c b/src/mesa/drivers/dri/gamma/gamma_tex.c
new file mode 100644 (file)
index 0000000..22ca144
--- /dev/null
@@ -0,0 +1,428 @@
+/* $XFree86: xc/lib/GL/mesa/src/drv/gamma/gamma_tex.c,v 1.4 2002/11/05 17:46:07 tsi Exp $ */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "glheader.h"
+#include "mtypes.h"
+#include "imports.h"
+#include "simple_list.h"
+#include "enums.h"
+#include "texstore.h"
+#include "teximage.h"
+#include "texformat.h"
+#include "swrast/swrast.h"
+
+#include "mm.h"
+#include "gamma_context.h"
+#include "colormac.h"
+
+
+/*
+ * Compute the 'S2.4' lod bias factor from the floating point OpenGL bias.
+ */
+#if 0
+static GLuint gammaComputeLodBias(GLfloat bias)
+{
+   return bias;
+}
+#endif
+
+static void gammaSetTexWrapping(gammaTextureObjectPtr t, 
+                              GLenum wraps, GLenum wrapt)
+{
+   CARD32 t1 = t->TextureAddressMode;
+   CARD32 t2 = t->TextureReadMode;
+
+   t1 &= ~(TAM_SWrap_Mask | TAM_TWrap_Mask);
+   t2 &= ~(TRM_UWrap_Mask | TRM_VWrap_Mask);
+   
+   if (wraps != GL_CLAMP) {
+      t1 |= TAM_SWrap_Repeat;
+      t2 |= TRM_UWrap_Repeat;
+   }
+
+   if (wrapt != GL_CLAMP) {
+      t1 |= TAM_TWrap_Repeat;
+      t2 |= TRM_VWrap_Repeat;
+   }
+
+   t->TextureAddressMode = t1;
+   t->TextureReadMode = t2;
+}
+
+
+static void gammaSetTexFilter(gammaContextPtr gmesa, 
+                            gammaTextureObjectPtr t, 
+                            GLenum minf, GLenum magf,
+                             GLfloat bias)
+{
+   CARD32 t1 = t->TextureAddressMode;
+   CARD32 t2 = t->TextureReadMode;
+
+   t2 &= ~(TRM_Mag_Mask | TRM_Min_Mask);
+
+   switch (minf) {
+   case GL_NEAREST:
+      t1 &= ~TAM_LODEnable;
+      t2 &= ~TRM_MipMapEnable;
+      t2 |= TRM_Min_Nearest;
+      break;
+   case GL_LINEAR:
+      t1 &= ~TAM_LODEnable;
+      t2 &= ~TRM_MipMapEnable;
+      t2 |= TRM_Min_Linear;
+      break;
+   case GL_NEAREST_MIPMAP_NEAREST:
+      t2 |= TRM_Min_NearestMMNearest;
+      break;
+   case GL_LINEAR_MIPMAP_NEAREST:
+      t2 |= TRM_Min_LinearMMNearest;
+      break;
+   case GL_NEAREST_MIPMAP_LINEAR:
+      t2 |= TRM_Min_NearestMMLinear;
+      break;
+   case GL_LINEAR_MIPMAP_LINEAR:
+      t2 |= TRM_Min_LinearMMLinear;
+      break;
+   default:
+      break;
+   }
+
+   switch (magf) {
+   case GL_NEAREST:
+      t2 |= TRM_Mag_Nearest;
+      break;
+   case GL_LINEAR:
+      t2 |= TRM_Mag_Linear;
+      break;
+   default:
+      break;
+   }  
+
+   t->TextureAddressMode = t1;
+   t->TextureReadMode = t2;
+}
+
+
+static void gammaSetTexBorderColor(gammaContextPtr gmesa,
+                                 gammaTextureObjectPtr t, 
+                                 GLubyte color[4])
+{
+    t->TextureBorderColor = PACK_COLOR_8888(color[0], color[1], color[2], color[3]);
+}
+
+
+static void gammaTexParameter( GLcontext *ctx, GLenum target,
+                             struct gl_texture_object *tObj,
+                             GLenum pname, const GLfloat *params )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   gammaTextureObjectPtr t = (gammaTextureObjectPtr) tObj->DriverData;
+   if (!t)
+      return;
+
+   /* Can't do the update now as we don't know whether to flush
+    * vertices or not.  Setting gmesa->new_state means that
+    * gammaUpdateTextureState() will be called before any triangles are
+    * rendered.  If a statechange has occurred, it will be detected at
+    * that point, and buffered vertices flushed.  
+    */
+   switch (pname) {
+   case GL_TEXTURE_MIN_FILTER:
+   case GL_TEXTURE_MAG_FILTER:
+      {
+         GLfloat bias = ctx->Texture.Unit[ctx->Texture.CurrentUnit].LodBias;
+         gammaSetTexFilter( gmesa, t, tObj->MinFilter, tObj->MagFilter, bias );
+      }
+      break;
+
+   case GL_TEXTURE_WRAP_S:
+   case GL_TEXTURE_WRAP_T:
+      gammaSetTexWrapping( t, tObj->WrapS, tObj->WrapT );
+      break;
+  
+   case GL_TEXTURE_BORDER_COLOR:
+      gammaSetTexBorderColor( gmesa, t, tObj->_BorderChan );
+      break;
+
+   case GL_TEXTURE_BASE_LEVEL:
+   case GL_TEXTURE_MAX_LEVEL:
+   case GL_TEXTURE_MIN_LOD:
+   case GL_TEXTURE_MAX_LOD:
+      /* This isn't the most efficient solution but there doesn't appear to
+       * be a nice alternative for Radeon.  Since there's no LOD clamping,
+       * we just have to rely on loading the right subset of mipmap levels
+       * to simulate a clamped LOD.
+       */
+      gammaSwapOutTexObj( gmesa, t );
+      break;
+
+   default:
+      return;
+   }
+
+   if (t == gmesa->CurrentTexObj[0])
+      gmesa->dirty |= GAMMA_UPLOAD_TEX0;
+
+#if 0
+   if (t == gmesa->CurrentTexObj[1]) {
+      gmesa->dirty |= GAMMA_UPLOAD_TEX1;
+   }
+#endif
+}
+
+
+static void gammaTexEnv( GLcontext *ctx, GLenum target, 
+                       GLenum pname, const GLfloat *param )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT( ctx );
+   GLuint unit = ctx->Texture.CurrentUnit;
+
+   /* Only one env color.  Need a fallback if env colors are different
+    * and texture setup references env color in both units.  
+    */
+   switch (pname) {
+   case GL_TEXTURE_ENV_COLOR: {
+      struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
+      GLfloat *fc = texUnit->EnvColor;
+      GLuint r, g, b, a, col;
+      CLAMPED_FLOAT_TO_UBYTE(r, fc[0]);
+      CLAMPED_FLOAT_TO_UBYTE(g, fc[1]);
+      CLAMPED_FLOAT_TO_UBYTE(b, fc[2]);
+      CLAMPED_FLOAT_TO_UBYTE(a, fc[3]);
+
+      col = ((a << 24) | 
+            (r << 16) | 
+            (g <<  8) | 
+            (b <<  0));
+
+      break;
+   }
+   case GL_TEXTURE_ENV_MODE:
+      gmesa->TexEnvImageFmt[unit] = 0; /* force recalc of env state */
+      break;
+
+   case GL_TEXTURE_LOD_BIAS_EXT:
+#if 0  /* ?!?!?! */
+      {
+         struct gl_texture_object *tObj = ctx->Texture.Unit[unit]._Current;
+         gammaTextureObjectPtr t = (gammaTextureObjectPtr) tObj->DriverData;
+         (void) t;
+        /* XXX Looks like there's something missing here */
+      }
+#endif
+      break;
+
+   default:
+      break;
+   }
+} 
+
+#if 0
+static void gammaTexImage1D( GLcontext *ctx, GLenum target, GLint level,
+                           GLint internalFormat,
+                           GLint width, GLint border,
+                           GLenum format, GLenum type, 
+                           const GLvoid *pixels,
+                           const struct gl_pixelstore_attrib *pack,
+                           struct gl_texture_object *texObj,
+                           struct gl_texture_image *texImage )
+{
+   gammaTextureObjectPtr t = (gammaTextureObjectPtr) texObj->DriverData;
+   if (t) {
+      gammaSwapOutTexObj( GAMMA_CONTEXT(ctx), t );
+   }
+   _mesa_store_teximage1d( ctx, target, level, internalFormat,
+                          width, border, format, type,
+                          pixels, pack, texObj, texImage );
+}
+#endif
+
+#if 0
+static void gammaTexSubImage1D( GLcontext *ctx, 
+                              GLenum target,
+                              GLint level,     
+                              GLint xoffset,
+                              GLsizei width,
+                              GLenum format, GLenum type,
+                              const GLvoid *pixels,
+                              const struct gl_pixelstore_attrib *pack,
+                              struct gl_texture_object *texObj,
+                              struct gl_texture_image *texImage )
+{
+   gammaTextureObjectPtr t = (gammaTextureObjectPtr) texObj->DriverData;
+   if (t) {
+      gammaSwapOutTexObj( GAMMA_CONTEXT(ctx), t );
+   }
+   _mesa_store_texsubimage1d(ctx, target, level, xoffset, width, 
+                            format, type, pixels, pack, texObj,
+                            texImage);
+}
+#endif
+
+static void gammaTexImage2D( GLcontext *ctx, GLenum target, GLint level,
+                           GLint internalFormat,
+                           GLint width, GLint height, GLint border,
+                           GLenum format, GLenum type, const GLvoid *pixels,
+                           const struct gl_pixelstore_attrib *packing,
+                           struct gl_texture_object *texObj,
+                           struct gl_texture_image *texImage )
+{
+   gammaTextureObjectPtr t = (gammaTextureObjectPtr) texObj->DriverData;
+   if (t) {
+      gammaSwapOutTexObj( GAMMA_CONTEXT(ctx), t );
+   }
+   _mesa_store_teximage2d( ctx, target, level, internalFormat,
+                          width, height, border, format, type,
+                          pixels, packing, texObj, texImage );
+}
+
+static void gammaTexSubImage2D( GLcontext *ctx, 
+                              GLenum target,
+                              GLint level,     
+                              GLint xoffset, GLint yoffset,
+                              GLsizei width, GLsizei height,
+                              GLenum format, GLenum type,
+                              const GLvoid *pixels,
+                              const struct gl_pixelstore_attrib *packing,
+                              struct gl_texture_object *texObj,
+                              struct gl_texture_image *texImage )
+{
+   gammaTextureObjectPtr t = (gammaTextureObjectPtr) texObj->DriverData;
+   if (t) {
+      gammaSwapOutTexObj( GAMMA_CONTEXT(ctx), t );
+   }
+   _mesa_store_texsubimage2d(ctx, target, level, xoffset, yoffset, width, 
+                            height, format, type, pixels, packing, texObj,
+                            texImage);
+}
+
+
+static void gammaBindTexture( GLcontext *ctx, GLenum target,
+                            struct gl_texture_object *tObj )
+{
+      gammaContextPtr gmesa = GAMMA_CONTEXT( ctx );
+      gammaTextureObjectPtr t = (gammaTextureObjectPtr) tObj->DriverData;
+
+      if (!t) {
+         GLfloat bias = ctx->Texture.Unit[ctx->Texture.CurrentUnit].LodBias;
+        t = CALLOC_STRUCT(gamma_texture_object_t);
+
+        /* Initialize non-image-dependent parts of the state:
+         */
+        t->globj = tObj;
+
+        t->TextureAddressMode = TextureAddressModeEnable | TAM_Operation_3D |
+                          TAM_DY_Enable | TAM_LODEnable;
+         t->TextureReadMode = TextureReadModeEnable | TRM_PrimaryCacheEnable |
+                       TRM_MipMapEnable | TRM_BorderClamp | TRM_Border;
+         t->TextureColorMode = TextureColorModeEnable;
+         t->TextureFilterMode = TextureFilterModeEnable;
+
+         if (target == GL_TEXTURE_2D) {
+            t->TextureAddressMode |= TAM_TexMapType_2D;
+            t->TextureReadMode |= TRM_TexMapType_2D;
+         } else
+         if (target == GL_TEXTURE_1D) {
+            t->TextureAddressMode |= TAM_TexMapType_1D;
+            t->TextureReadMode |= TRM_TexMapType_1D;
+         }
+
+         t->TextureColorMode = TextureColorModeEnable;
+
+         t->TextureFilterMode = TextureFilterModeEnable;
+
+#ifdef MESA_LITTLE_ENDIAN
+         t->TextureFormat = (TF_LittleEndian |
+#else
+         t->TextureFormat = (TF_BigEndian |
+#endif
+                       TF_ColorOrder_RGB |
+                       TF_OutputFmt_Texel);
+
+        t->dirty_images = ~0;
+
+        tObj->DriverData = t;
+        make_empty_list( t );
+
+        gammaSetTexWrapping( t, tObj->WrapS, tObj->WrapT );
+        gammaSetTexFilter( gmesa, t, tObj->MinFilter, tObj->MagFilter, bias );
+        gammaSetTexBorderColor( gmesa, t, tObj->_BorderChan );
+      }
+}
+
+
+static void gammaDeleteTexture( GLcontext *ctx, struct gl_texture_object *tObj )
+{
+   gammaTextureObjectPtr t = (gammaTextureObjectPtr)tObj->DriverData;
+
+   if (t) {
+      gammaContextPtr gmesa = GAMMA_CONTEXT( ctx );
+#if 0
+      if (gmesa)
+         GAMMA_FIREVERTICES( gmesa );
+#endif
+      gammaDestroyTexObj( gmesa, t );
+      tObj->DriverData = 0;
+   }
+}
+
+static GLboolean gammaIsTextureResident( GLcontext *ctx, 
+                                       struct gl_texture_object *tObj )
+{
+   gammaTextureObjectPtr t = (gammaTextureObjectPtr)tObj->DriverData;
+   return t && t->MemBlock;
+}
+
+static void gammaInitTextureObjects( GLcontext *ctx )
+{
+   struct gl_texture_object *texObj;
+   GLuint tmp = ctx->Texture.CurrentUnit;
+
+   ctx->Texture.CurrentUnit = 0;
+
+   texObj = ctx->Texture.Unit[0].Current1D;
+   gammaBindTexture( ctx, GL_TEXTURE_1D, texObj );
+
+   texObj = ctx->Texture.Unit[0].Current2D;
+   gammaBindTexture( ctx, GL_TEXTURE_2D, texObj );
+
+#if 0
+   ctx->Texture.CurrentUnit = 1;
+
+   texObj = ctx->Texture.Unit[1].Current1D;
+   gammaBindTexture( ctx, GL_TEXTURE_1D, texObj );
+
+   texObj = ctx->Texture.Unit[1].Current2D;
+   gammaBindTexture( ctx, GL_TEXTURE_2D, texObj );
+#endif
+
+   ctx->Texture.CurrentUnit = tmp;
+}
+
+
+void gammaDDInitTextureFuncs( GLcontext *ctx )
+{
+   ctx->Driver.TexEnv = gammaTexEnv;
+   ctx->Driver.ChooseTextureFormat = _mesa_choose_tex_format;
+   ctx->Driver.TexImage1D = _mesa_store_teximage1d;
+   ctx->Driver.TexImage2D = gammaTexImage2D;
+   ctx->Driver.TexImage3D = _mesa_store_teximage3d;
+   ctx->Driver.TexSubImage1D = _mesa_store_texsubimage1d;
+   ctx->Driver.TexSubImage2D = gammaTexSubImage2D;
+   ctx->Driver.TexSubImage3D = _mesa_store_texsubimage3d;
+   ctx->Driver.CopyTexImage1D = _swrast_copy_teximage1d;
+   ctx->Driver.CopyTexImage2D = _swrast_copy_teximage2d;
+   ctx->Driver.CopyTexSubImage1D = _swrast_copy_texsubimage1d;
+   ctx->Driver.CopyTexSubImage2D = _swrast_copy_texsubimage2d;
+   ctx->Driver.CopyTexSubImage3D = _swrast_copy_texsubimage3d;
+   ctx->Driver.BindTexture = gammaBindTexture;
+   ctx->Driver.DeleteTexture = gammaDeleteTexture;
+   ctx->Driver.TexParameter = gammaTexParameter;
+   ctx->Driver.UpdateTexturePalette = 0;
+   ctx->Driver.IsTextureResident = gammaIsTextureResident;
+   ctx->Driver.TestProxyTexImage = _mesa_test_proxy_teximage;
+
+   gammaInitTextureObjects( ctx );
+}
diff --git a/src/mesa/drivers/dri/gamma/gamma_texmem.c b/src/mesa/drivers/dri/gamma/gamma_texmem.c
new file mode 100644 (file)
index 0000000..506b5c4
--- /dev/null
@@ -0,0 +1,535 @@
+/* $XFree86: xc/lib/GL/mesa/src/drv/gamma/gamma_texmem.c,v 1.5 2002/11/05 17:46:07 tsi Exp $ */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "glheader.h"
+#include "colormac.h"
+#include "macros.h"
+#include "mtypes.h"
+#include "simple_list.h"
+#include "enums.h"
+
+#include "mm.h"
+#include "glint_dri.h"
+#include "gamma_context.h"
+#include "gamma_lock.h"
+
+void gammaDestroyTexObj(gammaContextPtr gmesa, gammaTextureObjectPtr t)
+{
+   if (!t) return;
+
+   /* This is sad - need to sync *in case* we upload a texture
+    * to this newly free memory...
+    */
+   if (t->MemBlock) {
+      mmFreeMem(t->MemBlock);
+      t->MemBlock = 0;
+
+      if (gmesa && t->age > gmesa->dirtyAge)
+        gmesa->dirtyAge = t->age;
+   }
+
+   if (t->globj)
+      t->globj->DriverData = 0;
+
+   if (gmesa) {
+      if (gmesa->CurrentTexObj[0] == t) {
+         gmesa->CurrentTexObj[0] = 0;
+         gmesa->dirty &= ~GAMMA_UPLOAD_TEX0;
+      }
+
+#if 0
+      if (gmesa->CurrentTexObj[1] == t) {
+         gmesa->CurrentTexObj[1] = 0;
+         gmesa->dirty &= ~GAMMA_UPLOAD_TEX1;
+      }
+#endif
+   }
+
+   remove_from_list(t);
+   free(t);
+}
+
+
+void gammaSwapOutTexObj(gammaContextPtr gmesa, gammaTextureObjectPtr t)
+{
+/*     fprintf(stderr, "%s\n", __FUNCTION__); */
+
+   if (t->MemBlock) {
+      mmFreeMem(t->MemBlock);
+      t->MemBlock = 0;
+
+      if (t->age > gmesa->dirtyAge)
+        gmesa->dirtyAge = t->age;
+   }
+
+   t->dirty_images = ~0;
+   move_to_tail(&(gmesa->SwappedOut), t);
+}
+
+
+
+/* Upload an image from mesa's internal copy.
+ */
+static void gammaUploadTexLevel( gammaContextPtr gmesa, gammaTextureObjectPtr t, int level )
+{
+   const struct gl_texture_image *image = t->image[level].image;
+   int i,j;
+   int l2d;
+#if 0
+   int offset = 0;
+#endif
+   int words, depthLog2;
+
+   /* fprintf(stderr, "%s\n", __FUNCTION__);  */
+
+   l2d = 5; /* 32bits per texel == 1<<5 */
+
+   if (level == 0) {
+      t->TextureAddressMode &= ~(TAM_WidthMask | TAM_HeightMask);
+      t->TextureAddressMode |= (image->WidthLog2 << 9) | 
+                              (image->HeightLog2 << 13);
+      t->TextureReadMode &= ~(TRM_WidthMask | TRM_HeightMask | 
+                             TRM_DepthMask | TRM_Border |
+                             TRM_Patch);
+      t->TextureReadMode |= (image->WidthLog2 << 1) | 
+                           (image->HeightLog2 << 5) | 
+                           (l2d << 9);
+      t->TextureFormat &= ~(TF_CompnentsMask | TF_OneCompFmt_Mask);
+   }
+
+   t->TextureBaseAddr[level] = /* ??? */
+       (unsigned long)(t->image[level].offset + t->BufAddr) << 5;
+
+   CALC_LOG2(depthLog2, 1<<l2d);
+   words = (image->Width * image->Height) >> (5-depthLog2);
+
+   CHECK_DMA_BUFFER(gmesa, 3);
+   WRITE(gmesa->buf, LBWindowBase, t->TextureBaseAddr[level] >> 5);
+   WRITE(gmesa->buf, TextureCacheControl, (TCC_Enable | TCC_Invalidate));
+   WRITE(gmesa->buf, WaitForCompletion, 0);
+   FLUSH_DMA_BUFFER(gmesa);
+
+   switch (t->image[level].internalFormat) {
+   case GL_RGB:
+   case 3:
+   {
+      GLubyte  *src = (GLubyte *)image->Data;
+
+      if (level == 0)
+         t->TextureFormat |= TF_Compnents_3;
+      
+#if 0 /* This is the texture download code we SHOULD be using */
+      /* In the routines below, but this causes an DMA overrun - WHY ? */
+      while (offset < words) {
+         int count = gmesa->bufSize;
+        int i;
+        count -= 3;
+         if (count > words-offset) count = words-offset;
+
+        gmesa->buf->i = GlintTextureDownloadOffsetTag;
+        gmesa->buf++;
+        gmesa->buf->i = offset;
+        gmesa->buf++;
+         gmesa->buf->i = (GlintTextureDataTag | ((count-1) << 16));
+        gmesa->buf++;
+
+        for (i = 0; i < count; i++) {
+               gmesa->buf->i = PACK_COLOR_565(src[0],src[1],src[2]);
+               gmesa->buf++;
+               src += 3;
+        }
+
+        gmesa->bufCount = count+3; /* texture data + 3 values */
+        offset += count;
+
+         FLUSH_DMA_BUFFER(gmesa);
+      }   
+#else
+       /* The UGLY way, and SLOW !, but the above sometimes causes
+        * a DMA overrun error ??? FIXME ! */
+
+      CHECK_DMA_BUFFER(gmesa, 1);
+      WRITE(gmesa->buf, TextureDownloadOffset, 0);
+      for (i = 0; i < words; i++) {
+       unsigned int data;
+       data = PACK_COLOR_565(src[0],src[1],src[2]);
+       CHECK_DMA_BUFFER(gmesa, 1);
+       WRITE(gmesa->buf, TextureData, data);
+       src += 3;
+      }
+      FLUSH_DMA_BUFFER(gmesa);
+#endif
+   }
+   break;
+
+   case GL_RGBA:
+   case 4:
+   {
+      GLubyte  *src = (GLubyte *)image->Data;
+
+      if (level == 0)
+         t->TextureFormat |= TF_Compnents_4;
+
+       /* The UGLY way, and SLOW !, but the above sometimes causes
+        * a DMA overrun error ??? FIXME ! */
+      CHECK_DMA_BUFFER(gmesa, 1);
+      WRITE(gmesa->buf, TextureDownloadOffset, 0);
+      for (i = 0; i < words; i++) {
+       unsigned int data;
+       data = PACK_COLOR_8888(src[0],src[1],src[2],src[3]);
+       CHECK_DMA_BUFFER(gmesa, 1);
+       WRITE(gmesa->buf, TextureData, data);
+       src += 4;
+      }
+      FLUSH_DMA_BUFFER(gmesa);
+   }
+   break;
+
+   case GL_LUMINANCE:
+   {
+      GLubyte  *src = (GLubyte *)image->Data;
+
+      if (level == 0)
+         t->TextureFormat |= TF_Compnents_1 | TF_OneCompFmt_Lum;
+
+       /* The UGLY way, and SLOW !, but the above sometimes causes
+        * a DMA overrun error ??? FIXME ! */
+      CHECK_DMA_BUFFER(gmesa, 1);
+      WRITE(gmesa->buf, TextureDownloadOffset, 0);
+      for (i = 0; i < words; i++) {
+       unsigned int data;
+       data = PACK_COLOR_888(src[0],src[0],src[0]);
+       CHECK_DMA_BUFFER(gmesa, 1);
+       WRITE(gmesa->buf, TextureData, data);
+       src ++;
+      }
+      FLUSH_DMA_BUFFER(gmesa);
+   }
+   break;
+
+   case GL_INTENSITY:
+   {
+      GLubyte  *src = (GLubyte *)image->Data;
+
+      if (level == 0)
+         t->TextureFormat |= TF_Compnents_1 | TF_OneCompFmt_Intensity;
+
+       /* The UGLY way, and SLOW !, but the above sometimes causes
+        * a DMA overrun error ??? FIXME ! */
+      CHECK_DMA_BUFFER(gmesa, 1);
+      WRITE(gmesa->buf, TextureDownloadOffset, 0);
+      for (i = 0; i < words; i++) {
+       unsigned int data;
+       data = PACK_COLOR_8888(src[0],src[0],src[0],src[0]);
+       CHECK_DMA_BUFFER(gmesa, 1);
+       WRITE(gmesa->buf, TextureData, data);
+       src ++;
+      }
+      FLUSH_DMA_BUFFER(gmesa);
+   }
+   break;
+
+   case GL_LUMINANCE_ALPHA:
+   {
+      GLubyte  *src = (GLubyte *)image->Data;
+
+      if (level == 0)
+         t->TextureFormat |= TF_Compnents_2;
+
+       /* The UGLY way, and SLOW !, but the above sometimes causes
+        * a DMA overrun error ??? FIXME ! */
+      CHECK_DMA_BUFFER(gmesa, 1);
+      WRITE(gmesa->buf, TextureDownloadOffset, 0);
+      for (i = 0; i < words; i++) {
+       unsigned int data;
+       data = PACK_COLOR_8888(src[0],src[0],src[0],src[1]);
+       CHECK_DMA_BUFFER(gmesa, 1);
+       WRITE(gmesa->buf, TextureData, data);
+       src += 2;
+      }
+      FLUSH_DMA_BUFFER(gmesa);
+   }
+   break;
+
+   case GL_ALPHA:
+   {
+      GLubyte  *src = (GLubyte *)image->Data;
+
+      if (level == 0)
+         t->TextureFormat |= TF_Compnents_1 | TF_OneCompFmt_Alpha;
+
+       /* The UGLY way, and SLOW !, but the above sometimes causes
+        * a DMA overrun error ??? FIXME ! */
+      CHECK_DMA_BUFFER(gmesa, 1);
+      WRITE(gmesa->buf, TextureDownloadOffset, 0);
+      for (i = 0; i < words; i++) {
+       unsigned int data;
+       data = PACK_COLOR_8888(255,255,255,src[0]);
+       CHECK_DMA_BUFFER(gmesa, 1);
+       WRITE(gmesa->buf, TextureData, data);
+       src += 1;
+      }
+      FLUSH_DMA_BUFFER(gmesa);
+   }
+   break;
+
+   /* TODO: Translate color indices *now*:
+    */
+   case GL_COLOR_INDEX:
+      {
+        GLubyte *dst = (GLubyte *)(t->BufAddr + t->image[level].offset);
+        GLubyte *src = (GLubyte *)image->Data;
+
+        for (j = 0 ; j < image->Height ; j++, dst += t->Pitch) {
+           for (i = 0 ; i < image->Width ; i++) {
+              dst[i] = src[0];
+              src += 1;
+           }
+        }
+      }
+   break;
+
+   default:
+      fprintf(stderr, "Not supported texture format %s\n",
+              _mesa_lookup_enum_by_nr(image->Format));
+   }
+
+   CHECK_DMA_BUFFER(gmesa, 2);
+   WRITE(gmesa->buf, WaitForCompletion, 0);
+   WRITE(gmesa->buf, LBWindowBase, gmesa->LBWindowBase);
+}
+
+void gammaPrintLocalLRU( gammaContextPtr gmesa )
+{
+   gammaTextureObjectPtr t;
+   int sz = 1 << (gmesa->gammaScreen->logTextureGranularity);
+
+   foreach( t, &gmesa->TexObjList ) {
+      if (!t->globj)
+        fprintf(stderr, "Placeholder %d at %x sz %x\n",
+                t->MemBlock->ofs / sz,
+                t->MemBlock->ofs,
+                t->MemBlock->size);
+      else
+        fprintf(stderr, "Texture at %x sz %x\n",
+                t->MemBlock->ofs,
+                t->MemBlock->size);
+
+   }
+}
+
+void gammaPrintGlobalLRU( gammaContextPtr gmesa )
+{
+   int i, j;
+   GAMMATextureRegionPtr list = gmesa->sarea->texList;
+
+   for (i = 0, j = GAMMA_NR_TEX_REGIONS ; i < GAMMA_NR_TEX_REGIONS ; i++) {
+      fprintf(stderr, "list[%d] age %d next %d prev %d\n",
+             j, list[j].age, list[j].next, list[j].prev);
+      j = list[j].next;
+      if (j == GAMMA_NR_TEX_REGIONS) break;
+   }
+
+   if (j != GAMMA_NR_TEX_REGIONS)
+      fprintf(stderr, "Loop detected in global LRU\n");
+}
+
+
+void gammaResetGlobalLRU( gammaContextPtr gmesa )
+{
+   GAMMATextureRegionPtr list = gmesa->sarea->texList;
+   int sz = 1 << gmesa->gammaScreen->logTextureGranularity;
+   int i;
+
+   /* (Re)initialize the global circular LRU list.  The last element
+    * in the array (GAMMA_NR_TEX_REGIONS) is the sentinal.  Keeping it
+    * at the end of the array allows it to be addressed rationally
+    * when looking up objects at a particular location in texture
+    * memory.
+    */
+   for (i = 0 ; (i+1) * sz <= gmesa->gammaScreen->textureSize ; i++) {
+      list[i].prev = i-1;
+      list[i].next = i+1;
+      list[i].age = 0;
+   }
+
+   i--;
+   list[0].prev = GAMMA_NR_TEX_REGIONS;
+   list[i].prev = i-1;
+   list[i].next = GAMMA_NR_TEX_REGIONS;
+   list[GAMMA_NR_TEX_REGIONS].prev = i;
+   list[GAMMA_NR_TEX_REGIONS].next = 0;
+   gmesa->sarea->texAge = 0;
+}
+
+
+void gammaUpdateTexLRU( gammaContextPtr gmesa, gammaTextureObjectPtr t )
+{
+   int i;
+   int logsz = gmesa->gammaScreen->logTextureGranularity;
+   int start = t->MemBlock->ofs >> logsz;
+   int end = (t->MemBlock->ofs + t->MemBlock->size - 1) >> logsz;
+   GAMMATextureRegionPtr list = gmesa->sarea->texList;
+
+   gmesa->texAge = ++gmesa->sarea->texAge;
+
+   /* Update our local LRU
+    */
+   move_to_head( &(gmesa->TexObjList), t );
+
+   /* Update the global LRU
+    */
+   for (i = start ; i <= end ; i++) {
+
+      list[i].in_use = 1;
+      list[i].age = gmesa->texAge;
+
+      /* remove_from_list(i)
+       */
+      list[(unsigned)list[i].next].prev = list[i].prev;
+      list[(unsigned)list[i].prev].next = list[i].next;
+
+      /* insert_at_head(list, i)
+       */
+      list[i].prev = GAMMA_NR_TEX_REGIONS;
+      list[i].next = list[GAMMA_NR_TEX_REGIONS].next;
+      list[(unsigned)list[GAMMA_NR_TEX_REGIONS].next].prev = i;
+      list[GAMMA_NR_TEX_REGIONS].next = i;
+   }
+}
+
+
+/* Called for every shared texture region which has increased in age
+ * since we last held the lock.
+ *
+ * Figures out which of our textures have been ejected by other clients,
+ * and pushes a placeholder texture onto the LRU list to represent
+ * the other client's textures.
+ */
+void gammaTexturesGone( gammaContextPtr gmesa,
+                      GLuint offset,
+                      GLuint size,
+                      GLuint in_use )
+{
+   gammaTextureObjectPtr t, tmp;
+
+   foreach_s ( t, tmp, &gmesa->TexObjList ) {
+
+      if (t->MemBlock->ofs >= offset + size ||
+         t->MemBlock->ofs + t->MemBlock->size <= offset)
+        continue;
+
+      /* It overlaps - kick it off.  Need to hold onto the currently bound
+       * objects, however.
+       */
+      gammaSwapOutTexObj( gmesa, t );
+   }
+
+   if (in_use) {
+      t = (gammaTextureObjectPtr) calloc(1,sizeof(*t));
+      if (!t) return;
+
+      t->MemBlock = mmAllocMem( gmesa->texHeap, size, 0, offset);
+      insert_at_head( &gmesa->TexObjList, t );
+   }
+
+   /* Reload any lost textures referenced by current vertex buffer.
+    */
+#if 0
+   if (gmesa->vertex_buffer) {
+      int i, j;
+
+      fprintf(stderr, "\n\nreload tex\n");
+
+      for (i = 0 ; i < gmesa->statenr ; i++) {
+        for (j = 0 ; j < 2 ; j++) {
+           gammaTextureObjectPtr t = gmesa->state_tex[j][i];
+           if (t) {
+              if (t->MemBlock == 0)
+                 gammaUploadTexImages( gmesa, t );
+           }
+        }
+      }
+
+      /* Hard to do this with the lock held:
+       */
+/*        GAMMA_FIREVERTICES( gmesa ); */
+   }
+#endif
+}
+
+
+
+
+
+/* This is called with the lock held.  May have to eject our own and/or
+ * other client's texture objects to make room for the upload.
+ */
+void gammaUploadTexImages( gammaContextPtr gmesa, gammaTextureObjectPtr t )
+{
+   int i;
+   int ofs;
+   int numLevels;
+
+   /* /fprintf(stderr, "%s\n", __FUNCTION__); */
+#if 0
+   LOCK_HARDWARE( gmesa );
+#endif
+
+   /* Do we need to eject LRU texture objects?
+    */
+   if (!t->MemBlock) {
+      while (1)
+      {
+        t->MemBlock = mmAllocMem( gmesa->texHeap, t->totalSize, 12, 0 );
+        if (t->MemBlock)
+           break;
+
+        if (gmesa->TexObjList.prev == gmesa->CurrentTexObj[0] ||
+            gmesa->TexObjList.prev == gmesa->CurrentTexObj[1]) {
+           fprintf(stderr, "Hit bound texture in upload\n");
+           gammaPrintLocalLRU( gmesa );
+           return;
+        }
+
+        if (gmesa->TexObjList.prev == &(gmesa->TexObjList)) {
+           fprintf(stderr, "Failed to upload texture, sz %d\n", t->totalSize);
+           mmDumpMemInfo( gmesa->texHeap );
+           return;
+        }
+
+        gammaSwapOutTexObj( gmesa, gmesa->TexObjList.prev );
+      }
+
+      ofs = t->MemBlock->ofs;
+      t->BufAddr = (char *)(unsigned long)(gmesa->LBWindowBase + ofs); /* ??? */
+
+      if (t == gmesa->CurrentTexObj[0])
+        gmesa->dirty |= GAMMA_UPLOAD_TEX0;
+
+#if 0
+      if (t == gmesa->CurrentTexObj[1])
+        gmesa->dirty |= GAMMA_UPLOAD_TEX1;
+#endif
+
+      gammaUpdateTexLRU( gmesa, t );
+   }
+
+#if 0
+   if (gmesa->dirtyAge >= GET_DISPATCH_AGE(gmesa))
+      gammaWaitAgeLocked( gmesa, gmesa->dirtyAge );
+#endif
+
+   numLevels = t->lastLevel - t->firstLevel + 1;
+   for (i = 0 ; i < numLevels ; i++)
+      if (t->dirty_images & (1<<i))
+        gammaUploadTexLevel( gmesa, t, i );
+
+   t->dirty_images = 0;
+
+#if 0
+   UNLOCK_HARDWARE( gmesa );
+#endif
+}
diff --git a/src/mesa/drivers/dri/gamma/gamma_texstate.c b/src/mesa/drivers/dri/gamma/gamma_texstate.c
new file mode 100644 (file)
index 0000000..dfd82b4
--- /dev/null
@@ -0,0 +1,216 @@
+/* $XFree86: xc/lib/GL/mesa/src/drv/gamma/gamma_texstate.c,v 1.5 2002/11/05 17:46:07 tsi Exp $ */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "glheader.h"
+#include "macros.h"
+#include "mtypes.h"
+#include "simple_list.h"
+#include "enums.h"
+
+#include "mm.h"
+#include "gamma_context.h"
+
+static void gammaSetTexImages( gammaContextPtr gmesa, 
+                             struct gl_texture_object *tObj )
+{
+   GLuint height, width, pitch, i, log_pitch;
+   gammaTextureObjectPtr t = (gammaTextureObjectPtr) tObj->DriverData;
+   const struct gl_texture_image *baseImage = tObj->Image[tObj->BaseLevel];
+   GLint firstLevel, lastLevel, numLevels;
+   GLint log2Width, log2Height;
+
+   /* fprintf(stderr, "%s\n", __FUNCTION__);  */
+
+   t->texelBytes = 2;
+
+   /* Compute which mipmap levels we really want to send to the hardware.
+    * This depends on the base image size, GL_TEXTURE_MIN_LOD,
+    * GL_TEXTURE_MAX_LOD, GL_TEXTURE_BASE_LEVEL, and GL_TEXTURE_MAX_LEVEL.
+    * Yes, this looks overly complicated, but it's all needed.
+    */
+   if (tObj->MinFilter == GL_LINEAR || tObj->MinFilter == GL_NEAREST) {
+      firstLevel = lastLevel = tObj->BaseLevel;
+   }
+   else {
+      firstLevel = tObj->BaseLevel + (GLint) (tObj->MinLod + 0.5);
+      firstLevel = MAX2(firstLevel, tObj->BaseLevel);
+      lastLevel = tObj->BaseLevel + (GLint) (tObj->MaxLod + 0.5);
+      lastLevel = MAX2(lastLevel, tObj->BaseLevel);
+      lastLevel = MIN2(lastLevel, tObj->BaseLevel + baseImage->MaxLog2);
+      lastLevel = MIN2(lastLevel, tObj->MaxLevel);
+      lastLevel = MAX2(firstLevel, lastLevel); /* need at least one level */
+   }
+
+   /* save these values */
+   t->firstLevel = firstLevel;
+   t->lastLevel = lastLevel;
+
+   numLevels = lastLevel - firstLevel + 1;
+
+   log2Width = tObj->Image[firstLevel]->WidthLog2;
+   log2Height = tObj->Image[firstLevel]->HeightLog2;
+
+
+   /* Figure out the amount of memory required to hold all the mipmap
+    * levels.  Choose the smallest pitch to accomodate the largest
+    * mipmap:
+    */
+   width = tObj->Image[firstLevel]->Width * t->texelBytes;
+   for (pitch = 32, log_pitch=2 ; pitch < width ; pitch *= 2 )
+      log_pitch++;
+   
+   /* All images must be loaded at this pitch.  Count the number of
+    * lines required:
+    */
+   for ( height = i = 0 ; i < numLevels ; i++ ) {
+      t->image[i].image = tObj->Image[firstLevel + i];
+      t->image[i].offset = height * pitch;
+      t->image[i].internalFormat = baseImage->Format;
+      height += t->image[i].image->Height;
+      t->TextureBaseAddr[i] = /* ??? */
+       (unsigned long)(t->image[i].offset + t->BufAddr) << 5;
+
+   }
+
+   t->Pitch = pitch;
+   t->totalSize = height*pitch;
+   t->max_level = i-1;
+   gmesa->dirty |= GAMMA_UPLOAD_TEX0 /* | GAMMA_UPLOAD_TEX1*/;   
+
+   gammaUploadTexImages( gmesa, t );
+}
+
+static void gammaUpdateTexEnv( GLcontext *ctx, GLuint unit )
+{
+   const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
+   const struct gl_texture_object *tObj = texUnit->_Current;
+   const GLuint format = tObj->Image[tObj->BaseLevel]->Format;
+   gammaTextureObjectPtr t = (gammaTextureObjectPtr)tObj->DriverData;
+   GLuint tc;
+
+   /* fprintf(stderr, "%s\n", __FUNCTION__);  */
+
+   tc = t->TextureColorMode & ~(TCM_BaseFormatMask | TCM_ApplicationMask);
+
+   switch (format) {
+   case GL_RGB:
+      tc |= TCM_BaseFormat_RGB;
+      break;
+   case GL_LUMINANCE:
+      tc |= TCM_BaseFormat_Lum;
+      break;
+   case GL_ALPHA:
+      tc |= TCM_BaseFormat_Alpha;
+      break;
+   case GL_LUMINANCE_ALPHA:
+      tc |= TCM_BaseFormat_LumAlpha;
+      break;
+   case GL_INTENSITY:
+      tc |= TCM_BaseFormat_Intensity;
+      break;
+   case GL_RGBA:
+      tc |= TCM_BaseFormat_RGBA;
+      break;
+   case GL_COLOR_INDEX:
+      break;
+   }
+
+   switch (texUnit->EnvMode) {
+   case GL_REPLACE:
+      tc |= TCM_Replace;
+      break;
+   case GL_MODULATE:
+      tc |= TCM_Modulate;
+      break;
+   case GL_ADD:
+      /* do nothing ???*/
+      break;
+   case GL_DECAL:
+      tc |= TCM_Decal;
+      break;
+   case GL_BLEND:
+      tc |= TCM_Blend;
+      break;
+   default:
+      fprintf(stderr, "unknown tex env mode");
+      return;
+   }
+
+   t->TextureColorMode = tc;
+}
+
+
+
+
+static void gammaUpdateTexUnit( GLcontext *ctx, GLuint unit )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
+
+   /* fprintf(stderr, "%s\n", __FUNCTION__);  */
+
+   if (texUnit->_ReallyEnabled == TEXTURE_2D_BIT) 
+   {
+      struct gl_texture_object *tObj = texUnit->_Current;
+      gammaTextureObjectPtr t = (gammaTextureObjectPtr)tObj->DriverData;
+
+      /* Upload teximages (not pipelined)
+       */
+      if (t->dirty_images) {
+        gammaSetTexImages( gmesa, tObj );
+        if (!t->MemBlock) {
+           FALLBACK( gmesa, GAMMA_FALLBACK_TEXTURE, GL_TRUE );
+           return;
+        }
+      }
+
+#if 0
+      if (tObj->Image[tObj->BaseLevel]->Border > 0) {
+         FALLBACK( gmesa, GAMMA_FALLBACK_TEXTURE, GL_TRUE );
+         return;
+      }
+#endif
+
+      /* Update state if this is a different texture object to last
+       * time.
+       */
+      if (gmesa->CurrentTexObj[unit] != t) {
+        gmesa->dirty |= GAMMA_UPLOAD_TEX0 /* << unit */;
+        gmesa->CurrentTexObj[unit] = t;
+        gammaUpdateTexLRU( gmesa, t ); /* done too often */
+      }
+      
+      /* Update texture environment if texture object image format or 
+       * texture environment state has changed.
+       */
+      if (tObj->Image[tObj->BaseLevel]->Format != gmesa->TexEnvImageFmt[unit]) {
+        gmesa->TexEnvImageFmt[unit] = tObj->Image[tObj->BaseLevel]->Format;
+        gammaUpdateTexEnv( ctx, unit );
+      }
+   }
+   else if (texUnit->_ReallyEnabled) {
+      FALLBACK( gmesa, GAMMA_FALLBACK_TEXTURE, GL_TRUE );
+   }
+   else /*if (gmesa->CurrentTexObj[unit])*/ {
+      gmesa->CurrentTexObj[unit] = 0;
+      gmesa->TexEnvImageFmt[unit] = 0; 
+      gmesa->dirty &= ~(GAMMA_UPLOAD_TEX0<<unit); 
+   }
+}
+
+
+void gammaUpdateTextureState( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   /* fprintf(stderr, "%s\n", __FUNCTION__);  */
+   FALLBACK( gmesa, GAMMA_FALLBACK_TEXTURE, GL_FALSE );
+   gammaUpdateTexUnit( ctx, 0 );
+#if 0
+   gammaUpdateTexUnit( ctx, 1 );
+#endif
+}
+
+
+
diff --git a/src/mesa/drivers/dri/gamma/gamma_tris.c b/src/mesa/drivers/dri/gamma/gamma_tris.c
new file mode 100644 (file)
index 0000000..f039103
--- /dev/null
@@ -0,0 +1,653 @@
+/*
+ * Copyright 2001 by Alan Hourihane.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Alan Hourihane not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission.  Alan Hourihane makes no representations
+ * about the suitability of this software for any purpose.  It is provided
+ * "as is" without express or implied warranty.
+ *
+ * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
+ *           Keith Whitwell, <keith@tungstengraphics.com>
+ *
+ * 3DLabs Gamma driver.
+ */
+
+#include "gamma_context.h"
+#include "gamma_vb.h"
+#include "gamma_tris.h"
+
+#include "glheader.h"
+#include "mtypes.h"
+#include "macros.h"
+#include "colormac.h"
+
+#include "swrast/swrast.h"
+#include "swrast_setup/swrast_setup.h"
+#include "tnl/tnl.h"
+#include "tnl/t_context.h"
+#include "tnl/t_pipeline.h"
+
+
+/***********************************************************************
+ *                   Build hardware rasterization functions            *
+ ***********************************************************************/
+
+#define GAMMA_RAST_ALPHA_BIT   0x01
+#define GAMMA_RAST_TEX_BIT     0x02
+#define GAMMA_RAST_FLAT_BIT    0x04
+
+static gamma_point_func gamma_point_tab[0x8];
+static gamma_line_func gamma_line_tab[0x8];
+static gamma_tri_func gamma_tri_tab[0x8];
+static gamma_quad_func gamma_quad_tab[0x8];
+
+#define IND (0)
+#define TAG(x) x
+#include "gamma_tritmp.h"
+
+#define IND (GAMMA_RAST_ALPHA_BIT)
+#define TAG(x) x##_alpha
+#include "gamma_tritmp.h"
+
+#define IND (GAMMA_RAST_TEX_BIT)
+#define TAG(x) x##_tex
+#include "gamma_tritmp.h"
+
+#define IND (GAMMA_RAST_ALPHA_BIT|GAMMA_RAST_TEX_BIT)
+#define TAG(x) x##_alpha_tex
+#include "gamma_tritmp.h"
+
+#define IND (GAMMA_RAST_FLAT_BIT)
+#define TAG(x) x##_flat
+#include "gamma_tritmp.h"
+
+#define IND (GAMMA_RAST_ALPHA_BIT|GAMMA_RAST_FLAT_BIT)
+#define TAG(x) x##_alpha_flat
+#include "gamma_tritmp.h"
+
+#define IND (GAMMA_RAST_TEX_BIT|GAMMA_RAST_FLAT_BIT)
+#define TAG(x) x##_tex_flat
+#include "gamma_tritmp.h"
+
+#define IND (GAMMA_RAST_ALPHA_BIT|GAMMA_RAST_TEX_BIT|GAMMA_RAST_FLAT_BIT)
+#define TAG(x) x##_alpha_tex_flat
+#include "gamma_tritmp.h"
+
+
+static void init_rast_tab( void )
+{
+   gamma_init();
+   gamma_init_alpha();
+   gamma_init_tex();
+   gamma_init_alpha_tex();
+   gamma_init_flat();
+   gamma_init_alpha_flat();
+   gamma_init_tex_flat();
+   gamma_init_alpha_tex_flat();
+}
+
+/***********************************************************************
+ *                    Rasterization fallback helpers                   *
+ ***********************************************************************/
+
+
+/* This code is hit only when a mix of accelerated and unaccelerated
+ * primitives are being drawn, and only for the unaccelerated
+ * primitives.  
+ */
+static void 
+gamma_fallback_quad( gammaContextPtr gmesa, 
+                   const gammaVertex *v0, 
+                   const gammaVertex *v1, 
+                   const gammaVertex *v2, 
+                   const gammaVertex *v3 )
+{
+   GLcontext *ctx = gmesa->glCtx;
+   SWvertex v[4];
+   gamma_translate_vertex( ctx, v0, &v[0] );
+   gamma_translate_vertex( ctx, v1, &v[1] );
+   gamma_translate_vertex( ctx, v2, &v[2] );
+   gamma_translate_vertex( ctx, v3, &v[3] );
+   _swrast_Quad( ctx, &v[0], &v[1], &v[2], &v[3] );
+}
+
+static void 
+gamma_fallback_tri( gammaContextPtr gmesa, 
+                   const gammaVertex *v0, 
+                   const gammaVertex *v1, 
+                   const gammaVertex *v2 )
+{
+   GLcontext *ctx = gmesa->glCtx;
+   SWvertex v[3];
+   gamma_translate_vertex( ctx, v0, &v[0] );
+   gamma_translate_vertex( ctx, v1, &v[1] );
+   gamma_translate_vertex( ctx, v2, &v[2] );
+   _swrast_Triangle( ctx, &v[0], &v[1], &v[2] );
+}
+
+static void 
+gamma_fallback_line( gammaContextPtr gmesa,
+                    const gammaVertex *v0,
+                    const gammaVertex *v1 )
+{
+   GLcontext *ctx = gmesa->glCtx;
+   SWvertex v[2];
+   gamma_translate_vertex( ctx, v0, &v[0] );
+   gamma_translate_vertex( ctx, v1, &v[1] );
+   _swrast_Line( ctx, &v[0], &v[1] );
+}
+
+
+#if 0
+static void 
+gamma_fallback_point( gammaContextPtr gmesa, 
+                     const gammaVertex *v0 )
+{
+   GLcontext *ctx = gmesa->glCtx;
+   SWvertex v[1];
+   gamma_translate_vertex( ctx, v0, &v[0] );
+   _swrast_Point( ctx, &v[0] );
+}
+#endif
+
+
+/***********************************************************************
+ *                    Choose rasterization functions                   *
+ ***********************************************************************/
+
+#define _GAMMA_NEW_RASTER_STATE (_NEW_FOG | \
+                                _NEW_TEXTURE | \
+                                _DD_NEW_TRI_SMOOTH | \
+                                _DD_NEW_LINE_SMOOTH | \
+                                _DD_NEW_POINT_SMOOTH | \
+                                _DD_NEW_TRI_STIPPLE | \
+                                _DD_NEW_LINE_STIPPLE)
+
+#define LINE_FALLBACK (0)
+#define TRI_FALLBACK (0)
+
+static void gammaChooseRasterState(GLcontext *ctx)
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   GLuint flags = ctx->_TriangleCaps;
+   GLuint ind = 0;
+
+   if ( ctx->Line.SmoothFlag || 
+        ctx->Polygon.SmoothFlag || 
+        ctx->Point.SmoothFlag )
+      gmesa->Begin |= B_AntiAliasEnable;
+   else
+      gmesa->Begin &= ~B_AntiAliasEnable;
+
+   if ( ctx->Texture.Unit[0]._ReallyEnabled ) {
+      ind |= GAMMA_RAST_TEX_BIT;
+      gmesa->Begin |= B_TextureEnable;
+   } else
+      gmesa->Begin &= ~B_TextureEnable;
+
+   if (flags & DD_LINE_STIPPLE)
+      gmesa->Begin |= B_LineStippleEnable;
+   else
+      gmesa->Begin &= ~B_LineStippleEnable;
+   
+   if (flags & DD_TRI_STIPPLE)
+      gmesa->Begin |= B_AreaStippleEnable;
+   else
+      gmesa->Begin &= ~B_AreaStippleEnable;
+
+   if (ctx->Fog.Enabled) 
+      gmesa->Begin |= B_FogEnable;
+   else
+      gmesa->Begin &= ~B_FogEnable;
+
+   if (ctx->Color.BlendEnabled || ctx->Color.AlphaEnabled)
+      ind |= GAMMA_RAST_ALPHA_BIT;
+
+   if ( flags & DD_FLATSHADE )
+      ind |= GAMMA_RAST_FLAT_BIT;
+
+   gmesa->draw_line = gamma_line_tab[ind];
+   gmesa->draw_tri = gamma_tri_tab[ind];
+   gmesa->draw_quad = gamma_quad_tab[ind];
+   gmesa->draw_point = gamma_point_tab[ind];
+
+   /* Hook in fallbacks for specific primitives.  CURRENTLY DISABLED
+    */
+   if (flags & LINE_FALLBACK) 
+      gmesa->draw_line = gamma_fallback_line;
+        
+   if (flags & TRI_FALLBACK) {
+      gmesa->draw_tri = gamma_fallback_tri;
+      gmesa->draw_quad = gamma_fallback_quad;
+   }
+}
+
+
+
+
+/***********************************************************************
+ *          Macros for t_dd_tritmp.h to draw basic primitives          *
+ ***********************************************************************/
+
+#define TRI( a, b, c )                         \
+do {                                           \
+   gmesa->draw_tri( gmesa, a, b, c );  \
+} while (0)
+
+#define QUAD( a, b, c, d )                     \
+do {                                           \
+   gmesa->draw_quad( gmesa, a, b, c, d );      \
+} while (0)
+
+#define LINE( v0, v1 )                         \
+do {                                           \
+   gmesa->draw_line( gmesa, v0, v1 );  \
+} while (0)
+
+#define POINT( v0 )                            \
+do {                                           \
+   gmesa->draw_point( gmesa, v0 );             \
+} while (0)
+
+
+/***********************************************************************
+ *              Build render functions from dd templates               *
+ ***********************************************************************/
+
+#define GAMMA_OFFSET_BIT       0x01
+#define GAMMA_TWOSIDE_BIT      0x02
+#define GAMMA_UNFILLED_BIT     0x04
+#define GAMMA_FALLBACK_BIT     0x08
+#define GAMMA_MAX_TRIFUNC      0x10
+
+
+static struct {
+   points_func         points;
+   line_func           line;
+   triangle_func       triangle;
+   quad_func           quad;
+} rast_tab[GAMMA_MAX_TRIFUNC];
+
+
+#define DO_FALLBACK (IND & GAMMA_FALLBACK_BIT)
+#define DO_OFFSET    0 /* (IND & GAMMA_OFFSET_BIT) */
+#define DO_UNFILLED  0 /* (IND & GAMMA_UNFILLED_BIT) */
+#define DO_TWOSIDE  (IND & GAMMA_TWOSIDE_BIT)
+#define DO_FLAT      0
+#define DO_TRI       1
+#define DO_QUAD      1
+#define DO_LINE      1
+#define DO_POINTS    1
+#define DO_FULL_QUAD 1
+
+#define HAVE_RGBA         1
+#define HAVE_SPEC         0
+#define HAVE_BACK_COLORS  0
+#define HAVE_HW_FLATSHADE 1
+#define VERTEX            gammaVertex
+#define TAB               rast_tab
+
+#define DEPTH_SCALE 1.0
+#define UNFILLED_TRI unfilled_tri
+#define UNFILLED_QUAD unfilled_quad
+#define VERT_X(_v) _v->v.x
+#define VERT_Y(_v) _v->v.y
+#define VERT_Z(_v) _v->v.z
+#define AREA_IS_CCW( a ) (a > 0)
+#define GET_VERTEX(e) (gmesa->verts + (e<<gmesa->vertex_stride_shift))
+
+#define VERT_SET_RGBA( v, c )    COPY_4V( v->ub4[4], c)
+#define VERT_COPY_RGBA( v0, v1 ) v0->ui[4] = v1->ui[4]
+#define VERT_SAVE_RGBA( idx )    color[idx] = v[idx]->ui[4]
+#define VERT_RESTORE_RGBA( idx ) v[idx]->ui[4] = color[idx]   
+
+#define LOCAL_VARS(n)                                  \
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx); \
+   GLuint color[n];                            \
+   (void) color;
+
+
+/***********************************************************************
+ *                Helpers for rendering unfilled primitives            *
+ ***********************************************************************/
+
+static const GLuint hw_prim[GL_POLYGON+1] = {
+   B_PrimType_Points,
+   B_PrimType_Lines,
+   B_PrimType_Lines,
+   B_PrimType_Lines,
+   B_PrimType_Triangles,
+   B_PrimType_Triangles,
+   B_PrimType_Triangles,
+   B_PrimType_Triangles,
+   B_PrimType_Triangles,
+   B_PrimType_Triangles
+};
+
+static void gammaResetLineStipple( GLcontext *ctx );
+static void gammaRasterPrimitive( GLcontext *ctx, GLuint hwprim );
+static void gammaRenderPrimitive( GLcontext *ctx, GLenum prim );
+
+#define RASTERIZE(x) if (gmesa->hw_primitive != hw_prim[x]) \
+                        gammaRasterPrimitive( ctx, hw_prim[x] )
+#define RENDER_PRIMITIVE gmesa->render_primitive
+#define TAG(x) x
+#define IND GAMMA_FALLBACK_BIT
+#include "tnl_dd/t_dd_unfilled.h"
+#undef IND
+
+/***********************************************************************
+ *                      Generate GL render functions                   *
+ ***********************************************************************/
+
+#define IND (0)
+#define TAG(x) x
+#include "tnl_dd/t_dd_tritmp.h"
+
+#define IND (GAMMA_OFFSET_BIT)
+#define TAG(x) x##_offset
+#include "tnl_dd/t_dd_tritmp.h"
+
+#define IND (GAMMA_TWOSIDE_BIT)
+#define TAG(x) x##_twoside
+#include "tnl_dd/t_dd_tritmp.h"
+
+#define IND (GAMMA_TWOSIDE_BIT|GAMMA_OFFSET_BIT)
+#define TAG(x) x##_twoside_offset
+#include "tnl_dd/t_dd_tritmp.h"
+
+#define IND (GAMMA_UNFILLED_BIT)
+#define TAG(x) x##_unfilled
+#include "tnl_dd/t_dd_tritmp.h"
+
+#define IND (GAMMA_OFFSET_BIT|GAMMA_UNFILLED_BIT)
+#define TAG(x) x##_offset_unfilled
+#include "tnl_dd/t_dd_tritmp.h"
+
+#define IND (GAMMA_TWOSIDE_BIT|GAMMA_UNFILLED_BIT)
+#define TAG(x) x##_twoside_unfilled
+#include "tnl_dd/t_dd_tritmp.h"
+
+#define IND (GAMMA_TWOSIDE_BIT|GAMMA_OFFSET_BIT|GAMMA_UNFILLED_BIT)
+#define TAG(x) x##_twoside_offset_unfilled
+#include "tnl_dd/t_dd_tritmp.h"
+
+
+
+static void init_render_tab( void )
+{
+   init();
+   init_offset();
+   init_twoside();
+   init_twoside_offset();
+   init_unfilled();
+   init_offset_unfilled();
+   init_twoside_unfilled();
+   init_twoside_offset_unfilled();
+}
+
+
+/**********************************************************************/
+/*               Render unclipped begin/end objects                   */
+/**********************************************************************/
+
+#define VERT(x) (gammaVertex *)(gammaverts + (x << shift))
+#define RENDER_POINTS( start, count )          \
+   for ( ; start < count ; start++)            \
+      gmesa->draw_point( gmesa, VERT(start) )
+#define RENDER_LINE( v0, v1 ) \
+   gmesa->draw_line( gmesa, VERT(v0), VERT(v1) )
+#define RENDER_TRI( v0, v1, v2 )  \
+   gmesa->draw_tri( gmesa, VERT(v0), VERT(v1), VERT(v2) )
+#define RENDER_QUAD( v0, v1, v2, v3 ) \
+   gmesa->draw_quad( gmesa, VERT(v0), VERT(v1), VERT(v2), VERT(v3) )
+#define INIT(x) gammaRenderPrimitive( ctx, x );
+#undef LOCAL_VARS
+#define LOCAL_VARS                                             \
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);         \
+   const GLuint shift = gmesa->vertex_stride_shift;            \
+   const char *gammaverts = (char *)gmesa->verts;              \
+   const GLboolean stipple = ctx->Line.StippleFlag;            \
+   (void) stipple;
+#define RESET_STIPPLE  if ( stipple ) gammaResetLineStipple( ctx );
+#define RESET_OCCLUSION
+#define PRESERVE_VB_DEFS
+#define ELT(x) (x)
+#define TAG(x) gamma_##x##_verts
+#include "tnl/t_vb_rendertmp.h"
+
+
+/**********************************************************************/
+/*                   Render clipped primitives                        */
+/**********************************************************************/
+
+static void gammaRenderClippedPoly( GLcontext *ctx, const GLuint *elts, 
+                                  GLuint n )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   struct vertex_buffer *VB = &TNL_CONTEXT(ctx)->vb;
+   TNLcontext *tnl = TNL_CONTEXT(ctx);
+   GLuint prim = gmesa->render_primitive;
+
+   /* Render the new vertices as an unclipped polygon. 
+    */
+   {
+      GLuint *tmp = VB->Elts;
+      VB->Elts = (GLuint *)elts;
+      tnl->Driver.Render.PrimTabElts[GL_POLYGON]( ctx, 0, n, PRIM_BEGIN|PRIM_END );
+      VB->Elts = tmp;
+   }
+
+   /* Restore the render primitive
+    */
+   if (prim != GL_POLYGON)
+      tnl->Driver.Render.PrimitiveNotify( ctx, prim );
+}
+
+static void gammaRenderClippedLine( GLcontext *ctx, GLuint ii, GLuint jj )
+{
+   TNLcontext *tnl = TNL_CONTEXT(ctx);
+   tnl->Driver.Render.Line( ctx, ii, jj );
+}
+
+
+/**********************************************************************/
+/*                    Choose render functions                         */
+/**********************************************************************/
+
+
+
+#define _GAMMA_NEW_RENDERSTATE (_DD_NEW_TRI_UNFILLED |         \
+                              _DD_NEW_TRI_LIGHT_TWOSIDE |      \
+                              _DD_NEW_TRI_OFFSET)
+
+#define ANY_RASTER_FLAGS (DD_TRI_LIGHT_TWOSIDE|DD_TRI_OFFSET|DD_TRI_UNFILLED)
+
+static void gammaChooseRenderState(GLcontext *ctx)
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   TNLcontext *tnl = TNL_CONTEXT(ctx);
+   GLuint flags = ctx->_TriangleCaps;
+   GLuint index = 0;
+
+   if (flags & ANY_RASTER_FLAGS) {
+      if (flags & DD_TRI_LIGHT_TWOSIDE)       index |= GAMMA_TWOSIDE_BIT;
+      if (flags & DD_TRI_OFFSET)             index |= GAMMA_OFFSET_BIT;
+      if (flags & DD_TRI_UNFILLED)           index |= GAMMA_UNFILLED_BIT;
+   }
+
+   if (gmesa->RenderIndex != index) {
+      gmesa->RenderIndex = index;
+
+      tnl->Driver.Render.Points = rast_tab[index].points;
+      tnl->Driver.Render.Line = rast_tab[index].line;
+      tnl->Driver.Render.Triangle = rast_tab[index].triangle;
+      tnl->Driver.Render.Quad = rast_tab[index].quad;
+         
+      if (gmesa->RenderIndex == 0)
+         tnl->Driver.Render.PrimTabVerts = gamma_render_tab_verts;
+      else
+         tnl->Driver.Render.PrimTabVerts = _tnl_render_tab_verts;
+      tnl->Driver.Render.PrimTabElts = _tnl_render_tab_elts;
+      tnl->Driver.Render.ClippedLine = gammaRenderClippedLine;
+      tnl->Driver.Render.ClippedPolygon = gammaRenderClippedPoly;
+   }
+}
+
+
+/**********************************************************************/
+/*                 High level hooks for t_vb_render.c                 */
+/**********************************************************************/
+
+
+
+/* Determine the rasterized primitive when not drawing unfilled 
+ * polygons.
+ *
+ * Used only for the default render stage which always decomposes
+ * primitives to trianges/lines/points.  For the accelerated stage,
+ * which renders strips as strips, the equivalent calculations are
+ * performed in gammarender.c.
+ */
+
+static void gammaRasterPrimitive( GLcontext *ctx, GLuint hwprim )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   if (gmesa->hw_primitive != hwprim)
+      gmesa->hw_primitive = hwprim;
+}
+
+static void gammaRenderPrimitive( GLcontext *ctx, GLenum prim )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   gmesa->render_primitive = prim;
+}
+
+static void gammaRunPipeline( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   if ( gmesa->new_state )
+      gammaDDUpdateHWState( ctx );
+
+   if (gmesa->new_gl_state) {
+      if (gmesa->new_gl_state & _NEW_TEXTURE)
+        gammaUpdateTextureState( ctx );
+
+   if (!gmesa->Fallback) {
+      if (gmesa->new_gl_state & _GAMMA_NEW_VERTEX)
+        gammaChooseVertexState( ctx );
+      
+      if (gmesa->new_gl_state & _GAMMA_NEW_RASTER_STATE)
+        gammaChooseRasterState( ctx );
+      
+      if (gmesa->new_gl_state & _GAMMA_NEW_RENDERSTATE)
+        gammaChooseRenderState( ctx );
+   }
+      
+      gmesa->new_gl_state = 0;
+   }
+
+   _tnl_run_pipeline( ctx );
+}
+
+static void gammaRenderStart( GLcontext *ctx )
+{
+   /* Check for projective texturing.  Make sure all texcoord
+    * pointers point to something.  (fix in mesa?)  
+    */
+   gammaCheckTexSizes( ctx );
+}
+
+static void gammaRenderFinish( GLcontext *ctx )
+{
+   if (0)
+      _swrast_flush( ctx );    /* never needed */
+}
+
+static void gammaResetLineStipple( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+
+   /* Reset the hardware stipple counter.
+    */
+   CHECK_DMA_BUFFER(gmesa, 1);
+   WRITE(gmesa->buf, UpdateLineStippleCounters, 0);
+}
+
+
+/**********************************************************************/
+/*           Transition to/from hardware rasterization.               */
+/**********************************************************************/
+
+
+void gammaFallback( gammaContextPtr gmesa, GLuint bit, GLboolean mode )
+{
+   GLcontext *ctx = gmesa->glCtx;
+   TNLcontext *tnl = TNL_CONTEXT(ctx);
+   GLuint oldfallback = gmesa->Fallback;
+
+   if (mode) {
+      gmesa->Fallback |= bit;
+      if (oldfallback == 0) {
+        _swsetup_Wakeup( ctx );
+        _tnl_need_projected_coords( ctx, GL_TRUE );
+        gmesa->RenderIndex = ~0;
+      }
+   }
+   else {
+      gmesa->Fallback &= ~bit;
+      if (oldfallback == bit) {
+        _swrast_flush( ctx );
+        tnl->Driver.Render.Start = gammaRenderStart;
+        tnl->Driver.Render.PrimitiveNotify = gammaRenderPrimitive;
+        tnl->Driver.Render.Finish = gammaRenderFinish;
+        tnl->Driver.Render.BuildVertices = gammaBuildVertices;
+         tnl->Driver.Render.ResetLineStipple = gammaResetLineStipple;
+        gmesa->new_gl_state |= (_GAMMA_NEW_RENDERSTATE|
+                                _GAMMA_NEW_RASTER_STATE|
+                                _GAMMA_NEW_VERTEX);
+      }
+   }
+}
+
+
+/**********************************************************************/
+/*                            Initialization.                         */
+/**********************************************************************/
+
+
+void gammaDDInitTriFuncs( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   TNLcontext *tnl = TNL_CONTEXT(ctx);
+   static int firsttime = 1;
+
+   if (firsttime) {
+      init_rast_tab();
+      init_render_tab();
+      firsttime = 0;
+   }
+   
+   gmesa->RenderIndex = ~0;
+
+   tnl->Driver.RunPipeline = gammaRunPipeline;
+   tnl->Driver.Render.Start = gammaRenderStart;
+   tnl->Driver.Render.Finish = gammaRenderFinish; 
+   tnl->Driver.Render.PrimitiveNotify = gammaRenderPrimitive;
+   tnl->Driver.Render.ResetLineStipple = gammaResetLineStipple;
+   tnl->Driver.Render.BuildVertices = gammaBuildVertices;
+}
diff --git a/src/mesa/drivers/dri/gamma/gamma_tris.h b/src/mesa/drivers/dri/gamma/gamma_tris.h
new file mode 100644 (file)
index 0000000..02bec28
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2001 by Alan Hourihane.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Alan Hourihane not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission.  Alan Hourihane makes no representations
+ * about the suitability of this software for any purpose.  It is provided
+ * "as is" without express or implied warranty.
+ *
+ * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
+ *           Keith Whitwell, <keith@tungstengraphics.com>
+ *
+ * 3DLabs Gamma driver.
+ */
+
+#ifndef _GAMMA_TRIS_H
+#define _GAMMA_TRIS_H
+
+extern void gammaDDTrifuncInit(void);
+extern void gammaDDChooseTriRenderState(GLcontext *);
+
+
+
+#endif /* !(_GAMMA_TRIS_H) */
diff --git a/src/mesa/drivers/dri/gamma/gamma_tritmp.h b/src/mesa/drivers/dri/gamma/gamma_tritmp.h
new file mode 100644 (file)
index 0000000..d0dbd1d
--- /dev/null
@@ -0,0 +1,495 @@
+static void TAG(gamma_point)( gammaContextPtr gmesa, 
+                            const gammaVertex *v0 )
+{
+    CARD32 vColor;
+    CARD32 vBegin;
+
+    vBegin = gmesa->Begin | B_PrimType_Points;
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, Begin, vBegin);
+
+#if (IND & GAMMA_RAST_ALPHA_BIT)
+    vColor = (v0->v.color.alpha << 24) |
+            (v0->v.color.blue  << 16) |
+            (v0->v.color.green <<  8) |
+            (v0->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor4, vColor);
+#else
+    vColor = (v0->v.color.blue  << 16) |
+            (v0->v.color.green <<  8) |
+            (v0->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor3, vColor);
+#endif
+
+#if (IND & GAMMA_RAST_TEX_BIT)
+    CHECK_DMA_BUFFER(gmesa, 6);
+    WRITEF(gmesa->buf, Tt2, v0->v.u0);
+    WRITEF(gmesa->buf, Ts2, v0->v.v0);
+    WRITEF(gmesa->buf, Vw, v0->v.w);
+    WRITEF(gmesa->buf, Vz, v0->v.z);
+    WRITEF(gmesa->buf, Vy, v0->v.y);
+    WRITEF(gmesa->buf, Vx4, v0->v.x);
+#else
+    CHECK_DMA_BUFFER(gmesa, 4);
+    WRITEF(gmesa->buf, Vw, v0->v.w);
+    WRITEF(gmesa->buf, Vz, v0->v.z);
+    WRITEF(gmesa->buf, Vy, v0->v.y);
+    WRITEF(gmesa->buf, Vx4, v0->v.x);
+#endif
+
+#if !(IND & GAMMA_RAST_FLAT_BIT)
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, FlushSpan, 0);
+#endif
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, End, 0);
+}
+
+static void TAG(gamma_line)( gammaContextPtr gmesa, 
+                            const gammaVertex *v0,
+                            const gammaVertex *v1 )
+{
+    CARD32 vColor;
+    CARD32 vBegin;
+
+    vBegin = gmesa->Begin | B_PrimType_Lines;
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, Begin, vBegin);
+
+#if !(IND & GAMMA_RAST_FLAT_BIT)
+#if (IND & GAMMA_RAST_ALPHA_BIT)
+    vColor = (v0->v.color.alpha << 24) |
+            (v0->v.color.blue  << 16) |
+            (v0->v.color.green <<  8) |
+            (v0->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor4, vColor);
+#else
+    vColor = (v0->v.color.blue  << 16) |
+            (v0->v.color.green <<  8) |
+            (v0->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor3, vColor);
+#endif
+#else
+#if (IND & GAMMA_RAST_ALPHA_BIT)
+    vColor = (v1->v.color.alpha << 24) |
+            (v1->v.color.blue  << 16) |
+            (v1->v.color.green <<  8) |
+            (v1->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor4, vColor);
+#else
+    vColor = (v1->v.color.blue  << 16) |
+            (v1->v.color.green <<  8) |
+            (v1->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor3, vColor);
+#endif
+#endif
+
+#if (IND & GAMMA_RAST_TEX_BIT)
+    CHECK_DMA_BUFFER(gmesa, 6);
+    WRITEF(gmesa->buf, Tt2, v0->v.u0);
+    WRITEF(gmesa->buf, Ts2, v0->v.v0);
+    WRITEF(gmesa->buf, Vw, v0->v.w);
+    WRITEF(gmesa->buf, Vz, v0->v.z);
+    WRITEF(gmesa->buf, Vy, v0->v.y);
+    WRITEF(gmesa->buf, Vx4, v0->v.x);
+#else
+    CHECK_DMA_BUFFER(gmesa, 4);
+    WRITEF(gmesa->buf, Vw, v0->v.w);
+    WRITEF(gmesa->buf, Vz, v0->v.z);
+    WRITEF(gmesa->buf, Vy, v0->v.y);
+    WRITEF(gmesa->buf, Vx4, v0->v.x);
+#endif
+
+#if !(IND & GAMMA_RAST_FLAT_BIT)
+#if (IND & GAMMA_RAST_ALPHA_BIT)
+    vColor = (v1->v.color.alpha << 24) |
+            (v1->v.color.blue  << 16) |
+            (v1->v.color.green <<  8) |
+            (v1->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor4, vColor);
+#else
+    vColor = (v1->v.color.blue  << 16) |
+            (v1->v.color.green <<  8) |
+            (v1->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor3, vColor);
+#endif
+#endif
+
+#if (IND & GAMMA_RAST_TEX_BIT)
+    CHECK_DMA_BUFFER(gmesa, 6);
+    WRITEF(gmesa->buf, Tt2, v1->v.u0);
+    WRITEF(gmesa->buf, Ts2, v1->v.v0);
+    WRITEF(gmesa->buf, Vw, v1->v.w);
+    WRITEF(gmesa->buf, Vz, v1->v.z);
+    WRITEF(gmesa->buf, Vy, v1->v.y);
+    WRITEF(gmesa->buf, Vx4, v1->v.x);
+#else
+    CHECK_DMA_BUFFER(gmesa, 4);
+    WRITEF(gmesa->buf, Vw, v1->v.w);
+    WRITEF(gmesa->buf, Vz, v1->v.z);
+    WRITEF(gmesa->buf, Vy, v1->v.y);
+    WRITEF(gmesa->buf, Vx4, v1->v.x);
+#endif
+
+#if !(IND & GAMMA_RAST_FLAT_BIT)
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, FlushSpan, 0);
+#endif
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, End, 0);
+}
+
+static void TAG(gamma_triangle)( gammaContextPtr gmesa,
+                                const gammaVertex *v0,
+                                const gammaVertex *v1, 
+                                const gammaVertex *v2 )
+{
+    CARD32 vColor;
+    CARD32 vBegin;
+
+    vBegin = gmesa->Begin | B_PrimType_Triangles;
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, Begin, vBegin);
+
+#if !(IND & GAMMA_RAST_FLAT_BIT)
+#if (IND & GAMMA_RAST_ALPHA_BIT)
+    vColor = (v0->v.color.alpha << 24) |
+            (v0->v.color.blue  << 16) |
+            (v0->v.color.green <<  8) |
+            (v0->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor4, vColor);
+#else
+    vColor = (v0->v.color.blue  << 16) |
+            (v0->v.color.green <<  8) |
+            (v0->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor3, vColor);
+#endif
+#else
+#if (IND & GAMMA_RAST_ALPHA_BIT)
+    vColor = (v2->v.color.alpha << 24) |
+            (v2->v.color.blue  << 16) |
+            (v2->v.color.green <<  8) |
+            (v2->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor4, vColor);
+#else
+    vColor = (v2->v.color.blue  << 16) |
+            (v2->v.color.green <<  8) |
+            (v2->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor3, vColor);
+#endif
+#endif
+
+#if (IND & GAMMA_RAST_TEX_BIT)
+    CHECK_DMA_BUFFER(gmesa, 6);
+    WRITEF(gmesa->buf, Tt2, v0->v.u0);
+    WRITEF(gmesa->buf, Ts2, v0->v.v0);
+    WRITEF(gmesa->buf, Vw, v0->v.w);
+    WRITEF(gmesa->buf, Vz, v0->v.z);
+    WRITEF(gmesa->buf, Vy, v0->v.y);
+    WRITEF(gmesa->buf, Vx4, v0->v.x);
+#else
+    CHECK_DMA_BUFFER(gmesa, 4);
+    WRITEF(gmesa->buf, Vw, v0->v.w);
+    WRITEF(gmesa->buf, Vz, v0->v.z);
+    WRITEF(gmesa->buf, Vy, v0->v.y);
+    WRITEF(gmesa->buf, Vx4, v0->v.x);
+#endif
+
+#if !(IND & GAMMA_RAST_FLAT_BIT)
+#if (IND & GAMMA_RAST_ALPHA_BIT)
+    vColor = (v1->v.color.alpha << 24) |
+            (v1->v.color.blue  << 16) |
+            (v1->v.color.green <<  8) |
+            (v1->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor4, vColor);
+#else
+    vColor = (v1->v.color.blue  << 16) |
+            (v1->v.color.green <<  8) |
+            (v1->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor3, vColor);
+#endif
+#endif
+
+#if (IND & GAMMA_RAST_TEX_BIT)
+    CHECK_DMA_BUFFER(gmesa, 6);
+    WRITEF(gmesa->buf, Tt2, v1->v.u0);
+    WRITEF(gmesa->buf, Ts2, v1->v.v0);
+    WRITEF(gmesa->buf, Vw, v1->v.w);
+    WRITEF(gmesa->buf, Vz, v1->v.z);
+    WRITEF(gmesa->buf, Vy, v1->v.y);
+    WRITEF(gmesa->buf, Vx4, v1->v.x);
+#else
+    CHECK_DMA_BUFFER(gmesa, 4);
+    WRITEF(gmesa->buf, Vw, v1->v.w);
+    WRITEF(gmesa->buf, Vz, v1->v.z);
+    WRITEF(gmesa->buf, Vy, v1->v.y);
+    WRITEF(gmesa->buf, Vx4, v1->v.x);
+#endif
+
+#if !(IND & GAMMA_RAST_FLAT_BIT)
+#if (IND & GAMMA_RAST_ALPHA_BIT)
+    vColor = (v2->v.color.alpha << 24) |
+            (v2->v.color.blue  << 16) |
+            (v2->v.color.green <<  8) |
+            (v2->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor4, vColor);
+#else
+    vColor = (v2->v.color.blue  << 16) |
+            (v2->v.color.green <<  8) |
+            (v2->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor3, vColor);
+#endif
+#endif
+
+#if (IND & GAMMA_RAST_TEX_BIT)
+    CHECK_DMA_BUFFER(gmesa, 6);
+    WRITEF(gmesa->buf, Tt2, v2->v.u0);
+    WRITEF(gmesa->buf, Ts2, v2->v.v0);
+    WRITEF(gmesa->buf, Vw, v2->v.w);
+    WRITEF(gmesa->buf, Vz, v2->v.z);
+    WRITEF(gmesa->buf, Vy, v2->v.y);
+    WRITEF(gmesa->buf, Vx4, v2->v.x);
+#else
+    CHECK_DMA_BUFFER(gmesa, 4);
+    WRITEF(gmesa->buf, Vw, v2->v.w);
+    WRITEF(gmesa->buf, Vz, v2->v.z);
+    WRITEF(gmesa->buf, Vy, v2->v.y);
+    WRITEF(gmesa->buf, Vx4, v2->v.x);
+#endif
+
+#if !(IND & GAMMA_RAST_FLAT_BIT)
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, FlushSpan, 0);
+#endif
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, End, 0);
+}
+
+static void TAG(gamma_quad)( gammaContextPtr gmesa,
+                           const gammaVertex *v0,
+                           const gammaVertex *v1,
+                           const gammaVertex *v2,
+                           const gammaVertex *v3 )
+{
+    CARD32 vColor;
+    CARD32 vBegin;
+
+    vBegin = gmesa->Begin | B_PrimType_Quads;
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, Begin, vBegin);
+
+#if !(IND & GAMMA_RAST_FLAT_BIT)
+#if (IND & GAMMA_RAST_ALPHA_BIT)
+    vColor = (v0->v.color.alpha << 24) |
+            (v0->v.color.blue  << 16) |
+            (v0->v.color.green <<  8) |
+            (v0->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor4, vColor);
+#else
+    vColor = (v0->v.color.blue  << 16) |
+            (v0->v.color.green <<  8) |
+            (v0->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor3, vColor);
+#endif
+#else
+#if (IND & GAMMA_RAST_ALPHA_BIT)
+    vColor = (v3->v.color.alpha << 24) |
+            (v3->v.color.blue  << 16) |
+            (v3->v.color.green <<  8) |
+            (v3->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor4, vColor);
+#else
+    vColor = (v3->v.color.blue  << 16) |
+            (v3->v.color.green <<  8) |
+            (v3->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor3, vColor);
+#endif
+#endif
+
+#if (IND & GAMMA_RAST_TEX_BIT)
+    CHECK_DMA_BUFFER(gmesa, 6);
+    WRITEF(gmesa->buf, Tt2, v0->v.u0);
+    WRITEF(gmesa->buf, Ts2, v0->v.v0);
+    WRITEF(gmesa->buf, Vw, v0->v.w);
+    WRITEF(gmesa->buf, Vz, v0->v.z);
+    WRITEF(gmesa->buf, Vy, v0->v.y);
+    WRITEF(gmesa->buf, Vx4, v0->v.x);
+#else
+    CHECK_DMA_BUFFER(gmesa, 4);
+    WRITEF(gmesa->buf, Vw, v0->v.w);
+    WRITEF(gmesa->buf, Vz, v0->v.z);
+    WRITEF(gmesa->buf, Vy, v0->v.y);
+    WRITEF(gmesa->buf, Vx4, v0->v.x);
+#endif
+
+#if !(IND & GAMMA_RAST_FLAT_BIT)
+#if (IND & GAMMA_RAST_ALPHA_BIT)
+    vColor = (v1->v.color.alpha << 24) |
+            (v1->v.color.blue  << 16) |
+            (v1->v.color.green <<  8) |
+            (v1->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor4, vColor);
+#else
+    vColor = (v1->v.color.blue  << 16) |
+            (v1->v.color.green <<  8) |
+            (v1->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor3, vColor);
+#endif
+#endif
+
+#if (IND & GAMMA_RAST_TEX_BIT)
+    CHECK_DMA_BUFFER(gmesa, 6);
+    WRITEF(gmesa->buf, Tt2, v1->v.u0);
+    WRITEF(gmesa->buf, Ts2, v1->v.v0);
+    WRITEF(gmesa->buf, Vw, v1->v.w);
+    WRITEF(gmesa->buf, Vz, v1->v.z);
+    WRITEF(gmesa->buf, Vy, v1->v.y);
+    WRITEF(gmesa->buf, Vx4, v1->v.x);
+#else
+    CHECK_DMA_BUFFER(gmesa, 4);
+    WRITEF(gmesa->buf, Vw, v1->v.w);
+    WRITEF(gmesa->buf, Vz, v1->v.z);
+    WRITEF(gmesa->buf, Vy, v1->v.y);
+    WRITEF(gmesa->buf, Vx4, v1->v.x);
+#endif
+
+#if !(IND & GAMMA_RAST_FLAT_BIT)
+#if (IND & GAMMA_RAST_ALPHA_BIT)
+    vColor = (v2->v.color.alpha << 24) |
+            (v2->v.color.blue  << 16) |
+            (v2->v.color.green <<  8) |
+            (v2->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor4, vColor);
+#else
+    vColor = (v2->v.color.blue  << 16) |
+            (v2->v.color.green <<  8) |
+            (v2->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor3, vColor);
+#endif
+#endif
+
+#if (IND & GAMMA_RAST_TEX_BIT)
+    CHECK_DMA_BUFFER(gmesa, 6);
+    WRITEF(gmesa->buf, Tt2, v2->v.u0);
+    WRITEF(gmesa->buf, Ts2, v2->v.v0);
+    WRITEF(gmesa->buf, Vw, v2->v.w);
+    WRITEF(gmesa->buf, Vz, v2->v.z);
+    WRITEF(gmesa->buf, Vy, v2->v.y);
+    WRITEF(gmesa->buf, Vx4, v2->v.x);
+#else
+    CHECK_DMA_BUFFER(gmesa, 4);
+    WRITEF(gmesa->buf, Vw, v2->v.w);
+    WRITEF(gmesa->buf, Vz, v2->v.z);
+    WRITEF(gmesa->buf, Vy, v2->v.y);
+    WRITEF(gmesa->buf, Vx4, v2->v.x);
+#endif
+
+#if !(IND & GAMMA_RAST_FLAT_BIT)
+#if (IND & GAMMA_RAST_ALPHA_BIT)
+    vColor = (v3->v.color.alpha << 24) |
+            (v3->v.color.blue  << 16) |
+            (v3->v.color.green <<  8) |
+            (v3->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor4, vColor);
+#else
+    vColor = (v3->v.color.blue  << 16) |
+            (v3->v.color.green <<  8) |
+            (v3->v.color.red   <<  0);
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, PackedColor3, vColor);
+#endif
+#endif
+
+#if (IND & GAMMA_RAST_TEX_BIT)
+    CHECK_DMA_BUFFER(gmesa, 6);
+    WRITEF(gmesa->buf, Tt2, v3->v.u0);
+    WRITEF(gmesa->buf, Ts2, v3->v.v0);
+    WRITEF(gmesa->buf, Vw, v3->v.w);
+    WRITEF(gmesa->buf, Vz, v3->v.z);
+    WRITEF(gmesa->buf, Vy, v3->v.y);
+    WRITEF(gmesa->buf, Vx4, v3->v.x);
+#else
+    CHECK_DMA_BUFFER(gmesa, 4);
+    WRITEF(gmesa->buf, Vw, v3->v.w);
+    WRITEF(gmesa->buf, Vz, v3->v.z);
+    WRITEF(gmesa->buf, Vy, v3->v.y);
+    WRITEF(gmesa->buf, Vx4, v3->v.x);
+#endif
+
+#if !(IND & GAMMA_RAST_FLAT_BIT)
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, FlushSpan, 0);
+#endif
+
+    CHECK_DMA_BUFFER(gmesa, 1);
+    WRITE(gmesa->buf, End, 0);
+}
+
+static void TAG(gamma_init)(void)
+{
+       gamma_point_tab[IND]    = TAG(gamma_point);
+       gamma_line_tab[IND]     = TAG(gamma_line);
+       gamma_tri_tab[IND]      = TAG(gamma_triangle);
+       gamma_quad_tab[IND]     = TAG(gamma_quad);
+}
+
+#undef IND
+#undef TAG
diff --git a/src/mesa/drivers/dri/gamma/gamma_vb.c b/src/mesa/drivers/dri/gamma/gamma_vb.c
new file mode 100644 (file)
index 0000000..6178b37
--- /dev/null
@@ -0,0 +1,380 @@
+/* $XFree86: xc/lib/GL/mesa/src/drv/gamma/gamma_vb.c,v 1.4 2003/03/26 20:43:48 tsi Exp $ */
+/*
+ * Copyright 2001 by Alan Hourihane.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Alan Hourihane not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission.  Alan Hourihane makes no representations
+ * about the suitability of this software for any purpose.  It is provided
+ * "as is" without express or implied warranty.
+ *
+ * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
+ *           Keith Whitwell, <keith@tungstengraphics.com>
+ *
+ * 3DLabs Gamma driver.
+ */
+#include "glheader.h"
+#include "mtypes.h"
+#include "imports.h"
+#include "macros.h"
+#include "colormac.h"
+
+#include "swrast_setup/swrast_setup.h"
+#include "tnl/t_context.h"
+#include "tnl/tnl.h"
+
+#include "gamma_context.h"
+#include "gamma_vb.h"
+#include "gamma_tris.h"
+
+
+#define GAMMA_TEX0_BIT       0x1       
+#define GAMMA_RGBA_BIT       0x2
+#define GAMMA_XYZW_BIT       0x4
+#define GAMMA_PTEX_BIT       0x8
+#define GAMMA_FOG_BIT        0x10
+#define GAMMA_SPEC_BIT       0x20
+#define GAMMA_MAX_SETUP      0x40
+
+static struct {
+   void                (*emit)( GLcontext *, GLuint, GLuint, void *, GLuint );
+   interp_func         interp;
+   copy_pv_func                copy_pv;
+   GLboolean           (*check_tex_sizes)( GLcontext *ctx );
+   GLuint               vertex_size;
+   GLuint               vertex_stride_shift;
+   GLuint               vertex_format;
+} setup_tab[GAMMA_MAX_SETUP];
+
+#define TINY_VERTEX_FORMAT      1
+#define NOTEX_VERTEX_FORMAT     2
+#define TEX0_VERTEX_FORMAT      3
+#define TEX1_VERTEX_FORMAT      0
+#define PROJ_TEX1_VERTEX_FORMAT 0
+#define TEX2_VERTEX_FORMAT      0
+#define TEX3_VERTEX_FORMAT      0
+#define PROJ_TEX3_VERTEX_FORMAT 0
+
+#define DO_XYZW (IND & GAMMA_XYZW_BIT)
+#define DO_RGBA (IND & GAMMA_RGBA_BIT)
+#define DO_SPEC (IND & GAMMA_SPEC_BIT)
+#define DO_FOG  (IND & GAMMA_FOG_BIT)
+#define DO_TEX0 (IND & GAMMA_TEX0_BIT)
+#define DO_TEX1 0
+#define DO_TEX2 0
+#define DO_TEX3 0
+#define DO_PTEX (IND & GAMMA_PTEX_BIT)
+                              
+#define VERTEX gammaVertex
+#define VERTEX_COLOR gamma_color_t
+#define GET_VIEWPORT_MAT() 0
+#define GET_TEXSOURCE(n)  n
+#define GET_VERTEX_FORMAT() GAMMA_CONTEXT(ctx)->vertex_format
+#define GET_VERTEX_STORE() GAMMA_CONTEXT(ctx)->verts
+#define GET_VERTEX_STRIDE_SHIFT() GAMMA_CONTEXT(ctx)->vertex_stride_shift
+#define INVALIDATE_STORED_VERTICES()
+#define GET_UBYTE_COLOR_STORE() &GAMMA_CONTEXT(ctx)->UbyteColor
+#define GET_UBYTE_SPEC_COLOR_STORE() &GAMMA_CONTEXT(ctx)->UbyteSecondaryColor
+
+#define HAVE_HW_VIEWPORT    1
+#define HAVE_HW_DIVIDE      1
+#define HAVE_RGBA_COLOR     0  /* we're BGRA */
+#define HAVE_TINY_VERTICES  1
+#define HAVE_NOTEX_VERTICES 1
+#define HAVE_TEX0_VERTICES  1
+#define HAVE_TEX1_VERTICES  0
+#define HAVE_TEX2_VERTICES  0
+#define HAVE_TEX3_VERTICES  0
+#define HAVE_PTEX_VERTICES  1
+
+#define PTEX_FALLBACK()                /* never needed */
+
+#define IMPORT_QUALIFIER
+#define IMPORT_FLOAT_COLORS gamma_import_float_colors
+#define IMPORT_FLOAT_SPEC_COLORS gamma_import_float_spec_colors
+
+#define INTERP_VERTEX setup_tab[GAMMA_CONTEXT(ctx)->SetupIndex].interp
+#define COPY_PV_VERTEX setup_tab[GAMMA_CONTEXT(ctx)->SetupIndex].copy_pv
+
+
+
+/***********************************************************************
+ *         Generate  pv-copying and translation functions              *
+ ***********************************************************************/
+
+#define TAG(x) gamma_##x
+#include "tnl_dd/t_dd_vb.c"
+
+/***********************************************************************
+ *             Generate vertex emit and interp functions               *
+ ***********************************************************************/
+
+#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT)
+#define TAG(x) x##_wg
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_SPEC_BIT)
+#define TAG(x) x##_wgs
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_TEX0_BIT)
+#define TAG(x) x##_wgt0
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_TEX0_BIT|GAMMA_PTEX_BIT)
+#define TAG(x) x##_wgpt0
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_SPEC_BIT|GAMMA_TEX0_BIT)
+#define TAG(x) x##_wgst0
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_SPEC_BIT|GAMMA_TEX0_BIT|\
+             GAMMA_PTEX_BIT)
+#define TAG(x) x##_wgspt0
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_FOG_BIT)
+#define TAG(x) x##_wgf
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_FOG_BIT|GAMMA_SPEC_BIT)
+#define TAG(x) x##_wgfs
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_FOG_BIT|GAMMA_TEX0_BIT)
+#define TAG(x) x##_wgft0
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_FOG_BIT|GAMMA_TEX0_BIT|\
+             GAMMA_PTEX_BIT)
+#define TAG(x) x##_wgfpt0
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_FOG_BIT|GAMMA_SPEC_BIT|\
+             GAMMA_TEX0_BIT)
+#define TAG(x) x##_wgfst0
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_XYZW_BIT|GAMMA_RGBA_BIT|GAMMA_FOG_BIT|GAMMA_SPEC_BIT|\
+             GAMMA_TEX0_BIT|GAMMA_PTEX_BIT)
+#define TAG(x) x##_wgfspt0
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_TEX0_BIT)
+#define TAG(x) x##_t0
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_FOG_BIT)
+#define TAG(x) x##_f
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_FOG_BIT|GAMMA_TEX0_BIT)
+#define TAG(x) x##_ft0
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_RGBA_BIT)
+#define TAG(x) x##_g
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_RGBA_BIT|GAMMA_SPEC_BIT)
+#define TAG(x) x##_gs
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_RGBA_BIT|GAMMA_TEX0_BIT)
+#define TAG(x) x##_gt0
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_RGBA_BIT|GAMMA_SPEC_BIT|GAMMA_TEX0_BIT)
+#define TAG(x) x##_gst0
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_RGBA_BIT|GAMMA_FOG_BIT)
+#define TAG(x) x##_gf
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_RGBA_BIT|GAMMA_FOG_BIT|GAMMA_SPEC_BIT)
+#define TAG(x) x##_gfs
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_RGBA_BIT|GAMMA_FOG_BIT|GAMMA_TEX0_BIT)
+#define TAG(x) x##_gft0
+#include "tnl_dd/t_dd_vbtmp.h"
+
+#define IND (GAMMA_RGBA_BIT|GAMMA_FOG_BIT|GAMMA_SPEC_BIT|GAMMA_TEX0_BIT)
+#define TAG(x) x##_gfst0
+#include "tnl_dd/t_dd_vbtmp.h"
+
+static void init_setup_tab( void )
+{
+   init_wg();
+   init_wgs();
+   init_wgt0();
+   init_wgpt0();
+   init_wgst0();
+   init_wgspt0();
+   init_wgf();
+   init_wgfs();
+   init_wgft0();
+   init_wgfpt0();
+   init_wgfst0();
+   init_wgfspt0();
+   init_t0();
+   init_f();
+   init_ft0();
+   init_g();
+   init_gs();
+   init_gt0();
+   init_gst0();
+   init_gf();
+   init_gfs();
+   init_gft0();
+   init_gfst0();
+}
+
+void gammaCheckTexSizes( GLcontext *ctx )
+{
+   TNLcontext *tnl = TNL_CONTEXT(ctx);
+   gammaContextPtr gmesa = GAMMA_CONTEXT( ctx );
+
+   if (!setup_tab[gmesa->SetupIndex].check_tex_sizes(ctx)) {
+      /* Invalidate stored verts
+       */
+      gmesa->SetupNewInputs = ~0;
+      gmesa->SetupIndex |= GAMMA_PTEX_BIT;
+
+      if (!(ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED))) {
+        tnl->Driver.Render.Interp = setup_tab[gmesa->SetupIndex].interp;
+        tnl->Driver.Render.CopyPV = setup_tab[gmesa->SetupIndex].copy_pv;
+      }
+   }
+}
+
+void gammaBuildVertices( GLcontext *ctx, 
+                        GLuint start, 
+                        GLuint count,
+                        GLuint newinputs )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT( ctx );
+   GLubyte *v = ((GLubyte *)gmesa->verts + (start<<gmesa->vertex_stride_shift));
+   GLuint stride = 1<<gmesa->vertex_stride_shift;
+
+   newinputs |= gmesa->SetupNewInputs;
+   gmesa->SetupNewInputs = 0;
+
+   if (!newinputs)
+      return;
+
+   if (newinputs & VERT_BIT_CLIP) {
+      setup_tab[gmesa->SetupIndex].emit( ctx, start, count, v, stride );
+   } else {
+      GLuint ind = 0;
+
+      if (newinputs & VERT_BIT_COLOR0)
+        ind |= GAMMA_RGBA_BIT;
+
+      if (newinputs & VERT_BIT_COLOR1)
+        ind |= GAMMA_SPEC_BIT;
+
+      if (newinputs & VERT_BIT_TEX0)
+        ind |= GAMMA_TEX0_BIT;
+
+      if (newinputs & VERT_BIT_FOG)
+        ind |= GAMMA_FOG_BIT;
+
+      if (gmesa->SetupIndex & GAMMA_PTEX_BIT)
+        ind = ~0;
+
+      ind &= gmesa->SetupIndex;
+
+      if (ind) {
+        setup_tab[ind].emit( ctx, start, count, v, stride );
+      }
+   }
+}
+
+void gammaChooseVertexState( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT( ctx );
+   TNLcontext *tnl = TNL_CONTEXT(ctx);
+   GLuint ind = GAMMA_XYZW_BIT|GAMMA_RGBA_BIT;
+
+   if (ctx->_TriangleCaps & DD_SEPARATE_SPECULAR)
+      ind |= GAMMA_SPEC_BIT;
+
+   if (ctx->Fog.Enabled)
+      ind |= GAMMA_FOG_BIT;
+
+   if (ctx->Texture.Unit[0]._ReallyEnabled) {
+      _tnl_need_projected_coords( ctx, GL_FALSE );
+      ind |= GAMMA_TEX0_BIT;
+   } else
+      _tnl_need_projected_coords( ctx, GL_FALSE );
+
+   gmesa->SetupIndex = ind;
+
+   if (setup_tab[ind].vertex_format != gmesa->vertex_format) {
+      gmesa->vertex_format = setup_tab[ind].vertex_format;
+      gmesa->vertex_size = setup_tab[ind].vertex_size;
+      gmesa->vertex_stride_shift = setup_tab[ind].vertex_stride_shift;
+   }
+
+   if (ctx->_TriangleCaps & (DD_TRI_LIGHT_TWOSIDE|DD_TRI_UNFILLED)) {
+      tnl->Driver.Render.Interp = gamma_interp_extras;
+      tnl->Driver.Render.CopyPV = gamma_copy_pv_extras;
+   } else {
+      tnl->Driver.Render.Interp = setup_tab[ind].interp;
+      tnl->Driver.Render.CopyPV = setup_tab[ind].copy_pv;
+   }
+}
+
+
+void gammaInitVB( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   GLuint size = TNL_CONTEXT(ctx)->vb.Size;
+
+   gmesa->verts = (char *)ALIGN_MALLOC(size * 4 * 16, 32);
+
+   {
+      static int firsttime = 1;
+      if (firsttime) {
+        init_setup_tab();
+        firsttime = 0;
+        gmesa->vertex_stride_shift = 6; /* FIXME - only one vertex setup */
+      }
+   }
+}
+
+
+void gammaFreeVB( GLcontext *ctx )
+{
+   gammaContextPtr gmesa = GAMMA_CONTEXT(ctx);
+   if (gmesa->verts) {
+      ALIGN_FREE(gmesa->verts);
+      gmesa->verts = 0;
+   }
+
+   if (gmesa->UbyteSecondaryColor.Ptr) {
+      ALIGN_FREE(gmesa->UbyteSecondaryColor.Ptr);
+      gmesa->UbyteSecondaryColor.Ptr = 0;
+   }
+
+   if (gmesa->UbyteColor.Ptr) {
+      ALIGN_FREE(gmesa->UbyteColor.Ptr);
+      gmesa->UbyteColor.Ptr = 0;
+   }
+}
diff --git a/src/mesa/drivers/dri/gamma/gamma_vb.h b/src/mesa/drivers/dri/gamma/gamma_vb.h
new file mode 100644 (file)
index 0000000..feda25c
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2001 by Alan Hourihane.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Alan Hourihane not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission.  Alan Hourihane makes no representations
+ * about the suitability of this software for any purpose.  It is provided
+ * "as is" without express or implied warranty.
+ *
+ * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
+ *           Keith Whitwell, <keith@tungstengraphics.com>
+ *
+ * 3DLabs Gamma driver.
+ */
+
+#ifndef GAMMAVB_INC
+#define GAMMAVB_INC
+
+#include "mtypes.h"
+#include "swrast/swrast.h"
+
+#define _GAMMA_NEW_VERTEX (_NEW_TEXTURE |              \
+                          _DD_NEW_TRI_UNFILLED |       \
+                          _DD_NEW_TRI_LIGHT_TWOSIDE)
+
+
+extern void gammaChooseVertexState( GLcontext *ctx );
+extern void gammaCheckTexSizes( GLcontext *ctx );
+extern void gammaBuildVertices( GLcontext *ctx, 
+                               GLuint start, 
+                               GLuint count,
+                               GLuint newinputs );
+
+
+extern void gamma_import_float_colors( GLcontext *ctx );
+extern void gamma_import_float_spec_colors( GLcontext *ctx );
+
+extern void gamma_translate_vertex( GLcontext *ctx, 
+                                   const gammaVertex *src, 
+                                   SWvertex *dst );
+
+extern void gammaInitVB( GLcontext *ctx );
+extern void gammaFreeVB( GLcontext *ctx );
+
+extern void gamma_print_vertex( GLcontext *ctx, const gammaVertex *v );
+extern void gammaPrintSetupFlags(char *msg, GLuint flags );
+
+#endif
diff --git a/src/mesa/drivers/dri/gamma/gamma_xmesa.c b/src/mesa/drivers/dri/gamma/gamma_xmesa.c
new file mode 100644 (file)
index 0000000..67bcf01
--- /dev/null
@@ -0,0 +1,296 @@
+/* $XFree86: xc/lib/GL/mesa/src/drv/gamma/gamma_xmesa.c,v 1.14 2002/10/30 12:51:30 alanh Exp $ */
+/*
+ * Copyright 2001 by Alan Hourihane.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Alan Hourihane not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission.  Alan Hourihane makes no representations
+ * about the suitability of this software for any purpose.  It is provided
+ * "as is" without express or implied warranty.
+ *
+ * ALAN HOURIHANE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL ALAN HOURIHANE BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Authors:  Alan Hourihane, <alanh@tungstengraphics.com>
+ *
+ * 3DLabs Gamma driver
+ */
+
+#include "gamma_context.h"
+#include "gamma_vb.h"
+#include "context.h"
+#include "matrix.h"
+#include "glint_dri.h"
+
+#include "swrast/swrast.h"
+#include "swrast_setup/swrast_setup.h"
+#include "tnl/tnl.h"
+#include "array_cache/acache.h"
+
+static GLboolean 
+gammaInitDriver(__DRIscreenPrivate *sPriv)
+{
+    sPriv->private = (void *) gammaCreateScreen( sPriv );
+
+    if (!sPriv->private) {
+       gammaDestroyScreen( sPriv );
+       return GL_FALSE;
+    }
+
+    return GL_TRUE;
+}
+
+static void 
+gammaDestroyContext(__DRIcontextPrivate *driContextPriv)
+{
+    gammaContextPtr gmesa = (gammaContextPtr)driContextPriv->driverPrivate;
+
+    if (gmesa) {
+      _swsetup_DestroyContext( gmesa->glCtx );
+      _tnl_DestroyContext( gmesa->glCtx );
+      _ac_DestroyContext( gmesa->glCtx );
+      _swrast_DestroyContext( gmesa->glCtx );
+
+      gammaFreeVB( gmesa->glCtx );
+
+      /* free the Mesa context */
+      gmesa->glCtx->DriverCtx = NULL;
+      _mesa_destroy_context(gmesa->glCtx);
+
+      Xfree(gmesa);
+      driContextPriv->driverPrivate = NULL;
+    }
+}
+
+
+static GLboolean
+gammaCreateBuffer( __DRIscreenPrivate *driScrnPriv,
+                   __DRIdrawablePrivate *driDrawPriv,
+                   const __GLcontextModes *mesaVis,
+                   GLboolean isPixmap )
+{
+   if (isPixmap) {
+      return GL_FALSE; /* not implemented */
+   }
+   else {
+      driDrawPriv->driverPrivate = (void *) 
+         _mesa_create_framebuffer(mesaVis,
+                                  GL_FALSE,  /* software depth buffer? */
+                                  mesaVis->stencilBits > 0,
+                                  mesaVis->accumRedBits > 0,
+                                  mesaVis->alphaBits > 0
+                                  );
+      return (driDrawPriv->driverPrivate != NULL);
+   }
+}
+
+
+static void
+gammaDestroyBuffer(__DRIdrawablePrivate *driDrawPriv)
+{
+   _mesa_destroy_framebuffer((GLframebuffer *) (driDrawPriv->driverPrivate));
+}
+
+static void
+gammaSwapBuffers( __DRIdrawablePrivate *dPriv )
+{
+   if (dPriv->driContextPriv && dPriv->driContextPriv->driverPrivate) {
+    gammaContextPtr gmesa;
+    __DRIscreenPrivate *driScrnPriv;
+    GLcontext *ctx;
+
+    gmesa = (gammaContextPtr) dPriv->driContextPriv->driverPrivate;
+    ctx = gmesa->glCtx;
+    driScrnPriv = gmesa->driScreen;
+
+    _mesa_notifySwapBuffers(ctx);
+
+    VALIDATE_DRAWABLE_INFO(gmesa);
+
+    /* Flush any partially filled buffers */
+    FLUSH_DMA_BUFFER(gmesa);
+
+    DRM_SPINLOCK(&driScrnPriv->pSAREA->drawable_lock,
+                    driScrnPriv->drawLockID);
+    VALIDATE_DRAWABLE_INFO_NO_LOCK(gmesa);
+
+    if (gmesa->EnabledFlags & GAMMA_BACK_BUFFER) {
+       int src, dst, x0, y0, x1, h;
+       int i;
+       int nRect = dPriv->numClipRects;
+       XF86DRIClipRectPtr pRect = dPriv->pClipRects;
+       __DRIscreenPrivate *driScrnPriv = gmesa->driScreen;
+       GLINTDRIPtr gDRIPriv = (GLINTDRIPtr)driScrnPriv->pDevPriv;
+
+       CHECK_DMA_BUFFER(gmesa, 2);
+       WRITE(gmesa->buf, FBReadMode, (gmesa->FBReadMode |
+                                        FBReadSrcEnable));
+       WRITE(gmesa->buf, LBWriteMode, LBWriteModeDisable);
+
+       for (i = 0; i < nRect; i++, pRect++) {
+           x0 = pRect->x1;
+           x1 = pRect->x2;
+           h  = pRect->y2 - pRect->y1;
+
+           y0 = driScrnPriv->fbHeight - (pRect->y1+h);
+           if (gDRIPriv->numMultiDevices == 2) 
+               src = (y0/2)*driScrnPriv->fbWidth+x0;
+           else
+               src = y0*driScrnPriv->fbWidth+x0;
+
+           y0 += driScrnPriv->fbHeight;
+           if (gDRIPriv->numMultiDevices == 2) 
+               dst = (y0/2)*driScrnPriv->fbWidth+x0;
+           else
+               dst = y0*driScrnPriv->fbWidth+x0;
+
+           CHECK_DMA_BUFFER(gmesa, 9);
+           WRITE(gmesa->buf, StartXDom,       x0<<16);   /* X0dest */
+           WRITE(gmesa->buf, StartY,          y0<<16);   /* Y0dest */
+           WRITE(gmesa->buf, StartXSub,       x1<<16);   /* X1dest */
+           WRITE(gmesa->buf, GLINTCount,      h);        /* H */
+           WRITE(gmesa->buf, dY,              1<<16);    /* ydir */
+           WRITE(gmesa->buf, dXDom,           0<<16);
+           WRITE(gmesa->buf, dXSub,           0<<16);
+           WRITE(gmesa->buf, FBSourceOffset, (dst-src));
+           WRITE(gmesa->buf, Render,          0x00040048); /* NOT_DONE */
+       }
+
+       /*
+       ** NOTE: FBSourceOffset (above) is backwards from what is
+       ** described in the manual (i.e., dst-src instead of src-dst)
+       ** due to our using the bottom-left window origin instead of the
+       ** top-left window origin.
+       */
+
+       /* Restore FBReadMode */
+       CHECK_DMA_BUFFER(gmesa, 2);
+       WRITE(gmesa->buf, FBReadMode, (gmesa->FBReadMode |
+                                      gmesa->AB_FBReadMode));
+       WRITE(gmesa->buf, LBWriteMode, LBWriteModeEnable);
+    }
+
+    if (gmesa->EnabledFlags & GAMMA_BACK_BUFFER)
+        PROCESS_DMA_BUFFER_TOP_HALF(gmesa);
+
+    DRM_SPINUNLOCK(&driScrnPriv->pSAREA->drawable_lock,
+                      driScrnPriv->drawLockID);
+    VALIDATE_DRAWABLE_INFO_NO_LOCK_POST(gmesa);
+
+    if (gmesa->EnabledFlags & GAMMA_BACK_BUFFER)
+        PROCESS_DMA_BUFFER_BOTTOM_HALF(gmesa);
+  } else {
+    _mesa_problem(NULL, "gammaSwapBuffers: drawable has no context!\n");
+  }
+}
+
+static GLboolean 
+gammaMakeCurrent(__DRIcontextPrivate *driContextPriv,
+                __DRIdrawablePrivate *driDrawPriv,
+                __DRIdrawablePrivate *driReadPriv)
+{
+    if (driContextPriv) {
+       GET_CURRENT_CONTEXT(ctx);
+       gammaContextPtr oldGammaCtx = ctx ? GAMMA_CONTEXT(ctx) : NULL;
+       gammaContextPtr newGammaCtx = (gammaContextPtr) driContextPriv->driverPrivate;
+
+       if ( newGammaCtx != oldGammaCtx ) {
+           newGammaCtx->dirty = ~0;
+       }
+
+       if (newGammaCtx->driDrawable != driDrawPriv) {
+           newGammaCtx->driDrawable = driDrawPriv;
+           gammaUpdateWindow ( newGammaCtx->glCtx );
+           gammaUpdateViewportOffset( newGammaCtx->glCtx );
+       }
+
+#if 0
+       newGammaCtx->Window &= ~W_GIDMask;
+       newGammaCtx->Window |= (driDrawPriv->index << 5);
+       CHECK_DMA_BUFFER(newGammaCtx,1);
+       WRITE(newGammaCtx->buf, GLINTWindow, newGammaCtx->Window);
+#endif
+
+newGammaCtx->new_state |= GAMMA_NEW_WINDOW; /* FIXME */
+
+       _mesa_make_current2( newGammaCtx->glCtx, 
+                         (GLframebuffer *) driDrawPriv->driverPrivate,
+                         (GLframebuffer *) driReadPriv->driverPrivate );
+
+       if (!newGammaCtx->glCtx->Viewport.Width) {
+           _mesa_set_viewport(newGammaCtx->glCtx, 0, 0, 
+                                       driDrawPriv->w, driDrawPriv->h);
+       }
+    } else {
+       _mesa_make_current( 0, 0 );
+    }
+    return GL_TRUE;
+}
+
+
+static GLboolean 
+gammaUnbindContext( __DRIcontextPrivate *driContextPriv )
+{
+   return GL_TRUE;
+}
+
+static GLboolean
+gammaOpenFullScreen(__DRIcontextPrivate *driContextPriv)
+{
+    return GL_TRUE;
+}
+
+static GLboolean
+gammaCloseFullScreen(__DRIcontextPrivate *driContextPriv)
+{
+    return GL_TRUE;
+}
+
+
+static struct __DriverAPIRec gammaAPI = {
+   gammaInitDriver,
+   gammaDestroyScreen,
+   gammaCreateContext,
+   gammaDestroyContext,
+   gammaCreateBuffer,
+   gammaDestroyBuffer,
+   gammaSwapBuffers,
+   gammaMakeCurrent,
+   gammaUnbindContext,
+   gammaOpenFullScreen,
+   gammaCloseFullScreen
+};
+
+
+
+/*
+ * This is the bootstrap function for the driver.
+ * The __driCreateScreen name is the symbol that libGL.so fetches.
+ * Return:  pointer to a __DRIscreenPrivate.
+ */
+#ifndef _SOLO
+void *__driCreateScreen(Display *dpy, int scrn, __DRIscreen *psc,
+                        int numConfigs, __GLXvisualConfig *config)
+{
+   __DRIscreenPrivate *psp;
+   psp = __driUtilCreateScreen(dpy, scrn, psc, numConfigs, config, &gammaAPI);
+   return (void *) psp;
+}
+#else
+void *__driCreateScreen(struct DRIDriverRec *driver,
+                        struct DRIDriverContextRec *driverContext)
+{
+   __DRIscreenPrivate *psp;
+   psp = __driUtilCreateScreen(driver, driverContext, &gammaAPI);
+   return (void *) psp;
+}
+#endif
diff --git a/src/mesa/drivers/dri/gamma/server/glint_common.h b/src/mesa/drivers/dri/gamma/server/glint_common.h
new file mode 100644 (file)
index 0000000..ec601f9
--- /dev/null
@@ -0,0 +1,64 @@
+/* glint_common.h -- common header definitions for Gamma 2D/3D/DRM suite
+ *
+ * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Converted to common header format:
+ *   Jens Owen <jens@tungstengraphics.com>
+ *
+ * $XFree86: xc/programs/Xserver/hw/xfree86/drivers/glint/glint_common.h,v 1.2 2003/04/03 16:52:18 dawes Exp $
+ *
+ */
+
+#ifndef _GLINT_COMMON_H_
+#define _GLINT_COMMON_H_
+
+/*
+ * WARNING: If you change any of these defines, make sure to change
+ * the kernel include file as well (gamma_drm.h)
+ */
+
+/* Driver specific DRM command indices
+ * NOTE: these are not OS specific, but they are driver specific
+ */
+#define DRM_GAMMA_INIT                0x00
+#define DRM_GAMMA_COPY                0x01
+
+typedef struct {
+   enum {
+      GAMMA_INIT_DMA    = 0x01,
+      GAMMA_CLEANUP_DMA = 0x02
+   } func;
+   int sarea_priv_offset;
+   int pcimode;
+   unsigned int mmio0;
+   unsigned int mmio1;
+   unsigned int mmio2;
+   unsigned int mmio3;
+   unsigned int buffers_offset;
+   int num_rast;
+} drmGAMMAInit;
+
+extern int drmGAMMAInitDMA( int fd, drmGAMMAInit *info );
+extern int drmGAMMACleanupDMA( int fd );
+
+#endif
diff --git a/src/mesa/drivers/dri/gamma/server/glint_dri.h b/src/mesa/drivers/dri/gamma/server/glint_dri.h
new file mode 100644 (file)
index 0000000..3952759
--- /dev/null
@@ -0,0 +1,123 @@
+/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/glint/glint_dri.h,v 1.7 2002/10/30 12:52:16 alanh Exp $ */
+/**************************************************************************
+
+Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
+All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sub license, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice (including the
+next paragraph) shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+**************************************************************************/
+
+/*
+ * Author:
+ *   Jens Owen <jens@tungstengraphics.com>
+ *
+ */
+
+#ifndef _GLINT_DRI_H_
+#define _GLINT_DRI_H_
+
+#include "xf86drm.h"
+#include "glint_common.h"
+
+typedef struct {
+       unsigned int    GDeltaMode;
+       unsigned int    GDepthMode;
+       unsigned int    GGeometryMode;
+       unsigned int    GTransformMode;
+} GAMMAContextRegionRec, *GAMMAContextRegionPtr;
+
+typedef struct {
+       unsigned char next, prev; /* indices to form a circular LRU  */
+       unsigned char in_use;   /* owned by a client, or free? */
+       int age;                /* tracked by clients to update local LRU's */
+} GAMMATextureRegionRec, *GAMMATextureRegionPtr;
+
+typedef struct {
+       GAMMAContextRegionRec context_state;
+
+       unsigned int dirty;
+
+       /* Maintain an LRU of contiguous regions of texture space.  If
+        * you think you own a region of texture memory, and it has an
+        * age different to the one you set, then you are mistaken and
+        * it has been stolen by another client.  If global texAge
+        * hasn't changed, there is no need to walk the list.
+        *
+        * These regions can be used as a proxy for the fine-grained
+        * texture information of other clients - by maintaining them
+        * in the same lru which is used to age their own textures,
+        * clients have an approximate lru for the whole of global
+        * texture space, and can make informed decisions as to which
+        * areas to kick out.  There is no need to choose whether to
+        * kick out your own texture or someone else's - simply eject
+        * them all in LRU order.  
+        */
+   
+#define GAMMA_NR_TEX_REGIONS 64
+       GAMMATextureRegionRec texList[GAMMA_NR_TEX_REGIONS+1];
+                               /* Last elt is sentinal */
+        int texAge;            /* last time texture was uploaded */
+        int last_enqueue;      /* last time a buffer was enqueued */
+       int last_dispatch;      /* age of the most recently dispatched buffer */
+       int last_quiescent;     /*  */
+       int ctxOwner;           /* last context to upload state */
+
+       int vertex_prim;
+} GLINTSAREADRIRec, *GLINTSAREADRIPtr;
+
+/* 
+ * Glint specific record passed back to client driver 
+ * via DRIGetDeviceInfo request
+ */
+typedef struct {
+    drmRegion  registers0;
+    drmRegion  registers1;
+    drmRegion  registers2;
+    drmRegion  registers3;
+    int                        numMultiDevices;
+    int                        pprod;
+    int                        cpp;
+    int                        frontOffset;
+    int                        frontPitch;
+    int                        backOffset;
+    int                        backPitch;
+    int                        backX;
+    int                        backY;
+    int                        depthOffset;
+    int                        depthPitch;
+    int                        textureSize;
+    int                logTextureGranularity;
+} GLINTDRIRec, *GLINTDRIPtr;
+
+#define GLINT_DRI_BUF_COUNT 256
+#define GLINT_DRI_BUF_SIZE  4096
+
+#define GAMMA_NR_TEX_REGIONS 64
+
+#define DMA_WRITE(val,reg)                                            \
+do {                                                                  \
+    pGlint->buf2D++ = Glint##reg##Tag;                                 \
+    pGlint->buf2D++ = val;                                           \
+} while (0)
+
+#endif /* _GLINT_DRI_H_ */
index 2c978e10a4e7f2abcfac73941d2bc15270143cf7..9bc784ed8f8155141e6d413cbb176059332a6c22 100644 (file)
@@ -55,7 +55,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 /*     drmBufPtr buf; */
 /*     int i; */
 
-/*     buffer = Xmalloc(I810_DMA_BUF_SZ); */
+/*     buffer = CALLOC(I810_DMA_BUF_SZ); */
 /*     if(buffer == NULL) return -1; */
 /*     for(i = 0; i < I810_DMA_BUF_NR; i++) { */
 /*        buf = &(buffers->list[i]); */
@@ -68,10 +68,10 @@ static drmBufMapPtr i810_create_empty_buffers(void)
 {
    drmBufMapPtr retval;
 
-   retval = (drmBufMapPtr)Xmalloc(sizeof(drmBufMap));
+   retval = (drmBufMapPtr)ALIGN_MALLOC(sizeof(drmBufMap));
    if(retval == NULL) return NULL;
    memset(retval, 0, sizeof(drmBufMap));
-   retval->list = (drmBufPtr)Xmalloc(sizeof(drmBuf) * I810_DMA_BUF_NR);
+   retval->list = (drmBufPtr)ALIGN_MALLOC(sizeof(drmBuf) * I810_DMA_BUF_NR);
    if(retval->list == NULL) {
       Xfree(retval);
       return NULL;
@@ -110,7 +110,7 @@ i810InitDriver(__DRIscreenPrivate *sPriv)
    }
 
    /* Allocate the private area */
-   i810Screen = (i810ScreenPrivate *)Xmalloc(sizeof(i810ScreenPrivate));
+   i810Screen = (i810ScreenPrivate *)CALLOC(sizeof(i810ScreenPrivate));
    if (!i810Screen) {
       __driUtilMessage("i810InitDriver: alloc i810ScreenPrivate struct failed");
       return GL_FALSE;
index a1079f6f56097942407f1ad3b3ecc722aabd4331..58358eb016cd7e5e8fe4b6af079b27f2ca7a9ce6 100644 (file)
@@ -57,7 +57,7 @@ static int i830_malloc_proxy_buf(drmBufMapPtr buffers)
    drmBufPtr buf;
    int i;
 
-   buffer = Xmalloc(I830_DMA_BUF_SZ);
+   buffer = ALIGN_MALLOC(I830_DMA_BUF_SZ);
    if(buffer == NULL) return -1;
    for(i = 0; i < I830_DMA_BUF_NR; i++) {
       buf = &(buffers->list[i]);
@@ -71,10 +71,10 @@ static drmBufMapPtr i830_create_empty_buffers(void)
 {
    drmBufMapPtr retval;
 
-   retval = (drmBufMapPtr)Xmalloc(sizeof(drmBufMap));
+   retval = (drmBufMapPtr)ALIGN_MALLOC(sizeof(drmBufMap));
    if(retval == NULL) return NULL;
    memset(retval, 0, sizeof(drmBufMap));
-   retval->list = (drmBufPtr)Xmalloc(sizeof(drmBuf) * I830_DMA_BUF_NR);
+   retval->list = (drmBufPtr)ALIGN_MALLOC(sizeof(drmBuf) * I830_DMA_BUF_NR);
    if(retval->list == NULL) {
       Xfree(retval);
       return NULL;
@@ -146,7 +146,7 @@ static GLboolean i830InitDriver(__DRIscreenPrivate *sPriv)
    }
 
    /* Allocate the private area */
-   i830Screen = (i830ScreenPrivate *)Xmalloc(sizeof(i830ScreenPrivate));
+   i830Screen = (i830ScreenPrivate *)CALLOC(sizeof(i830ScreenPrivate));
    if (!i830Screen) {
       fprintf(stderr,"\nERROR!  Allocating private area failed\n");
       return GL_FALSE;