GLINT State Transition Strategy Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. All Rights Reserved. Permission is granted to make and distribute verbatim copies of this document provided the copyright notice and this permission notice are preserved on all copies. $XFree86: xc/programs/Xserver/hw/xfree86/drivers/glint/DRI.txt,v 1.2 2000/02/23 04:47:06 martin Exp $ GLINT State Transition Strategy Direct Rendering requires a coordinated method of state management across all drivers accessing this device. This document defines the expected behavior of all drivers participating in direct rendering with this device. Currently only the GMX2000 supports direct rendering. Section 1) State Transition Types The direct rendering document entitled "state-mgmt.txt" gives a device independent overview on the different types of state transitions. This section gives a more detailed description of GLINT specific hardware state. No context switch--no state saves or restores will be done for transitions, however the device can be busy executing commands from previous accesses to the device. X context switch--the intersection of 2D and 3D state will be saved and restored. This is the state marked as DDX/3DClient in Appendix A. The device will be synced and idle after this switch. 3D context switch--all 3D state will be saved and restored. 3D state is defined as all registered owned by the 3DClient driver. See Appendix A for more details. The device will be synced and idle after this switch. The registers owned by the DRM kernel module and submodules are not managed by context switches. Section 2) VT Switching and DGA Access VT Switching away from the X Server or client access to the device framebuffer via DGA require the device to be locked away from 3D direct rendering accesses. The X Server will hold the lock on behalf of these services until access is restored. Section 3) Potential Optimizations Lighten the number of registers required for context switches by using a mechanism to determine whether stipple or pattern registers need to be saved/restored. This optimization has not been done for the initial direct rendering infrastructure sample implementation. Appendix A: GMX2000 Register Ownership driver column contains: DDX - DDX driver manages register DRM - DRM or DRM subdriver manages register 3DClient - 3D Client Driver manges register DDX/3DClient, DDX/DRM, 3DClient/DRM - register access is shared if the RO (read only) column is marked with a *, then no writes are permitted to this register, and thus no drivers own it. primary and secondary columns contain the default values after initialization. primary is the master rasterizer, secondary is the slave rasterizer. Name offset primary secondary RO driver ------------------------------------------------------------------------------ ResetStatus o=0000 0x00000000 0x00000000 DDX/DRM IntEnable o=0008 0x00000000 0x00000000 DRM IntFlags o=0010 0x00000000 0x00000018 DRM InFIFOSpace o=0018 0x00000000 0x00000021 * OutFIFOWords o=0020 0x00000000 0x00000000 * DMAAddress o=0028 0x00000000 0x00000000 DRM DMACount o=0030 0x00000000 0x00000000 DRM ErrorFlags o=0038 0x00000000 0x00000002 DRM VClkCtl o=0040 0x00000000 0x00000000 DDX TestRegister o=0048 0x00000000 0x00000000 DDX Aperture0 o=0050 0x00000000 0x00000000 DDX Aperture1 o=0058 0x00000000 0x00000000 DDX DMAControl o=0060 0x00000000 0x00000000 DRM FIFODis o=0068 0x00000000 0x00000001 DDX LBMemoryCtl o=1000 0x00000000 0x770883ff DDX LBMemoryEDO o=1008 0x00000000 0x77080000 DDX FBMemoryCtl o=1800 0x00000000 0x63c00800 DDX FBModeSel o=1808 0x00000000 0x00000907 DDX FBGCWrMask o=1810 0x00000000 0xffffffff * FBGCColorLower o=1818 0x00000000 0x00828282 * FBTXMemCtl o=1820 0x00000000 0x00000002 DDX FBWrMask o=1830 0x00000000 0xffffffff * FBGCColorUpper o=1838 0x00000000 0x00828282 * VTGHLimit o=3000 0x00000000 0x000000c8 DDX VTGHSyncStart o=3008 0x00ffffff 0x00000006 DDX VTGHSyncEnd o=3010 0x00000000 0x00000016 DDX VTGHBlankEnd o=3018 0x00ffffff 0x00000028 DDX VTGVLimit o=3020 0x00000000 0x000001fb DDX VTGVSyncStart o=3028 0x00ffffff 0x00000004 DDX VTGVSyncEnd o=3030 0x00000000 0x0000000a DDX VTGVBlankEnd o=3038 0x00ffffff 0x0000001b DDX VTGHGateStart o=3040 0x00000000 0x00000027 DDX VTGHGateEnd o=3048 0x00ffffff 0x000000c7 DDX VTGVGateStart o=3050 0x00000000 0x0000001a DDX VTGVGateEnd o=3058 0x00ffffff 0x0000001b DDX VTGPolarity o=3060 0x00000000 0x000000ba DDX VTGFrameRowAddr o=3068 0x00ffffff 0x00000000 DDX VTGVLineNumber o=3070 0x00000000 0x00000079 DDX VTGSerialClk o=3078 0x00ffffff 0x00000002 DDX VTGModeCtl o=3080 0x00000000 0x00000000 DDX GInFIFOSpace o=0018 0x00000000 * GDMAAddress o=0028 0x00000000 DRM GDMACount o=0030 0x00000000 DRM GDMAControl o=0060 0x00000000 DRM GOutDMA o=0080 0x00000000 DRM GOutDMACount o=0088 0x00000000 DRM GResetStatus o=0800 0x00000000 DRM GIntEnable o=0808 0x00000000 DRM GIntFlags o=0810 0x00000000 DRM GErrorFlags o=0838 0x00000000 DRM GTestRegister o=0848 0x00000000 DDX GFIFODis o=0868 0x00000000 DDX GChipConfig o=0870 0x00000000 DDX GCSRAperture o=0878 0x00000000 DDX GPageTableAddr o=0c00 0x00000000 DRM GPageTableLength o=0c08 0x00000000 DRM GDelayTimer o=0c38 0x00000000 DRM GCommandMode o=0c40 0x00000000 DRM GCommandIntEnable o=0c48 0x00000000 DRM GCommandIntFlags o=0c50 0x00000000 DRM GCommandErrorFlags o=0c58 0x00000000 DRM GCommandStatus o=0c60 0x00000000 * GCommandFaultingAddr o=0c68 0x00000000 * GVertexFaultingAddr o=0c70 0x00000000 * GWriteFaultingAddr o=0c88 0x00000000 * GFeedbackSelectCount o=0c98 0x00000000 * GGammaProcessorMode o=0cb8 0x00000000 DDX GVGAShadow o=0d00 0x00000000 DDX GMultGLINTAperture o=0d08 0x00000000 DDX GMultGLINT1 o=0d10 0x00000000 DDX GMultGLINT2 o=0d18 0x00000000 DDX StartXDom t=0000 undefined undefined DDX/3DClient dXDom t=0001 undefined undefined DDX/3DClient StartXSub t=0002 undefined undefined DDX/3DClient dXSub t=0003 undefined undefined DDX/3DClient StartY t=0004 undefined undefined DDX/3DClient dY t=0005 undefined undefined DDX/3DClient GLINTCount t=0006 undefined undefined DDX/3DClient PointTable0 t=0010 undefined undefined DDX/3DClient PointTable1 t=0011 undefined undefined DDX/3DClient PointTable2 t=0012 undefined undefined DDX/3DClient PointTable3 t=0013 undefined undefined DDX/3DClient RasterizerMode t=0014 undefined undefined DDX/3DClient YLimits t=0015 undefined undefined DDX/3DClient ScanLineOwnership t=0016 0x00000001 0x00000005 DDX PixelSize t=0018 undefined undefined DDX/3DClient ScissorMode t=0030 undefined undefined DDX/3DClient ScissorMinXY t=0031 undefined undefined DDX/3DClient ScissorMaxXY t=0032 undefined undefined DDX/3DClient ScreenSize t=0033 undefined undefined DDX/3DClient AreaStippleMode t=0034 undefined undefined DDX/3DClient LineStippleMode t=0035 undefined undefined DDX/3DClient LoadLineStippleCounters t=0036 undefined undefined DDX/3DClient WindowOrigin t=0039 undefined undefined DDX/3DClient AreaStipplePattern0 t=0040 undefined undefined DDX/3DClient AreaStipplePattern1 t=0041 undefined undefined DDX/3DClient AreaStipplePattern2 t=0042 undefined undefined DDX/3DClient AreaStipplePattern3 t=0043 undefined undefined DDX/3DClient AreaStipplePattern4 t=0044 undefined undefined DDX/3DClient AreaStipplePattern5 t=0045 undefined undefined DDX/3DClient AreaStipplePattern6 t=0046 undefined undefined DDX/3DClient AreaStipplePattern7 t=0047 undefined undefined DDX/3DClient AreaStipplePattern8 t=0048 undefined undefined DDX/3DClient AreaStipplePattern9 t=0049 undefined undefined DDX/3DClient AreaStipplePattern10 t=004a undefined undefined DDX/3DClient AreaStipplePattern11 t=004b undefined undefined DDX/3DClient AreaStipplePattern12 t=004c undefined undefined DDX/3DClient AreaStipplePattern13 t=004d undefined undefined DDX/3DClient AreaStipplePattern14 t=004e undefined undefined DDX/3DClient AreaStipplePattern15 t=004f undefined undefined DDX/3DClient AreaStipplePattern16 t=0050 undefined undefined DDX/3DClient AreaStipplePattern17 t=0051 undefined undefined DDX/3DClient AreaStipplePattern18 t=0052 undefined undefined DDX/3DClient AreaStipplePattern19 t=0053 undefined undefined DDX/3DClient AreaStipplePattern20 t=0054 undefined undefined DDX/3DClient AreaStipplePattern21 t=0055 undefined undefined DDX/3DClient AreaStipplePattern22 t=0056 undefined undefined DDX/3DClient AreaStipplePattern23 t=0057 undefined undefined DDX/3DClient AreaStipplePattern24 t=0058 undefined undefined DDX/3DClient AreaStipplePattern25 t=0059 undefined undefined DDX/3DClient AreaStipplePattern26 t=005a undefined undefined DDX/3DClient AreaStipplePattern27 t=005b undefined undefined DDX/3DClient AreaStipplePattern28 t=005c undefined undefined DDX/3DClient AreaStipplePattern29 t=005d undefined undefined DDX/3DClient AreaStipplePattern30 t=005e undefined undefined DDX/3DClient AreaStipplePattern31 t=005f undefined undefined DDX/3DClient RouterMode t=0108 undefined undefined DDX/3DClient TextureAddressMode t=0070 undefined undefined DDX/3DClient SStart t=0071 undefined undefined 3DClient dSdx t=0072 undefined undefined 3DClient dSdyDom t=0073 undefined undefined 3DClient TStart t=0074 undefined undefined 3DClient dTdx t=0075 undefined undefined 3DClient dTdyDom t=0076 undefined undefined 3DClient QStart t=0077 undefined undefined 3DClient dQdx t=0078 undefined undefined 3DClient dQdyDom t=0079 undefined undefined 3DClient LOD t=007a undefined undefined 3DClient dSdy t=007b undefined undefined 3DClient dTdy t=007c undefined undefined 3DClient dQdy t=007d undefined undefined 3DClient TextureReadMode t=0090 undefined undefined DDX/3DClient TextureFormat t=0091 undefined undefined 3DClient TextureCacheControl t=0092 undefined undefined 3DClient GLINTBorderColor t=0095 undefined undefined 3DClient TexelLUTIndex t=0098 undefined undefined 3DClient TexelLUTData t=0099 undefined undefined 3DClient TexelLUTAddress t=009a undefined undefined 3DClient TexelLUTTransfer t=009b undefined undefined 3DClient TextureFilterMode t=009c undefined undefined 3DClient TextureChromaUpper t=009d undefined undefined 3DClient TextureChromaLower t=009e undefined undefined 3DClient TxBaseAddr0 t=00a0 undefined undefined 3DClient TxBaseAddr1 t=00a1 undefined undefined 3DClient TxBaseAddr2 t=00a2 undefined undefined 3DClient TxBaseAddr3 t=00a3 undefined undefined 3DClient TxBaseAddr4 t=00a4 undefined undefined 3DClient TxBaseAddr5 t=00a5 undefined undefined 3DClient TxBaseAddr6 t=00a6 undefined undefined 3DClient TxBaseAddr7 t=00a7 undefined undefined 3DClient TxBaseAddr8 t=00a8 undefined undefined 3DClient TxBaseAddr9 t=00a9 undefined undefined 3DClient TxBaseAddr10 t=00aa undefined undefined 3DClient TxBaseAddr11 t=00ab undefined undefined 3DClient TexelLUT0 t=01d0 undefined undefined 3DClient TexelLUT1 t=01d1 undefined undefined 3DClient TexelLUT2 t=01d2 undefined undefined 3DClient TexelLUT3 t=01d3 undefined undefined 3DClient TexelLUT4 t=01d4 undefined undefined 3DClient TexelLUT5 t=01d5 undefined undefined 3DClient TexelLUT6 t=01d6 undefined undefined 3DClient TexelLUT7 t=01d7 undefined undefined 3DClient TexelLUT8 t=01d8 undefined undefined 3DClient TexelLUT9 t=01d9 undefined undefined 3DClient TexelLUT10 t=01da undefined undefined 3DClient TexelLUT11 t=01db undefined undefined 3DClient TexelLUT12 t=01dc undefined undefined 3DClient TexelLUT13 t=01dd undefined undefined 3DClient TexelLUT14 t=01de undefined undefined 3DClient TexelLUT15 t=01df undefined undefined 3DClient Texel0 t=00c0 undefined undefined 3DClient Texel1 t=00c1 undefined undefined 3DClient Texel2 t=00c2 undefined undefined 3DClient Texel3 t=00c3 undefined undefined 3DClient Texel4 t=00c4 undefined undefined 3DClient Texel5 t=00c5 undefined undefined 3DClient Texel6 t=00c6 undefined undefined 3DClient Texel7 t=00c7 undefined undefined 3DClient Interp0 t=00c8 undefined undefined 3DClient Interp1 t=00c9 undefined undefined 3DClient Interp2 t=00ca undefined undefined 3DClient Interp3 t=00cb undefined undefined 3DClient Interp4 t=00cc undefined undefined 3DClient TextureFilter t=00cd undefined undefined 3DClient TextureColorMode t=00d0 undefined undefined DDX/3DClient TextureEnvColor t=00d1 undefined undefined 3DClient FogMode t=00d2 undefined undefined DDX/3DClient FogColor t=00d3 undefined undefined 3DClient FStart t=00d4 undefined undefined 3DClient dFdx t=00d5 undefined undefined 3DClient dFdyDom t=00d6 undefined undefined 3DClient KsStart t=00d9 undefined undefined 3DClient dKsdx t=00da undefined undefined 3DClient dKsdyDom t=00db undefined undefined 3DClient KdStart t=00dc undefined undefined 3DClient dKdStart t=00dd undefined undefined 3DClient dKddyDom t=00de undefined undefined 3DClient RStart t=00f0 undefined undefined 3DClient dRdx t=00f1 undefined undefined 3DClient dRdyDom t=00f2 undefined undefined 3DClient GStart t=00f3 undefined undefined 3DClient dGdx t=00f4 undefined undefined 3DClient dGdyDom t=00f5 undefined undefined 3DClient BStart t=00f6 undefined undefined 3DClient dBdx t=00f7 undefined undefined 3DClient dBdyDom t=00f8 undefined undefined 3DClient AStart t=00f9 undefined undefined 3DClient dAdx t=00fa undefined undefined 3DClient dAdyDom t=00fb undefined undefined 3DClient ColorDDAMode t=00fc undefined undefined DDX/3DClient ConstantColor t=00fd undefined undefined 3DClient GLINTColor t=00fe undefined undefined DDX/3DClient AlphaTestMode t=0100 undefined undefined DDX/3DClient AntialiasMode t=0101 undefined undefined DDX/3DClient AlphaBlendMode t=0102 undefined undefined DDX/3DClient ChromaUpper t=01e1 undefined undefined 3DClient ChromaLower t=01e2 undefined undefined 3DClient ChromaTestMode t=01e3 undefined undefined 3DClient DitherMode t=0103 undefined undefined DDX/3DClient FBSoftwareWriteMask t=0104 undefined undefined DDX/3DClient LogicalOpMode t=0105 undefined undefined DDX/3DClient FBWriteData t=0106 undefined undefined DDX/3DClient LBReadMode t=0110 undefined undefined DDX/3DClient Partial Product bit 0-5 need by 3DClient LBReadFormat t=0111 set by DDX set by DDX DDX LBSourceOffset t=0112 undefined undefined DDX/3DClient LBStencil t=0115 undefined undefined * LBDepth t=0116 undefined undefined * LBWindowBase t=0117 undefined undefined DDX/3DClient LBWriteMode t=0118 undefined undefined DDX/3DClient LBWriteFormat t=0119 set by DDX set by DDX DDX TextureDownloadOffset t=011e undefined undefined DDX/3DClient LBWindowOffset t=011f undefined undefined DDX/3DClient GLINTWindow t=0130 undefined undefined DDX/3DClient StencilMode t=0131 undefined undefined DDX/3DClient StencilData t=0132 undefined undefined 3DClient GLINTStencil t=0133 undefined undefined 3DClient DepthMode t=0134 undefined undefined DDX/3DClient GLINTDepth t=0135 undefined undefined DDX/3DClient ZStartU t=0136 undefined undefined 3DClient ZStartL t=0137 undefined undefined 3DClient dZdxU t=0138 undefined undefined 3DClient dZdxL t=0139 undefined undefined 3DClient dZdyDomU t=013a undefined undefined 3DClient dZdyDomL t=013b undefined undefined 3DClient FastClearDepth t=013c undefined undefined 3DClient FBReadMode t=0150 set by DDX set by DDX DDX/3DClient Partial Product bit 0-5 need by 3DClient LBReadFormat t=0111 set by DDX set by DDX DDX FBSourceOffset t=0151 undefined undefined DDX/3DClient FBPixelOffset t=0152 undefined undefined DDX/3DClient FBWindowBase t=0156 undefined undefined DDX/3DClient FBWriteMode t=0157 undefined undefined DDX/3DClient FBHardwareWriteMask t=0158 undefined undefined DDX/3DClient FBBlockColor t=0159 undefined undefined DDX/3DClient PatternRamMode t=015f undefined undefined DDX/3DClient PatternRamData0 t=0160 undefined undefined DDX/3DClient PatternRamData1 t=0161 undefined undefined DDX/3DClient PatternRamData2 t=0162 undefined undefined DDX/3DClient PatternRamData3 t=0163 undefined undefined DDX/3DClient PatternRamData4 t=0164 undefined undefined DDX/3DClient PatternRamData5 t=0165 undefined undefined DDX/3DClient PatternRamData6 t=0166 undefined undefined DDX/3DClient PatternRamData7 t=0167 undefined undefined DDX/3DClient PatternRamData8 t=0168 undefined undefined DDX/3DClient PatternRamData9 t=0169 undefined undefined DDX/3DClient PatternRamData10 t=016a undefined undefined DDX/3DClient PatternRamData11 t=016b undefined undefined DDX/3DClient PatternRamData12 t=016c undefined undefined DDX/3DClient PatternRamData13 t=016d undefined undefined DDX/3DClient PatternRamData14 t=016e undefined undefined DDX/3DClient PatternRamData15 t=016f undefined undefined DDX/3DClient PatternRamData16 t=0170 undefined undefined DDX/3DClient PatternRamData17 t=0171 undefined undefined DDX/3DClient PatternRamData18 t=0172 undefined undefined DDX/3DClient PatternRamData19 t=0173 undefined undefined DDX/3DClient PatternRamData20 t=0174 undefined undefined DDX/3DClient PatternRamData21 t=0175 undefined undefined DDX/3DClient PatternRamData22 t=0176 undefined undefined DDX/3DClient PatternRamData23 t=0177 undefined undefined DDX/3DClient PatternRamData24 t=0178 undefined undefined DDX/3DClient PatternRamData25 t=0179 undefined undefined DDX/3DClient PatternRamData26 t=017a undefined undefined DDX/3DClient PatternRamData27 t=017b undefined undefined DDX/3DClient PatternRamData28 t=017c undefined undefined DDX/3DClient PatternRamData29 t=017d undefined undefined DDX/3DClient PatternRamData30 t=017e undefined undefined DDX/3DClient PatternRamData31 t=017f undefined undefined DDX/3DClient FBBlockColorU t=018d undefined undefined DDX/3DClient FBBlockColorL t=018e undefined undefined DDX/3DClient FilterMode t=0180 undefined undefined DDX/3DClient StatisticMode t=0181 undefined undefined DDX/3DClient MinRegion t=0182 undefined undefined 3DClient MaxRegion t=0183 undefined undefined 3DClient KsRStart t=0190 undefined undefined 3DClient dKsRdx t=0191 undefined undefined 3DClient dKsRdyDom t=0192 undefined undefined 3DClient KsGStart t=0193 undefined undefined 3DClient dKsGdx t=0194 undefined undefined 3DClient dKsGdyDom t=0195 undefined undefined 3DClient KsBStart t=0196 undefined undefined 3DClient dKsBdx t=0197 undefined undefined 3DClient dKsBdyDom t=0198 undefined undefined 3DClient KdRStart t=01a0 undefined undefined 3DClient dKdRdx t=01a1 undefined undefined 3DClient dKdRdyDom t=01a2 undefined undefined 3DClient KdGStart t=01a3 undefined undefined 3DClient dKdGdx t=01a4 undefined undefined 3DClient dKdGdyDom t=01a5 undefined undefined 3DClient KdBStart t=01a6 undefined undefined 3DClient dKdBdx t=01a7 undefined undefined 3DClient dKdBdyDom t=01a8 undefined undefined 3DClient All Gamma State is undefined and owned by 3DClient driver except for: BroadcastMask o=026f 0x00000003 DDX/3DClient All TI RAMDAC State is owned by DDX driver.