summaryrefslogtreecommitdiff
path: root/src/mesa/drivers/dri/gamma
diff options
context:
space:
mode:
authorAlan Hourihane <alanh@tungstengraphics.com>2003-09-30 11:28:16 +0000
committerAlan Hourihane <alanh@tungstengraphics.com>2003-09-30 11:28:16 +0000
commite508f7f08e6fa4292136a377150fc058c041fbc0 (patch)
treea012bb2a36fc4858d03e3b6af9a6fe714000f10b /src/mesa/drivers/dri/gamma
parent0f2e1869263ef04b3bc47d9817278a555201bda8 (diff)
add gamma driver - no kernel driver yet
(build tested, not physically tested)
Diffstat (limited to 'src/mesa/drivers/dri/gamma')
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_client.h6185
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_context.c209
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_context.h405
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_dd.c128
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_inithw.c551
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_lock.c59
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_lock.h88
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_macros.h328
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_regs.h659
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_render.c316
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_screen.c142
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_screen.h30
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_span.c342
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_state.c1734
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_tex.c428
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_texmem.c535
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_texstate.c216
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_tris.c653
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_tris.h36
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_tritmp.h495
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_vb.c380
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_vb.h60
-rw-r--r--src/mesa/drivers/dri/gamma/gamma_xmesa.c296
-rw-r--r--src/mesa/drivers/dri/gamma/server/glint_common.h64
-rw-r--r--src/mesa/drivers/dri/gamma/server/glint_dri.h123
25 files changed, 14462 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/gamma/gamma_client.h b/src/mesa/drivers/dri/gamma/gamma_client.h
new file mode 100644
index 0000000000..1c1a22ebc4
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_client.h
@@ -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
index 0000000000..f7db2adea3
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_context.c
@@ -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
index 0000000000..84b54e2a63
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_context.h
@@ -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
index 0000000000..5bd84026e9
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_dd.c
@@ -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
index 0000000000..47eb802b4e
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_inithw.c
@@ -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
index 0000000000..4c0970f090
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_lock.c
@@ -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
index 0000000000..8b66e19aa4
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_lock.h
@@ -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
index 0000000000..bf9cf5f11f
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_macros.h
@@ -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
index 0000000000..2edda07227
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_regs.h
@@ -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
index 0000000000..b8bf617156
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_render.c
@@ -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
index 0000000000..bc6b254d32
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_screen.c
@@ -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
index 0000000000..6f3cf1e5b1
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_screen.h
@@ -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
index 0000000000..8d523c4b6f
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_span.c
@@ -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
index 0000000000..8a76720678
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_state.c
@@ -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
index 0000000000..22ca144582
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_tex.c
@@ -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
index 0000000000..506b5c4c8f
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_texmem.c
@@ -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
index 0000000000..dfd82b489c
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_texstate.c
@@ -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
index 0000000000..f039103026
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_tris.c
@@ -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
index 0000000000..02bec28690
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_tris.h
@@ -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
index 0000000000..d0dbd1d6e7
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_tritmp.h
@@ -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
index 0000000000..6178b37bef
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_vb.c
@@ -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
index 0000000000..feda25c4c6
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_vb.h
@@ -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
index 0000000000..67bcf019d0
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/gamma_xmesa.c
@@ -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
index 0000000000..ec601f942d
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/server/glint_common.h
@@ -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
index 0000000000..3952759f83
--- /dev/null
+++ b/src/mesa/drivers/dri/gamma/server/glint_dri.h
@@ -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_ */