1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2<HTML> 3<HEAD> 4<META http-equiv="Content-Type" content="text/html; charset=windows-1252"> 5<META name="GENERATOR" content="Microsoft FrontPage 5.0"> 6<META http-equiv="Content-Style-Type" content="text/css"> 7<LINK rel="stylesheet" type="text/css" href="../CSS/revolution.css"> 8<TITLE>GX State Issues</TITLE> 9</HEAD> 10<BODY> 11<H1 align="left">GX State</H1> 12<H2>State Issuing vs. the Display List</H2> 13<P>In this document we describe the following items:</P> 14<UL> 15<LI>Which GX functions that affect the same GP registers 16<LI>Which GX functions that leave a state pending 17<LI>Which GX functions that flush all pending states. 18<LI>What kind of registers that each GX function affects 19</UL> 20<P>This information is useful for various purposes: constructing display lists, optimizing function call patterns, etc.</P> 21<P>The register types in the tables below are as follows:</P> 22<TABLE border="1" cellpadding="3" cellspacing="0"> 23 <TBODY> 24 <TR> 25<TD width="103"><B>Register Type</B></TD> 26<TD width="252"><B>Description</B></TD> 27 </TR> 28 <TR> 29<TD width="103">CP</TD> 30<TD width="252">Command Processor</TD> 31 </TR> 32 <TR> 33<TD width="103">XF</TD> 34<TD width="252">Transform unit</TD> 35 </TR> 36 <TR> 37<TD width="103">RS</TD> 38<TD width="252">Raster pipe state</TD> 39 </TR> 40 </TBODY> 41</TABLE> 42<P><STRONG>Note: </STRONG> In the Revolution SDK, the order in which the GX Library issues commands is different from that of the GAMECUBE SDK. This is to improve the internal processing efficiency of the graphics processor. Specifically, most states due to the XF command will be delayed (apart from a few exceptions, such as loading a matrix).</P> 43<H2>Nice GX Functions</H2> 44<P>We begin by describing the "nice" GX functions. These functions each affect unique registers, and they insert their command tokens immediately (leaving no pending state). They are easy to put into display lists. </P> 45<TABLE border="1" cellpadding="3" cellspacing="0"> 46 <TBODY> 47 <TR> 48<TD width="411"><B>Functions</B></TD> 49<TD width="119"><B>Register Type</B></TD> 50 </TR> 51 <TR> 52<TD width="411"><A href="Geometry/GXSetArray.html"><CODE>GXSetArray</CODE></A></TD> 53<TD width="119">CP</TD> 54 </TR> 55 <TR> 56<TD width="411"><A href="Geometry/GXInvalidateVtxCache.html"><CODE>GXInvalidateVtxCache</CODE></A></TD> 57<TD width="119">CP</TD> 58 </TR> 59 <TR> 60 <TD width="411"> </TD> 61 <TD width="119"> </TD> 62 </TR> 63 <TR> 64<TD width="411"><A href="Transform/GXLoadPosMtxImm.html"><CODE>GXLoadPosMtxImm</CODE></A>/<A href="Transform/GXLoadPosMtxIndx.html"><CODE>Indx</CODE></A></TD> 65<TD width="119">XF</TD> 66 </TR> 67 <TR> 68<TD width="411"><A href="Transform/GXLoadNrmMtxImm.html"><CODE>GXLoadNrmMtxImm</CODE></A>/<CODE><A href="Transform/GXLoadNrmMtxImm3x3.html">Imm3x3</A></CODE>/<CODE><A href="Transform/GXLoadNrmMtxIndx3x3.html">Indx3x3</A></CODE></TD> 69<TD width="119">XF</TD> 70 </TR> 71 <TR> 72<TD width="411"><A href="Transform/GXLoadTexMtxImm.html"><CODE>GXLoadTexMtxImm</CODE></A>/<A href="Transform/GXLoadTexMtxIndx.html"><CODE>Indx</CODE></A></TD> 73<TD width="119">XF</TD> 74 </TR> 75 <TR> 76<TD width="411"><A href="Culling/GXSetClipMode.html"><CODE>GXSetClipMode</CODE></A></TD> 77<TD width="119">XF</TD> 78 </TR> 79 <TR> 80 <TD width="411"> </TD> 81 <TD width="119"> </TD> 82 </TR> 83 <TR> 84<TD width="411"><CODE><A href="Lighting/GXLoadLightObjImm.html">GXLoadLightObjImm</A></CODE></TD> 85<TD width="119">XF</TD> 86 </TR> 87 <TR> 88<TD width="411"><A href="Lighting/GXLoadLightObjIndx.html"><CODE>GXLoadLightObjIndx</CODE></A></TD> 89<TD width="119">XF</TD> 90 </TR> 91 <TR> 92 <TD width="411"> </TD> 93 <TD width="119"> </TD> 94 </TR> 95 <TR> 96<TD width="411"><A href="Indirect/GXSetTevIndirect.html"><CODE>GXSetTevInd*</CODE></A> (all the various functions to set indirect modes)</TD> 97<TD width="119">RS</TD> 98 </TR> 99 <TR> 100<TD width="411"><A href="Indirect/GXSetTevDirect.html"><CODE>GXSetTevDirect</CODE></A></TD> 101<TD width="119">RS</TD> 102 </TR> 103 <TR> 104<TD width="411"><A href="Indirect/GXSetIndTexMtx.html"><CODE>GXSetIndTexMtx</CODE></A></TD> 105<TD width="119">RS</TD> 106 </TR> 107 <TR> 108 <TD width="411"> </TD> 109 <TD width="119"> </TD> 110 </TR> 111 <TR> 112<TD width="411"><A href="Management/GXPixModeSync.html"><CODE>GXPixModeSync</CODE></A></TD> 113<TD width="119">RS</TD> 114 </TR> 115 <TR> 116<TD width="411"><A href="Management/GXTexModeSync.html"><CODE>GXTexModeSync</CODE></A></TD> 117<TD width="119">RS</TD> 118 </TR> 119 <TR> 120<TD width="411"><A href="Management/GXSetDrawSync.html"><CODE>GXSetDrawSync</CODE></A></TD> 121<TD width="119">RS</TD> 122 </TR> 123 <TR> 124 <TD width="411"> </TD> 125 <TD width="119"> </TD> 126 </TR> 127 <TR> 128<TD width="411"><A href="Framebuffer/GXSetCopyClear.html"><CODE>GXSetCopyClear</CODE></A></TD> 129<TD width="119">RS</TD> 130 </TR> 131 <TR> 132<TD width="411"><A href="Framebuffer/GXSetCopyFilter.html"><CODE>GXSetCopyFilter</CODE></A></TD> 133<TD width="119">RS</TD> 134 </TR> 135 <TR> 136<TD width="411"><A href="Framebuffer/GXClearBoundingBox.html"><CODE>GXClearBoundingBox</CODE></A></TD> 137<TD width="119">RS</TD> 138 </TR> 139 <TR> 140<TD width="411"><A href="PixelProc/GXSetZMode.html"><CODE>GXSetZMode</CODE></A></TD> 141<TD width="119">RS</TD> 142 </TR> 143 <TR> 144<TD width="411"><A href="PixelProc/GXSetDstAlpha.html"><CODE>GXSetDstAlpha</CODE></A></TD> 145<TD width="119">RS</TD> 146 </TR> 147 <TR> 148<TD width="411"><A href="PixelProc/GXSetFieldMask.html"><CODE>GXSetFieldMask</CODE></A></TD> 149<TD width="119">RS</TD> 150 </TR> 151 <TR> 152<TD width="411"><A href="Culling/GXSetScissor.html"><CODE>GXSetScissor</CODE></A></TD> 153<TD width="119">RS</TD> 154 </TR> 155 <TR> 156<TD width="411"><A href="Culling/GXSetScissorBoxOffset.html"><CODE>GXSetScissorBoxOffset</CODE></A></TD> 157<TD width="119">RS</TD> 158 </TR> 159 <TR> 160 <TD width="411"> </TD> 161 <TD width="119"> </TD> 162 </TR> 163 <TR> 164<TD width="411"><A href="Tev/GXSetTevColor.html"><CODE>GXSetTevColor</CODE></A></TD> 165<TD width="119">RS</TD> 166 </TR> 167 <TR> 168<TD width="411"><CODE><A href="Tev/GXSetTevColorS10.html">GXSetTevColorS10</A></CODE></TD> 169<TD width="119">RS</TD> 170 </TR> 171 <TR> 172<TD width="411"><A href="Tev/GXSetTevKColor.html"><CODE>GXSetTevKColor</CODE></A></TD> 173<TD width="119">RS</TD> 174 </TR> 175 <TR> 176<TD width="411"><A href="Tev/GXSetAlphaCompare.html"><CODE>GXSetAlphaCompare</CODE></A></TD> 177<TD width="119">RS</TD> 178 </TR> 179 <TR> 180<TD width="411"><A href="Tev/GXSetZTexture.html"><CODE>GXSetZTexture</CODE></A></TD> 181<TD width="119">RS</TD> 182 </TR> 183 <TR> 184<TD width="411"><A href="PixelProc/GXSetFog.html"><CODE>GXSetFog</CODE></A></TD> 185<TD width="119">RS</TD> 186 </TR> 187 <TR> 188<TD width="411"><CODE><A href="PixelProc/GXSetFogRangeAdj.html">GXSetFogRangeAdj</A></CODE></TD> 189<TD width="119">RS</TD> 190 </TR> 191 </TBODY> 192</TABLE> 193<H2>Functions with Register Conflicts</H2> 194<P>These functions conflict with others that use the same registers. They can be put into display lists carefully as long as you understand that doing so will affect all settings sharing the same registers. <BR><BR><B>Note:</B> Some of the register conflicts are also listed in the next section.<br></P> 195<P>It is possible to work around any RS register conflict (it is not possible for CP or XF registers). There is a mask register that can be used to write only certain bits within a RS register. Given that it takes time to set the mask register, none of the current GX functions use this feature. The one exception is <a href="Culling/GXSetCoPlanar.html">GXSetCoPlanar</a> (which would otherwise conflict with the <em>genmode</em> register). Future revisions of GX may include functions that utilize the mask register. If you think you can greatly benefit from using the mask register, please contact Developer Support with your reasons.<br></P> 196<TABLE border="1" cellpadding="3" cellspacing="0"> 197 <TBODY> 198 <TR> 199<TD width="205" height="19"><B>Functions</B></TD> 200<TD width="330" height="19"><B>Shared Register Name</B></TD> 201<TD width="94" height="19"><B>Register Type</B></TD> 202 </TR> 203 <TR> 204<TD width="205" height="19"><A href="PixelProc/GXSetBlendMode.html"><CODE>GXSetBlendMode</CODE></A></TD> 205<TD width="330" height="19"><EM>cmode0</EM></TD> 206<TD width="94" height="19">RS</TD> 207 </TR> 208 <TR> 209<TD width="205" height="19"><A href="PixelProc/GXSetColorUpdate.html"><CODE>GXSetColorUpdate</CODE></A></TD> 210<TD width="330" height="19"><EM>cmode0</EM></TD> 211<TD width="94" height="19">RS</TD> 212 </TR> 213 <TR> 214<TD width="205" height="19"><A href="PixelProc/GXSetAlphaUpdate.html"><CODE>GXSetAlphaUpdate</CODE></A></TD> 215<TD width="330" height="19"><EM>cmode0</EM></TD> 216<TD width="94" height="19">RS</TD> 217 </TR> 218 <TR> 219<TD width="205" height="19"><A href="PixelProc/GXSetDither.html"><CODE>GXSetDither</CODE></A></TD> 220<TD width="330" height="19"><EM>cmode0</EM></TD> 221<TD width="94" height="19">RS</TD> 222 </TR> 223 <TR> 224 <TD width="205" height="19"> </TD> 225 <TD width="330" height="19"> </TD> 226 <TD width="94" height="19"> </TD> 227 </TR> 228 <TR> 229<TD width="205" height="19"><A href="PixelProc/GXSetZCompLoc.html"><CODE>GXSetZCompLoc</CODE></A></TD> 230<TD width="330" height="19"><EM>peCtrl</EM></TD> 231<TD width="94" height="19">RS</TD> 232 </TR> 233 <TR> 234<TD width="205" height="19"><A href="PixelProc/GXSetPixelFmt.html"><CODE>GXSetPixelFmt</CODE></A></TD> 235<TD width="330" height="19"><EM>peCtrl</EM></TD> 236<TD width="94" height="19">RS</TD> 237 </TR> 238 <TR> 239 <TD width="205" height="19"> </TD> 240 <TD width="330" height="19"> </TD> 241 <TD width="94" height="19"> </TD> 242 </TR> 243 <TR> 244<TD width="205" height="19"><A href="Tev/GXSetTevOp.html"><CODE>GXSetTevOp</CODE></A></TD> 245<TD width="330" height="19">(invokes the following four functions)</TD> 246<TD width="94" height="19">RS</TD> 247 </TR> 248 <TR> 249<TD width="205" height="19"><A href="Tev/GXSetTevColorIn.html"><CODE>GXSetTevColorIn</CODE></A></TD> 250<TD width="330" height="19">(shares register with TevColorOp[stage])</TD> 251<TD width="94" height="19">RS</TD> 252 </TR> 253 <TR> 254<TD width="205" height="19"><A href="Tev/GXSetTevAlphaIn.html"><CODE>GXSetTevAlphaIn</CODE></A></TD> 255<TD width="330" height="19">(shares register with TevAlphaOp[stage])</TD> 256<TD width="94" height="19">RS</TD> 257 </TR> 258 <TR> 259<TD width="205" height="19"><A href="Tev/GXSetTevColorOp.html"><CODE>GXSetTevColorOp</CODE></A></TD> 260<TD width="330" height="19">(see above)</TD> 261<TD width="94" height="19">RS</TD> 262 </TR> 263 <TR> 264<TD width="205" height="19"><A href="Tev/GXSetTevAlphaOp.html"><CODE>GXSetTevAlphaOp</CODE></A></TD> 265<TD width="330" height="19">(see above and below)</TD> 266<TD width="94" height="19">RS</TD> 267 </TR> 268 <TR> 269<TD width="205" height="19"><A href="Tev/GXSetTevSwapMode.html"><CODE>GXSetTevSwapMode</CODE></A></TD> 270<TD width="330" height="19">(shares register with TevAlphaOp[stage])</TD> 271<TD width="94" height="19">RS</TD> 272 </TR> 273 <TR> 274 <TD width="205" height="19"> </TD> 275 <TD width="330" height="19"> </TD> 276 <TD width="94" height="19"> </TD> 277 </TR> 278 <TR> 279<TD width="205" height="19"><A href="Tev/GXSetTevKColorSel.html"><CODE>GXSetTevKColorSel</CODE></A></TD> 280<TD width="330" height="19">(Two stages per register, also SwapTable)</TD> 281<TD width="94" height="19">RS</TD> 282 </TR> 283 <TR> 284<TD width="205" height="19"><A href="Tev/GXSetTevKAlphaSel.html"><CODE>GXSetTevKAlphaSel</CODE></A></TD> 285<TD width="330" height="19">(Two stages per register, also SwapTable)</TD> 286<TD width="94" height="19">RS</TD> 287 </TR> 288 <TR> 289<TD width="205" height="19"><A href="Tev/GXSetTevSwapModeTable.html"><CODE>GXSetTevSwapModeTable</CODE></A></TD> 290<TD width="330" height="19">(shares reg's with Ksel's; 1st table in 1st 2 reg's, etc.)</TD> 291<TD width="94" height="19">RS</TD> 292 </TR> 293 <TR> 294 <TD width="205" height="19"> </TD> 295 <TD width="330" height="19"> </TD> 296 <TD width="94" height="19"> </TD> 297 </TR> 298 <TR> 299<TD width="205" height="19"><A href="Indirect/GXSetIndTexCoordScale.html"><CODE>GXSetIndTexCoordScale</CODE></A></TD> 300<TD width="330" height="19">(Two stages per register)</TD> 301<TD width="94" height="19">RS</TD> 302 </TR> 303 <TR> 304 <TD width="205" height="19"> </TD> 305 <TD width="330" height="19"> </TD> 306 <TD width="94" height="19"> </TD> 307 </TR> 308 <TR> 309<TD width="205" height="19"><A href="TexCoordGen/GXSetTexCoordScaleManually.html"><CODE>GXSetTexCoordScaleManually</CODE></A></TD> 310<TD width="330" height="19"><em>suTs0[</em>coord<em>], suTs1[</em>coord<em>]</em></TD> 311<TD width="94" height="19">RS</TD> 312 </TR> 313 <TR> 314<TD width="205" height="17"><A href="TexCoordGen/GXSetTexCoordCylWrap.html"><CODE>GXSetTexCoordCylWrap</CODE></A></TD> 315<TD width="330" height="17"><em>suTs0[</em>coord<em>], suTs1[</em>coord<em>]</em></TD> 316<TD width="94" height="17">RS</TD> 317 </TR> 318 <TR> 319<TD width="205" height="19"><A href="TexCoordGen/GXSetTexCoordBias.html"><CODE>GXSetTexCoordBias</CODE></A></TD> 320<TD width="330" height="19"><em>suTs0[</em>coord<em>], suTs1[</em>coord<em>]</em></TD> 321<TD width="94" height="19">RS</TD> 322 </TR> 323 <TR> 324<TD width="205" height="19"><A href="Geometry/GXEnableTexOffsets.html"><CODE>GXEnableTexOffsets</CODE></A></TD> 325<TD width="330" height="19"><EM>suTs0[</EM>coord<EM>]</EM></TD> 326<TD width="94" height="19">RS</TD> 327 </TR> 328 <TR> 329 <TD width="205" height="19"> </TD> 330 <TD width="330" height="19"> </TD> 331 <TD width="94" height="19"> </TD> 332 </TR> 333 <TR> 334<TD width="205" height="19"><A href="Geometry/GXSetLineWidth.html"><CODE>GXSetLineWidth</CODE></A></TD> 335<TD width="330" height="19"><EM>lpsize</EM></TD> 336<TD width="94" height="19">RS</TD> 337 </TR> 338 <TR> 339<TD width="205" height="19"><A href="Geometry/GXSetPointSize.html"><CODE>GXSetPointSize</CODE></A></TD> 340<TD width="330" height="19"><EM>lpsize</EM></TD> 341<TD width="94" height="19">RS</TD> 342 </TR> 343 <TR> 344<TD width="205" height="19"><A href="PixelProc/GXSetFieldMode.html"><CODE>GXSetFieldMode</CODE></A></TD> 345<TD width="330" height="19"><EM>lpsize</EM> (also texture flush; see below)</TD> 346<TD width="94" height="19">RS</TD> 347 </TR> 348 <TR> 349 <TD width="205" height="19"> </TD> 350 <TD width="330" height="19"> </TD> 351 <TD width="94" height="19"> </TD> 352 </TR> 353 <TR> 354<TD width="205" height="19"><A href="Texture/GXInvalidateTexRegion.html"><CODE>GXInvalidateTexRegion</CODE></A></TD> 355<TD width="330" height="19">(texture flush issue; see below)</TD> 356<TD width="94" height="19">RS</TD> 357 </TR> 358 <TR> 359<TD width="205" height="19"><A href="Texture/GXInvalidateTexAll.html"><CODE>GXInvalidateTexAll</CODE></A></TD> 360<TD width="330" height="19">(texture flush issue)</TD> 361<TD width="94" height="19">RS</TD> 362 </TR> 363 <TR> 364<TD width="205" height="19"><A href="Texture/GXPreLoadEntireTexture.html"><CODE>GXPreLoadEntireTexture</CODE></A></TD> 365<TD width="330" height="19">(texture flush issue)</TD> 366<TD width="94" height="19">RS</TD> 367 </TR> 368 </TBODY> 369</TABLE> 370<P>The "texture flush issue" means that a certain texture register must be written in order to force a texture system flush.<br>That register (<em>imask</em>) also happens to control which textures are direct and which are indirect. Refer to the next section (<B>Note:</B> information on imask is not included).</P> 371<H2>Functions that Set Pending State</H2> 372<P>These functions can usually be placed in a display list, but there are various issues involved since these functions are not necessarily straightforward in their operation. 'Lazy' means that the register value is not sent right away, but only at the last moment. The following functions will flush any lazy (pending) state before they execute their intended task:</P> 373<UL> 374<LI><A href="Geometry/GXBegin.html"><CODE>GXBegin</CODE></A> 375<LI><A href="DisplayList/GXBeginDisplayList.html"><CODE>GXBeginDisplayList</CODE></A> 376<LI><A href="DisplayList/GXEndDisplayList.html"><CODE>GXEndDisplayList</CODE></A> 377<LI><A href="DisplayList/GXCallDisplayList.html"><CODE>GXCallDisplayList</CODE></A> 378<LI><A href="Management/GXFlush.html"><CODE>GXFlush</CODE></A> 379</UL> 380<P>The scaling of texture coordinates is something that also occurs in a lazy fashion. The texture scale registers (<em>suTs0</em> and <em>suTs1</em>) are per texture coordinate, not per texture. They are set based upon which texture coordinates are associated with which textures. Functions that can possibly affect this mapping thus trigger a flag to set these registers at the last moment, and this is indicated by 'scale issue' in the list below. This issue can be avoided by setting all of the scale values manually. GX allows this by calling <a href="TexCoordGen/GXSetTexCoordScaleManually.html">GXSetTexCoordScaleManually</a>.</P> 381<P>The 'tmem region issue' means that these functions call the appropriate TMEM region allocator in order to know what region of TMEM to use. Putting these functions into display lists 'fixes' the region of TMEM that is used, and thus you must deal with TMEM allocation carefully. 382</P> 383<TABLE border="1" cellpadding="3" cellspacing="0"> 384 <TBODY> 385 <TR> 386<TD width="205"><B>Functions</B></TD> 387<TD width="330"><B>Shared Register Name (or issue)</B></TD> 388<TD width="94"><B>Register Type</B></TD> 389 </TR> 390 <TR> 391<TD width="205"><A href="TexCoordGen/GXSetNumTexGens.html"><CODE>GXSetNumTexGens</CODE></A></TD> 392<TD width="330"><em>genmode</em> (lazy)</TD> 393<TD width="94">RS</TD> 394 </TR> 395 <TR> 396<TD width="205"><A href="Lighting/GXSetNumChans.html"><CODE>GXSetNumChans</CODE></A> </TD> 397<TD width="330"><em>genmode</em> (lazy)</TD> 398<TD width="94">RS</TD> 399 </TR> 400 <TR> 401<TD width="205"><A href="Culling/GXSetCullMode.html"><CODE>GXSetCullMode</CODE></A></TD> 402<TD width="330"><em>genmode</em> (lazy)</TD> 403<TD width="94">RS</TD> 404 </TR> 405 <TR> 406<TD width="205"><A href="Tev/GXSetNumTevStages.html"><CODE>GXSetNumTevStages</CODE></A></TD> 407<TD width="330"><EM>genmode</EM> (lazy) (scale issue)</TD> 408<TD width="94">RS</TD> 409 </TR> 410 <TR> 411<TD width="205"><A href="Indirect/GXSetNumIndStages.html"><CODE>GXSetNumIndStages</CODE></A></TD> 412<TD width="330"><em>genmode</em> (lazy) <em>imask</em> (lazy) (scale issue)</TD> 413<TD width="94">RS</TD> 414 </TR> 415 <TR> 416<TD width="205"><A href="Indirect/GXSetIndTexOrder.html"><CODE>GXSetIndTexOrder</CODE></A></TD> 417<TD width="330"><EM>imask</EM> (lazy) (scale issue) (all four stages in one register)</TD> 418<TD width="94">RS</TD> 419 </TR> 420 <TR> 421<TD width="205"><CODE><A href="Tev/GXSetTevOrder.html">GXSetTevOrder</A></CODE></TD> 422<TD width="330">(scale issue) (two stages per register)</TD> 423<TD width="94">RS</TD> 424 </TR> 425 <TR> 426<TD width="205"><A href="Texture/GXLoadTexObjPreLoaded.html"><CODE>GXLoadTexObjPreLoaded</CODE></A></TD> 427<TD width="330">(scale issue)</TD> 428<TD width="94">RS</TD> 429 </TR> 430 <TR> 431<TD width="205"><A href="Texture/GXLoadTexObj.html"><CODE>GXLoadTexObj</CODE></A></TD> 432<TD width="330">(scale issue) (tmem region issue)</TD> 433<TD width="94">RS</TD> 434 </TR> 435 <TR> 436<TD width="205"><A href="Texture/GXLoadTlut.html"><CODE>GXLoadTlut</CODE></A></TD> 437<TD width="330">(tmem region issue)</TD> 438<TD width="94">RS</TD> 439 </TR> 440 <TR> 441 <TD width="205"> </TD> 442 <TD width="330"> </TD> 443 <TD width="94"> </TD> 444 </TR> 445 <TR> 446<TD width="205" height="19"><A href="Transform/GXSetCurrentMtx.html"><CODE>GXSetCurrentMtx</CODE></A></TD> 447<TD width="330" height="19">(current matrix registers)</TD> 448<TD width="94" height="19">CP, XF</TD> 449 </TR> 450 <TR> 451<TD width="205" height="19"><A href="TexCoordGen/GXSetTexCoordGen.html"><CODE>GXSetTexCoordGen</CODE></A></TD> 452<TD width="330" height="19">(current matrix registers)</TD> 453<TD width="94" height="19">CP, XF</TD> 454 </TR> 455 <TR> 456<TD width="205" height="19"><CODE><a href="TexCoordGen/GXSetTexCoordGen2.html">GXSetTexCoordGen2</a></CODE></TD> 457<TD width="330" height="19">(current matrix registers)</TD> 458<TD width="94" height="19">CP, XF</TD> 459 </TR> 460 <TR> 461 <TD width="205" height="19"> </TD> 462 <TD width="330" height="19"> </TD> 463 <TD width="94" height="19"> </TD> 464 </TR> 465 <TR> 466<TD width="205" height="19"><A href="Lighting/GXSetChanAmbColor.html"><CODE>GXSetChanAmbColor</CODE></A></TD> 467<TD width="330" height="19">(writes whole register: COLOR0A0 or COLOR1A1)</TD> 468<TD width="94" height="19">XF</TD> 469 </TR> 470 <TR> 471<TD width="205" height="19"><A href="Lighting/GXSetChanMatColor.html"><CODE><CODE>GXSetChanMatColor</CODE></CODE></A></TD> 472<TD width="330" height="19">(writes whole register: COLOR0A0 or COLOR1A1)</TD> 473<TD width="94" height="19">XF</TD> 474 </TR> 475 <TR> 476<TD width="205"><A href="Lighting/GXSetChanCtrl.html"><CODE>GXSetChanCtrl</CODE></A></TD> 477<TD width="330" height="19">(delayed to improve processing efficiency)</TD> 478<TD width="94">XF</TD> 479 </TR> 480 <TR> 481 <TD width="205" height="19"> </TD> 482 <TD width="330" height="19"> </TD> 483 <TD width="94" height="19"> </TD> 484 </TR> 485 <TR> 486<TD width="205"><A href="Transform/GXSetProjection.html"><CODE>GXSetProjection</CODE></A>/<CODE><A href="Transform/GXSetProjectionv.html">v</A></CODE></TD> 487<TD width="330">(delayed to improve processing efficiency)</TD> 488<TD width="94">XF</TD> 489 </TR> 490 <TR> 491<TD width="205"><A href="Transform/GXSetViewport.html"><CODE>GXSetViewport</CODE></A>/<A href="Transform/GXSetViewportJitter.html"><CODE>Jitter</CODE></A></TD> 492<TD width="330">(delayed to improve processing efficiency)</TD> 493<TD width="94">XF</TD> 494 </TR> 495 <TR> 496 <TD width="205" height="19"> </TD> 497 <TD width="330" height="19"> </TD> 498 <TD width="94" height="19"> </TD> 499 </TR> 500 <TR> 501<TD width="205"><A href="Geometry/GXSetVtxDesc.html"><CODE>GXSetVtxDesc</CODE></A>/<A href="Geometry/GXSetVtxDescv.html"><CODE>v</CODE></A></TD> 502<TD width="330">VCD registers, <em>invertexspec</em> (lazy)</TD> 503<TD width="94">CP</TD> 504 </TR> 505 <TR> 506<TD width="205"><A href="Geometry/GXClearVtxDesc.html"><CODE>GXClearVtxDesc</CODE></A></TD> 507<TD width="330">VCD registers, <em>invertexspec</em> (lazy)</TD> 508<TD width="94">CP</TD> 509 </TR> 510 <TR> 511<TD width="205"><a href="Geometry/GXSetVtxAttrFmt.html">GXSetVtxAttrFmt</a>/<a href="Geometry/GXSetVtxAttrFmtv.html">v</a></TD> 512<TD width="330">VAT[vat] registers (lazy)</TD> 513<TD width="94">CP</TD> 514 </TR> 515 <TR> 516 <TD width="205"> </TD> 517 <TD width="330"> </TD> 518 <TD width="94"> </TD> 519 </TR> 520 <TR> 521<TD width="205"><A href="Framebuffer/GXSetDispCopySrc.html"><CODE>GXSetDispCopySrc</CODE></A></TD> 522<TD width="330">(does not send any registers itself; stores to GX)</TD> 523<TD width="94">RS</TD> 524 </TR> 525 <TR> 526<TD width="205"><A href="Framebuffer/GXSetTexCopySrc.html"><CODE>GXSetTexCopySrc</CODE></A></TD> 527<TD width="330">(does not send any registers itself; stores to GX)</TD> 528<TD width="94">RS</TD> 529 </TR> 530 <TR> 531<TD width="205"><A href="Framebuffer/GXSetDispCopyDst.html"><CODE>GXSetDispCopyDst</CODE></A></TD> 532<TD width="330">(does not send any registers itself; stores to GX)</TD> 533<TD width="94">RS</TD> 534 </TR> 535 <TR> 536<TD width="205"><A href="Framebuffer/GXSetTexCopyDst.html"><CODE>GXSetTexCopyDst</CODE></A></TD> 537<TD width="330">(does not send any registers itself; stores to GX)</TD> 538<TD width="94">RS</TD> 539 </TR> 540 <TR> 541<TD width="205"><A href="Framebuffer/GXSetDispCopyFrame2Field.html"><CODE>GXSetDispCopyFrame2Field</CODE></A></TD> 542<TD width="330">(does not send any registers itself; stores to GX)</TD> 543<TD width="94">RS</TD> 544 </TR> 545 <TR> 546<TD width="205"><A href="Framebuffer/GXSetCopyClamp.html"><CODE>GXSetCopyClamp</CODE></A></TD> 547<TD width="330">(does not send any registers itself; stores to GX)</TD> 548<TD width="94">RS</TD> 549 </TR> 550 <TR> 551<TD width="205"><A href="Framebuffer/GXSetDispCopyYScale.html"><CODE>GXSetDispCopyYScale</CODE></A></TD> 552<TD width="330">(does not send any registers itself; stores to GX)</TD> 553<TD width="94">RS</TD> 554 </TR> 555 <TR> 556<TD width="205"><A href="Framebuffer/GXSetDispCopyGamma.html"><CODE>GXSetDispCopyGamma</CODE></A></TD> 557<TD width="330">(does not send any registers itself; stores to GX)</TD> 558<TD width="94">RS</TD> 559 </TR> 560 <TR> 561 <TD width="205"> </TD> 562 <TD width="330"> </TD> 563 <TD width="94"> </TD> 564 </TR> 565 <TR> 566<TD width="205"><A href="Framebuffer/GXCopyDisp.html"><CODE>GXCopyDisp</CODE></A></TD> 567<TD width="330">(sends registers set by above)</TD> 568<TD width="94">RS</TD> 569 </TR> 570 <TR> 571<TD width="205"><A href="Framebuffer/GXCopyTex.html"><CODE>GXCopyTex</CODE></A></TD> 572<TD width="330">(sends registers set by above)</TD> 573<TD width="94">RS</TD> 574 </TR> 575 </TBODY> 576</TABLE> 577<P><B>Note:</B> <a href="Framebuffer/GXCopyDisp.html">GXCopyDisp</a> and <a href="Framebuffer/GXCopyTex.html">GXCopyTex</a> may possibly change various other registers (including <em>pectrl</em>, <em>zmode</em>, and <em>cmode0</em>) depending upon the operation and what the register (shadow) was were before the operation. The old register shadow values are restored after the copy operation. 578</P> 579<H2>Other</H2> 580<P>The <a href="Draw/GXDrawCube.html">GXDraw</a>* functions all get and restore the current VCD/VAT (based upon the GX shadow copies).</P> 581<P>If a GX function was not mentioned in any of the above sections, then it probably has no business being in a display list.</P> 582<H2>Revision History</H2> 583<P>03/01/2006 Initial version.</P> 584</BODY> 585</HTML>