
                   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.
