NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
GX.h
1#pragma once
2#include <types.h>
3#include <lib/rvl/mtx/mtx.h>
4
5#ifdef __cplusplus
6extern "C" {
7#endif
8
9/// @addtogroup gx
10/// @{
11
12/// @brief A 32-bit RGBA color.
13typedef struct _GXColor {
14 union {
15 struct {
16 u8 r;
17 u8 g;
18 u8 b;
19 u8 a;
20 };
21 u32 rgba;
22 };
24
25typedef enum _GXAttr {
26 GX_VA_PNMTXIDX,
27 GX_VA_TEX0MTXIDX,
28 GX_VA_TEX1MTXIDX,
29 GX_VA_TEX2MTXIDX,
30 GX_VA_TEX3MTXIDX,
31 GX_VA_TEX4MTXIDX,
32 GX_VA_TEX5MTXIDX,
33 GX_VA_TEX6MTXIDX,
34 GX_VA_TEX7MTXIDX,
35 GX_VA_POS,
36 GX_VA_NRM,
37 GX_VA_CLR0,
38 GX_VA_CLR1,
39 GX_VA_TEX0,
40 GX_VA_TEX1,
41 GX_VA_TEX2,
42 GX_VA_TEX3,
43 GX_VA_TEX4,
44 GX_VA_TEX5,
45 GX_VA_TEX6,
46 GX_VA_TEX7,
47 GX_POS_MTX_ARRAY,
48 GX_NRM_MTX_ARRAY,
49 GX_TEX_MTX_ARRAY,
50 GX_LIGHT_ARRAY,
51 GX_VA_NBT,
52
53 GX_VA_MAX_ATTR,
54 GX_VA_NULL = 255
55} GXAttr;
56
57typedef enum _GXMtxType {
58 GX_MTX_3x4,
59 GX_MTX_2x4,
60} GXMtxType;
61
62typedef enum _GXVtxFmt {
63 GX_VTXFMT0,
64} GXVtxFmt;
65
66typedef enum _GXPrimitive {
67 GX_POINTS = 0xB8,
68 GX_LINES = 0xA8,
69 GX_LINESTRIP = 0xB0,
70 GX_TRIANGLES = 0x90,
71 GX_TRIANGLESTRIP = 0x98,
72 GX_TRIANGLEFAN = 0xA0,
73 GX_QUADS = 0x80,
74} GXPrimitive;
75
76typedef enum _GXCompare {
77 GX_NEVER,
78 GX_LESS,
79 GX_EQUAL,
80 GX_LEQUAL,
81 GX_GREATER,
82 GX_NEQUAL,
83 GX_GEQUAL,
84 GX_ALWAYS
85} GXCompare;
86
87typedef enum _GXCompCnt {
88 GX_POS_XY = 0,
89 GX_POS_XYZ,
90
91 GX_NRM_XYZ = 0,
92 GX_NRM_NBT,
93 GX_NRM_NBT3,
94
95 GX_CLR_RGB = 0,
96 GX_CLR_RGBA,
97
98 GX_TEX_S = 0,
99 GX_TEX_ST
100} GXCompCnt;
101
102typedef enum _GXCompType {
103 GX_U8,
104 GX_S8,
105 GX_U16,
106 GX_S16,
107 GX_F32,
108
109 GX_RGB565 = 0,
110 GX_RGB8,
111 GX_RGBX8,
112 GX_RGBA4,
113 GX_RGBA6,
114 GX_RGBA8
115} GXCompType;
116
117typedef enum _GXTevStageID {
118 GX_TEVSTAGE0,
119 GX_TEVSTAGE1,
120 GX_TEVSTAGE2,
121 GX_TEVSTAGE3,
122 GX_TEVSTAGE4,
123 GX_TEVSTAGE5,
124 GX_TEVSTAGE6,
125 GX_TEVSTAGE7,
126 GX_TEVSTAGE8,
127 GX_TEVSTAGE9,
128 GX_TEVSTAGE10,
129 GX_TEVSTAGE11,
130 GX_TEVSTAGE12,
131 GX_TEVSTAGE13,
132 GX_TEVSTAGE14,
133 GX_TEVSTAGE15,
134
135 GX_MAX_TEVSTAGE
136} GXTevStageID;
137
138typedef enum _GXTevKColorID {
139 GX_KCOLOR0,
140 GX_KCOLOR1,
141 GX_KCOLOR2,
142 GX_KCOLOR3,
143
144 GX_MAX_KCOLOR
145} GXTevKColorID;
146
147typedef enum _GXTevColorArg {
148 GX_CC_CPREV,
149 GX_CC_APREV,
150 GX_CC_C0,
151 GX_CC_A0,
152 GX_CC_C1,
153 GX_CC_A1,
154 GX_CC_C2,
155 GX_CC_A2,
156 GX_CC_TEXC,
157 GX_CC_TEXA,
158 GX_CC_RASC,
159 GX_CC_RASA,
160 GX_CC_ONE,
161 GX_CC_HALF,
162 GX_CC_KONST,
163 GX_CC_ZERO,
164 GX_CC_TEXRRR,
165 GX_CC_TEXGGG,
166 GX_CC_TEXBBB,
167
168 GX_CC_QUARTER = GX_CC_KONST
169} GXTevColorArg;
170
171typedef enum _GXTevAlphaArg {
172 GX_CA_APREV,
173 GX_CA_A0,
174 GX_CA_A1,
175 GX_CA_A2,
176 GX_CA_TEXA,
177 GX_CA_RASA,
178 GX_CA_KONST,
179 GX_CA_ZERO,
180 GX_CA_ONE
181} GXTevAlphaArg;
182
183typedef enum _GXTevBias {
184 GX_TB_ZERO,
185 GX_TB_ADDHALF,
186 GX_TB_SUBHALF,
187
188 GX_MAX_TEVBIAS
189} GXTevBias;
190
191typedef enum _GXTevScale {
192 GX_TEV_SCALE_0,
193 GX_TEV_SCALE_1,
194 GX_TEV_SCALE_2,
195 GX_TEV_SCALE_3,
196} GXTevScale;
197
198typedef enum _GXTevOp {
199 GX_TEV_ADD,
200 GX_TEV_SUB,
201
202 GX_TEV_COMP_R8_GT = 8,
203 GX_TEV_COMP_R8_EQ,
204 GX_TEV_COMP_GR16_GT,
205 GX_TEV_COMP_GR16_EQ,
206 GX_TEV_COMP_BGR24_GT,
207 GX_TEV_COMP_BGR24_EQ,
208 GX_TEV_COMP_RGB8_GT,
209 GX_TEV_COMP_RGB8_EQ,
210
211 GX_TEV_COMP_A8_GT = GX_TEV_COMP_RGB8_GT,
212 GX_TEV_COMP_A8_EQ = GX_TEV_COMP_RGB8_EQ
213} GXTevOp;
214
215typedef enum _GXTevRegID {
216 GX_TEVPREV,
217 GX_TEVREG0,
218 GX_TEVREG1,
219 GX_TEVREG2,
220
221 GX_MAX_TEVREG
222} GXTevRegID;
223
224typedef enum _GXAlphaOp {
225 GX_AOP_AND,
226 GX_AOP_OR,
227 GX_AOP_XOR,
228 GX_AOP_XNOR,
229
230 GX_MAX_ALPHAOP
231} GXAlphaOp;
232
233typedef struct _GXTexObj {
234 char data[32];
235} GXTexObj;
236
237typedef enum _GXTexFmt {
238 GX_TF_I4,
239 GX_TF_I8,
240 GX_TF_IA4,
241 GX_TF_IA8,
242 GX_TF_RGB565,
243 GX_TF_RGB5A3,
244 GX_TF_RGBA8,
245 GX_TF_CMPR = 14,
246
247 GX_CTF_R4 = 32,
248 GX_CTF_RA4 = 34,
249 GX_CTF_RA8 = 35,
250 GX_CTF_YUVA8 = 38,
251 GX_CTF_A8 = 39,
252 GX_CTF_R8 = 40,
253 GX_CTF_G8 = 41,
254 GX_CTF_B8 = 42,
255 GX_CTF_RG8 = 43,
256 GX_CTF_GB8 = 44,
257
258 GX_TF_Z8 = 17,
259 GX_TF_Z16 = 19,
260 GX_TF_Z24X8 = 22,
261
262 GX_CTF_Z4 = 48,
263 GX_CTF_Z8M = 57,
264 GX_CTF_Z8L = 58,
265 GX_CTF_Z16L = 60,
266
267 GX_TF_A8 = GX_CTF_YUVA8
268} GXTexFmt;
269
270typedef enum _GXTexFilter {
271
272} GXTexFilter;
273
274typedef enum _GXPixelFmt {
275
276} GXPixelFmt;
277
278typedef enum _GXTexWrapMode {
279 GX_CLAMP,
280 GX_REPEAT,
281 GX_MIRROR,
282
283 GX_MAX_TEXWRAPMODE
284} GXTexWrapMode;
285
286typedef enum _GXTexCoordID {
287 GX_TEXCOORD0,
288 GX_TEXCOORD1,
289 GX_TEXCOORD2,
290 GX_TEXCOORD3,
291 GX_TEXCOORD4,
292 GX_TEXCOORD5,
293 GX_TEXCOORD6,
294 GX_TEXCOORD7,
295
296 GX_MAX_TEXCOORD,
297 GX_TEXCOORD_NULL = 255
298} GXTexCoordID;
299
300typedef enum _GXTexGenSrc {
301 GX_TG_POS,
302 GX_TG_NRM,
303 GX_TG_BINRM,
304 GX_TG_TANGENT,
305 GX_TG_TEX0,
306 GX_TG_TEX1,
307 GX_TG_TEX2,
308 GX_TG_TEX3,
309 GX_TG_TEX4,
310 GX_TG_TEX5,
311 GX_TG_TEX6,
312 GX_TG_TEX7,
313 GX_TG_TEXCOORD0,
314 GX_TG_TEXCOORD1,
315 GX_TG_TEXCOORD2,
316 GX_TG_TEXCOORD3,
317 GX_TG_TEXCOORD4,
318 GX_TG_TEXCOORD5,
319 GX_TG_TEXCOORD6,
320 GX_TG_COLOR0,
321 GX_TG_COLOR1,
322} GXTexGenSrc;
323
324typedef enum _GXTexGenType {
325 GX_TG_MTX3x4,
326 GX_TG_MTX2x4,
327 GX_TG_BUMP0,
328 GX_TG_BUMP1,
329 GX_TG_BUMP2,
330 GX_TG_BUMP3,
331 GX_TG_BUMP4,
332 GX_TG_BUMP5,
333 GX_TG_BUMP6,
334 GX_TG_BUMP7,
335 GX_TG_SRTG
336} GXTexGenType;
337
338typedef enum _GXTexMapID {
339 GX_TEXMAP0,
340 GX_TEXMAP1,
341 GX_TEXMAP2,
342 GX_TEXMAP3,
343 GX_TEXMAP4,
344 GX_TEXMAP5,
345 GX_TEXMAP6,
346 GX_TEXMAP7,
347 GX_MAX_TEXMAP,
348
349 GX_TEXMAP_NULL = 255,
350 GX_TEX_DISABLE
351} GXTexMapID;
352
353typedef enum _GXProjectionType {
354 GX_PERSPECTIVE,
355 GX_ORTHOGRAPHIC
356} GXProjectionType;
357
358typedef enum _GXChannelID {
359 GX_COLOR0,
360 GX_COLOR1,
361 GX_ALPHA0,
362 GX_ALPHA1,
363 GX_COLOR0A0,
364 GX_COLOR1A1,
365 GX_COLOR_ZERO,
366 GX_ALPHA_BUMP,
367 GX_ALPHA_BUMPN,
368
369 GX_COLOR_NULL = 255
370} GXChannelID;
371
372typedef enum _GXColorSrc { GX_SRC_REG, GX_SRC_VTX } GXColorSrc;
373
374typedef enum _GXLightID {
375 GX_LIGHT0 = 1,
376 GX_LIGHT1 = 2,
377 GX_LIGHT2 = 4,
378 GX_LIGHT3 = 8,
379 GX_LIGHT4 = 16,
380 GX_LIGHT5 = 32,
381 GX_LIGHT6 = 64,
382 GX_LIGHT7 = 128,
383
384 GX_MAX_LIGHT = 256,
385 GX_LIGHT_NULL = 0
386} GXLightID;
387
388typedef enum _GXDiffuseFn { GX_DF_NONE, GX_DF_SIGN, GX_DF_CLAMP } GXDiffuseFn;
389
390typedef enum _GXAttnFn {
391 GX_AF_SPEC,
392 GX_AF_SPOT,
393 GX_AF_NONE,
394} GXAttnFn;
395
396typedef enum _GXBlendMode {
397 GX_BM_NONE,
398 GX_BM_BLEND,
399 GX_BM_LOGIC,
400 GX_BM_SUBTRACT,
401
402 GX_MAX_BLENDMODE
403} GXBlendMode;
404
405typedef enum _GXBlendFactor {
406 GX_BL_ZERO,
407 GX_BL_ONE,
408 GX_BL_SRCCLR,
409 GX_BL_INVSRCCLR,
410 GX_BL_SRCALPHA,
411 GX_BL_INVSRCALPHA,
412 GX_BL_DSTALPHA,
413 GX_BL_INVDSTALPHA,
414
415 GX_BL_DSTCLR = GX_BL_SRCCLR,
416 GX_BL_INVDSTCLR = GX_BL_INVSRCCLR
417} GXBlendFactor;
418
419typedef enum _GXLogicOp {
420 GX_LO_CLEAR,
421 GX_LO_AND,
422 GX_LO_REVAND,
423 GX_LO_COPY,
424 GX_LO_INVAND,
425 GX_LO_NOOP,
426 GX_LO_XOR,
427 GX_LO_OR,
428 GX_LO_NOR,
429 GX_LO_EQUIV,
430 GX_LO_INV,
431 GX_LO_REVOR,
432 GX_LO_INVCOPY,
433 GX_LO_INVOR,
434 GX_LO_NAND,
435 GX_LO_SET
436} GXLogicOp;
437
438typedef struct _GXRenderModeObj {
439 u32 mVITVMode;
440 u16 mFBWidth;
441 u16 mEFBHeight;
442 u16 mXFBHeight;
443 u16 mVIXOrigin;
444 u16 mVIYOrigin;
445 u16 mVIWidth;
446 u16 mVIHeight;
447 u32 mXFBMode;
448 bool mFieldRendering;
449 bool mAntialias;
450 u8 mSamplePattern[12][2];
451 u8 mFilterWeights[7];
452} GXRenderModeObj;
453
454typedef union _GXFifo {
455 // 1-byte
456 char c;
457 unsigned char uc;
458 // 2-byte
459 short s;
460 unsigned short us;
461 // 4-byte
462 int i;
463 unsigned int ui;
464 void* p;
465 float f;
466} GXFifo;
467
468#ifdef __CWCC__
469extern volatile GXFifo WGPIPE : 0xcc008000;
470#else
471// For non-mwcc compiler error checking
472extern volatile GXFifo WGPIPE;
473#endif
474
475void GXSetProjection(const Mtx44 *, GXProjectionType);
476void GXLoadPosMtxImm(const Mtx *, u32);
477void GXSetCurrentMtx(u32 id);
478void GXLoadTexMtxImm(const Mtx *, u32, GXMtxType);
479void GXSetViewport(float, float, float, float, float, float);
480void GXSetScissor(u32, u32, u32, u32);
481
482void GXSetVtxDesc(GXAttr, GXAttr);
483void GXClearVtxDesc();
484void GXSetVtxAttrFmt(GXVtxFmt, GXAttr, GXCompCnt, GXCompType, u8);
485void GXSetNumTexGens(u8);
486void GXSetTexCoordGen2(GXTexCoordID, GXTexGenType, GXTexGenSrc, u8, u8, u32);
487
488void GXBegin(GXPrimitive, GXVtxFmt, u16);
489void GXSetCullMode(int);
490
491inline static void GXEnd() {}
492
493void GXSetNumIndStages(u8);
494void __GXSetIndirectMask(u32);
495
496void GXSetColorUpdate(u8);
497void GXSetAlphaUpdate(u8);
498void GXSetZMode(u8, GXCompare, u8);
499void GXSetZCompLoc(u8);
500
501void GXSetTevColorIn(GXTevStageID, GXTevColorArg, GXTevColorArg, GXTevColorArg, GXTevColorArg);
502void GXSetTevAlphaIn(GXTevStageID, GXTevAlphaArg, GXTevAlphaArg, GXTevAlphaArg, GXTevAlphaArg);
503void GXSetTevColorOp(GXTevStageID, GXTevOp, GXTevBias, GXTevScale, u8, GXTevRegID);
504void GXSetTevAlphaOp(GXTevStageID, GXTevOp, GXTevBias, GXTevScale, u8, GXTevRegID);
505void GXSetTevOp(GXTevStageID, u32);
506void GXSetTevOrder(GXTevStageID, GXTexCoordID, GXTexMapID, GXChannelID);
507void GXSetAlphaCompare(GXCompare, u8, GXAlphaOp, GXCompare, u8);
508void GXSetNumTevStages(u8);
509
510void GXInitTexObj(GXTexObj *, void *, u16, u16, GXTexFmt, GXTexWrapMode, GXTexWrapMode, u8);
511void GXLoadTexObj(GXTexObj *, GXTexMapID);
512
513void GXSetChanMatColor(GXChannelID, GXColor);
514void GXSetNumChans(u8);
515void GXSetChanCtrl(GXChannelID, u8, GXColorSrc, GXColorSrc, GXLightID, GXDiffuseFn, GXAttnFn);
516
517void GXSetBlendMode(GXBlendMode, GXBlendFactor, GXBlendFactor, GXLogicOp);
518
519void GXInvalidateVtxCache();
520
521size_t GXGetTexBufferSize(int width, int height, GXTexFmt fmt, bool, bool);
522void GXInitTexObjLOD(GXTexObj *, GXTexFilter, GXTexFilter, float, float, float, int, int, int);
523void GXSetCopyFilter(int, void *, int, void *);
524void GXSetTexCopySrc(int, int, int, int);
525void GXSetTexCopyDst(int, int, GXTexFmt, u8);
526void GXCopyTex(void *, int);
527void GXSetTevDirect(int);
528
529static inline void GXPosition3f32(float x, float y, float z) {
530 WGPIPE.f = x;
531 WGPIPE.f = y;
532 WGPIPE.f = z;
533}
534
535static inline void GXTexCoord2f32(float x, float y) {
536 WGPIPE.f = x;
537 WGPIPE.f = y;
538}
539
540/// @}
541
542#ifdef __cplusplus
543}
544#endif
struct _GXColor GXColor
A 32-bit RGBA color.
float Mtx44[4][4]
A 4x4 matrix.
Definition mtx.h:13
float Mtx[3][4]
A 3x4 matrix.
Definition mtx.h:12
A 32-bit RGBA color.
Definition GX.h:13
Definition GX.h:454