1 /*---------------------------------------------------------------------------*
2   Project:  Dolphin GX library
3   File:     GXEnum.h
4 
5   Copyright 1998 - 2002 Nintendo.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Log: GXEnum.h,v $
14   Revision 1.3.2.5  2009/11/12 00:28:43  nakano_yoshinobu
15   Removed GX_CC_QUARTER when GX_REV >=2, because it was an old definition.
16 
17   Revision 1.3  2009/07/13 08:37:35  nakano_yoshinobu
18   Removed GX_CA_ONE when GX_REV >=2, because it was an old definition.
19 
20   Revision 1.2  2006/02/04 11:56:46  hashida
21   (none)
22 
23   Revision 1.1.1.1  2005/12/29 06:53:28  hiratsu
24   Initial import.
25 
26   Revision 1.1.1.1  2005/05/12 02:41:07  yasuh-to
27   dolphin�V�[�X�c���[����ڐA
28 
29 
30     40    02/12/06 9:28 Hirose
31     Added GX_TEV_KCSEL_n_8/GX_TEV_KASEL_n_8 (n=even).
32 
33     39    02/11/18 18:10 Hirose
34     Workaround for GXAbortFrame() problem with PE copyout.
35 
36     38    02/10/17 15:11 Hirose
37     Added new enums for orthographic fog support.
38 
39     37    02/07/24 9:06 Hirose
40     Resolved version conflicts.
41 
42     36    12/11/01 4:31p Carl
43     Fixed warning with GX_NO_LEGACY_HW1.
44 
45     35    11/27/01 2:39p Carl
46     Added GX_NO_LEGACY_HW1 conditional.
47 
48     34    7/12/01 6:07p Carl
49     Removed extra #ifdef's.
50 
51     33    5/10/01 9:43p Hirose
52     added tag for each enum definition
53 
54     32    4/27/01 1:19p Carl
55     Changes for making DL context saving optional.
56 
57     31    4/09/01 3:43p Carl
58     Changed GXXFFlushVal keywords.
59 
60     30    4/04/01 3:28p Carl
61     Second round of XF flush fixes.
62 
63     29    3/16/01 7:22p Carl
64     Changes for XF flush.
65 
66     28    1/16/01 7:59p Carl
67     Added new CTF.
68 
69     27    11/08/00 6:48p Hirose
70     fixed the enum value of GX_CC_KONST
71 
72     26    11/06/00 4:06p Carl
73     Added GXClipMode.
74 
75     25    11/02/00 4:37p Carl
76     Made Z16 tex fmt same value for both revs.
77 
78     24    11/02/00 3:22p Carl
79     Removed CCV bit from tex fmts.
80 
81     23    10/18/00 4:05p Carl
82     Latest round of HW2 modifications and minor updates.
83 
84     22    10/11/00 6:25p Carl
85     Made CCV, CTF, ZTF into visible symbols.
86 
87     21    10/03/00 7:55p Hirose
88     Update for HW2(Rev.B) GX API extensions
89 
90     20    8/29/00 3:21p Carl
91     allow perf counter api to work with draw sync callback [Rob]
92 
93 
94     19    6/14/00 4:50p Carl
95     Removed inverted Z formats.
96 
97     18    6/08/00 1:58p Carl
98     Added GXAlphaReadMode.
99 
100     17    6/06/00 6:57p Alligator
101     added vcache mem and stall counters
102 
103     16    6/06/00 12:02p Alligator
104     made changes to perf counter api
105 
106     15    4/26/00 4:08p Alligator
107     Added GXCopyMode enumeration
108 
109     14    4/20/00 4:55p Carl
110     Fixed GX_MAX_VTXATTRFMTLIST_SZ.
111 
112     13    4/17/00 4:24p Alligator
113     integrate ArtX update.  Perf monitor api and indirect texture api
114     added. Misc bug fixes.
115 
116     12    4/07/00 12:00p Alligator
117     made vtx attr list size smaller (remove index attrs from list)
118 
119     11    4/04/00 11:17a Alligator
120     moved constants from GXStruct.h to GXEnum.h since they are dependent on
121     enumerated values.
122 
123     10    3/22/00 5:39p Alligator
124     Latest integration with ArtX
125 
126     9     3/03/00 4:21p Alligator
127     integrate with ArtX source
128 
129     8     2/12/00 5:16p Alligator
130     Integrate ArtX source tree changes
131 
132     7     2/04/00 5:09p Alligator
133     added GX_TF_A8 type to textue formats.  For tex copy from alpha
134     channel.
135 
136     6     2/01/00 7:22p Alligator
137     second GX update from ArtX
138 
139     5     1/13/00 5:55p Alligator
140     integrate with ArtX GX library code
141 
142     4     12/08/99 4:55p Alligator
143     remove source alpha saturate blend source
144 
145     3     12/07/99 5:34p Hirose
146     added GXTexCacheSize
147 
148     2     12/07/99 2:16p Alligator
149     unlock
150 
151     35    11/15/99 5:56p Yasu
152     Fixed GXPrimitive enum
153 
154     34    11/11/99 6:17p Yasu
155     Delete GXTevSwap, not used anymore.
156 
157     33    11/05/99 6:49p Hirose
158     validated GX_AF_SPEC
159 
160     32    10/26/99 1:34p Alligator
161     change GXSetDefaultMatrix to GXSetDefaultMtx
162 
163     31    10/24/99 4:34p Yasu
164     Add GX_LIGHT_NULL as 0x00
165 
166     30    10/20/99 2:39p Yasu
167     Add TexMatrixIndex
168 
169     29    10/19/99 2:49p Alligator
170 
171     28    10/19/99 2:35p Alligator
172     added GX_VA_NBT for 9-element normal to vcd
173 
174     27    10/13/99 5:17p Alligator
175     added _NULL types to some enums
176 
177     26    10/06/99 10:38a Alligator
178     changed enums for compressed Z format
179     updated Init functions to make GX_ZC_LINEAR default
180 
181     25    10/04/99 6:47p Yasu
182     Rename -Sz to -Size
183 
184     24    10/04/99 12:44p Yasu
185 
186     21    9/30/99 10:59p Yasu
187     Add patch for renaming GXExtras.h temporary
188 
189     20    9/30/99 10:40p Yasu
190     Renamed some GX functions and enums
191 
192     19    9/30/99 4:50p Yasu
193     Return GX_TG_CLR* back to GX_TG_COLOR*
194 
195     18    9/30/99 4:26p Yasu
196     Change GX_TG_COLOR* to GX_TG_CLR*
197 
198     17    9/17/99 3:29p Hirose
199     corrected GX_TLUT_16k to GX_TLUT_16K
200 
201     16    9/09/99 1:20p Hirose
202     added GXSpotFn and GXDistAttnFn enums
203 
204     15    9/08/99 7:12p Yasu
205     Delete alias of enum GX_MAT_?x4
206 
207     14    9/03/99 2:44p Ryan
208 
209     13    9/02/99 3:18p Ryan
210     Made Frame Buffer Api changes
211 
212     12    9/01/99 3:17p Ryan
213     Added GXZTexOp enum and added three new TexFormats for Z textures
214 
215     10    8/28/99 12:10a Yasu
216     Change enum name GX_MAT_2x4/3x4 -> GX_MTX2x4/3x4 and
217     Swap values GX_MTX2x4 <--> GX_MTX3x4
218 
219     9     8/27/99 2:24p Yasu
220     Change enum GXBlendMode  GX_CM_XXX -> GX_BM_XXX
221 
222     8     8/17/99 2:39p Alligator
223     changed the values of some enums to match hardware
224 
225     7     8/17/99 1:33p Alligator
226     added GXSetTexGenEnables function, modified GXTexCoordID enumeration for
227     bitwise OR of enables.
228 
229     6     8/17/99 12:02p Alligator
230     updated to reflect arbitrary tlut size
231 
232     5     8/12/99 2:29p Hirose
233 
234     4     8/05/99 11:17a Ryan
235     removed all Mac-only enums
236 
237     3     7/28/99 4:07p Alligator
238     update header files and emulator for hw changes
239 
240     2     7/23/99 12:30p Alligator
241     fixed pnmtx index per vertex emulation
242 
243     1     7/14/99 4:20p Alligator
244     split gx.h into individual header files for each major section of API
245   $NoKeywords: $
246  *---------------------------------------------------------------------------*/
247 
248 #ifndef __GXENUM_H__
249 #define __GXENUM_H__
250 
251 /********************************/
252 #ifdef __cplusplus
253 extern "C" {
254 #endif
255 
256 /********************************/
257 #include <revolution/types.h>
258 
259 /********************************/
260 typedef u8 GXBool;
261 
262 /********************************/
263 #define GX_TRUE        ((GXBool)1)
264 #define GX_FALSE       ((GXBool)0)
265 #define GX_ENABLE      ((GXBool)1)
266 #define GX_DISABLE     ((GXBool)0)
267 
268 /********************************/
269 typedef enum _GXAttr
270 {
271     GX_VA_PNMTXIDX = 0,    // position/normal matrix index
272     GX_VA_TEX0MTXIDX,      // texture 0 matrix index
273     GX_VA_TEX1MTXIDX,      // texture 1 matrix index
274     GX_VA_TEX2MTXIDX,      // texture 2 matrix index
275     GX_VA_TEX3MTXIDX,      // texture 3 matrix index
276     GX_VA_TEX4MTXIDX,      // texture 4 matrix index
277     GX_VA_TEX5MTXIDX,      // texture 5 matrix index
278     GX_VA_TEX6MTXIDX,      // texture 6 matrix index
279     GX_VA_TEX7MTXIDX,      // texture 7 matrix index
280     GX_VA_POS      = 9,    // position
281     GX_VA_NRM,             // normal
282     GX_VA_CLR0,            // color 0
283     GX_VA_CLR1,            // color 1
284     GX_VA_TEX0,            // input texture coordinate 0
285     GX_VA_TEX1,            // input texture coordinate 1
286     GX_VA_TEX2,            // input texture coordinate 2
287     GX_VA_TEX3,            // input texture coordinate 3
288     GX_VA_TEX4,            // input texture coordinate 4
289     GX_VA_TEX5,            // input texture coordinate 5
290     GX_VA_TEX6,            // input texture coordinate 6
291     GX_VA_TEX7,            // input texture coordinate 7
292 
293     GX_POS_MTX_ARRAY,      // position matrix array pointer
294     GX_NRM_MTX_ARRAY,      // normal matrix array pointer
295     GX_TEX_MTX_ARRAY,      // texture matrix array pointer
296     GX_LIGHT_ARRAY,        // light parameter array pointer
297     GX_VA_NBT,             // normal, bi-normal, tangent
298     GX_VA_MAX_ATTR,        // maximum number of vertex attributes
299 
300     GX_VA_NULL     = 0xff  // NULL attribute (to mark end of lists)
301 
302 } GXAttr;
303 
304 #define GX_MAX_VTXDESC              GX_VA_MAX_ATTR
305 #define GX_MAX_VTXDESCLIST_SZ       (GX_MAX_VTXDESC+1)    // +1 for GX_VA_NULL
306 
307 #define GX_MAX_VTXATTRFMT           GX_VA_MAX_ATTR
308 #define GX_MAX_VTXATTRFMTLIST_SZ    (GX_MAX_VTXATTRFMT+1) // +1 for GX_VA_NULL
309 
310 #define GX_MAX_VTXARRAY             16
311 
312 /********************************/
313 typedef enum _GXVtxFmt
314 {
315     GX_VTXFMT0 = 0,
316     GX_VTXFMT1,
317     GX_VTXFMT2,
318     GX_VTXFMT3,
319     GX_VTXFMT4,
320     GX_VTXFMT5,
321     GX_VTXFMT6,
322     GX_VTXFMT7,
323     GX_MAX_VTXFMT
324 
325 } GXVtxFmt;
326 
327 #define GX_MAX_VTXFMT               GX_MAX_VTXFMT
328 
329 /********************************/
330 typedef enum _GXAttrType
331 {
332     GX_NONE    = 0,
333     GX_DIRECT,
334     GX_INDEX8,
335     GX_INDEX16
336 
337 } GXAttrType;
338 
339 /********************************/
340 typedef enum _GXTexCoordID
341 {
342     GX_TEXCOORD0 = 0x0,     // generated texture coordinate 0
343     GX_TEXCOORD1,       // generated texture coordinate 1
344     GX_TEXCOORD2,       // generated texture coordinate 2
345     GX_TEXCOORD3,       // generated texture coordinate 3
346     GX_TEXCOORD4,       // generated texture coordinate 4
347     GX_TEXCOORD5,       // generated texture coordinate 5
348     GX_TEXCOORD6,       // generated texture coordinate 6
349     GX_TEXCOORD7,       // generated texture coordinate 7
350     GX_MAX_TEXCOORD = 8,
351     GX_TEXCOORD_NULL = 0xff
352 
353 } GXTexCoordID;
354 
355 #define GX_MAX_TEXCOORDGEN          GX_MAX_TEXCOORD
356 
357 /********************************/
358 typedef enum _GXTexGenType
359 {
360     GX_TG_MTX3x4 = 0,
361     GX_TG_MTX2x4,
362     GX_TG_BUMP0,
363     GX_TG_BUMP1,
364     GX_TG_BUMP2,
365     GX_TG_BUMP3,
366     GX_TG_BUMP4,
367     GX_TG_BUMP5,
368     GX_TG_BUMP6,
369     GX_TG_BUMP7,
370     GX_TG_SRTG
371 
372 } GXTexGenType;
373 
374 /********************************/
375 typedef enum _GXTexGenSrc
376 {
377     GX_TG_POS = 0,
378     GX_TG_NRM,
379     GX_TG_BINRM,
380     GX_TG_TANGENT,
381     GX_TG_TEX0,
382     GX_TG_TEX1,
383     GX_TG_TEX2,
384     GX_TG_TEX3,
385     GX_TG_TEX4,
386     GX_TG_TEX5,
387     GX_TG_TEX6,
388     GX_TG_TEX7,
389     GX_TG_TEXCOORD0,
390     GX_TG_TEXCOORD1,
391     GX_TG_TEXCOORD2,
392     GX_TG_TEXCOORD3,
393     GX_TG_TEXCOORD4,
394     GX_TG_TEXCOORD5,
395     GX_TG_TEXCOORD6,
396     GX_TG_COLOR0,
397     GX_TG_COLOR1
398 
399 } GXTexGenSrc;
400 
401 /********************************/
402 typedef enum _GXCompCnt
403 {
404 #if ( GX_REV == 1 )
405     GX_POS_XY    = 0,
406     GX_POS_XYZ   = 1,
407     GX_NRM_XYZ   = 0,
408     GX_NRM_NBT   = 1, // not really used, just to make api consistent
409     GX_CLR_RGB   = 0,
410     GX_CLR_RGBA  = 1,
411     GX_TEX_S     = 0,
412     GX_TEX_ST    = 1
413 
414 #else // ( GX_REV >= 2 )
415     GX_POS_XY    = 0,
416     GX_POS_XYZ   = 1,
417     GX_NRM_XYZ   = 0,
418     GX_NRM_NBT   = 1, // one index per NBT
419     GX_NRM_NBT3  = 2, // one index per each of N/B/T
420     GX_CLR_RGB   = 0,
421     GX_CLR_RGBA  = 1,
422     GX_TEX_S     = 0,
423     GX_TEX_ST    = 1
424 
425 #endif
426 } GXCompCnt;
427 
428 /********************************/
429 typedef enum _GXCompType
430 {
431     GX_U8  = 0,
432     GX_S8  = 1,
433     GX_U16 = 2,
434     GX_S16 = 3,
435     GX_F32 = 4,
436 
437     GX_RGB565 = 0,
438     GX_RGB8   = 1,
439     GX_RGBX8  = 2,
440     GX_RGBA4  = 3,
441     GX_RGBA6  = 4,
442     GX_RGBA8  = 5
443 
444 } GXCompType;
445 
446 /********************************/
447 typedef enum _GXChannelID
448 {
449     GX_COLOR0,
450     GX_COLOR1,
451     GX_ALPHA0,
452     GX_ALPHA1,
453     GX_COLOR0A0,          // Color 0 + Alpha 0
454     GX_COLOR1A1,          // Color 1 + Alpha 1
455     GX_COLOR_ZERO,        // RGBA = 0
456     GX_ALPHA_BUMP,        // bump alpha 0-248, RGB=0
457     GX_ALPHA_BUMPN,       // normalized bump alpha, 0-255, RGB=0
458     GX_COLOR_NULL = 0xff
459 
460 } GXChannelID;
461 
462 /********************************/
463 typedef enum _GXColorSrc
464 {
465     GX_SRC_REG = 0,
466     GX_SRC_VTX
467 
468 } GXColorSrc;
469 
470 /********************************/
471 typedef enum _GXLightID
472 {
473     GX_LIGHT0     = 0x001,
474     GX_LIGHT1     = 0x002,
475     GX_LIGHT2     = 0x004,
476     GX_LIGHT3     = 0x008,
477     GX_LIGHT4     = 0x010,
478     GX_LIGHT5     = 0x020,
479     GX_LIGHT6     = 0x040,
480     GX_LIGHT7     = 0x080,
481     GX_MAX_LIGHT  = 0x100,
482     GX_LIGHT_NULL = 0x000
483 } GXLightID;
484 
485 /********************************/
486 typedef enum _GXDiffuseFn
487 {
488     GX_DF_NONE = 0,
489     GX_DF_SIGN,
490     GX_DF_CLAMP
491 
492 } GXDiffuseFn;
493 
494 /********************************/
495 typedef enum _GXAttnFn
496 {
497     GX_AF_SPEC = 0,    // use specular attenuation
498     GX_AF_SPOT = 1,    // use distance/spotlight attenuation
499     GX_AF_NONE         // attenuation is off
500 
501 } GXAttnFn;
502 
503 /********************************/
504 typedef enum _GXSpotFn
505 {
506     GX_SP_OFF = 0,
507     GX_SP_FLAT,
508     GX_SP_COS,
509     GX_SP_COS2,
510     GX_SP_SHARP,
511     GX_SP_RING1,
512     GX_SP_RING2
513 } GXSpotFn;
514 
515 /********************************/
516 typedef enum _GXDistAttnFn
517 {
518     GX_DA_OFF = 0,
519     GX_DA_GENTLE,
520     GX_DA_MEDIUM,
521     GX_DA_STEEP
522 } GXDistAttnFn;
523 
524 /********************************/
525 typedef enum _GXPosNrmMtx
526 {
527     GX_PNMTX0 =  0,
528     GX_PNMTX1 =  3,
529     GX_PNMTX2 =  6,
530     GX_PNMTX3 =  9,
531     GX_PNMTX4 = 12,
532     GX_PNMTX5 = 15,
533     GX_PNMTX6 = 18,
534     GX_PNMTX7 = 21,
535     GX_PNMTX8 = 24,
536     GX_PNMTX9 = 27
537 
538 } GXPosNrmMtx;
539 
540 /********************************/
541 typedef enum _GXTexMtx
542 {
543     GX_TEXMTX0  = 30,
544     GX_TEXMTX1  = 33,
545     GX_TEXMTX2  = 36,
546     GX_TEXMTX3  = 39,
547     GX_TEXMTX4  = 42,
548     GX_TEXMTX5  = 45,
549     GX_TEXMTX6  = 48,
550     GX_TEXMTX7  = 51,
551     GX_TEXMTX8  = 54,
552     GX_TEXMTX9  = 57,
553     GX_IDENTITY = 60
554 
555 } GXTexMtx;
556 
557 /********************************/
558 #if ( GX_REV != 1 ) // Revision 2 or greater only
559 typedef enum _GXPTTexMtx
560 {
561     GX_PTTEXMTX0  = 64,
562     GX_PTTEXMTX1  = 67,
563     GX_PTTEXMTX2  = 70,
564     GX_PTTEXMTX3  = 73,
565     GX_PTTEXMTX4  = 76,
566     GX_PTTEXMTX5  = 79,
567     GX_PTTEXMTX6  = 82,
568     GX_PTTEXMTX7  = 85,
569     GX_PTTEXMTX8  = 88,
570     GX_PTTEXMTX9  = 91,
571     GX_PTTEXMTX10 = 94,
572     GX_PTTEXMTX11 = 97,
573     GX_PTTEXMTX12 = 100,
574     GX_PTTEXMTX13 = 103,
575     GX_PTTEXMTX14 = 106,
576     GX_PTTEXMTX15 = 109,
577     GX_PTTEXMTX16 = 112,
578     GX_PTTEXMTX17 = 115,
579     GX_PTTEXMTX18 = 118,
580     GX_PTTEXMTX19 = 121,
581     GX_PTIDENTITY = 125
582 
583 } GXPTTexMtx;
584 #endif // ( GX_REV != 1 )
585 
586 /********************************/
587 typedef enum _GXTexMtxType
588 {
589     GX_MTX3x4 = 0,
590     GX_MTX2x4
591 
592 } GXTexMtxType;
593 
594 /********************************/
595 typedef enum _GXPrimitive
596 {
597     GX_POINTS        = 0xb8,
598     GX_LINES         = 0xa8,
599     GX_LINESTRIP     = 0xb0,
600     GX_TRIANGLES     = 0x90,
601     GX_TRIANGLESTRIP = 0x98,
602     GX_TRIANGLEFAN   = 0xa0,
603     GX_QUADS         = 0x80
604 
605 } GXPrimitive;
606 
607 /********************************/
608 typedef enum _GXTexOffset
609 {
610     GX_TO_ZERO,
611     GX_TO_SIXTEENTH,
612     GX_TO_EIGHTH,
613     GX_TO_FOURTH,
614     GX_TO_HALF,
615     GX_TO_ONE,
616     GX_MAX_TEXOFFSET
617 
618 } GXTexOffset;
619 
620 /********************************/
621 typedef enum _GXCullMode
622 {
623     GX_CULL_NONE,
624     GX_CULL_FRONT,
625     GX_CULL_BACK,
626     GX_CULL_ALL
627 
628 } GXCullMode;
629 
630 /********************************/
631 typedef enum _GXClipMode
632 {
633     // Note: these are (by design) backwards of typical enable/disables!
634     GX_CLIP_ENABLE = 0,
635     GX_CLIP_DISABLE = 1
636 
637 } GXClipMode;
638 
639 /********************************/
640 typedef enum _GXTexWrapMode
641 {
642     GX_CLAMP,
643     GX_REPEAT,
644     GX_MIRROR,
645     GX_MAX_TEXWRAPMODE
646 
647 } GXTexWrapMode;
648 
649 /********************************/
650 typedef enum _GXTexFilter
651 {
652     GX_NEAR,
653     GX_LINEAR,
654     GX_NEAR_MIP_NEAR,
655     GX_LIN_MIP_NEAR,
656     GX_NEAR_MIP_LIN,
657     GX_LIN_MIP_LIN
658 
659 } GXTexFilter;
660 
661 /********************************/
662 typedef enum _GXCITexFmt
663 {
664     GX_TF_C4    = 0x8,
665     GX_TF_C8    = 0x9,
666     GX_TF_C14X2 = 0xa
667 
668 } GXCITexFmt;
669 
670 /********************************/
671 typedef enum _GXTexFmt
672 {
673 #if ( GX_REV == 1 )
674     GX_TF_I4     = 0x0,
675     GX_TF_I8     = 0x1,
676     GX_TF_IA4    = 0x2,
677     GX_TF_IA8    = 0x3,
678     GX_TF_RGB565 = 0x4,
679     GX_TF_RGB5A3 = 0x5,
680     GX_TF_RGBA8  = 0x6,
681     GX_TF_CMPR   = 0xE,
682     GX_TF_A8     = (0x20 | GX_TF_I8),
683     GX_TF_Z8     = (0x10 | GX_TF_I8),
684     GX_TF_Z16    = (0x10 | GX_TF_IA8),
685     GX_TF_Z24X8  = (0x10 | GX_TF_RGBA8)
686 
687 #else // ( GX_REV >= 2 )
688 
689 #define _GX_TF_CTF     0x20 /* copy-texture-format only */
690 #define _GX_TF_ZTF     0x10 /* Z-texture-format */
691 
692     GX_TF_I4     = 0x0,
693     GX_TF_I8     = 0x1,
694     GX_TF_IA4    = 0x2,
695     GX_TF_IA8    = 0x3,
696     GX_TF_RGB565 = 0x4,
697     GX_TF_RGB5A3 = 0x5,
698     GX_TF_RGBA8  = 0x6,
699     GX_TF_CMPR   = 0xE,
700 
701     GX_CTF_R4    = 0x0 | _GX_TF_CTF,
702     GX_CTF_RA4   = 0x2 | _GX_TF_CTF,
703     GX_CTF_RA8   = 0x3 | _GX_TF_CTF,
704     GX_CTF_YUVA8 = 0x6 | _GX_TF_CTF,
705     GX_CTF_A8    = 0x7 | _GX_TF_CTF,
706     GX_CTF_R8    = 0x8 | _GX_TF_CTF,
707     GX_CTF_G8    = 0x9 | _GX_TF_CTF,
708     GX_CTF_B8    = 0xA | _GX_TF_CTF,
709     GX_CTF_RG8   = 0xB | _GX_TF_CTF,
710     GX_CTF_GB8   = 0xC | _GX_TF_CTF,
711 
712     GX_TF_Z8     = 0x1 | _GX_TF_ZTF,
713     GX_TF_Z16    = 0x3 | _GX_TF_ZTF,
714     GX_TF_Z24X8  = 0x6 | _GX_TF_ZTF,
715 
716     GX_CTF_Z4    = 0x0 | _GX_TF_ZTF | _GX_TF_CTF,
717     GX_CTF_Z8M   = 0x9 | _GX_TF_ZTF | _GX_TF_CTF,
718     GX_CTF_Z8L   = 0xA | _GX_TF_ZTF | _GX_TF_CTF,
719     GX_CTF_Z16L  = 0xC | _GX_TF_ZTF | _GX_TF_CTF,
720 
721     GX_TF_A8     = GX_CTF_A8 // to keep compatibility
722 #endif
723 } GXTexFmt;
724 
725 /********************************/
726 typedef enum _GXTlutFmt
727 {
728     GX_TL_IA8    = 0x0,
729     GX_TL_RGB565 = 0x1,
730     GX_TL_RGB5A3 = 0x2,
731     GX_MAX_TLUTFMT
732 
733 } GXTlutFmt;
734 
735 /********************************/
736 typedef enum _GXTlutSize
737 {
738     GX_TLUT_16 = 1, // number of 16 entry blocks.
739     GX_TLUT_32 = 2,
740     GX_TLUT_64 = 4,
741     GX_TLUT_128 = 8,
742     GX_TLUT_256 = 16,
743     GX_TLUT_512 = 32,
744     GX_TLUT_1K = 64,
745     GX_TLUT_2K = 128,
746     GX_TLUT_4K = 256,
747     GX_TLUT_8K = 512,
748     GX_TLUT_16K = 1024
749 
750 } GXTlutSize;
751 
752 /********************************/
753 typedef enum _GXTlut
754 {
755     // default 256-entry TLUTs
756     GX_TLUT0 = 0,
757     GX_TLUT1,
758     GX_TLUT2,
759     GX_TLUT3,
760     GX_TLUT4,
761     GX_TLUT5,
762     GX_TLUT6,
763     GX_TLUT7,
764     GX_TLUT8,
765     GX_TLUT9,
766     GX_TLUT10,
767     GX_TLUT11,
768     GX_TLUT12,
769     GX_TLUT13,
770     GX_TLUT14,
771     GX_TLUT15,
772     GX_BIGTLUT0,
773     GX_BIGTLUT1,
774     GX_BIGTLUT2,
775     GX_BIGTLUT3
776 
777 } GXTlut;
778 
779 /********************************/
780 typedef enum _GXTexMapID
781 {
782     GX_TEXMAP0,
783     GX_TEXMAP1,
784     GX_TEXMAP2,
785     GX_TEXMAP3,
786     GX_TEXMAP4,
787     GX_TEXMAP5,
788     GX_TEXMAP6,
789     GX_TEXMAP7,
790     GX_MAX_TEXMAP,
791 
792     GX_TEXMAP_NULL = 0xff,
793     GX_TEX_DISABLE = 0x100  // mask: disables texture look up
794 
795 } GXTexMapID;
796 
797 #define GX_MAX_TEXMAPS      GX_MAX_TEXMAP
798 
799 /********************************/
800 typedef enum _GXTexCacheSize
801 {
802     GX_TEXCACHE_32K,
803     GX_TEXCACHE_128K,
804     GX_TEXCACHE_512K,
805     GX_TEXCACHE_NONE
806 
807 } GXTexCacheSize;
808 
809 /********************************/
810 typedef enum _GXIndTexFormat
811 {
812     GX_ITF_8,       // 8 bit texture offsets.
813     GX_ITF_5,       // 5 bit texture offsets.
814     GX_ITF_4,       // 4 bit texture offsets.
815     GX_ITF_3,       // 3 bit texture offsets.
816     GX_MAX_ITFORMAT
817 
818 } GXIndTexFormat;
819 
820 /********************************/
821 typedef enum _GXIndTexBiasSel
822 {
823     GX_ITB_NONE,
824     GX_ITB_S,
825     GX_ITB_T,
826     GX_ITB_ST,
827     GX_ITB_U,
828     GX_ITB_SU,
829     GX_ITB_TU,
830     GX_ITB_STU,
831     GX_MAX_ITBIAS
832 
833 } GXIndTexBiasSel;
834 
835 /********************************/
836 typedef enum _GXIndTexAlphaSel
837 {
838     GX_ITBA_OFF,
839     GX_ITBA_S,
840     GX_ITBA_T,
841     GX_ITBA_U,
842     GX_MAX_ITBALPHA
843 
844 } GXIndTexAlphaSel;
845 
846 /********************************/
847 typedef enum _GXIndTexMtxID
848 {
849     GX_ITM_OFF,
850     GX_ITM_0,
851     GX_ITM_1,
852     GX_ITM_2,
853     GX_ITM_S0 = 5,
854     GX_ITM_S1,
855     GX_ITM_S2,
856     GX_ITM_T0 = 9,
857     GX_ITM_T1,
858     GX_ITM_T2
859 
860 } GXIndTexMtxID;
861 
862 /********************************/
863 typedef enum _GXIndTexWrap
864 {
865     GX_ITW_OFF,     // no wrapping
866     GX_ITW_256,     // wrap 256
867     GX_ITW_128,     // wrap 128
868     GX_ITW_64,      // wrap 64
869     GX_ITW_32,      // wrap 32
870     GX_ITW_16,      // wrap 16
871     GX_ITW_0,       // wrap 0
872     GX_MAX_ITWRAP
873 
874 } GXIndTexWrap;
875 
876 /********************************/
877 typedef enum _GXIndTexScale
878 {
879     GX_ITS_1,       // Scale by 1.
880     GX_ITS_2,       // Scale by 1/2.
881     GX_ITS_4,       // Scale by 1/4.
882     GX_ITS_8,       // Scale by 1/8.
883     GX_ITS_16,      // Scale by 1/16.
884     GX_ITS_32,      // Scale by 1/32.
885     GX_ITS_64,      // Scale by 1/64.
886     GX_ITS_128,     // Scale by 1/128.
887     GX_ITS_256,     // Scale by 1/256.
888     GX_MAX_ITSCALE
889 
890 } GXIndTexScale;
891 
892 /********************************/
893 typedef enum _GXIndTexStageID
894 {
895     GX_INDTEXSTAGE0,    // Indirect Texture Stage Names.
896     GX_INDTEXSTAGE1,
897     GX_INDTEXSTAGE2,
898     GX_INDTEXSTAGE3,
899     GX_MAX_INDTEXSTAGE
900 
901 } GXIndTexStageID;
902 
903 /********************************/
904 typedef enum _GXTevStageID
905 {
906     GX_TEVSTAGE0,
907     GX_TEVSTAGE1,
908     GX_TEVSTAGE2,
909     GX_TEVSTAGE3,
910     GX_TEVSTAGE4,
911     GX_TEVSTAGE5,
912     GX_TEVSTAGE6,
913     GX_TEVSTAGE7,
914     GX_TEVSTAGE8,
915     GX_TEVSTAGE9,
916     GX_TEVSTAGE10,
917     GX_TEVSTAGE11,
918     GX_TEVSTAGE12,
919     GX_TEVSTAGE13,
920     GX_TEVSTAGE14,
921     GX_TEVSTAGE15,
922     GX_MAX_TEVSTAGE
923 
924 } GXTevStageID;
925 
926 #define GX_MAX_TEVSTAGES            GX_MAX_TEVSTAGE
927 
928 /********************************/
929 typedef enum _GXTevRegID
930 {
931     GX_TEVPREV = 0,
932     GX_TEVREG0,
933     GX_TEVREG1,
934     GX_TEVREG2,
935     GX_MAX_TEVREG
936 
937 } GXTevRegID;
938 
939 /********************************/
940 typedef enum _GXTevOp
941 {
942 #if ( GX_REV == 1 )
943     GX_TEV_ADD,
944     GX_TEV_SUB
945 
946 #else // ( GX_REV >= 2 )
947     GX_TEV_ADD = 0,
948     GX_TEV_SUB = 1,
949 
950     GX_TEV_COMP_R8_GT    = 8,
951     GX_TEV_COMP_R8_EQ    = 9,
952     GX_TEV_COMP_GR16_GT  = 10,
953     GX_TEV_COMP_GR16_EQ  = 11,
954     GX_TEV_COMP_BGR24_GT = 12,
955     GX_TEV_COMP_BGR24_EQ = 13,
956     GX_TEV_COMP_RGB8_GT  = 14,
957     GX_TEV_COMP_RGB8_EQ  = 15,
958 
959     GX_TEV_COMP_A8_GT = GX_TEV_COMP_RGB8_GT, // for alpha channel
960     GX_TEV_COMP_A8_EQ = GX_TEV_COMP_RGB8_EQ  // for alpha channel
961 
962 #endif
963 } GXTevOp;
964 
965 /********************************/
966 typedef enum _GXTevColorArg
967 {
968 #if ( GX_REV == 1 )
969     GX_CC_CPREV,
970     GX_CC_APREV,
971     GX_CC_C0,
972     GX_CC_A0,
973     GX_CC_C1,
974     GX_CC_A1,
975     GX_CC_C2,
976     GX_CC_A2,
977     GX_CC_TEXC,
978     GX_CC_TEXA,
979     GX_CC_RASC,
980     GX_CC_RASA,
981     GX_CC_ONE,
982     GX_CC_HALF,
983     GX_CC_QUARTER,
984     GX_CC_ZERO,
985 
986     GX_CC_TEXRRR,
987     GX_CC_TEXGGG,
988     GX_CC_TEXBBB
989 
990 #else // ( GX_REV >= 2 )
991     GX_CC_CPREV,
992     GX_CC_APREV,
993     GX_CC_C0,
994     GX_CC_A0,
995     GX_CC_C1,
996     GX_CC_A1,
997     GX_CC_C2,
998     GX_CC_A2,
999     GX_CC_TEXC,
1000     GX_CC_TEXA,
1001     GX_CC_RASC,
1002     GX_CC_RASA,
1003     GX_CC_ONE,
1004     GX_CC_HALF,
1005     GX_CC_KONST,
1006     GX_CC_ZERO
1007 
1008 #ifndef GX_NO_LEGACY_HW1
1009     ,             // separator needed only in this case
1010 
1011     GX_CC_TEXRRR, // obsolete
1012     GX_CC_TEXGGG, // obsolete
1013     GX_CC_TEXBBB // obsolete
1014 
1015 #endif
1016 
1017 #endif
1018 } GXTevColorArg;
1019 
1020 /********************************/
1021 typedef enum _GXTevAlphaArg
1022 {
1023 #if ( GX_REV == 1 )
1024     GX_CA_APREV,
1025     GX_CA_A0,
1026     GX_CA_A1,
1027     GX_CA_A2,
1028     GX_CA_TEXA,
1029     GX_CA_RASA,
1030     GX_CA_ONE,
1031     GX_CA_ZERO
1032 
1033 #else // ( GX_REV >= 2 )
1034     GX_CA_APREV,
1035     GX_CA_A0,
1036     GX_CA_A1,
1037     GX_CA_A2,
1038     GX_CA_TEXA,
1039     GX_CA_RASA,
1040     GX_CA_KONST,
1041     GX_CA_ZERO
1042 #endif
1043 } GXTevAlphaArg;
1044 
1045 /********************************/
1046 typedef enum _GXTevBias
1047 {
1048     GX_TB_ZERO,
1049     GX_TB_ADDHALF,
1050     GX_TB_SUBHALF,
1051     GX_MAX_TEVBIAS
1052 
1053 } GXTevBias;
1054 
1055 /********************************/
1056 typedef enum _GXTevClampMode
1057 {
1058     GX_TC_LINEAR,
1059     GX_TC_GE,
1060     GX_TC_EQ,
1061     GX_TC_LE,
1062     GX_MAX_TEVCLAMPMODE
1063 
1064 } GXTevClampMode;
1065 
1066 /********************************/
1067 #if ( GX_REV != 1 ) // GX Revision 2 or later only
1068 typedef enum _GXTevKColorID
1069 {
1070     GX_KCOLOR0 = 0,
1071     GX_KCOLOR1,
1072     GX_KCOLOR2,
1073     GX_KCOLOR3,
1074     GX_MAX_KCOLOR
1075 
1076 } GXTevKColorID;
1077 #endif // ( GX_REV != 1 )
1078 
1079 /********************************/
1080 #if ( GX_REV != 1 ) // GX Revision 2 or later only
1081 typedef enum _GXTevKColorSel
1082 {
1083     GX_TEV_KCSEL_8_8  = 0x00,
1084     GX_TEV_KCSEL_7_8  = 0x01,
1085     GX_TEV_KCSEL_6_8  = 0x02,
1086     GX_TEV_KCSEL_5_8  = 0x03,
1087     GX_TEV_KCSEL_4_8  = 0x04,
1088     GX_TEV_KCSEL_3_8  = 0x05,
1089     GX_TEV_KCSEL_2_8  = 0x06,
1090     GX_TEV_KCSEL_1_8  = 0x07,
1091 
1092     GX_TEV_KCSEL_1    = GX_TEV_KCSEL_8_8,
1093     GX_TEV_KCSEL_3_4  = GX_TEV_KCSEL_6_8,
1094     GX_TEV_KCSEL_1_2  = GX_TEV_KCSEL_4_8,
1095     GX_TEV_KCSEL_1_4  = GX_TEV_KCSEL_2_8,
1096 
1097     GX_TEV_KCSEL_K0   = 0x0C,
1098     GX_TEV_KCSEL_K1   = 0x0D,
1099     GX_TEV_KCSEL_K2   = 0x0E,
1100     GX_TEV_KCSEL_K3   = 0x0F,
1101     GX_TEV_KCSEL_K0_R = 0x10,
1102     GX_TEV_KCSEL_K1_R = 0x11,
1103     GX_TEV_KCSEL_K2_R = 0x12,
1104     GX_TEV_KCSEL_K3_R = 0x13,
1105     GX_TEV_KCSEL_K0_G = 0x14,
1106     GX_TEV_KCSEL_K1_G = 0x15,
1107     GX_TEV_KCSEL_K2_G = 0x16,
1108     GX_TEV_KCSEL_K3_G = 0x17,
1109     GX_TEV_KCSEL_K0_B = 0x18,
1110     GX_TEV_KCSEL_K1_B = 0x19,
1111     GX_TEV_KCSEL_K2_B = 0x1A,
1112     GX_TEV_KCSEL_K3_B = 0x1B,
1113     GX_TEV_KCSEL_K0_A = 0x1C,
1114     GX_TEV_KCSEL_K1_A = 0x1D,
1115     GX_TEV_KCSEL_K2_A = 0x1E,
1116     GX_TEV_KCSEL_K3_A = 0x1F
1117 
1118 } GXTevKColorSel;
1119 #endif // ( GX_REV != 1 )
1120 
1121 /********************************/
1122 #if ( GX_REV != 1 ) // GX Revision 2 or later only
1123 typedef enum _GXTevKAlphaSel
1124 {
1125     GX_TEV_KASEL_8_8  = 0x00,
1126     GX_TEV_KASEL_7_8  = 0x01,
1127     GX_TEV_KASEL_6_8  = 0x02,
1128     GX_TEV_KASEL_5_8  = 0x03,
1129     GX_TEV_KASEL_4_8  = 0x04,
1130     GX_TEV_KASEL_3_8  = 0x05,
1131     GX_TEV_KASEL_2_8  = 0x06,
1132     GX_TEV_KASEL_1_8  = 0x07,
1133 
1134     GX_TEV_KASEL_1    = GX_TEV_KASEL_8_8,
1135     GX_TEV_KASEL_3_4  = GX_TEV_KASEL_6_8,
1136     GX_TEV_KASEL_1_2  = GX_TEV_KASEL_4_8,
1137     GX_TEV_KASEL_1_4  = GX_TEV_KASEL_2_8,
1138 
1139     GX_TEV_KASEL_K0_R = 0x10,
1140     GX_TEV_KASEL_K1_R = 0x11,
1141     GX_TEV_KASEL_K2_R = 0x12,
1142     GX_TEV_KASEL_K3_R = 0x13,
1143     GX_TEV_KASEL_K0_G = 0x14,
1144     GX_TEV_KASEL_K1_G = 0x15,
1145     GX_TEV_KASEL_K2_G = 0x16,
1146     GX_TEV_KASEL_K3_G = 0x17,
1147     GX_TEV_KASEL_K0_B = 0x18,
1148     GX_TEV_KASEL_K1_B = 0x19,
1149     GX_TEV_KASEL_K2_B = 0x1A,
1150     GX_TEV_KASEL_K3_B = 0x1B,
1151     GX_TEV_KASEL_K0_A = 0x1C,
1152     GX_TEV_KASEL_K1_A = 0x1D,
1153     GX_TEV_KASEL_K2_A = 0x1E,
1154     GX_TEV_KASEL_K3_A = 0x1F
1155 
1156 } GXTevKAlphaSel;
1157 #endif // ( GX_REV != 1 )
1158 
1159 /********************************/
1160 #if ( GX_REV != 1 ) // GX Revision 2 or later only
1161 typedef enum _GXTevSwapSel
1162 {
1163     GX_TEV_SWAP0 = 0,
1164     GX_TEV_SWAP1,
1165     GX_TEV_SWAP2,
1166     GX_TEV_SWAP3,
1167     GX_MAX_TEVSWAP
1168 
1169 } GXTevSwapSel;
1170 #endif // ( GX_REV != 1 )
1171 
1172 /********************************/
1173 #if ( GX_REV != 1 ) // GX Revision 2 or later only
1174 typedef enum _GXTevColorChan
1175 {
1176     GX_CH_RED = 0,
1177     GX_CH_GREEN,
1178     GX_CH_BLUE,
1179     GX_CH_ALPHA
1180 
1181 } GXTevColorChan;
1182 #endif // ( GX_REV != 1 )
1183 
1184 /********************************/
1185 typedef enum _GXAlphaOp
1186 {
1187     GX_AOP_AND,
1188     GX_AOP_OR,
1189     GX_AOP_XOR,
1190     GX_AOP_XNOR,
1191     GX_MAX_ALPHAOP
1192 
1193 } GXAlphaOp;
1194 
1195 /********************************/
1196 typedef enum _GXTevScale
1197 {
1198     GX_CS_SCALE_1,
1199     GX_CS_SCALE_2,
1200     GX_CS_SCALE_4,
1201     GX_CS_DIVIDE_2,
1202     GX_MAX_TEVSCALE
1203 
1204 } GXTevScale;
1205 
1206 /********************************/
1207 typedef enum _GXFogType
1208 {
1209     GX_FOG_NONE          = 0x00,
1210 
1211     GX_FOG_PERSP_LIN     = 0x02,
1212     GX_FOG_PERSP_EXP     = 0x04,
1213     GX_FOG_PERSP_EXP2    = 0x05,
1214     GX_FOG_PERSP_REVEXP  = 0x06,
1215     GX_FOG_PERSP_REVEXP2 = 0x07,
1216 
1217     GX_FOG_ORTHO_LIN     = 0x0A,
1218     GX_FOG_ORTHO_EXP     = 0x0C,
1219     GX_FOG_ORTHO_EXP2    = 0x0D,
1220     GX_FOG_ORTHO_REVEXP  = 0x0E,
1221     GX_FOG_ORTHO_REVEXP2 = 0x0F,
1222 
1223     // For compatibility with former versions
1224     GX_FOG_LIN      = GX_FOG_PERSP_LIN,
1225     GX_FOG_EXP      = GX_FOG_PERSP_EXP,
1226     GX_FOG_EXP2     = GX_FOG_PERSP_EXP2,
1227     GX_FOG_REVEXP   = GX_FOG_PERSP_REVEXP,
1228     GX_FOG_REVEXP2  = GX_FOG_PERSP_REVEXP2
1229 
1230 } GXFogType;
1231 
1232 /********************************/
1233 typedef enum _GXBlendMode
1234 {
1235 #if ( GX_REV == 1 )
1236     GX_BM_NONE,
1237     GX_BM_BLEND,
1238     GX_BM_LOGIC,
1239     GX_MAX_BLENDMODE
1240 
1241 #else // ( GX_REV >= 2 )
1242     GX_BM_NONE,
1243     GX_BM_BLEND,
1244     GX_BM_LOGIC,
1245     GX_BM_SUBTRACT,
1246     GX_MAX_BLENDMODE
1247 
1248 #endif
1249 } GXBlendMode;
1250 
1251 /********************************/
1252 typedef enum _GXBlendFactor
1253 {
1254     GX_BL_ZERO,
1255     GX_BL_ONE,
1256     GX_BL_SRCCLR,
1257     GX_BL_INVSRCCLR,
1258     GX_BL_SRCALPHA,
1259     GX_BL_INVSRCALPHA,
1260     GX_BL_DSTALPHA,
1261     GX_BL_INVDSTALPHA,
1262 
1263     GX_BL_DSTCLR = GX_BL_SRCCLR,
1264     GX_BL_INVDSTCLR = GX_BL_INVSRCCLR
1265 
1266 } GXBlendFactor;
1267 
1268 /********************************/
1269 typedef enum _GXCompare
1270 {
1271     GX_NEVER,
1272     GX_LESS,
1273     GX_EQUAL,
1274     GX_LEQUAL,
1275     GX_GREATER,
1276     GX_NEQUAL,
1277     GX_GEQUAL,
1278     GX_ALWAYS
1279 
1280 } GXCompare;
1281 
1282 /********************************/
1283 typedef enum _GXLogicOp
1284 {
1285     GX_LO_CLEAR,
1286     GX_LO_AND,
1287     GX_LO_REVAND,
1288     GX_LO_COPY,
1289     GX_LO_INVAND,
1290     GX_LO_NOOP,
1291     GX_LO_XOR,
1292     GX_LO_OR,
1293     GX_LO_NOR,
1294     GX_LO_EQUIV,
1295     GX_LO_INV,
1296     GX_LO_REVOR,
1297     GX_LO_INVCOPY,
1298     GX_LO_INVOR,
1299     GX_LO_NAND,
1300     GX_LO_SET
1301 
1302 } GXLogicOp;
1303 
1304 /********************************/
1305 typedef enum _GXPixelFmt
1306 {
1307     GX_PF_RGB8_Z24,
1308     GX_PF_RGBA6_Z24,
1309     GX_PF_RGB565_Z16,
1310     GX_PF_Z24,
1311     GX_PF_Y8,
1312     GX_PF_U8,
1313     GX_PF_V8,
1314     GX_PF_YUV420
1315 
1316 } GXPixelFmt;
1317 
1318 /********************************/
1319 typedef enum _GXZFmt16
1320 {
1321     GX_ZC_LINEAR,
1322     GX_ZC_NEAR,
1323     GX_ZC_MID,
1324     GX_ZC_FAR
1325 
1326 } GXZFmt16;
1327 
1328 /********************************/
1329 typedef enum _GXTevMode
1330 {
1331     GX_MODULATE,
1332     GX_DECAL,
1333     GX_BLEND,
1334     GX_REPLACE,
1335     GX_PASSCLR
1336 
1337 } GXTevMode;
1338 
1339 /********************************/
1340 typedef enum _GXGamma
1341 {
1342     GX_GM_1_0,
1343     GX_GM_1_7,
1344     GX_GM_2_2
1345 
1346 } GXGamma;
1347 
1348 /********************************/
1349 typedef enum _GXProjectionType
1350 {
1351     GX_PERSPECTIVE,
1352     GX_ORTHOGRAPHIC
1353 
1354 } GXProjectionType;
1355 
1356 
1357 /********************************/
1358 typedef enum _GXEvent
1359 {
1360     GX_VCACHE_MISS_ALL,
1361     GX_VCACHE_MISS_POS,
1362     GX_VCACHE_MISS_NRM
1363 
1364 } GXEvent;
1365 
1366 /********************************/
1367 typedef enum _GXFBClamp
1368 {
1369     GX_CLAMP_NONE,
1370     GX_CLAMP_TOP,
1371     GX_CLAMP_BOTTOM
1372 
1373 } GXFBClamp;
1374 
1375 /********************************/
1376 typedef enum _GXAnisotropy
1377 {
1378     GX_ANISO_1,
1379     GX_ANISO_2,
1380     GX_ANISO_4,
1381     GX_MAX_ANISOTROPY
1382 
1383 } GXAnisotropy;
1384 
1385 /********************************/
1386 typedef enum _GXZTexOp
1387 {
1388     GX_ZT_DISABLE,
1389     GX_ZT_ADD,
1390     GX_ZT_REPLACE,
1391     GX_MAX_ZTEXOP
1392 
1393 } GXZTexOp;
1394 
1395 /********************************/
1396 typedef enum _GXAlphaReadMode
1397 {
1398     GX_READ_00,
1399     GX_READ_FF,
1400     GX_READ_NONE
1401 
1402 } GXAlphaReadMode;
1403 
1404 /********************************/
1405 typedef enum _GXPerf0
1406 {
1407     GX_PERF0_VERTICES,
1408     GX_PERF0_CLIP_VTX,
1409     GX_PERF0_CLIP_CLKS,
1410     GX_PERF0_XF_WAIT_IN,
1411     GX_PERF0_XF_WAIT_OUT,
1412     GX_PERF0_XF_XFRM_CLKS,
1413     GX_PERF0_XF_LIT_CLKS,
1414     GX_PERF0_XF_BOT_CLKS,
1415     GX_PERF0_XF_REGLD_CLKS,
1416     GX_PERF0_XF_REGRD_CLKS,
1417     GX_PERF0_CLIP_RATIO,
1418 
1419     GX_PERF0_TRIANGLES,
1420     GX_PERF0_TRIANGLES_CULLED,
1421     GX_PERF0_TRIANGLES_PASSED,
1422     GX_PERF0_TRIANGLES_SCISSORED,
1423     GX_PERF0_TRIANGLES_0TEX,
1424     GX_PERF0_TRIANGLES_1TEX,
1425     GX_PERF0_TRIANGLES_2TEX,
1426     GX_PERF0_TRIANGLES_3TEX,
1427     GX_PERF0_TRIANGLES_4TEX,
1428     GX_PERF0_TRIANGLES_5TEX,
1429     GX_PERF0_TRIANGLES_6TEX,
1430     GX_PERF0_TRIANGLES_7TEX,
1431     GX_PERF0_TRIANGLES_8TEX,
1432     GX_PERF0_TRIANGLES_0CLR,
1433     GX_PERF0_TRIANGLES_1CLR,
1434     GX_PERF0_TRIANGLES_2CLR,
1435 
1436     GX_PERF0_QUAD_0CVG,
1437     GX_PERF0_QUAD_NON0CVG,
1438     GX_PERF0_QUAD_1CVG,
1439     GX_PERF0_QUAD_2CVG,
1440     GX_PERF0_QUAD_3CVG,
1441     GX_PERF0_QUAD_4CVG,
1442     GX_PERF0_AVG_QUAD_CNT,
1443 
1444     GX_PERF0_CLOCKS,
1445     GX_PERF0_NONE
1446 
1447 } GXPerf0;
1448 
1449 /********************************/
1450 typedef enum _GXPerf1
1451 {
1452     GX_PERF1_TEXELS,
1453     GX_PERF1_TX_IDLE,
1454     GX_PERF1_TX_REGS,
1455     GX_PERF1_TX_MEMSTALL,
1456     GX_PERF1_TC_CHECK1_2,
1457     GX_PERF1_TC_CHECK3_4,
1458     GX_PERF1_TC_CHECK5_6,
1459     GX_PERF1_TC_CHECK7_8,
1460     GX_PERF1_TC_MISS,
1461 
1462     GX_PERF1_VC_ELEMQ_FULL,
1463     GX_PERF1_VC_MISSQ_FULL,
1464     GX_PERF1_VC_MEMREQ_FULL,
1465     GX_PERF1_VC_STATUS7,
1466     GX_PERF1_VC_MISSREP_FULL,
1467     GX_PERF1_VC_STREAMBUF_LOW,
1468     GX_PERF1_VC_ALL_STALLS,
1469     GX_PERF1_VERTICES,
1470 
1471     GX_PERF1_FIFO_REQ,
1472     GX_PERF1_CALL_REQ,
1473     GX_PERF1_VC_MISS_REQ,
1474     GX_PERF1_CP_ALL_REQ,
1475 
1476     GX_PERF1_CLOCKS,
1477     GX_PERF1_NONE
1478 
1479 } GXPerf1;
1480 
1481 /********************************/
1482 typedef enum _GXVCachePerf
1483 {
1484     GX_VC_POS,
1485     GX_VC_NRM,
1486     GX_VC_CLR0,
1487     GX_VC_CLR1,
1488     GX_VC_TEX0,
1489     GX_VC_TEX1,
1490     GX_VC_TEX2,
1491     GX_VC_TEX3,
1492     GX_VC_TEX4,
1493     GX_VC_TEX5,
1494     GX_VC_TEX6,
1495     GX_VC_TEX7,
1496     GX_VC_ALL = 0xf
1497 
1498 } GXVCachePerf;
1499 
1500 /********************************/
1501 typedef enum _GXCopyMode
1502 {
1503     GX_COPY_PROGRESSIVE = 0,
1504     GX_COPY_INTLC_EVEN  = 2,
1505     GX_COPY_INTLC_ODD   = 3
1506 
1507 } GXCopyMode;
1508 
1509 /********************************/
1510 typedef enum _GXMiscToken
1511 {
1512     GX_MT_XF_FLUSH           = 1,
1513     GX_MT_DL_SAVE_CONTEXT    = 2,
1514     GX_MT_ABORT_WAIT_COPYOUT = 3,
1515     GX_MT_NULL               = 0
1516 
1517 } GXMiscToken;
1518 
1519 /********************************/
1520 typedef enum _GXXFFlushVal
1521 {
1522     GX_XF_FLUSH_NONE  = 0,
1523     GX_XF_FLUSH_SAFE  = 8
1524 
1525 } GXXFFlushVal;
1526 
1527 /********************************/
1528 // Compile-time checks to ensure that enumerations are compiled
1529 // as 32-bit integers.  If your build breaks at this line,
1530 // please ensure that you enable the "enumerations are integers"
1531 // option for the compiler.
1532 
1533 #define GXCTASSERT(cond)  int GXCTASSERT( int assertion_failed[ (cond) != 0 ] )
1534 
1535 GXCTASSERT(sizeof(GXAttrType) == sizeof(u32));
1536 
1537 /*---------------------------------------------------------------------------*/
1538 #ifdef __cplusplus
1539 }
1540 #endif
1541 
1542 #endif // __GXENUM_H__
1543