NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
GXTypes.h
1#ifndef RVL_SDK_GX_TYPES_H
2#define RVL_SDK_GX_TYPES_H
3#include <types.h>
4#ifdef __cplusplus
5extern "C" {
6#endif
7
8/**
9 * Pack value into bitfield.
10 * Value is shifted to the specified bit position.
11 * (Bit indices are LSB)
12 */
13#define GX_BITSET(field, pos, size, value) \
14 __rlwimi((field), (value), 31 - (pos) - (size) + 1, (pos), \
15 (pos) + (size) - 1)
16
17/**
18 * Compose value from bitfield.
19 * Value is shifted after masking.
20 * (Bit indices are LSB)
21 */
22#define GX_BITGET(field, pos, size) \
23 ((field) >> (31 - (pos) - (size) + 1) & ((1 << (size)) - 1))
24
25/**
26 * Pack value into bitfield.
27 * Value is not shifted, only masked.
28 * (Bit indices are LSB)
29 */
30#define GX_BITSET_TRUNC(field, pos, size, value) \
31 __rlwimi((field), (value), 0, (pos), (pos) + (size) - 1)
32
33/**
34 * Compose value from bitfield.
35 * Value is not shifted, only masked.
36 * (Bit indices are LSB)
37 */
38#define GX_BITGET_TRUNC(field, pos, size) \
39 ((field) & (((1 << (size)) - 1) << (32 - (pos) - (size))))
40
41/**
42 * Common types used throughout many GX files.
43 * To avoid circular depencies, common structures and all enums have been moved
44 * here. Everything is organized in alphabetical order.
45 */
46
47// Differentiate between 8-byte and boolean values
48// Real name! (from patent)
49typedef unsigned char GXBool;
50
51#define GX_TRUE ((GXBool)TRUE)
52#define GX_FALSE ((GXBool)FALSE)
53
54#define GX_ENABLE GX_TRUE
55#define GX_DISABLE GX_FALSE
56
57/**
58 * Common structs
59 */
60
61typedef struct _GXColor {
62 u8 r, g, b, a;
63} GXColor;
64
65typedef struct _GXColorS10 {
66 s16 r, g, b, a;
67} GXColorS10;
68
69/**
70 * Common enums
71 */
72
73typedef enum _GXAlphaOp {
74 GX_AOP_AND,
75 GX_AOP_OR,
76 GX_AOP_XOR,
77 GX_AOP_XNOR,
78
79 GX_MAX_ALPHAOP
80} GXAlphaOp;
81
82typedef enum _GXAnisotropy {
83 GX_ANISO_1,
84 GX_ANISO_2,
85 GX_ANISO_4,
86
87 GX_MAX_ANISOTROPY
88} GXAnisotropy;
89
90typedef enum _GXAttnFn {
91 GX_AF_SPEC,
92 GX_AF_SPOT,
93 GX_AF_NONE,
94} GXAttnFn;
95
96typedef enum _GXAttr {
97 GX_VA_PNMTXIDX, // Position/Normal matrix index
98 GX_VA_TEX0MTXIDX, // GX_TEXCOORD0 matrix index
99 GX_VA_TEX1MTXIDX, // GX_TEXCOORD1 matrix index
100 GX_VA_TEX2MTXIDX, // GX_TEXCOORD2 matrix index
101 GX_VA_TEX3MTXIDX, // GX_TEXCOORD3 matrix index
102 GX_VA_TEX4MTXIDX, // GX_TEXCOORD4 matrix index
103 GX_VA_TEX5MTXIDX, // GX_TEXCOORD5 matrix index
104 GX_VA_TEX6MTXIDX, // GX_TEXCOORD6 matrix index
105 GX_VA_TEX7MTXIDX, // GX_TEXCOORD7 matrix index
106
107 GX_VA_POS, // Position
108 GX_VA_NRM, // Normal
109
110 GX_VA_CLR0, // Color 0
111 GX_VA_CLR1, // Color 1
112
113 GX_VA_TEX0, // Texture Coordinate 0
114 GX_VA_TEX1, // Texture Coordinate 1
115 GX_VA_TEX2, // Texture Coordinate 2
116 GX_VA_TEX3, // Texture Coordinate 3
117 GX_VA_TEX4, // Texture Coordinate 4
118 GX_VA_TEX5, // Texture Coordinate 5
119 GX_VA_TEX6, // Texture Coordinate 6
120 GX_VA_TEX7, // Texture Coordinate 7
121
122 GX_POS_MTX_ARRAY,
123 GX_NRM_MTX_ARRAY,
124 GX_TEX_MTX_ARRAY,
125 GX_LIGHT_ARRAY,
126
127 GX_VA_NBT, // All three normal elements (normal/binormal/tangent)
128
129 GX_VA_MAX_ATTR,
130 GX_VA_NULL = 255
131} GXAttr;
132
133typedef enum _GXAttrType {
134 GX_NONE, // No data sent
135 GX_DIRECT, // Data sent directly to FIFO
136 GX_INDEX8, // 8-bit index sent to FIFO
137 GX_INDEX16 // 16-bit index sent to FIFO
138} GXAttrType;
139
140typedef enum _GXBlendFactor {
141 GX_BL_ZERO,
142 GX_BL_ONE,
143 GX_BL_SRCCLR,
144 GX_BL_INVSRCCLR,
145 GX_BL_SRCALPHA,
146 GX_BL_INVSRCALPHA,
147 GX_BL_DSTALPHA,
148 GX_BL_INVDSTALPHA,
149
150 GX_BL_DSTCLR = GX_BL_SRCCLR,
151 GX_BL_INVDSTCLR = GX_BL_INVSRCCLR
152} GXBlendFactor;
153
154typedef enum _GXBlendMode {
155 GX_BM_NONE,
156 GX_BM_BLEND,
157 GX_BM_LOGIC,
158 GX_BM_SUBTRACT,
159
160 GX_MAX_BLENDMODE
161} GXBlendMode;
162
163typedef enum _GXChannelID {
164 GX_COLOR0,
165 GX_COLOR1,
166 GX_ALPHA0,
167 GX_ALPHA1,
168 GX_COLOR0A0,
169 GX_COLOR1A1,
170 GX_COLOR_ZERO,
171 GX_ALPHA_BUMP,
172 GX_ALPHA_BUMPN,
173
174 GX_COLOR_NULL = 255
175} GXChannelID;
176
177typedef enum _GXCITexFmt {
178 GX_TF_C4 = 8,
179 GX_TF_C8,
180 GX_TF_C14X2,
181} GXCITexFmt;
182
183typedef enum _GXClearZ {
184 GX_CLEAR_Z_MIN = 0,
185 GX_CLEAR_Z_MAX = (1 << 24) - 1,
186} GXClearZ;
187
188typedef enum _GXClipMode {
189 // "ClipDisable" in XF mem, so 0 = enable
190 GX_CLIP_ENABLE,
191 GX_CLIP_DISABLE,
192} GXClipMode;
193
194typedef enum _GXColorSrc { GX_SRC_REG, GX_SRC_VTX } GXColorSrc;
195
196typedef enum _GXCompare {
197 GX_NEVER,
198 GX_LESS,
199 GX_EQUAL,
200 GX_LEQUAL,
201 GX_GREATER,
202 GX_NEQUAL,
203 GX_GEQUAL,
204 GX_ALWAYS
205} GXCompare;
206
207typedef enum _GXCompCnt {
208 GX_POS_XY = 0,
209 GX_POS_XYZ,
210
211 GX_NRM_XYZ = 0,
212 GX_NRM_NBT,
213 GX_NRM_NBT3,
214
215 GX_CLR_RGB = 0,
216 GX_CLR_RGBA,
217
218 GX_TEX_S = 0,
219 GX_TEX_ST
220} GXCompCnt;
221
222typedef enum _GXCompType {
223 GX_U8,
224 GX_S8,
225 GX_U16,
226 GX_S16,
227 GX_F32,
228
229 GX_RGB565 = 0,
230 GX_RGB8,
231 GX_RGBX8,
232 GX_RGBA4,
233 GX_RGBA6,
234 GX_RGBA8
235} GXCompType;
236
237typedef enum _GXCopyClamp {
238 GX_CLAMP_NONE,
239 GX_CLAMP_TOP,
240 GX_CLAMP_BOTTOM,
241 GX_CLAMP_ALL,
242} GXCopyClamp;
243
244typedef enum _GXCullMode {
245 GX_CULL_NONE,
246 GX_CULL_FRONT,
247 GX_CULL_BACK,
248 GX_CULL_ALL
249} GXCullMode;
250
251typedef enum _GXDiffuseFn { GX_DF_NONE, GX_DF_SIGN, GX_DF_CLAMP } GXDiffuseFn;
252
253typedef enum _GXDirtyFlag {
254 GX_DIRTY_SU_TEX = (1 << 0),
255 GX_DIRTY_BP_MASK = (1 << 1),
256 GX_DIRTY_GEN_MODE = (1 << 2),
257 GX_DIRTY_VCD = (1 << 3),
258 GX_DIRTY_VAT = (1 << 4),
259 // . . .
260 GX_DIRTY_AMB_COLOR0 = (1 << 8),
261 GX_DIRTY_AMB_COLOR1 = (1 << 9),
262 GX_DIRTY_MAT_COLOR0 = (1 << 10),
263 GX_DIRTY_MAT_COLOR1 = (1 << 11),
264 GX_DIRTY_CHAN_COLOR0 = (1 << 12),
265 GX_DIRTY_CHAN_COLOR1 = (1 << 13),
266 GX_DIRTY_CHAN_ALPHA0 = (1 << 14),
267 GX_DIRTY_CHAN_ALPHA1 = (1 << 15),
268 GX_DIRTY_TEX0 = (1 << 16),
269 GX_DIRTY_TEX1 = (1 << 17),
270 GX_DIRTY_TEX2 = (1 << 18),
271 GX_DIRTY_TEX3 = (1 << 19),
272 GX_DIRTY_TEX4 = (1 << 20),
273 GX_DIRTY_TEX5 = (1 << 21),
274 GX_DIRTY_TEX6 = (1 << 22),
275 GX_DIRTY_TEX7 = (1 << 23),
276 GX_DIRTY_NUM_COLORS = (1 << 24),
277 GX_DIRTY_NUM_TEX = (1 << 25),
278 GX_DIRTY_MTX_IDX = (1 << 26),
279 GX_DIRTY_PROJECTION = (1 << 27),
280 GX_DIRTY_VIEWPORT = (1 << 28),
281
282 GX_AMB_MAT_MASK = GX_DIRTY_AMB_COLOR0 | GX_DIRTY_AMB_COLOR1 |
283 GX_DIRTY_MAT_COLOR0 | GX_DIRTY_MAT_COLOR1,
284
285 GX_LIGHT_CHAN_MASK = GX_DIRTY_CHAN_COLOR0 | GX_DIRTY_CHAN_COLOR1 |
286 GX_DIRTY_CHAN_ALPHA0 | GX_DIRTY_CHAN_ALPHA1 |
287 GX_DIRTY_NUM_COLORS,
288
289 GX_TEX_GEN_MASK = 0x2FF0000,
290} GXDirtyFlag;
291
292typedef enum _GXDistAttnFn {
293 GX_DA_OFF,
294 GX_DA_GENTLE,
295 GX_DA_MEDIUM,
296 GX_DA_STEEP
297} GXDistAttnFn;
298
299typedef enum _GXFogType {
300 GX_FOG_NONE,
301
302 GX_FOG_PERSP_LIN = 2,
303 GX_FOG_PERSP_EXP = 4,
304 GX_FOG_PERSP_EXP2 = 5,
305 GX_FOG_PERSP_REVEXP = 6,
306 GX_FOG_PERSP_REVEXP2 = 7,
307
308 // Fourth bit is set to mark orthographic
309 GX_FOG_ORTHO_LIN = 1 << 3 | GX_FOG_PERSP_LIN,
310 GX_FOG_ORTHO_EXP = 1 << 3 | GX_FOG_PERSP_EXP,
311 GX_FOG_ORTHO_EXP2 = 1 << 3 | GX_FOG_PERSP_EXP2,
312 GX_FOG_ORTHO_REVEXP = 1 << 3 | GX_FOG_PERSP_REVEXP,
313 GX_FOG_ORTHO_REVEXP2 = 1 << 3 | GX_FOG_PERSP_REVEXP2
314} GXFogType;
315
316// Access components of the fog type
317#define GX_FOG_GET_PROJ(x) ((x) >> 3 & 1)
318#define GX_FOG_GET_FSEL(x) ((x) & 7)
319
320typedef enum _GXIndTexAlphaSel {
321 GX_ITBA_OFF,
322 GX_ITBA_S,
323 GX_ITBA_T,
324 GX_ITBA_U,
325
326 GX_MAX_ITBALPHA
327} GXIndTexAlphaSel;
328
329typedef enum _GXIndTexBiasSel {
330 GX_ITB_NONE,
331 GX_ITB_S,
332 GX_ITB_T,
333 GX_ITB_ST,
334 GX_ITB_U,
335 GX_ITB_SU,
336 GX_ITB_TU,
337 GX_ITB_STU,
338
339 GX_MAX_ITBIAS
340} GXIndTexBiasSel;
341
342typedef enum _GXIndTexFormat {
343 GX_ITF_8,
344 GX_ITF_5,
345 GX_ITF_4,
346 GX_ITF_3,
347
348 GX_MAX_ITFORMAT
349} GXIndTexFormat;
350
351typedef enum _GXIndTexMtxID {
352 GX_ITM_OFF,
353 GX_ITM_0,
354 GX_ITM_1,
355 GX_ITM_2,
356
357 GX_ITM_S0 = 5,
358 GX_ITM_S1,
359 GX_ITM_S2,
360
361 GX_ITM_T0 = 9,
362 GX_ITM_T1,
363 GX_ITM_T2,
364} GXIndTexMtxID;
365
366typedef enum _GXIndTexScale {
367 GX_ITS_1,
368 GX_ITS_2,
369 GX_ITS_4,
370 GX_ITS_8,
371 GX_ITS_16,
372 GX_ITS_32,
373 GX_ITS_64,
374 GX_ITS_128,
375 GX_ITS_256,
376
377 GX_MAX_ITSCALE
378} GXIndTexScale;
379
380typedef enum _GXIndTexStageID {
381 GX_INDTEXSTAGE0,
382 GX_INDTEXSTAGE1,
383 GX_INDTEXSTAGE2,
384 GX_INDTEXSTAGE3,
385
386 GX_MAX_INDTEXSTAGE
387} GXIndTexStageID;
388
389typedef enum _GXIndTexWrap {
390 GX_ITW_OFF,
391 GX_ITW_256,
392 GX_ITW_128,
393 GX_ITW_64,
394 GX_ITW_32,
395 GX_ITW_16,
396 GX_ITW_0,
397
398 GX_MAX_ITWRAP,
399} GXIndTexWrap;
400
401typedef enum _GXLightID {
402 GX_LIGHT0 = (1 << 0),
403 GX_LIGHT1 = (1 << 1),
404 GX_LIGHT2 = (1 << 2),
405 GX_LIGHT3 = (1 << 3),
406 GX_LIGHT4 = (1 << 4),
407 GX_LIGHT5 = (1 << 5),
408 GX_LIGHT6 = (1 << 6),
409 GX_LIGHT7 = (1 << 7),
410
411 GX_MAX_LIGHT = (1 << 8),
412 GX_LIGHT_NULL = 0
413} GXLightID;
414
415typedef enum _GXLogicOp {
416 GX_LO_CLEAR,
417 GX_LO_AND,
418 GX_LO_REVAND,
419 GX_LO_COPY,
420 GX_LO_INVAND,
421 GX_LO_NOOP,
422 GX_LO_XOR,
423 GX_LO_OR,
424 GX_LO_NOR,
425 GX_LO_EQUIV,
426 GX_LO_INV,
427 GX_LO_REVOR,
428 GX_LO_INVCOPY,
429 GX_LO_INVOR,
430 GX_LO_NAND,
431 GX_LO_SET
432} GXLogicOp;
433
434typedef enum _GXMtxType {
435 GX_MTX_3x4,
436 GX_MTX_2x4,
437} GXMtxType;
438
439typedef enum _GXPixelFmt {
440 GX_PF_RGB8_Z24,
441 GX_PF_RGBA6_Z24,
442 GX_PF_RGBA565_Z16,
443 GX_PF_Z24,
444 GX_PF_Y8,
445 GX_PF_U8,
446 GX_PF_V8,
447 GX_PF_YUV420,
448
449 GX_MAX_PIXELFMT
450} GXPixelFmt;
451
452/**
453 * Matrix column index into XF memory.
454 * (Multiply by row dimension to get XF mem offset)
455 */
456typedef enum _GXPosNrmMtx {
457 GX_PNMTX0 = 0,
458 GX_PNMTX1 = 3,
459 GX_PNMTX2 = 6,
460 GX_PNMTX3 = 9,
461 GX_PNMTX4 = 12,
462 GX_PNMTX5 = 15,
463 GX_PNMTX6 = 18,
464 GX_PNMTX7 = 21,
465 GX_PNMTX8 = 24,
466 GX_PNMTX9 = 27
467} GXPosNrmMtx;
468
469typedef enum _GXPrimitive {
470 GX_POINTS = 0xB8,
471 GX_LINES = 0xA8,
472 GX_LINESTRIP = 0xB0,
473 GX_TRIANGLES = 0x90,
474 GX_TRIANGLESTRIP = 0x98,
475 GX_TRIANGLEFAN = 0xA0,
476 GX_QUADS = 0x80,
477} GXPrimitive;
478
479typedef enum _GXProjectionType {
480 GX_PERSPECTIVE,
481 GX_ORTHOGRAPHIC
482} GXProjectionType;
483
484typedef enum _GXSpotFn {
485 GX_SP_OFF,
486 GX_SP_FLAT,
487 GX_SP_COS,
488 GX_SP_COS2,
489 GX_SP_SHARP,
490 GX_SP_RING1,
491 GX_SP_RING2
492} GXSpotFn;
493
494typedef enum _GXTevAlphaArg {
495 GX_CA_APREV,
496 GX_CA_A0,
497 GX_CA_A1,
498 GX_CA_A2,
499 GX_CA_TEXA,
500 GX_CA_RASA,
501 GX_CA_KONST,
502 GX_CA_ZERO,
503 GX_CA_ONE
504} GXTevAlphaArg;
505
506typedef enum _GXTevBias {
507 GX_TB_ZERO,
508 GX_TB_ADDHALF,
509 GX_TB_SUBHALF,
510
511 GX_MAX_TEVBIAS
512} GXTevBias;
513
514typedef enum _GXTevColorArg {
515 GX_CC_CPREV,
516 GX_CC_APREV,
517 GX_CC_C0,
518 GX_CC_A0,
519 GX_CC_C1,
520 GX_CC_A1,
521 GX_CC_C2,
522 GX_CC_A2,
523 GX_CC_TEXC,
524 GX_CC_TEXA,
525 GX_CC_RASC,
526 GX_CC_RASA,
527 GX_CC_ONE,
528 GX_CC_HALF,
529 GX_CC_KONST,
530 GX_CC_ZERO,
531 GX_CC_TEXRRR,
532 GX_CC_TEXGGG,
533 GX_CC_TEXBBB,
534
535 GX_CC_QUARTER = GX_CC_KONST
536} GXTevColorArg;
537
538typedef enum _GXTevColorChan {
539 GX_CH_RED,
540 GX_CH_GREEN,
541 GX_CH_BLUE,
542 GX_CH_ALPHA
543} GXTevColorChan;
544
545typedef enum _GXTevOp {
546 GX_TEV_ADD,
547 GX_TEV_SUB,
548
549 GX_TEV_COMP_R8_GT = 8,
550 GX_TEV_COMP_R8_EQ,
551 GX_TEV_COMP_GR16_GT,
552 GX_TEV_COMP_GR16_EQ,
553 GX_TEV_COMP_BGR24_GT,
554 GX_TEV_COMP_BGR24_EQ,
555 GX_TEV_COMP_RGB8_GT,
556 GX_TEV_COMP_RGB8_EQ,
557
558 GX_TEV_COMP_A8_GT = GX_TEV_COMP_RGB8_GT,
559 GX_TEV_COMP_A8_EQ = GX_TEV_COMP_RGB8_EQ
560} GXTevOp;
561
562typedef enum _GXTevRegID {
563 GX_TEVPREV,
564 GX_TEVREG0,
565 GX_TEVREG1,
566 GX_TEVREG2,
567
568 GX_MAX_TEVREG
569} GXTevRegID;
570
571typedef enum _GXTevScale {
572 GX_CS_SCALE_1,
573 GX_CS_SCALE_2,
574 GX_CS_SCALE_4,
575 GX_CS_DIVIDE_2,
576
577 GX_MAX_TEVSCALE
578} GXTevScale;
579
580typedef enum _GXTevStageID {
581 GX_TEVSTAGE0,
582 GX_TEVSTAGE1,
583 GX_TEVSTAGE2,
584 GX_TEVSTAGE3,
585 GX_TEVSTAGE4,
586 GX_TEVSTAGE5,
587 GX_TEVSTAGE6,
588 GX_TEVSTAGE7,
589 GX_TEVSTAGE8,
590 GX_TEVSTAGE9,
591 GX_TEVSTAGE10,
592 GX_TEVSTAGE11,
593 GX_TEVSTAGE12,
594 GX_TEVSTAGE13,
595 GX_TEVSTAGE14,
596 GX_TEVSTAGE15,
597
598 GX_MAX_TEVSTAGE
599} GXTevStageID;
600
601typedef enum _GXTevSwapSel {
602 GX_TEV_SWAP0,
603 GX_TEV_SWAP1,
604 GX_TEV_SWAP2,
605 GX_TEV_SWAP3,
606
607 GX_MAX_TEVSWAP
608} GXTevSwapSel;
609
610typedef enum _GXTevKAlphaSel {
611 GX_TEV_KASEL_8_8,
612 GX_TEV_KASEL_7_8,
613 GX_TEV_KASEL_6_8,
614 GX_TEV_KASEL_5_8,
615 GX_TEV_KASEL_4_8,
616 GX_TEV_KASEL_3_8,
617 GX_TEV_KASEL_2_8,
618 GX_TEV_KASEL_1_8,
619
620 GX_TEV_KASEL_1 = 0,
621 GX_TEV_KASEL_3_4 = 2,
622 GX_TEV_KASEL_1_2 = 4,
623 GX_TEV_KASEL_1_4 = 6,
624
625 GX_TEV_KASEL_K0_R = 16,
626 GX_TEV_KASEL_K1_R,
627 GX_TEV_KASEL_K2_R,
628 GX_TEV_KASEL_K3_R,
629 GX_TEV_KASEL_K0_G,
630 GX_TEV_KASEL_K1_G,
631 GX_TEV_KASEL_K2_G,
632 GX_TEV_KASEL_K3_G,
633 GX_TEV_KASEL_K0_B,
634 GX_TEV_KASEL_K1_B,
635 GX_TEV_KASEL_K2_B,
636 GX_TEV_KASEL_K3_B,
637 GX_TEV_KASEL_K0_A,
638 GX_TEV_KASEL_K1_A,
639 GX_TEV_KASEL_K2_A,
640 GX_TEV_KASEL_K3_A
641} GXTevKAlphaSel;
642
643typedef enum _GXTevKColorID {
644 GX_KCOLOR0,
645 GX_KCOLOR1,
646 GX_KCOLOR2,
647 GX_KCOLOR3,
648
649 GX_MAX_KCOLOR
650} GXTevKColorID;
651
652typedef enum _GXTevKColorSel {
653 GX_TEV_KCSEL_8_8,
654 GX_TEV_KCSEL_7_8,
655 GX_TEV_KCSEL_6_8,
656 GX_TEV_KCSEL_5_8,
657 GX_TEV_KCSEL_4_8,
658 GX_TEV_KCSEL_3_8,
659 GX_TEV_KCSEL_2_8,
660 GX_TEV_KCSEL_1_8,
661
662 GX_TEV_KCSEL_1 = 0,
663 GX_TEV_KCSEL_3_4 = 2,
664 GX_TEV_KCSEL_1_2 = 4,
665 GX_TEV_KCSEL_1_4 = 6,
666
667 GX_TEV_KCSEL_K0 = 12,
668 GX_TEV_KCSEL_K1,
669 GX_TEV_KCSEL_K2,
670 GX_TEV_KCSEL_K3,
671 GX_TEV_KCSEL_K0_R,
672 GX_TEV_KCSEL_K1_R,
673 GX_TEV_KCSEL_K2_R,
674 GX_TEV_KCSEL_K3_R,
675 GX_TEV_KCSEL_K0_G,
676 GX_TEV_KCSEL_K1_G,
677 GX_TEV_KCSEL_K2_G,
678 GX_TEV_KCSEL_K3_G,
679 GX_TEV_KCSEL_K0_B,
680 GX_TEV_KCSEL_K1_B,
681 GX_TEV_KCSEL_K2_B,
682 GX_TEV_KCSEL_K3_B,
683 GX_TEV_KCSEL_K0_A,
684 GX_TEV_KCSEL_K1_A,
685 GX_TEV_KCSEL_K2_A,
686 GX_TEV_KCSEL_K3_A
687} GXTevKColorSel;
688
689typedef enum _GXTevMode {
690 GX_MODULATE,
691 GX_DECAL,
692 GX_BLEND,
693 GX_REPLACE,
694 GX_PASSCLR
695} GXTevMode;
696
697typedef enum _GXTexCoordID {
698 GX_TEXCOORD0,
699 GX_TEXCOORD1,
700 GX_TEXCOORD2,
701 GX_TEXCOORD3,
702 GX_TEXCOORD4,
703 GX_TEXCOORD5,
704 GX_TEXCOORD6,
705 GX_TEXCOORD7,
706
707 GX_MAX_TEXCOORD,
708 GX_TEXCOORD_NULL = 255
709} GXTexCoordID;
710
711typedef enum _GXTexFilter {
712 GX_NEAR,
713 GX_LINEAR,
714 GX_NEAR_MIP_NEAR,
715 GX_LIN_MIP_NEAR,
716 GX_NEAR_MIP_LIN,
717 GX_LIN_MIP_LIN,
718} GXTexFilter;
719
720typedef enum _GXTexFmt {
721 GX_TF_I4,
722 GX_TF_I8,
723 GX_TF_IA4,
724 GX_TF_IA8,
725 GX_TF_RGB565,
726 GX_TF_RGB5A3,
727 GX_TF_RGBA8,
728 GX_TF_CMPR = 14,
729
730 GX_CTF_R4 = 32,
731 GX_CTF_RA4 = 34,
732 GX_CTF_RA8 = 35,
733 GX_CTF_YUVA8 = 38,
734 GX_CTF_A8 = 39,
735 GX_CTF_R8 = 40,
736 GX_CTF_G8 = 41,
737 GX_CTF_B8 = 42,
738 GX_CTF_RG8 = 43,
739 GX_CTF_GB8 = 44,
740
741 GX_TF_Z8 = 17,
742 GX_TF_Z16 = 19,
743 GX_TF_Z24X8 = 22,
744
745 GX_CTF_Z4 = 48,
746 GX_CTF_Z8M = 57,
747 GX_CTF_Z8L = 58,
748 GX_CTF_Z16L = 60,
749
750 GX_TF_A8 = GX_CTF_YUVA8
751} GXTexFmt;
752
753typedef enum _GXTexGenSrc {
754 GX_TG_POS,
755 GX_TG_NRM,
756 GX_TG_BINRM,
757 GX_TG_TANGENT,
758 GX_TG_TEX0,
759 GX_TG_TEX1,
760 GX_TG_TEX2,
761 GX_TG_TEX3,
762 GX_TG_TEX4,
763 GX_TG_TEX5,
764 GX_TG_TEX6,
765 GX_TG_TEX7,
766 GX_TG_TEXCOORD0,
767 GX_TG_TEXCOORD1,
768 GX_TG_TEXCOORD2,
769 GX_TG_TEXCOORD3,
770 GX_TG_TEXCOORD4,
771 GX_TG_TEXCOORD5,
772 GX_TG_TEXCOORD6,
773 GX_TG_COLOR0,
774 GX_TG_COLOR1,
775} GXTexGenSrc;
776
777typedef enum _GXTexGenType {
778 GX_TG_MTX3x4,
779 GX_TG_MTX2x4,
780 GX_TG_BUMP0,
781 GX_TG_BUMP1,
782 GX_TG_BUMP2,
783 GX_TG_BUMP3,
784 GX_TG_BUMP4,
785 GX_TG_BUMP5,
786 GX_TG_BUMP6,
787 GX_TG_BUMP7,
788 GX_TG_SRTG
789} GXTexGenType;
790
791typedef enum _GXTexMapID {
792 GX_TEXMAP0,
793 GX_TEXMAP1,
794 GX_TEXMAP2,
795 GX_TEXMAP3,
796 GX_TEXMAP4,
797 GX_TEXMAP5,
798 GX_TEXMAP6,
799 GX_TEXMAP7,
800 GX_MAX_TEXMAP,
801
802 GX_TEXMAP_NULL = 255,
803 GX_TEX_DISABLE
804} GXTexMapID;
805
806typedef enum _GXTexMtx {
807 // Any dimension (in standard XF matrix memory)
808 // Enum represents base row of matrix
809 GX_TEXMTX0 = 30,
810 GX_TEXMTX1 = 33,
811 GX_TEXMTX2 = 36,
812 GX_TEXMTX3 = 39,
813 GX_TEXMTX4 = 42,
814 GX_TEXMTX5 = 45,
815 GX_TEXMTX6 = 48,
816 GX_TEXMTX7 = 51,
817 GX_TEXMTX8 = 54,
818 GX_TEXMTX9 = 57,
819 GX_IDENTITY = 60,
820} GXTexMtx;
821
822typedef enum _GXPTTexMtx {
823 // 3x4 matrices (in dual-tex / "post-matrix" XF matrix memory)
824 // Enum represents base row of matrix
825 GX_PTTEXMTX0 = 64,
826 GX_PTTEXMTX1 = 67,
827 GX_PTTEXMTX2 = 70,
828 GX_PTTEXMTX3 = 73,
829 GX_PTTEXMTX4 = 76,
830 GX_PTTEXMTX5 = 79,
831 GX_PTTEXMTX6 = 82,
832 GX_PTTEXMTX7 = 85,
833 GX_PTTEXMTX8 = 88,
834 GX_PTTEXMTX9 = 91,
835 GX_PTTEXMTX10 = 94,
836 GX_PTTEXMTX11 = 97,
837 GX_PTTEXMTX12 = 100,
838 GX_PTTEXMTX13 = 103,
839 GX_PTTEXMTX14 = 106,
840 GX_PTTEXMTX15 = 109,
841 GX_PTTEXMTX16 = 112,
842 GX_PTTEXMTX17 = 115,
843 GX_PTTEXMTX18 = 118,
844 GX_PTTEXMTX19 = 121,
845 GX_PTIDENTITY = 125
846} GXPTTexMtx;
847
848typedef enum _GXTexWrapMode {
849 GX_CLAMP,
850 GX_REPEAT,
851 GX_MIRROR,
852
853 GX_MAX_TEXWRAPMODE
854} GXTexWrapMode;
855
856typedef enum _GXTlut {
857 GX_TLUT0,
858 GX_TLUT1,
859 GX_TLUT2,
860 GX_TLUT3,
861 GX_TLUT4,
862 GX_TLUT5,
863 GX_TLUT6,
864 GX_TLUT7,
865 GX_TLUT8,
866 GX_TLUT9,
867 GX_TLUT10,
868 GX_TLUT11,
869 GX_TLUT12,
870 GX_TLUT13,
871 GX_TLUT14,
872 GX_TLUT15,
873
874 GX_BIGTLUT0,
875 GX_BIGTLUT1,
876 GX_BIGTLUT2,
877 GX_BIGTLUT3,
878} GXTlut;
879
880typedef enum _GXTlutFmt {
881 GX_TL_IA8,
882 GX_TL_RGB565,
883 GX_TL_RGB5A3,
884
885 GX_MAX_TLUTFMT
886} GXTlutFmt;
887
888typedef enum _GXVtxFmt {
889 GX_VTXFMT0,
890 GX_VTXFMT1,
891 GX_VTXFMT2,
892 GX_VTXFMT3,
893 GX_VTXFMT4,
894 GX_VTXFMT5,
895 GX_VTXFMT6,
896 GX_VTXFMT7,
897
898 GX_MAX_VTXFMT
899} GXVtxFmt;
900
901typedef enum _GXZFmt16 {
902 GX_ZC_LINEAR,
903 GX_ZC_NEAR,
904 GX_ZC_MID,
905 GX_ZC_FAR,
906} GXZFmt16;
907
908// From patent
909typedef enum _GXZTexOp {
910 GX_ZT_DISABLE,
911 GX_ZT_ADD,
912 GX_ZT_REPLACE,
913
914 GX_MAX_ZTEXOP
915} GXZTexOp;
916
917#ifdef __cplusplus
918}
919#endif
920#endif