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