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