1#ifndef __DOLPHIN___GX_H_
2#define __DOLPHIN___GX_H_
8#define GX_WRITE_U8(ub) GXWGFifo.u8 = (u8) (ub)
10#define GX_WRITE_U16(us) GXWGFifo.u16 = (u16) (us)
12#define GX_WRITE_U32(ui) GXWGFifo.u32 = (u32) (ui)
14#define GX_WRITE_F32(f) GXWGFifo.f32 = (f32) (f);
17#define VERIF_XF_REG(addr, value) \
19 s32 regAddr = (addr); \
20 if (regAddr >= 0 && regAddr < 0x50) { \
21 __gxVerif->xfRegs[regAddr] = (value); \
22 __gxVerif->xfRegsDirty[regAddr] = 1; \
25#define VERIF_XF_REG_alt(addr, value) \
27 s32 xfAddr = (addr); \
28 if (xfAddr >= 0 && xfAddr < 0x50) { \
29 __gxVerif->xfRegs[xfAddr] = (value); \
30 __gxVerif->xfRegsDirty[xfAddr] = 1; \
33#define VERIF_RAS_REG(value) \
34 (__gxVerif->rasRegs[((value) & 0xFF000000) >> 24] = value)
35#define VERIF_MTXLIGHT(addr, data) \
38 if (addr < 0x400U) { \
39 __gxVerif->xfMtx[addr] = data; \
40 __gxVerif->xfMtxDirty[addr] = 1; \
41 } else if (addr < 0x500U) { \
42 xfAddr = addr - 0x400; \
43 __gxVerif->xfNrm[xfAddr] = data; \
44 __gxVerif->xfNrmDirty[xfAddr] = 1; \
45 } else if (addr < 0x600U) { \
46 xfAddr = addr - 0x500; \
47 __gxVerif->xfDMtx[xfAddr] = data; \
48 __gxVerif->xfDMtxDirty[xfAddr] = 1; \
49 } else if (addr < 0x680U) { \
50 xfAddr = addr - 0x600; \
51 __gxVerif->xfLight[xfAddr] = data; \
52 __gxVerif->xfLightDirty[xfAddr] = 1; \
54 xfAddr = addr - 0x1000; \
55 if ((xfAddr >= 0) && (xfAddr < 0x50)) { \
56 __gxVerif->xfRegs[xfAddr] = data; \
57 __gxVerif->xfRegsDirty[xfAddr] = 1; \
62#define VERIF_XF_REG(addr, value) ((void) 0)
63#define VERIF_XF_REG_alt(addr, value) ((void) 0)
64#define VERIF_RAS_REG(value) ((void) 0)
67#define GX_WRITE_XF_REG(addr, value) \
70 GX_WRITE_U32(0x1000 + (addr)); \
71 GX_WRITE_U32(value); \
72 VERIF_XF_REG(addr, value); \
76#define GX_WRITE_XF_REG_2(addr, value) \
78 u32 xfData = (value); \
80 GX_WRITE_U32(value); \
81 VERIF_XF_REG_alt(addr, xfData); \
83#define GX_WRITE_XF_REG_F(addr, value) \
85 f32 xfData = (value); \
86 GX_WRITE_F32(value); \
87 VERIF_XF_REG_alt(addr, *(u32*) &xfData); \
90#define GX_WRITE_XF_REG_2(addr, value) \
92 GX_WRITE_U32(value); \
94#define GX_WRITE_XF_REG_F(addr, value) \
96 GX_WRITE_F32(value); \
100#define GX_WRITE_RAS_REG(value) \
103 GX_WRITE_U32(value); \
104 VERIF_RAS_REG(value); \
107#define GX_WRITE_SOME_REG2(a, b, c, addr) \
114 if (regAddr >= 0 && regAddr < 4) { \
115 gx->indexBase[regAddr] = c; \
118#define GX_WRITE_SOME_REG3(a, b, c, addr) \
125 if (regAddr >= 0 && regAddr < 4) { \
126 gx->indexStride[regAddr] = c; \
129#define GX_WRITE_SOME_REG4(a, b, c, addr) \
138#define GET_REG_FIELD(reg, size, shift) \
139 ((int) ((reg) >> (shift)) & ((1 << (size)) - 1))
141#define SET_REG_FIELD(line, reg, size, shift, val) \
143 ASSERTMSGLINE(line, ((u32) (val) & ~((1 << (size)) - 1)) == 0, \
144 "GX Internal: Register field out of range"); \
145 (reg) = ((u32) (reg) & ~(((1 << (size)) - 1) << (shift))) | \
146 ((u32) (val) << (shift)); \
149#define CHECK_GXBEGIN(line, name) \
150 ASSERTMSGLINE(line, !__GXinBegin, \
151 "'" name "' is not allowed between GXBegin/GXEnd")
304 u32* colTiles,
u32* cmpTiles);
440#define __GX_WARN(id) \
441 (__gxVerif->cb(GX_WARN_SEVERE, (id), __gxvWarnings[(id)]))
442#define __GX_WARNF(id, ...) \
444 sprintf(__gxvDummyStr, __gxvWarnings[(id)], __VA_ARGS__); \
445 __gxVerif->cb(GX_WARN_SEVERE, (id), __gxvDummyStr); \
448#define __GX_WARN2(level, id) (__gxVerif->cb(level, (id), __gxvWarnings[(id)]))
449#define __GX_WARN2F(level, id, ...) \
451 sprintf(__gxvDummyStr, __gxvWarnings[(id)], __VA_ARGS__); \
452 __gxVerif->cb(level, (id), __gxvDummyStr); \
GXAttrType
Definition GXEnum.h:115
GXPerf0
Definition GXEnum.h:729
GXTexFmt
Definition GXEnum.h:125
GXTexMapID
Definition GXEnum.h:185
GXAttr
Definition GXEnum.h:84
GXTexCoordID
Definition GXEnum.h:199
GXVtxFmt
Definition GXEnum.h:72
GXPerf1
Definition GXEnum.h:771
u8 GXBool
Definition GXEnum.h:6
GXWarningLevel
Definition GXVerify.h:4
void(* GXVerifyCallback)(GXWarningLevel level, u32 id, char *msg)
Definition GXVerify.h:11
void __GXVerifyState(GXVtxFmt vtxfmt)
void __GXSetRange(float nearz, float fgSideX)
Definition GXStubs.c:4
void __GXSetSUTexRegs(void)
Definition GXTexture.c:1194
void __GXFifoInit(void)
Definition GXFifo.c:431
void __GXPEInit(void)
Definition GXMisc.c:365
void __GXSetTmemConfig(u32 arg0)
Definition GXTexture.c:1253
static void __GXInitGX(void)
Definition GXInit.c:225
u16 * __peReg
Definition GXInit.c:14
void __GXCleanGPFifo(void)
Definition GXFifo.c:482
u16 __GXReadPEReg(u32 reg)
u16 * __cpReg
Definition GXInit.c:15
void __GXShadowDispList(void *list, u32 nbytes)
void __GXVerifyCP(GXVtxFmt fmt)
void __GXSetVCD(void)
Definition GXAttr.c:171
void __GXSetGenMode(void)
Definition GXGeometry.c:161
void __GXVerifyBUMP(void)
void __GXSaveCPUFifoAux(struct __GXFifoObj *realFifo)
Definition GXFifo.c:273
void __GXInsaneWatermark(void)
Definition GXFifo.c:473
u16 * __memReg
Definition GXInit.c:13
void __GetImageTileCount(GXTexFmt fmt, u16 wd, u16 ht, u32 *rowTiles, u32 *colTiles, u32 *cmpTiles)
void __GXSendFlushPrim(void)
Definition GXGeometry.c:50
GXWarnID
Definition __gx.h:323
@ GXWARN_INV_NUM_REG_TEX
Definition __gx.h:425
@ GXWARN_INV_NUM_ANY_TEX
Definition __gx.h:424
@ GXWARN_VAL_SMALL
Definition __gx.h:418
@ GXWARN_RND_CLR_INDX
Definition __gx.h:355
@ GXWARN_MAX
Definition __gx.h:437
@ GXWARN_TEX_CONFIG
Definition __gx.h:343
@ GXWARN_BM_INV_MTX_NDX
Definition __gx.h:404
@ GXWARN_DIAG_LOD
Definition __gx.h:351
@ GXWARN_INV_CLR_TEX
Definition __gx.h:428
@ GXWARN_INV_TEX_SRC
Definition __gx.h:402
@ GXWARN_INDIRECT_MTX
Definition __gx.h:333
@ GXWARN_TEX_CLAMP
Definition __gx.h:347
@ GXWARN_BUMP_ACCUMULATION
Definition __gx.h:337
@ GXWARN_NRM_XF3_CP1
Definition __gx.h:392
@ GXWARN_TLUT_CONFIG
Definition __gx.h:345
@ GXWARN_TEX_SRC_NNRM
Definition __gx.h:397
@ GXWARN_SCISSOR_RECT_LEFT
Definition __gx.h:326
@ GXWARN_CLR_XFN_SUM
Definition __gx.h:423
@ GXWARN_TEV_LAST_A
Definition __gx.h:367
@ GXWARN_TEX_SRC_NCLR1
Definition __gx.h:399
@ GXWARN_MTX1_UNINIT
Definition __gx.h:420
@ GXWARN_VAL_INFINITY
Definition __gx.h:416
@ GXWARN_IND_DIR_BOTH
Definition __gx.h:342
@ GXWARN_CLR_XF2_CPN1
Definition __gx.h:385
@ GXWARN_BUMP_CMD
Definition __gx.h:331
@ GXWARN_TEX_ANISO
Definition __gx.h:352
@ GXWARN_SAMPLE_VALUE
Definition __gx.h:330
@ GXWARN_TEX_SRC_NTEX
Definition __gx.h:401
@ GXWARN_BM_INV_TEX
Definition __gx.h:405
@ GXWARN_TEX_XFN_CPM
Definition __gx.h:395
@ GXWARN_TEX_SRC_NPOS
Definition __gx.h:396
@ GXWARN_DITHER_MODE
Definition __gx.h:372
@ GXWARN_Z_BEFORE_T_A
Definition __gx.h:370
@ GXWARN_BUMP_ALPHA_EN
Definition __gx.h:338
@ GXWARN_CLR_AMB_UNINIT
Definition __gx.h:412
@ GXWARN_IND_TEX_NO_SCALE
Definition __gx.h:335
@ GXWARN_TEX_SRC_NCLR0
Definition __gx.h:398
@ GXWARN_ZTEX_INVALID
Definition __gx.h:365
@ GXWARN_MIN_LOD
Definition __gx.h:349
@ GXWARN_TEX_SIZE_INIT
Definition __gx.h:325
@ GXWARN_NRM_XF3_CP0
Definition __gx.h:393
@ GXWARN_INV_COLOR_TG_COMB
Definition __gx.h:379
@ GXWARN_INV_NUM_CLR_TEX
Definition __gx.h:427
@ GXWARN_INV_TG_ORDER
Definition __gx.h:403
@ GXWARN_XF_CTRL_INIT
Definition __gx.h:378
@ GXWARN_IND_DIR_MASK
Definition __gx.h:339
@ GXWARN_MAX_LOD
Definition __gx.h:350
@ GXWARN_INV_TEX_NUM
Definition __gx.h:408
@ GXWARN_CLR_XF0_CP1
Definition __gx.h:382
@ GXWARN_NRM_XF0_CP1
Definition __gx.h:388
@ GXWARN_NRM_XF1_CP0
Definition __gx.h:390
@ GXWARN_ADDR_UNINIT
Definition __gx.h:435
@ GXWARN_TEV_CLR_CLAMP
Definition __gx.h:362
@ GXWARN_CLR_MAT_UNINIT
Definition __gx.h:411
@ GXWARN_CLR_INV_SPEC
Definition __gx.h:413
@ GXWARN_SCISSOR_RECT_BOT
Definition __gx.h:329
@ GXWARN_TEV_LAST_CLR
Definition __gx.h:366
@ GXWARN_BM_NO_NBT
Definition __gx.h:407
@ GXWARN_INV_NUM_COLORS
Definition __gx.h:380
@ GXWARN_TEV_INV_TEX_COORD
Definition __gx.h:341
@ GXWARN_TEX_MIN_FILT
Definition __gx.h:348
@ GXWARN_TEV_NULL_TEX
Definition __gx.h:358
@ GXWARN_VAL_LARGE
Definition __gx.h:419
@ GXWARN_TEX_FIELD
Definition __gx.h:353
@ GXWARN_TEV_INV_CHAN
Definition __gx.h:357
@ GXWARN_MULTISAMP0
Definition __gx.h:373
@ GXWARN_TEX_POW2
Definition __gx.h:346
@ GXWARN_CLR_NO_NRM
Definition __gx.h:414
@ GXWARN_ZTEX_OFFSET
Definition __gx.h:364
@ GXWARN_CLR_ADDR_UNINIT
Definition __gx.h:410
@ GXWARN_GM_UNINIT
Definition __gx.h:421
@ GXWARN_TEX_XFN_SUM
Definition __gx.h:422
@ GXWARN_BM_INV_LIT_POS
Definition __gx.h:406
@ GXWARN_VTX_NO_GEOM
Definition __gx.h:381
@ GXWARN_DUP_CLR_TEX
Definition __gx.h:429
@ GXWARN_TEV_LAST_A_WRAP
Definition __gx.h:369
@ GXWARN_CLR_XF1_CP2
Definition __gx.h:384
@ GXWARN_CLR_INV_MTX_VAL
Definition __gx.h:433
@ GXWARN_INVALID_INDIRECT
Definition __gx.h:332
@ GXWARN_TEV_A_CLAMP
Definition __gx.h:363
@ GXWARN_CLR_INV_MTX_NDX
Definition __gx.h:415
@ GXWARN_TEV_TEX_REF
Definition __gx.h:340
@ GXWARN_VAL_NAN
Definition __gx.h:417
@ GXWARN_TEV_DIRTY_REG
Definition __gx.h:360
@ GXWARN_INV_IVS_NRM
Definition __gx.h:394
@ GXWARN_TEX_MPEG
Definition __gx.h:354
@ GXWARN_IND_TEX_NO_INIT
Definition __gx.h:334
@ GXWARN_BLEND_LOGICOP
Definition __gx.h:371
@ GXWARN_TEV_NULL_TEX_A
Definition __gx.h:359
@ GXWARN_SCISSOR_RECT_RIGHT
Definition __gx.h:328
@ GXWARN_INV_TG_SRC
Definition __gx.h:409
@ GXWARN_LIT_INV_REG
Definition __gx.h:432
@ GXWARN_TEX_INV_MTX_VAL
Definition __gx.h:431
@ GXWARN_INVALID_VTX_FMT
Definition __gx.h:324
@ GXWARN_INV_MTX_VAL
Definition __gx.h:434
@ GXWARN_IND_TEX_BUMP
Definition __gx.h:336
@ GXWARN_INVALID_TG_TYPE
Definition __gx.h:376
@ GXWARN_TEV_DIRTY_REG_A
Definition __gx.h:361
@ GXWARN_TEV_LAST_CLR_WRAP
Definition __gx.h:368
@ GXWARN_CLR_XF1_CP0
Definition __gx.h:383
@ GXWARN_NRM_XF1_CP3
Definition __gx.h:391
@ GXWARN_MULTISAMP1
Definition __gx.h:374
@ GXWARN_BM_INV_MTX_VAL
Definition __gx.h:430
@ GXWARN_INV_IVS_CLR
Definition __gx.h:387
@ GXWARN_REG_UNINIT
Definition __gx.h:436
@ GXWARN_INV_NUM_BM_TEX
Definition __gx.h:426
@ GXWARN_TEX_BASE
Definition __gx.h:344
@ GXWARN_NRM_XF0_CP3
Definition __gx.h:389
@ GXWARN_TEV_ENV
Definition __gx.h:356
@ GXWARN_CLR_XF2_CPN2
Definition __gx.h:386
@ GXWARN_SAMP_ORDER
Definition __gx.h:375
@ GXWARN_SCISSOR_RECT_TOP
Definition __gx.h:327
@ GXWARN_XF_CTRL_UNINIT
Definition __gx.h:377
@ GXWARN_TEX_SRC_NNBT
Definition __gx.h:400
char * __gxvWarnings[113]
void __GXShadowIndexState(u32 idx_reg, u32 reg_data)
void __GXUpdateBPMask(void)
Definition GXBump.c:324
void __GXSetDirtyState(void)
Definition GXGeometry.c:8
void __GXFlushTextureState(void)
Definition GXBump.c:374
void __GXGetSUTexSize(GXTexCoordID coord, u16 *width, u16 *height)
Definition GXTexture.c:1247
void __GXSetVAT(void)
Definition GXAttr.c:430
struct __GXVerifyData * __gxVerif
void __GXSetMatrixIndex(GXAttr matIdxAttr)
Definition GXTransform.c:544
void __GXVerifyGlobal(void)
u32 * __piReg
Definition GXInit.c:16
void __GXPrintShadowState(void)
struct __GXData_struct * gx
Definition GXInit.c:11
signed int s32
Definition types.h:12
unsigned int u32
Definition types.h:13
unsigned short int u16
Definition types.h:7
unsigned char u8
Definition types.h:5
unsigned long teva[16]
Definition __gx.h:223
unsigned long indexBase[4]
Definition __gx.h:209
unsigned long cpTexStride
Definition __gx.h:235
unsigned char cpTexZ
Definition __gx.h:237
unsigned long indexStride[4]
Definition __gx.h:210
unsigned char dirtyVAT
Definition __gx.h:270
unsigned long tevc[16]
Definition __gx.h:222
unsigned long cmode0
Definition __gx.h:225
unsigned long vatB[8]
Definition __gx.h:204
unsigned long suScis1
Definition __gx.h:216
unsigned long bpMask
Definition __gx.h:219
GXTexRegion TexRegions[8]
Definition __gx.h:239
unsigned long matIdxB
Definition __gx.h:208
unsigned long cpDisp
Definition __gx.h:232
float vpWd
Definition __gx.h:255
unsigned long zmode
Definition __gx.h:227
unsigned long genMode
Definition __gx.h:238
unsigned long cpClr
Definition __gx.h:200
unsigned long matIdxA
Definition __gx.h:207
float vpFarz
Definition __gx.h:258
unsigned char hasNrms
Definition __gx.h:249
float projMtx[6]
Definition __gx.h:252
unsigned long cpEnable
Definition __gx.h:198
unsigned long cpStatus
Definition __gx.h:199
float vpHt
Definition __gx.h:256
unsigned long vatC[8]
Definition __gx.h:205
unsigned short bpSent
Definition __gx.h:195
unsigned long tref[8]
Definition __gx.h:217
unsigned long peCtrl
Definition __gx.h:228
unsigned long projType
Definition __gx.h:251
unsigned long lpSize
Definition __gx.h:206
GXPerf1 perf1
Definition __gx.h:266
float vpLeft
Definition __gx.h:253
unsigned char fgRange
Definition __gx.h:259
unsigned short vNum
Definition __gx.h:196
unsigned char dlSaveContext
Definition __gx.h:269
unsigned long matColor[2]
Definition __gx.h:212
unsigned char hasBiNrms
Definition __gx.h:250
unsigned long perfSel
Definition __gx.h:267
GXAttrType nrmType
Definition __gx.h:248
unsigned long tMode0[8]
Definition __gx.h:262
unsigned long cpTexSrc
Definition __gx.h:233
unsigned char inDispList
Definition __gx.h:268
GXTlutRegion TlutRegions[20]
Definition __gx.h:243
unsigned long suTs0[8]
Definition __gx.h:213
unsigned long cpTex
Definition __gx.h:236
unsigned long suTs1[8]
Definition __gx.h:214
unsigned long cmode1
Definition __gx.h:226
float fgSideX
Definition __gx.h:260
unsigned long cpDispSize
Definition __gx.h:230
unsigned long cpTexSize
Definition __gx.h:234
unsigned long iref
Definition __gx.h:218
unsigned short unk
Definition __gx.h:194
unsigned long dirtyState
Definition __gx.h:271
unsigned long vcdHi
Definition __gx.h:202
unsigned long tevKsel[8]
Definition __gx.h:224
unsigned long IndTexScale0
Definition __gx.h:220
GXTexRegion TexRegionsCI[4]
Definition __gx.h:240
unsigned long vcdLo
Definition __gx.h:201
unsigned long vatA[8]
Definition __gx.h:203
unsigned long tImage0[8]
Definition __gx.h:261
unsigned long cpDispStride
Definition __gx.h:231
unsigned long nextTexRgnCI
Definition __gx.h:242
float vpTop
Definition __gx.h:254
unsigned long tcsManEnab
Definition __gx.h:264
GXPerf0 perf0
Definition __gx.h:265
unsigned long nextTexRgn
Definition __gx.h:241
float vpNearz
Definition __gx.h:257
unsigned long IndTexScale1
Definition __gx.h:221
unsigned long suScis0
Definition __gx.h:215
unsigned long ambColor[2]
Definition __gx.h:211
unsigned long texmapId[16]
Definition __gx.h:263
unsigned long cpDispSrc
Definition __gx.h:229
unsigned short vLim
Definition __gx.h:197
u32 size
Definition __gx.h:169
u8 bind_cpu
Definition __gx.h:175
u8 bind_gp
Definition __gx.h:176
u8 * base
Definition __gx.h:167
u32 hiWatermark
Definition __gx.h:170
u8 * top
Definition __gx.h:168
void * rdPtr
Definition __gx.h:172
s32 count
Definition __gx.h:174
u32 loWatermark
Definition __gx.h:171
void * wrPtr
Definition __gx.h:173
u8 xfMtxDirty[256]
Definition __gx.h:466
u32 xfMtx[256]
Definition __gx.h:460
GXVerifyCallback cb
Definition __gx.h:457
u8 xfDMtxDirty[256]
Definition __gx.h:468
u8 xfRegsDirty[80]
Definition __gx.h:465
u32 xfRegs[80]
Definition __gx.h:459
u32 xfLight[128]
Definition __gx.h:463
u32 xfDMtx[256]
Definition __gx.h:462
u32 xfNrm[96]
Definition __gx.h:461
u8 xfNrmDirty[96]
Definition __gx.h:467
GXWarningLevel verifyLevel
Definition __gx.h:458
u8 xfLightDirty[128]
Definition __gx.h:469
u32 rasRegs[256]
Definition __gx.h:464