1 #ifndef _ULTRA64_GBI_H_ 2 #define _ULTRA64_GBI_H_ 65 #define GPACK_RGBA5551(r, g, b, a) \ 66 ((((r) << 8) & 0xF800) | \ 67 (((g) << 3) & 0x07C0) | \ 68 (((b) >> 2) & 0x003E) | \ 70 #define GPACK_ZDZ(z, dz) ((z) << 2 | (dz)) 74 #define G_MOVEMEM 0x03 77 #define G_LOAD_UCODE 0xAF 78 #define G_BRANCH_Z 0xB0 83 #define G_RDPHALF_CONT 0xB2 85 #define G_MODIFYVTX 0xB2 87 #define G_RDPHALF_2 0xB3 88 #define G_RDPHALF_1 0xB4 90 #define G_CLEARGEOMETRYMODE 0xB6 91 #define G_SETGEOMETRYMODE 0xB7 93 #define G_TEXTURE 0xBB 94 #define G_MOVEWORD 0xBC 99 #define G_TEXRECT 0xE4 100 #define G_TEXRECTFLIP 0xE5 101 #define G_RDPLOADSYNC 0xE6 102 #define G_RDPPIPESYNC 0xE7 103 #define G_RDPTILESYNC 0xE8 104 #define G_RDPFULLSYNC 0xE9 105 #define G_SETKEYGB 0xEA 106 #define G_SETKEYR 0xEB 107 #define G_SETCONVERT 0xEC 108 #define G_SETSCISSOR 0xED 109 #define G_SETPRIMDEPTH 0xEE 110 #define G_RDPSETOTHERMODE 0xEF 111 #define G_LOADTLUT 0xF0 112 #define G_SETTILESIZE 0xF2 113 #define G_LOADBLOCK 0xF3 114 #define G_LOADTILE 0xF4 115 #define G_SETTILE 0xF5 116 #define G_FILLRECT 0xF6 117 #define G_SETFILLCOLOR 0xF7 118 #define G_SETFOGCOLOR 0xF8 119 #define G_SETBLENDCOLOR 0xF9 120 #define G_SETPRIMCOLOR 0xFA 121 #define G_SETENVCOLOR 0xFB 122 #define G_SETCOMBINE 0xFC 123 #define G_SETTIMG 0xFD 124 #define G_SETZIMG 0xFE 125 #define G_SETCIMG 0xFF 127 #define G_DL_PUSH 0x00 128 #define G_DL_NOPUSH 0x01 132 #define G_MDSFT_ALPHACOMPARE 0 133 #define G_MDSFT_ZSRCSEL 2 134 #define G_MDSFT_RENDERMODE 3 135 #define G_MDSFT_BLENDER 16 139 #define G_MDSFT_ALPHADITHER 4 140 #define G_MDSFT_RGBDITHER 6 141 #define G_MDSFT_COMBKEY 8 142 #define G_MDSFT_TEXTCONV 9 143 #define G_MDSFT_TEXTFILT 12 144 #define G_MDSFT_TEXTLUT 14 145 #define G_MDSFT_TEXTLOD 16 146 #define G_MDSFT_TEXTDETAIL 17 147 #define G_MDSFT_TEXTPERSP 19 148 #define G_MDSFT_CYCLETYPE 20 149 #define G_MDSFT_PIPELINE 23 151 #define G_ZBUFFER 0x00000001 152 #define G_TEXTURE_ENABLE 0x00000002 153 #define G_SHADE 0x00000004 154 #define G_SHADING_SMOOTH 0x00000200 155 #define G_CULL_FRONT 0x00001000 156 #define G_CULL_BACK 0x00002000 157 #define G_CULL_BOTH 0x00003000 158 #define G_FOG 0x00010000 159 #define G_LIGHTING 0x00020000 160 #define G_TEXTURE_GEN 0x00040000 161 #define G_TEXTURE_GEN_LINEAR 0x00080000 162 #define G_LOD 0x00100000 163 #define G_CLIPPING 0x00800000 165 #define G_IM_FMT_RGBA 0 166 #define G_IM_FMT_YUV 1 167 #define G_IM_FMT_CI 2 168 #define G_IM_FMT_IA 3 171 #define G_IM_SIZ_4b 0 172 #define G_IM_SIZ_8b 1 173 #define G_IM_SIZ_16b 2 174 #define G_IM_SIZ_32b 3 175 #define G_IM_SIZ_DD 5 177 #define G_AC_NONE (0 << 0) 178 #define G_AC_THRESHOLD (1 << 0) 179 #define G_AC_DITHER (3 << 0) 181 #define G_ZS_PIXEL (0 << 2) 182 #define G_ZS_PRIM (1 << 2) 184 #define G_CD_MAGICSQ (0 << 6) 185 #define G_CD_BAYER (1 << 6) 186 #define G_CD_NOISE (2 << 6) 188 #define G_CK_NONE (0 << 8) 189 #define G_CK_KEY (1 << 8) 191 #define G_TC_CONV (0 << 9) 192 #define G_TC_FILTCONV (5 << 9) 193 #define G_TC_FILT (6 << 9) 195 #define G_TF_POINT (0 << 12) 196 #define G_TF_BILERP (2 << 12) 197 #define G_TF_AVERAGE (3 << 12) 199 #define G_TT_NONE (0 << 14) 200 #define G_TT_RGBA16 (2 << 14) 201 #define G_TT_IA16 (3 << 14) 203 #define G_TL_TILE (0 << 16) 204 #define G_TL_LOD (1 << 16) 206 #define G_TD_CLAMP (0 << 17) 207 #define G_TD_SHARPEN (1 << 17) 208 #define G_TD_DETAIL (2 << 17) 210 #define G_TP_NONE (0 << 19) 211 #define G_TP_PERSP (1 << 19) 213 #define G_CYC_1CYCLE (0 << 20) 214 #define G_CYC_2CYCLE (1 << 20) 215 #define G_CYC_COPY (2 << 20) 216 #define G_CYC_FILL (3 << 20) 218 #define G_PM_NPRIMITIVE (0 << 23) 219 #define G_PM_1PRIMITIVE (1 << 23) 221 #define G_SC_NON_INTERLACE 0 222 #define G_SC_ODD_INTERLACE 3 223 #define G_SC_EVEN_INTERLACE 2 225 #define G_TX_LOADTILE 7 226 #define G_TX_RENDERTILE 0 228 #define G_TX_NOMIRROR 0 230 #define G_TX_MIRROR 1 232 #define G_TX_NOMASK 0 235 #define G_TX_LDBLK_MAX_TXL 2047 237 #define G_MV_VIEWPORT 0x80 238 #define G_MV_LOOKATY 0x82 239 #define G_MV_LOOKATX 0x84 248 #define G_MV_TXTATT 0x96 249 #define G_MV_MATRIX_1 0x9E 250 #define G_MV_MATRIX_2 0x98 251 #define G_MV_MATRIX_3 0x9A 252 #define G_MV_MATRIX_4 0x9C 254 #define G_SETOTHERMODE_L 0xB9 255 #define G_SETOTHERMODE_H 0xBA 263 #define CLR_ON_CVG 0x80 264 #define CVG_DST_CLAMP 0 265 #define CVG_DST_WRAP 0x100 266 #define CVG_DST_FULL 0x200 267 #define CVG_DST_SAVE 0x300 269 #define ZMODE_INTER 0x400 270 #define ZMODE_XLU 0x800 271 #define ZMODE_DEC 0xc00 272 #define CVG_X_ALPHA 0x1000 273 #define ALPHA_CVG_SEL 0x2000 274 #define FORCE_BL 0x4000 275 #define TEX_EDGE 0x0000 277 #define G_BL_CLR_IN 0 278 #define G_BL_CLR_MEM 1 279 #define G_BL_CLR_BL 2 280 #define G_BL_CLR_FOG 3 285 #define G_BL_A_SHADE 2 289 #define GBL_c1(m1a, m1b, m2a, m2b) \ 290 (m1a) << 30 | (m1b) << 26 | (m2a) << 22 | (m2b) << 18 291 #define GBL_c2(m1a, m1b, m2a, m2b) \ 292 (m1a) << 28 | (m1b) << 24 | (m2a) << 20 | (m2b) << 16 294 #define RM_AA_ZB_OPA_SURF(clk) \ 295 AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ 296 ZMODE_OPA | ALPHA_CVG_SEL | \ 297 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 299 #define RM_RA_ZB_OPA_SURF(clk) \ 300 AA_EN | Z_CMP | Z_UPD | CVG_DST_CLAMP | \ 301 ZMODE_OPA | ALPHA_CVG_SEL | \ 302 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 304 #define RM_AA_ZB_XLU_SURF(clk) \ 305 AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \ 306 FORCE_BL | ZMODE_XLU | \ 307 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 309 #define RM_AA_ZB_OPA_DECAL(clk) \ 310 AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | ALPHA_CVG_SEL | \ 312 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 314 #define RM_RA_ZB_OPA_DECAL(clk) \ 315 AA_EN | Z_CMP | CVG_DST_WRAP | ALPHA_CVG_SEL | \ 317 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 319 #define RM_AA_ZB_XLU_DECAL(clk) \ 320 AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \ 321 FORCE_BL | ZMODE_DEC | \ 322 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 324 #define RM_AA_ZB_OPA_INTER(clk) \ 325 AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ 326 ALPHA_CVG_SEL | ZMODE_INTER | \ 327 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 329 #define RM_RA_ZB_OPA_INTER(clk) \ 330 AA_EN | Z_CMP | Z_UPD | CVG_DST_CLAMP | \ 331 ALPHA_CVG_SEL | ZMODE_INTER | \ 332 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 334 #define RM_AA_ZB_XLU_INTER(clk) \ 335 AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \ 336 FORCE_BL | ZMODE_INTER | \ 337 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 339 #define RM_AA_ZB_XLU_LINE(clk) \ 340 AA_EN | Z_CMP | IM_RD | CVG_DST_CLAMP | CVG_X_ALPHA | \ 341 ALPHA_CVG_SEL | FORCE_BL | ZMODE_XLU | \ 342 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 344 #define RM_AA_ZB_DEC_LINE(clk) \ 345 AA_EN | Z_CMP | IM_RD | CVG_DST_SAVE | CVG_X_ALPHA | \ 346 ALPHA_CVG_SEL | FORCE_BL | ZMODE_DEC | \ 347 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 349 #define RM_AA_ZB_TEX_EDGE(clk) \ 350 AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ 351 CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ 352 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 354 #define RM_AA_ZB_TEX_INTER(clk) \ 355 AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ 356 CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_INTER | TEX_EDGE | \ 357 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 359 #define RM_AA_ZB_SUB_SURF(clk) \ 360 AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | \ 361 ZMODE_OPA | ALPHA_CVG_SEL | \ 362 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 364 #define RM_AA_ZB_PCL_SURF(clk) \ 365 AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ 366 ZMODE_OPA | G_AC_DITHER | \ 367 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 369 #define RM_AA_ZB_OPA_TERR(clk) \ 370 AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ 371 ZMODE_OPA | ALPHA_CVG_SEL | \ 372 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 374 #define RM_AA_ZB_TEX_TERR(clk) \ 375 AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \ 376 CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ 377 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 379 #define RM_AA_ZB_SUB_TERR(clk) \ 380 AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | \ 381 ZMODE_OPA | ALPHA_CVG_SEL | \ 382 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 385 #define RM_AA_OPA_SURF(clk) \ 386 AA_EN | IM_RD | CVG_DST_CLAMP | \ 387 ZMODE_OPA | ALPHA_CVG_SEL | \ 388 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 390 #define RM_RA_OPA_SURF(clk) \ 391 AA_EN | CVG_DST_CLAMP | \ 392 ZMODE_OPA | ALPHA_CVG_SEL | \ 393 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 395 #define RM_AA_XLU_SURF(clk) \ 396 AA_EN | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | FORCE_BL | \ 398 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 400 #define RM_AA_XLU_LINE(clk) \ 401 AA_EN | IM_RD | CVG_DST_CLAMP | CVG_X_ALPHA | \ 402 ALPHA_CVG_SEL | FORCE_BL | ZMODE_OPA | \ 403 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 405 #define RM_AA_DEC_LINE(clk) \ 406 AA_EN | IM_RD | CVG_DST_FULL | CVG_X_ALPHA | \ 407 ALPHA_CVG_SEL | FORCE_BL | ZMODE_OPA | \ 408 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 410 #define RM_AA_TEX_EDGE(clk) \ 411 AA_EN | IM_RD | CVG_DST_CLAMP | \ 412 CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ 413 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 415 #define RM_AA_SUB_SURF(clk) \ 416 AA_EN | IM_RD | CVG_DST_FULL | \ 417 ZMODE_OPA | ALPHA_CVG_SEL | \ 418 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 420 #define RM_AA_PCL_SURF(clk) \ 421 AA_EN | IM_RD | CVG_DST_CLAMP | \ 422 ZMODE_OPA | G_AC_DITHER | \ 423 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 425 #define RM_AA_OPA_TERR(clk) \ 426 AA_EN | IM_RD | CVG_DST_CLAMP | \ 427 ZMODE_OPA | ALPHA_CVG_SEL | \ 428 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 430 #define RM_AA_TEX_TERR(clk) \ 431 AA_EN | IM_RD | CVG_DST_CLAMP | \ 432 CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \ 433 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 435 #define RM_AA_SUB_TERR(clk) \ 436 AA_EN | IM_RD | CVG_DST_FULL | \ 437 ZMODE_OPA | ALPHA_CVG_SEL | \ 438 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 441 #define RM_ZB_OPA_SURF(clk) \ 442 Z_CMP | Z_UPD | CVG_DST_FULL | ALPHA_CVG_SEL | \ 444 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 446 #define RM_ZB_XLU_SURF(clk) \ 447 Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_XLU | \ 448 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 450 #define RM_ZB_OPA_DECAL(clk) \ 451 Z_CMP | CVG_DST_FULL | ALPHA_CVG_SEL | ZMODE_DEC | \ 452 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 454 #define RM_ZB_XLU_DECAL(clk) \ 455 Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_DEC | \ 456 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 458 #define RM_ZB_CLD_SURF(clk) \ 459 Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_XLU | \ 460 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 462 #define RM_ZB_OVL_SURF(clk) \ 463 Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_DEC | \ 464 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 466 #define RM_ZB_PCL_SURF(clk) \ 467 Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | \ 469 GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) 472 #define RM_OPA_SURF(clk) \ 473 CVG_DST_CLAMP | FORCE_BL | ZMODE_OPA | \ 474 GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) 476 #define RM_XLU_SURF(clk) \ 477 IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_OPA | \ 478 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 480 #define RM_TEX_EDGE(clk) \ 481 CVG_DST_CLAMP | CVG_X_ALPHA | ALPHA_CVG_SEL | FORCE_BL |\ 482 ZMODE_OPA | TEX_EDGE | AA_EN | \ 483 GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) 485 #define RM_CLD_SURF(clk) \ 486 IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_OPA | \ 487 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 489 #define RM_PCL_SURF(clk) \ 490 CVG_DST_FULL | FORCE_BL | ZMODE_OPA | \ 492 GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) 494 #define RM_ADD(clk) \ 495 IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_OPA | \ 496 GBL_c##clk(G_BL_CLR_IN, G_BL_A_FOG, G_BL_CLR_MEM, G_BL_1) 498 #define RM_NOOP(clk) \ 499 GBL_c##clk(0, 0, 0, 0) 501 #define RM_VISCVG(clk) \ 503 GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_BL, G_BL_A_MEM) 506 #define RM_OPA_CI(clk) \ 507 CVG_DST_CLAMP | ZMODE_OPA | \ 508 GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) 512 #define G_RM_AA_ZB_OPA_SURF RM_AA_ZB_OPA_SURF(1) 513 #define G_RM_AA_ZB_OPA_SURF2 RM_AA_ZB_OPA_SURF(2) 514 #define G_RM_AA_ZB_XLU_SURF RM_AA_ZB_XLU_SURF(1) 515 #define G_RM_AA_ZB_XLU_SURF2 RM_AA_ZB_XLU_SURF(2) 516 #define G_RM_AA_ZB_OPA_DECAL RM_AA_ZB_OPA_DECAL(1) 517 #define G_RM_AA_ZB_OPA_DECAL2 RM_AA_ZB_OPA_DECAL(2) 518 #define G_RM_AA_ZB_XLU_DECAL RM_AA_ZB_XLU_DECAL(1) 519 #define G_RM_AA_ZB_XLU_DECAL2 RM_AA_ZB_XLU_DECAL(2) 520 #define G_RM_AA_ZB_OPA_INTER RM_AA_ZB_OPA_INTER(1) 521 #define G_RM_AA_ZB_OPA_INTER2 RM_AA_ZB_OPA_INTER(2) 522 #define G_RM_AA_ZB_XLU_INTER RM_AA_ZB_XLU_INTER(1) 523 #define G_RM_AA_ZB_XLU_INTER2 RM_AA_ZB_XLU_INTER(2) 524 #define G_RM_AA_ZB_XLU_LINE RM_AA_ZB_XLU_LINE(1) 525 #define G_RM_AA_ZB_XLU_LINE2 RM_AA_ZB_XLU_LINE(2) 526 #define G_RM_AA_ZB_DEC_LINE RM_AA_ZB_DEC_LINE(1) 527 #define G_RM_AA_ZB_DEC_LINE2 RM_AA_ZB_DEC_LINE(2) 528 #define G_RM_AA_ZB_TEX_EDGE RM_AA_ZB_TEX_EDGE(1) 529 #define G_RM_AA_ZB_TEX_EDGE2 RM_AA_ZB_TEX_EDGE(2) 530 #define G_RM_AA_ZB_TEX_INTER RM_AA_ZB_TEX_INTER(1) 531 #define G_RM_AA_ZB_TEX_INTER2 RM_AA_ZB_TEX_INTER(2) 532 #define G_RM_AA_ZB_SUB_SURF RM_AA_ZB_SUB_SURF(1) 533 #define G_RM_AA_ZB_SUB_SURF2 RM_AA_ZB_SUB_SURF(2) 534 #define G_RM_AA_ZB_PCL_SURF RM_AA_ZB_PCL_SURF(1) 535 #define G_RM_AA_ZB_PCL_SURF2 RM_AA_ZB_PCL_SURF(2) 536 #define G_RM_AA_ZB_OPA_TERR RM_AA_ZB_OPA_TERR(1) 537 #define G_RM_AA_ZB_OPA_TERR2 RM_AA_ZB_OPA_TERR(2) 538 #define G_RM_AA_ZB_TEX_TERR RM_AA_ZB_TEX_TERR(1) 539 #define G_RM_AA_ZB_TEX_TERR2 RM_AA_ZB_TEX_TERR(2) 540 #define G_RM_AA_ZB_SUB_TERR RM_AA_ZB_SUB_TERR(1) 541 #define G_RM_AA_ZB_SUB_TERR2 RM_AA_ZB_SUB_TERR(2) 543 #define G_RM_RA_ZB_OPA_SURF RM_RA_ZB_OPA_SURF(1) 544 #define G_RM_RA_ZB_OPA_SURF2 RM_RA_ZB_OPA_SURF(2) 545 #define G_RM_RA_ZB_OPA_DECAL RM_RA_ZB_OPA_DECAL(1) 546 #define G_RM_RA_ZB_OPA_DECAL2 RM_RA_ZB_OPA_DECAL(2) 547 #define G_RM_RA_ZB_OPA_INTER RM_RA_ZB_OPA_INTER(1) 548 #define G_RM_RA_ZB_OPA_INTER2 RM_RA_ZB_OPA_INTER(2) 550 #define G_RM_AA_OPA_SURF RM_AA_OPA_SURF(1) 551 #define G_RM_AA_OPA_SURF2 RM_AA_OPA_SURF(2) 552 #define G_RM_AA_XLU_SURF RM_AA_XLU_SURF(1) 553 #define G_RM_AA_XLU_SURF2 RM_AA_XLU_SURF(2) 554 #define G_RM_AA_XLU_LINE RM_AA_XLU_LINE(1) 555 #define G_RM_AA_XLU_LINE2 RM_AA_XLU_LINE(2) 556 #define G_RM_AA_DEC_LINE RM_AA_DEC_LINE(1) 557 #define G_RM_AA_DEC_LINE2 RM_AA_DEC_LINE(2) 558 #define G_RM_AA_TEX_EDGE RM_AA_TEX_EDGE(1) 559 #define G_RM_AA_TEX_EDGE2 RM_AA_TEX_EDGE(2) 560 #define G_RM_AA_SUB_SURF RM_AA_SUB_SURF(1) 561 #define G_RM_AA_SUB_SURF2 RM_AA_SUB_SURF(2) 562 #define G_RM_AA_PCL_SURF RM_AA_PCL_SURF(1) 563 #define G_RM_AA_PCL_SURF2 RM_AA_PCL_SURF(2) 564 #define G_RM_AA_OPA_TERR RM_AA_OPA_TERR(1) 565 #define G_RM_AA_OPA_TERR2 RM_AA_OPA_TERR(2) 566 #define G_RM_AA_TEX_TERR RM_AA_TEX_TERR(1) 567 #define G_RM_AA_TEX_TERR2 RM_AA_TEX_TERR(2) 568 #define G_RM_AA_SUB_TERR RM_AA_SUB_TERR(1) 569 #define G_RM_AA_SUB_TERR2 RM_AA_SUB_TERR(2) 571 #define G_RM_RA_OPA_SURF RM_RA_OPA_SURF(1) 572 #define G_RM_RA_OPA_SURF2 RM_RA_OPA_SURF(2) 574 #define G_RM_ZB_OPA_SURF RM_ZB_OPA_SURF(1) 575 #define G_RM_ZB_OPA_SURF2 RM_ZB_OPA_SURF(2) 576 #define G_RM_ZB_XLU_SURF RM_ZB_XLU_SURF(1) 577 #define G_RM_ZB_XLU_SURF2 RM_ZB_XLU_SURF(2) 578 #define G_RM_ZB_OPA_DECAL RM_ZB_OPA_DECAL(1) 579 #define G_RM_ZB_OPA_DECAL2 RM_ZB_OPA_DECAL(2) 580 #define G_RM_ZB_XLU_DECAL RM_ZB_XLU_DECAL(1) 581 #define G_RM_ZB_XLU_DECAL2 RM_ZB_XLU_DECAL(2) 582 #define G_RM_ZB_CLD_SURF RM_ZB_CLD_SURF(1) 583 #define G_RM_ZB_CLD_SURF2 RM_ZB_CLD_SURF(2) 584 #define G_RM_ZB_OVL_SURF RM_ZB_OVL_SURF(1) 585 #define G_RM_ZB_OVL_SURF2 RM_ZB_OVL_SURF(2) 586 #define G_RM_ZB_PCL_SURF RM_ZB_PCL_SURF(1) 587 #define G_RM_ZB_PCL_SURF2 RM_ZB_PCL_SURF(2) 589 #define G_RM_OPA_SURF RM_OPA_SURF(1) 590 #define G_RM_OPA_SURF2 RM_OPA_SURF(2) 591 #define G_RM_XLU_SURF RM_XLU_SURF(1) 592 #define G_RM_XLU_SURF2 RM_XLU_SURF(2) 593 #define G_RM_CLD_SURF RM_CLD_SURF(1) 594 #define G_RM_CLD_SURF2 RM_CLD_SURF(2) 595 #define G_RM_TEX_EDGE RM_TEX_EDGE(1) 596 #define G_RM_TEX_EDGE2 RM_TEX_EDGE(2) 597 #define G_RM_PCL_SURF RM_PCL_SURF(1) 598 #define G_RM_PCL_SURF2 RM_PCL_SURF(2) 599 #define G_RM_ADD RM_ADD(1) 600 #define G_RM_ADD2 RM_ADD(2) 601 #define G_RM_NOOP RM_NOOP(1) 602 #define G_RM_NOOP2 RM_NOOP(2) 603 #define G_RM_VISCVG RM_VISCVG(1) 604 #define G_RM_VISCVG2 RM_VISCVG(2) 605 #define G_RM_OPA_CI RM_OPA_CI(1) 606 #define G_RM_OPA_CI2 RM_OPA_CI(2) 609 #define G_RM_FOG_SHADE_A GBL_c1(G_BL_CLR_FOG, G_BL_A_SHADE, G_BL_CLR_IN, G_BL_1MA) 610 #define G_RM_FOG_PRIM_A GBL_c1(G_BL_CLR_FOG, G_BL_A_FOG, G_BL_CLR_IN, G_BL_1MA) 611 #define G_RM_PASS GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) 613 #define G_MWO_NUMLIGHT 0x00 614 #define G_MW_NUMLIGHT 0x02 615 #define NUML(n) (((n)+1)*32 + 0x80000000) 616 #define G_MW_PERSPNORM 0x0e 619 #define MAX(a, b) ((a) > (b) ? (a) : (b)) 623 #define MIN(a, b) ((a) < (b) ? (a) : (b)) 628 #define gDma1p(pkt, c, s, l, p) \ 630 Gfx *_g = (Gfx *)(pkt); \ 631 _g->words.w0 = (_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | \ 632 _SHIFTL((l), 0, 16)); \ 633 _g->words.w1 = (unsigned int)(s); \ 636 #define gsDma1p(c, s, l, p) \ 638 _g->words.w0 = (_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | \ 639 _SHIFTL((l), 0, 16)); \ 640 _g->words.w1 = (unsigned int)(s); \ 645 #define gSPMatrix(pkt, m, p) \ 647 Gfx *_g = (Gfx *)(pkt); \ 648 _g->words.w0 = _SHIFTL(G_MTX, 24, 8) \ 649 | _SHIFTL((p), 16, 8) \ 650 | _SHIFTL(sizeof(Mtx), 0, 16); \ 651 _g->words.w1 = (u32)(m); \ 654 #define gsSPMatrix(m, p) \ 656 _g->words.w0 = _SHIFTL(G_MTX, 24, 8) \ 657 | _SHIFTL((p), 16, 8) \ 658 | _SHIFTL(sizeof(Mtx), 0, 16); \ 659 _g->words.w1 = (u32)(m); \ 666 #define gSPVertex(pkt, v, n, v0) \ 668 Gfx *_g = (Gfx *)(pkt); \ 669 _g->words.w0 = _SHIFTL(G_VTX, 24, 8) \ 670 | _SHIFTL(((n)-1) << 4 | (v0), 16, 8) \ 671 | _SHIFTL(sizeof(Vtx)*(n), 0, 16); \ 672 _g->words.w1 = (u32)(v); \ 675 #define gsSPVertex(v, n, v0) \ 677 _g->words.w0 = _SHIFTL(G_VTX, 24, 8) \ 678 | _SHIFTL(((n)-1) << 4 | (v0), 16, 8) \ 679 | _SHIFTL(sizeof(Vtx)*(n), 0, 16); \ 680 _g->words.w1 = (u32)(v); \ 684 #define gSPVertex(pkt, v, n, v0) \ 686 Gfx *_g = (Gfx *)(pkt); \ 687 _g->words.w0 = _SHIFTL(G_VTX, 24, 8) \ 688 | _SHIFTL(((v0)*2), 16, 8) \ 689 | _SHIFTL((n << 10) | ((sizeof(Vtx)*(n))-1), 0, 16); \ 690 _g->words.w1 = (u32)(v); \ 693 #define gsSPVertex(v, n, v0) \ 695 _g->words.w0 = _SHIFTL(G_VTX, 24, 8) \ 696 | _SHIFTL(((v0)*2), 16, 8) \ 697 | _SHIFTL((n << 10) | ((sizeof(Vtx)*(n))-1), 0, 16); \ 698 _g->words.w1 = (u32)(v); \ 704 #define gDPLoadSync(pkt) \ 706 Gfx *_g = (Gfx *) (pkt); \ 707 _g->words.w0 = _SHIFTL(G_RDPLOADSYNC, 24, 8); \ 708 _g->words.w1 = 0x00000000; \ 711 #define gsDPLoadSync() \ 713 _g->words.w0 = _SHIFTL(G_RDPLOADSYNC, 24, 8); \ 714 _g->words.w1 = 0x00000000; \ 719 #define gDPPipeSync(pkt) \ 721 Gfx *_g = (Gfx *) (pkt); \ 722 _g->words.w0 = _SHIFTL(G_RDPPIPESYNC, 24, 8); \ 723 _g->words.w1 = 0x00000000; \ 726 #define gsDPPipeSync() \ 728 _g->words.w0 = _SHIFTL(G_RDPPIPESYNC, 24, 8); \ 729 _g->words.w1 = 0x00000000; \ 734 #define gDPTileSync(pkt) \ 736 Gfx *_g = (Gfx *) (pkt); \ 737 _g->words.w0 = _SHIFTL(G_RDPTILESYNC, 24, 8); \ 738 _g->words.w1 = 0x00000000; \ 741 #define gsDPTileSync() \ 743 _g->words.w0 = _SHIFTL(G_RDPTILESYNC, 24, 8); \ 744 _g->words.w1 = 0x00000000; \ 749 #define gDPFullSync(pkt) \ 751 Gfx *_g = (Gfx *) (pkt); \ 752 _g->words.w0 = _SHIFTL(G_RDPFULLSYNC, 24, 8); \ 753 _g->words.w1 = 0x00000000; \ 756 #define gsDPFullSync() \ 758 _g->words.w0 = _SHIFTL(G_RDPFULLSYNC, 24, 8); \ 759 _g->words.w1 = 0x00000000; \ 764 #define gSPDisplayList(pkt, dl) \ 766 Gfx *_g = (Gfx *) (pkt); \ 767 _g->words.w0 = _SHIFTL(G_DL, 24, 8); \ 768 _g->words.w1 = (u32)(dl); \ 771 #define gsSPDisplayList(dl) \ 773 _g->words.w0 = _SHIFTL(G_DL, 24, 8); \ 774 _g->words.w1 = (u32)(dl); \ 779 #define gSPBranchList(pkt,dl) \ 780 gDma1p(pkt, G_DL, dl, 0, G_DL_NOPUSH) 782 #define gsSPBranchList(pkt,dl) \ 783 gsDma1p(G_DL, dl, 0, G_DL_NOPUSH) 787 #define gSPEndDisplayList(pkt) \ 789 Gfx *_g = (Gfx *) (pkt); \ 790 _g->words.w0 = _SHIFTL(G_ENDDL, 24, 8); \ 791 _g->words.w1 = 0x00000000; \ 794 #define gsSPEndDisplayList() \ 796 _g->words.w0 = _SHIFTL(G_ENDDL, 24, 8); \ 797 _g->words.w1 = 0x00000000; \ 802 #define gSPSetOtherMode(pkt, cmd, shift, length, data) \ 804 Gfx *_g = (Gfx *) (pkt); \ 805 _g->words.w0 = _SHIFTL((cmd), 24, 8) \ 806 | _SHIFTL((shift), 8, 8) \ 807 | _SHIFTL(((length)-1), 0, 8); \ 808 _g->words.w1 = (data); \ 811 #define gsSPSetOtherMode(cmd, shift, length, data) \ 813 _g->words.w0 = _SHIFTL((cmd), 24, 8) \ 814 | _SHIFTL((shift), 8, 8) \ 815 | _SHIFTL(((length)-1), 0, 8); \ 816 _g->words.w1 = (data); \ 821 #define gDPSetCycleType(pkt, type) \ 822 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_CYCLETYPE, 3, type) 824 #define gsDPSetCycleType(pkt, type) \ 825 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_CYCLETYPE, 3, type) 829 #define gDPPipelineMode(pkt, mode) \ 830 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, 0x17, 2, mode) 832 #define gsDPPipelineMode(mode) \ 833 gsSPSetOtherMode(G_SETOTHERMODE_H, 0x17, 2, mode) 837 #define gDPSetScissor(pkt, mode, ulx, uly, lrx, lry) \ 839 Gfx *_g = (Gfx *)(pkt); \ 840 _g->words.w0 = _SHIFTL(G_SETSCISSOR, 24, 8) \ 841 | _SHIFTL((int)((float)(ulx)*4.0f), 12, 12) \ 842 | _SHIFTL((int)((float)(uly)*4.0f), 0, 12); \ 843 _g->words.w1 = _SHIFTL((mode), 24, 8) \ 844 | _SHIFTL((int)((float)(lrx)*4.0f), 12, 12) \ 845 | _SHIFTL((int)((float)(lry)*4.0f), 0, 12); \ 848 #define gsDPSetScissor(mode, ulx, uly, lrx, lry) \ 850 _g->words.w0 = _SHIFTL(G_SETSCISSOR, 24, 8) \ 851 | _SHIFTL((int)((float)(ulx)*4.0f), 12, 12) \ 852 | _SHIFTL((int)((float)(uly)*4.0f), 0, 12); \ 853 _g->words.w1 = _SHIFTL((mode), 24, 8) \ 854 | _SHIFTL((int)((float)(lrx)*4.0f), 12, 12) \ 855 | _SHIFTL((int)((float)(lry)*4.0f), 0, 12); \ 860 #define gDPSetCombine(pkt, muxs0, muxs1) \ 862 Gfx *_g = (Gfx *)(pkt); \ 863 _g->words.w0 = _SHIFTL(G_SETCOMBINE, 24, 8) \ 864 | _SHIFTL((muxs0), 0, 24); \ 865 _g->words.w1 = (muxs1); \ 868 #define gsDPSetCombine(muxs0, muxs1) \ 870 _g->words.w0 = _SHIFTL(G_SETCOMBINE, 24, 8) \ 871 | _SHIFTL((muxs0), 0, 24); \ 872 _g->words.w1 = (muxs1); \ 877 #define gDPSetTextureLOD(pkt, type) \ 878 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTLOD, 2, type) 880 #define gsDPSetTextureLOD(type) \ 881 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTLOD, 2, type) 885 #define gDPSetTextureLUT(pkt, type) \ 886 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTLUT, 3, type) 888 #define gsDPSetTextureLUT(type) \ 889 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTLUT, 3, type) 893 #define gDPSetTextureDetail(pkt, type) \ 894 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTDETAIL, 3, type) 896 #define gsDPSetTextureDetail(type) \ 897 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTDETAIL, 3, type) 901 #define gDPSetTexturePersp(pkt, type) \ 902 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTPERSP, 2, type) 904 #define gsDPSetTexturePersp(type) \ 905 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTPERSP, 2, type) 909 #define gDPSetTextureFilter(pkt, type) \ 910 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTFILT, 3, type) 912 #define gsDPSetTextureFilter(type) \ 913 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTFILT, 3, type) 917 #define gDPSetTextureConvert(pkt, type) \ 918 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTCONV, 4, type) 920 #define gsDPSetTextureConvert(type) \ 921 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTCONV, 4, type) 925 #define gDPSetCombineKey(pkt, type) \ 926 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_COMBKEY, 2, type) 928 #define gsDPSetCombineKey(type) \ 929 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_COMBKEY, 2, type) 933 #define gDPSetColorDither(pkt, mode) \ 934 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_RGBDITHER, 3, mode) 936 #define gsDPSetColorDither(mode) \ 937 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_RGBDITHER, 3, mode) 941 #define gDPSetFillColor(pkt, color) \ 943 Gfx *_g = (Gfx *) (pkt); \ 944 _g->words.w0 = _SHIFTL(G_SETFILLCOLOR, 24, 8); \ 945 _g->words.w1 = color; \ 948 #define gsDPSetFillColor(color) \ 950 _g->words.w0 = _SHIFTL(G_SETFILLCOLOR, 24, 8); \ 951 _g->words.w1 = color; \ 956 #define gDPFillRectangle(pkt, ulx, uly, lrx, lry) \ 958 Gfx *_g = (Gfx *)(pkt); \ 959 _g->words.w0 = _SHIFTL(G_FILLRECT, 24, 8) \ 960 | _SHIFTL((lrx), 14, 10) \ 961 | _SHIFTL((lry), 2, 10); \ 962 _g->words.w1 = _SHIFTL(0, 24, 8) \ 963 | _SHIFTL((ulx), 14, 10) \ 964 | _SHIFTL((uly), 2, 10); \ 967 #define gsDPFillRectangle(ulx, uly, lrx, lry) \ 969 _g->words.w0 = _SHIFTL(G_FILLRECT, 24, 8) \ 970 | _SHIFTL((lrx), 14, 10) \ 971 | _SHIFTL((lry), 2, 10); \ 972 _g->words.w1 = _SHIFTL(0, 24, 8) \ 973 | _SHIFTL((ulx), 14, 10) \ 974 | _SHIFTL((uly), 2, 10); \ 979 #define gDPSetAlphaCompare(pkt, type) \ 980 gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, type) 982 #define gsDPSetAlphaCompare(type) \ 983 gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 3, type) 987 #define gDPSetDepthSource(pkt, src) \ 988 gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_ZSRCSEL, 2, src) 990 #define gsDPSetDepthSource(src) \ 991 gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ZSRCSEL, 2, src) 995 #define gDPSetRenderMode(pkt, c0, c1) \ 996 gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_RENDERMODE, 30, (c0) | (c1)) 998 #define gsDPSetRenderMode(c0, c1) \ 999 gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_RENDERMODE, 30, (c0) | (c1)) 1003 #define gSPClearGeometryMode(pkt, mode) \ 1005 Gfx *_g = (Gfx *) (pkt); \ 1006 _g->words.w0 = _SHIFTL(G_CLEARGEOMETRYMODE, 24, 8); \ 1007 _g->words.w1 = mode; \ 1010 #define gsSPClearGeometryMode(pkt, mode) \ 1012 _g->words.w0 = _SHIFTL(G_CLEARGEOMETRYMODE, 24, 8); \ 1013 _g->words.w1 = mode; \ 1018 #define gSPSetGeometryMode(pkt, word) \ 1020 Gfx *_g = (Gfx *) (pkt); \ 1021 _g->words.w0 = _SHIFTL(G_SETGEOMETRYMODE, 24, 8); \ 1022 _g->words.w1 = word; \ 1025 #define gsSPSetGeometryMode(word) \ 1027 _g->words.w0 = _SHIFTL(G_SETGEOMETRYMODE, 24, 8); \ 1028 _g->words.w1 = word; \ 1033 #define gSPNumLights(pkt, n) \ 1034 gMoveWd(pkt, G_MW_NUMLIGHT, G_MWO_NUMLIGHT, NUML(n)) 1036 #define gsSPNumLights(n) \ 1037 gsMoveWd(G_MW_NUMLIGHT, G_MWO_NUMLIGHT, NUML(n)) 1041 #define gSPTexture(pkt, sc, tc, level, tile, on) \ 1043 Gfx *_g = (Gfx *)(pkt); \ 1044 _g->words.w0 = _SHIFTL(G_TEXTURE, 24, 8) \ 1045 | _SHIFTL(0, 16, 8) \ 1046 | _SHIFTL((level), 11, 3) \ 1047 | _SHIFTL((tile), 8, 3) \ 1048 | _SHIFTL((on), 0, 8); \ 1049 _g->words.w1 = _SHIFTL((sc), 16, 16) \ 1050 | _SHIFTL((tc), 0, 16); \ 1053 #define gsSPTexture(sc, tc, level, tile, on) \ 1055 _g->words.w0 = _SHIFTL(G_TEXTURE, 24, 8) \ 1056 | _SHIFTL(0, 16, 8) \ 1057 | _SHIFTL((level), 11, 3) \ 1058 | _SHIFTL((tile), 8, 3) \ 1059 | _SHIFTL((on), 0, 8); \ 1060 _g->words.w1 = _SHIFTL((sc), 16, 16) \ 1061 | _SHIFTL((tc), 0, 16); \ 1066 #define gDPSetColorImage(pkt, fmt, size, width, image) \ 1068 Gfx *_g = (Gfx *)(pkt); \ 1069 _g->words.w0 = _SHIFTL(G_SETCIMG, 24, 8) \ 1070 | _SHIFTL((fmt), 21, 3) \ 1071 | _SHIFTL((size), 19, 2) \ 1072 | _SHIFTL((width)-1, 0, 12); \ 1073 _g->words.w1 = (image); \ 1076 #define gsDPSetColorImage(fmt, size, width, image) \ 1078 _g->words.w0 = _SHIFTL(G_SETCIMG, 24, 8) \ 1079 | _SHIFTL((fmt), 21, 3) \ 1080 | _SHIFTL((size), 19, 2) \ 1081 | _SHIFTL((width)-1, 0, 12); \ 1082 _g->words.w1 = (image); \ 1087 #define gDPSetTileSize(pkt, tile, uls, ult, lrs, lrt) \ 1089 Gfx *_g = (Gfx *)(pkt); \ 1090 _g->words.w0 = _SHIFTL(G_SETTILESIZE, 24, 8) \ 1091 | _SHIFTL(uls, 12, 12) \ 1092 | _SHIFTL(ult, 0, 12); \ 1093 _g->words.w1 = _SHIFTL(tile, 24, 3) \ 1094 | _SHIFTL(lrs, 12, 12) \ 1095 | _SHIFTL(lrt, 0, 12); \ 1098 #define gsDPSetTileSize(tile, uls, ult, lrs, lrt) \ 1100 _g->words.w0 = _SHIFTL(G_SETTILESIZE, 24, 8) \ 1101 | _SHIFTL(uls, 12, 12) \ 1102 | _SHIFTL(ult, 0, 12); \ 1103 _g->words.w1 = _SHIFTL(tile, 24, 3) \ 1104 | _SHIFTL(lrs, 12, 12) \ 1105 | _SHIFTL(lrt, 0, 12); \ 1110 #define gDPLoadBlock(pkt, tile, uls, ult, lrs, dxt) \ 1112 Gfx *_g = (Gfx *)(pkt); \ 1113 _g->words.w0 = _SHIFTL(G_LOADBLOCK, 24, 8) \ 1114 | _SHIFTL((uls), 12, 12) \ 1115 | _SHIFTL((ult), 0, 12); \ 1116 _g->words.w1 = _SHIFTL((tile), 24, 3) \ 1117 | _SHIFTL((MIN((lrs),G_TX_LDBLK_MAX_TXL)), 12, 12) \ 1118 | _SHIFTL((dxt), 0, 12); \ 1121 #define gsDPLoadBlock(tile, uls, ult, lrs, dxt) \ 1123 _g->words.w0 = _SHIFTL(G_LOADBLOCK, 24, 8) \ 1124 | _SHIFTL((uls), 12, 12) \ 1125 | _SHIFTL((ult), 0, 12); \ 1126 _g->words.w1 = _SHIFTL((tile), 24, 3) \ 1127 | _SHIFTL((MIN((lrs),G_TX_LDBLK_MAX_TXL)), 12, 12) \ 1128 | _SHIFTL((dxt), 0, 12); \ 1133 #define gDPSetTile(pkt, fmt, siz, line, tmem, tile, \ 1134 palette, cmt, maskt, shiftt, cms, masks, shifts) \ 1136 Gfx *_g = (Gfx *)(pkt); \ 1137 _g->words.w0 = _SHIFTL(G_SETTILE, 24, 8) \ 1138 | _SHIFTL((fmt), 21, 3) \ 1139 | _SHIFTL((siz), 19, 2) \ 1140 | _SHIFTL((line), 9, 9) \ 1141 | _SHIFTL((tmem), 0, 9); \ 1142 _g->words.w1 = _SHIFTL((tile), 24, 3) \ 1143 | _SHIFTL((palette), 20, 4) \ 1144 | _SHIFTL((cmt), 18, 2) \ 1145 | _SHIFTL((maskt), 14, 4) \ 1146 | _SHIFTL((shiftt), 10, 4) \ 1147 | _SHIFTL((cms), 8, 2) \ 1148 | _SHIFTL((masks), 4, 4) \ 1149 | _SHIFTL((shifts), 0, 4); \ 1152 #define gsDPSetTile(fmt, siz, line, tmem, tile, \ 1153 palette, cmt, maskt, shiftt, cms, masks, shifts) \ 1155 _g->words.w0 = _SHIFTL(G_SETTILE, 24, 8) \ 1156 | _SHIFTL((fmt), 21, 3) \ 1157 | _SHIFTL((siz), 19, 2) \ 1158 | _SHIFTL((line), 9, 9) \ 1159 | _SHIFTL((tmem), 0, 9); \ 1160 _g->words.w1 = _SHIFTL((tile), 24, 3) \ 1161 | _SHIFTL((palette), 20, 4) \ 1162 | _SHIFTL((cmt), 18, 2) \ 1163 | _SHIFTL((maskt), 14, 4) \ 1164 | _SHIFTL((shiftt), 10, 4) \ 1165 | _SHIFTL((cms), 8, 2) \ 1166 | _SHIFTL((masks), 4, 4) \ 1167 | _SHIFTL((shifts), 0, 4); \ 1172 #define gDPSetDepthImage(pkt, image) \ 1174 Gfx *_g = (Gfx *)(pkt); \ 1175 _g->words.w0 = _SHIFTL(G_SETZIMG, 24, 8); \ 1176 _g->words.w1 = (image); \ 1179 #define gsDPSetDepthImage(image) \ 1181 _g->words.w0 = _SHIFTL(G_SETZIMG, 24, 8); \ 1182 _g->words.w1 = (image); \ 1187 #define gDPSetPrimColor(pkt, m, l, r, g, b, a) \ 1189 Gfx *_g = (Gfx *)(pkt); \ 1190 _g->words.w0 = _SHIFTL(G_SETPRIMCOLOR, 24, 8) \ 1191 | _SHIFTL(m, 8, 8) \ 1192 | _SHIFTL(l, 0, 8); \ 1193 _g->words.w1 = _SHIFTL(r, 24, 8) \ 1194 | _SHIFTL(g, 16, 8) \ 1195 | _SHIFTL(b, 8, 8) \ 1196 | _SHIFTL(a, 0, 8); \ 1199 #define gsDPSetPrimColor(m, l, r, g, b, a) \ 1201 _g->words.w0 = _SHIFTL(G_SETPRIMCOLOR, 24, 8) \ 1202 | _SHIFTL(m, 8, 8) \ 1203 | _SHIFTL(l, 0, 8); \ 1204 _g->words.w1 = _SHIFTL(r, 24, 8) \ 1205 | _SHIFTL(g, 16, 8) \ 1206 | _SHIFTL(b, 8, 8) \ 1207 | _SHIFTL(a, 0, 8); \ 1212 #define gDPSetEnvColor(pkt, r, g, b, a) \ 1214 Gfx *_g = (Gfx *)(pkt); \ 1215 _g->words.w0 = _SHIFTL(G_SETENVCOLOR, 24, 8); \ 1216 _g->words.w1 = _SHIFTL((r), 24, 8) \ 1217 | _SHIFTL((g), 16, 8) \ 1218 | _SHIFTL((b), 8, 8) \ 1219 | _SHIFTL((a), 0, 8); \ 1222 #define gsDPSetEnvColor(r, g, b, a) \ 1224 _g->words.w0 = _SHIFTL(G_SETENVCOLOR, 24, 8); \ 1225 _g->words.w1 = _SHIFTL((r), 24, 8) \ 1226 | _SHIFTL((g), 16, 8) \ 1227 | _SHIFTL((b), 8, 8) \ 1228 | _SHIFTL((a), 0, 8); \ 1233 #define gDPSetTextureImage(pkt, fmt, size, width, img) \ 1235 Gfx *_g = (Gfx *)(pkt); \ 1236 _g->words.w0 = _SHIFTL(G_SETTIMG, 24, 8) \ 1237 | _SHIFTL((fmt), 21, 3) \ 1238 | _SHIFTL((size), 19, 2) \ 1239 | _SHIFTL((width)-1, 0, 12); \ 1240 _g->words.w1 = (u32)(img); \ 1243 #define gsDPSetTextureImage(fmt, size, width, img) \ 1245 _g->words.w0 = _SHIFTL(G_SETTIMG, 24, 8) \ 1246 | _SHIFTL((fmt), 21, 3) \ 1247 | _SHIFTL((size), 19, 2) \ 1248 | _SHIFTL((width)-1, 0, 12); \ 1249 _g->words.w1 = (u32)(img); \ 1254 #define gMoveWd(pkt, index, offset, data) \ 1256 Gfx *_g = (Gfx *)(pkt); \ 1257 _g->words.w0 = _SHIFTL(G_MOVEWORD, 24, 8) \ 1258 | _SHIFTL((offset), 8, 16) \ 1259 | _SHIFTL((index), 0, 8); \ 1260 _g->words.w1 = (u32)(data); \ 1263 #define gsMoveWd(index, offset, data) \ 1265 _g->words.w0 = _SHIFTL(G_MOVEWORD, 24, 8) \ 1266 | _SHIFTL((offset), 8, 16) \ 1267 | _SHIFTL((index), 0, 8); \ 1268 _g->words.w1 = (u32)(data); \ 1273 #define G_MTX_MODELVIEW 0x00 1274 #define G_MTX_PROJECTION 0x01 1275 #define G_MTX_MUL 0x00 1276 #define G_MTX_LOAD 0x02 1277 #define G_MTX_NOPUSH 0x00 1278 #define G_MTX_PUSH 0x04 1282 #define gSPPopMatrix(pkt, n) \ 1284 Gfx *_g = (Gfx *) (pkt); \ 1285 _g->words.w0 = 0xBD000000; \ 1286 _g->words.w1 = (n); \ 1289 #define gsSPPopMatrix(pkt, n) \ 1291 _g->words.w0 = 0xBD000000; \ 1292 _g->words.w1 = (n); \ 1297 #define gSPViewport(pkt, v) \ 1299 Gfx *_g = (Gfx *)(pkt); \ 1300 _g->words.w0 = _SHIFTL(G_MOVEMEM, 24, 8) \ 1301 | _SHIFTL(G_MV_VIEWPORT, 16, 8) \ 1302 | _SHIFTL(sizeof(Vp), 0, 16); \ 1303 _g->words.w1 = (u32)(v); \ 1306 #define gsSPViewport(v) \ 1308 _g->words.w0 = _SHIFTL(G_MOVEMEM, 24, 8) \ 1309 | _SHIFTL(G_MV_VIEWPORT, 16, 8) \ 1310 | _SHIFTL(sizeof(Vp), 0, 16); \ 1311 _g->words.w1 = (u32)(v); \ 1318 #define gSP1Triangle(pkt, v0, v1, v2, flag) \ 1320 Gfx *_g = (Gfx *)(pkt); \ 1321 _g->words.w0 = _SHIFTL(G_TRI1, 24, 8); \ 1322 _g->words.w1 = _SHIFTL((flag), 24, 8) \ 1323 | _SHIFTL((v0)*10, 16, 8) \ 1324 | _SHIFTL((v1)*10, 8, 8) \ 1325 | _SHIFTL((v2)*10, 0, 8); \ 1328 #define gsSP1Triangle(v0, v1, v2, flag) \ 1330 _g->words.w0 = _SHIFTL(G_TRI1, 24, 8); \ 1331 _g->words.w1 = _SHIFTL((flag), 24, 8) \ 1332 | _SHIFTL((v0)*10, 16, 8) \ 1333 | _SHIFTL((v1)*10, 8, 8) \ 1334 | _SHIFTL((v2)*10, 0, 8); \ 1338 #define gSP1Triangle(pkt, v0, v1, v2, flag) \ 1340 Gfx *_g = (Gfx *)(pkt); \ 1341 _g->words.w0 = _SHIFTL(G_TRI1, 24, 8); \ 1342 _g->words.w1 = _SHIFTL((flag), 24, 8) \ 1343 | _SHIFTL((v0)*2, 16, 8) \ 1344 | _SHIFTL((v1)*2, 8, 8) \ 1345 | _SHIFTL((v2)*2, 0, 8); \ 1348 #define gsSP1Triangle(v0, v1, v2, flag) \ 1350 _g->words.w0 = _SHIFTL(G_TRI1, 24, 8); \ 1351 _g->words.w1 = _SHIFTL((flag), 24, 8) \ 1352 | _SHIFTL((v0)*2, 16, 8) \ 1353 | _SHIFTL((v1)*2, 8, 8) \ 1354 | _SHIFTL((v2)*2, 0, 8); \ 1363 #define gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ 1365 Gfx *_g = (Gfx *)(pkt); \ 1366 _g->words.w0 = _SHIFTL(G_TEXRECT, 24, 8) \ 1367 | _SHIFTL((xh), 12, 12) \ 1368 | _SHIFTL((yh), 0, 12); \ 1369 _g->words.w1 = _SHIFTL((tile), 24, 3) \ 1370 | _SHIFTL((xl), 12, 12) \ 1371 | _SHIFTL((yl), 0, 12); \ 1374 Gfx *_g = (Gfx *)(pkt); \ 1375 _g->words.w0 = _SHIFTL(G_RDPHALF_2, 24, 8); \ 1376 _g->words.w1 = _SHIFTL((s), 16, 16) \ 1377 | _SHIFTL((t), 0, 16); \ 1380 Gfx *_g = (Gfx *)(pkt); \ 1381 _g->words.w0 = _SHIFTL(G_RDPHALF_CONT, 24, 8); \ 1382 _g->words.w1 = _SHIFTL((dsdx), 16, 16) \ 1383 | _SHIFTL((dtdy), 0, 16); \ 1386 #define gsSPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ 1388 _g->words.w0 = _SHIFTL(G_TEXRECT, 24, 8) \ 1389 | _SHIFTL((xh), 12, 12) \ 1390 | _SHIFTL((yh), 0, 12); \ 1391 _g->words.w1 = _SHIFTL((tile), 24, 3) \ 1392 | _SHIFTL((xl), 12, 12) \ 1393 | _SHIFTL((yl), 0, 12); \ 1396 _g->words.w0 = _SHIFTL(G_RDPHALF_2, 24, 8); \ 1397 _g->words.w1 = _SHIFTL((s), 16, 16) \ 1398 | _SHIFTL((t), 0, 16); \ 1401 _g->words.w0 = _SHIFTL(G_RDPHALF_CONT, 24, 8); \ 1402 _g->words.w1 = _SHIFTL((dsdx), 16, 16) \ 1403 | _SHIFTL((dtdy), 0, 16); \ 1407 #define gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ 1409 Gfx *_g = (Gfx *)(pkt); \ 1410 _g->words.w0 = _SHIFTL(G_TEXRECT, 24, 8) \ 1411 | _SHIFTL((xh), 12, 12) \ 1412 | _SHIFTL((yh), 0, 12); \ 1413 _g->words.w1 = _SHIFTL((tile), 24, 3) \ 1414 | _SHIFTL((xl), 12, 12) \ 1415 | _SHIFTL((yl), 0, 12); \ 1418 Gfx *_g = (Gfx *)(pkt); \ 1419 _g->words.w0 = _SHIFTL(G_RDPHALF_1, 24, 8); \ 1420 _g->words.w1 = _SHIFTL((s), 16, 16) \ 1421 | _SHIFTL((t), 0, 16); \ 1424 Gfx *_g = (Gfx *)(pkt); \ 1425 _g->words.w0 = _SHIFTL(G_RDPHALF_2, 24, 8); \ 1426 _g->words.w1 = _SHIFTL((dsdx), 16, 16) \ 1427 | _SHIFTL((dtdy), 0, 16); \ 1430 #define gsSPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ 1432 _g->words.w0 = _SHIFTL(G_TEXRECT, 24, 8) \ 1433 | _SHIFTL((xh), 12, 12) \ 1434 | _SHIFTL((yh), 0, 12); \ 1435 _g->words.w1 = _SHIFTL((tile), 24, 3) \ 1436 | _SHIFTL((xl), 12, 12) \ 1437 | _SHIFTL((yl), 0, 12); \ 1440 _g->words.w0 = _SHIFTL(G_RDPHALF_1, 24, 8); \ 1441 _g->words.w1 = _SHIFTL((s), 16, 16) \ 1442 | _SHIFTL((t), 0, 16); \ 1445 _g->words.w0 = _SHIFTL(G_RDPHALF_2, 24, 8); \ 1446 _g->words.w1 = _SHIFTL((dsdx), 16, 16) \ 1447 | _SHIFTL((dtdy), 0, 16); \ 1454 unsigned char col[3];
1456 unsigned char colc[3];
1463 unsigned char col[3];
1465 unsigned char colc[3];
1471 long long int force_structure_alignment[1];
1476 long long int force_structure_alignment[2];
1494 long int force_alignmnet[4];
1498 #define NUMLIGHTS_0 1 1499 #define NUMLIGHTS_1 1 1500 #define NUMLIGHTS_2 2 1501 #define NUMLIGHTS_3 3 1502 #define NUMLIGHTS_4 4 1503 #define NUMLIGHTS_5 5 1504 #define NUMLIGHTS_6 6 1505 #define NUMLIGHTS_7 7 1519 #define gSPLight(pkt, l, n) \ 1521 Gfx *_g = (Gfx *)(pkt); \ 1522 _g->words.w0 = _SHIFTL(G_MOVEMEM, 24, 8) \ 1523 | _SHIFTL(((n)-1)*2+G_MV_L0, 16, 8) \ 1524 | _SHIFTL(sizeof(Light), 0, 16); \ 1525 _g->words.w1 = (u32)(l); \ 1528 #define gsSPLight(l, n) \ 1530 _g->words.w0 = _SHIFTL(G_MOVEMEM, 24, 8) \ 1531 | _SHIFTL(((n)-1)*2+G_MV_L0, 16, 8) \ 1532 | _SHIFTL(sizeof(Light), 0, 16); \ 1533 _g->words.w1 = (u32)(l); \ 1538 #define gSPLookAtX(pkt, la) \ 1540 Gfx *_g = (Gfx *)(pkt); \ 1541 _g->words.w0 = _SHIFTL(G_MOVEMEM, 24, 8) \ 1542 | _SHIFTL(G_MV_LOOKATX, 16, 8) \ 1543 | _SHIFTL(sizeof(Light), 0, 16); \ 1544 _g->words.w1 = (u32)(la); \ 1547 #define gsSPLookAtX(la) \ 1549 _g->words.w0 = _SHIFTL(G_MOVEMEM, 24, 8) \ 1550 | _SHIFTL(G_MV_LOOKATX, 16, 8) \ 1551 | _SHIFTL(sizeof(Light), 0, 16); \ 1552 _g->words.w1 = (u32)(la); \ 1557 #define gSPLookAtY(pkt, la) \ 1559 Gfx *_g = (Gfx *)(pkt); \ 1560 _g->words.w0 = _SHIFTL(G_MOVEMEM, 24, 8) \ 1561 | _SHIFTL(G_MV_LOOKATY, 16, 8) \ 1562 | _SHIFTL(sizeof(Light), 0, 16); \ 1563 _g->words.w1 = (u32)(la); \ 1566 #define gsSPLookAtY(la) \ 1568 _g->words.w0 = _SHIFTL(G_MOVEMEM, 24, 8) \ 1569 | _SHIFTL(G_MV_LOOKATY, 16, 8) \ 1570 | _SHIFTL(sizeof(Light), 0, 16); \ 1571 _g->words.w1 = (u32)(la); \ 1576 #define gSPLookAt(pkt, la) \ 1578 gSPLookAtX((pkt), (la)) \ 1579 gSPLookAtY((pkt), (char *)(la)+16) \ 1582 #define gsSPLookAt(la) \ 1585 gsSPLookAtY((char *)(la)+16) \ 1591 #define gSPPerspNormalize(pkt, s) \ 1594 g->words.w0 = _SHIFTL(G_RDPHALF_1, 24, 8); \ 1598 #define gsSPPerspNormalize(s) \ 1600 g->words.w0 = _SHIFTL(G_RDPHALF_1, 24, 8); \ 1605 #define gSPPerspNormalize(pkt, s) \ 1606 gMoveWd(pkt, G_MW_PERSPNORM, 0, (s)) 1608 #define gsSPPerspNormalize(s) \ 1609 gsMoveWd(G_MW_PERSPNORM, 0, (s)) long long int force_structure_alignment
Definition: gbi_old.h:29
Gwords words
Definition: gbi_old.h:61
Definition: gbi_old.h:1484
Vtx_tn n
Definition: gbi_old.h:28
long long int force_structure_alignment
Definition: gbi_old.h:42
Definition: gbi_old.h:1479
long int Mtx_t[4][4]
Definition: gbi_old.h:45
Definition: gbi_old.h:1469
unsigned short flag
Definition: gbi_old.h:19
Hilite_t h
Definition: gbi_old.h:1493
char pad1
Definition: gbi_old.h:1455
Ambient_t l
Definition: gbi_old.h:1470
Definition: gbi_old.h:1488
Vp_t vp
Definition: gbi_old.h:41
Light_t l
Definition: gbi_old.h:1475
unsigned short flag
Definition: gbi_old.h:10
char pad2
Definition: gbi_old.h:1466
Definition: gbi_old.h:1474
unsigned int w0
Definition: gbi_old.h:54
long long int force_structure_alignment
Definition: gbi_old.h:49
Vtx_t v
Definition: gbi_old.h:27
int y2
Definition: gbi_old.h:1489
char pad1
Definition: gbi_old.h:1464
Definition: gbi_old.h:1462
Definition: gbi_old.h:1492
unsigned char a
Definition: gbi_old.h:22
long long int force_structure_alignment
Definition: gbi_old.h:62
Mtx_t m
Definition: gbi_old.h:48
char pad2
Definition: gbi_old.h:1457
char pad3
Definition: gbi_old.h:1459
Ambient a
Definition: gbi_old.h:1480
unsigned int w1
Definition: gbi_old.h:55
Definition: gbi_old.h:1453