1 #ifndef GBI_H 2 #define GBI_H 3 4 #ifdef __cplusplus 5 extern "C" { 6 #endif 7 8 // Microcode Types 9 #define F3D 0 10 #define F3DEX 1 11 #define F3DEX2 2 12 #define L3D 3 13 #define L3DEX 4 14 #define L3DEX2 5 15 #define S2DEX 6 16 #define S2DEX2 7 17 #define F3DPD 8 18 #define F3DDKR 9 19 #define F3DWRUS 10 20 #define F3DCBFD 11 21 #define NONE 12 22 23 24 #define F3DCBFD_MV_VIEWPORT 8 25 #define F3DCBFD_MV_LIGHT 10 26 #define F3DCBFD_MV_NORMAL 14 27 28 // Fixed point conversion factors 29 #define FIXED2FLOATRECIP1 0.5f 30 #define FIXED2FLOATRECIP2 0.25f 31 #define FIXED2FLOATRECIP3 0.125f 32 #define FIXED2FLOATRECIP4 0.0625f 33 #define FIXED2FLOATRECIP5 0.03125f 34 #define FIXED2FLOATRECIP6 0.015625f 35 #define FIXED2FLOATRECIP7 0.0078125f 36 #define FIXED2FLOATRECIP8 0.00390625f 37 #define FIXED2FLOATRECIP9 0.001953125f 38 #define FIXED2FLOATRECIP10 0.0009765625f 39 #define FIXED2FLOATRECIP11 0.00048828125f 40 #define FIXED2FLOATRECIP12 0.00024414063f 41 #define FIXED2FLOATRECIP13 0.00012207031f 42 #define FIXED2FLOATRECIP14 6.1035156e-05f 43 #define FIXED2FLOATRECIP15 3.0517578e-05f 44 #define FIXED2FLOATRECIP16 1.5258789e-05f 45 46 #define _FIXED2FLOAT( v, b ) ((float)v * FIXED2FLOATRECIP##b) 47 48 /* Useful macros for decoding GBI command's parameters */ 49 #define _SHIFTL( v, s, w ) (((uint32_t)v & ((0x01 << w) - 1)) << s) 50 #define _SHIFTR( v, s, w ) (((uint32_t)v >> s) & ((0x01 << w) - 1)) 51 52 /* BG flags */ 53 #define G_BGLT_LOADBLOCK 0x0033 54 #define G_BGLT_LOADTILE 0xfff4 55 56 #define G_BG_FLAG_FLIPS 0x01 57 #define G_BG_FLAG_FLIPT 0x10 58 59 /* Sprite object render modes */ 60 #define G_OBJRM_NOTXCLAMP 0x01 61 #define G_OBJRM_XLU 0x02 /* Ignored */ 62 #define G_OBJRM_ANTIALIAS 0x04 /* Ignored */ 63 #define G_OBJRM_BILERP 0x08 64 #define G_OBJRM_SHRINKSIZE_1 0x10 65 #define G_OBJRM_SHRINKSIZE_2 0x20 66 #define G_OBJRM_WIDEN 0x40 67 68 /* Sprite texture loading types */ 69 #define G_OBJLT_TXTRBLOCK 0x00001033 70 #define G_OBJLT_TXTRTILE 0x00fc1034 71 #define G_OBJLT_TLUT 0x00000030 72 73 /* These are all the constant flags */ 74 #define G_ZBUFFER 0x00000001 /* Enables Z buffer calculations. 75 * 76 * Other Z buffer-related parameters 77 * for the framebuffer must also be 78 * set. */ 79 #define G_TEXTURE_ENABLE 0x00000002 /* Microcode use only */ 80 #define G_SHADE 0x00000004 /* Calculate vertex color. 81 * 82 * Enables calculation of 83 * the vertex color for 84 * a triangle. */ 85 86 #define G_SHADING_SMOOTH 0x00000200 /* Enables Gouraud shading. 87 * 88 * When this is not enabled, 89 * flat shading is used for the 90 * triangle based on the color 91 * of one vertex (see gSP1Triangle). 92 * */ 93 #define G_CULL_FRONT 0x00001000 /* Enables front-face culling. 94 * 95 * This does not support F3DLX.Rej 96 * but it does support F3DLX2.Rej. 97 */ 98 #define G_CULL_BACK 0x00002000 /* Enables back-face culling. */ 99 #define G_CULL_BOTH 0x00003000 /* Enables both back-face and 100 * front-face culling. 101 * 102 * This does not support F3DLX.Rej 103 * but it does support F3DLX2.Rej. */ 104 #define G_FOG 0x00010000 /* Enables generation of vertex 105 * alpha coordinate fog parameters. */ 106 #define G_LIGHTING 0x00020000 /* Enables lighting calculations. */ 107 #define G_TEXTURE_GEN 0x00040000 /* Enables automatic generation of 108 * the texture's S/T coordinates. 109 * 110 * Spherical mapping based on the 111 * normal vector is used. 112 */ 113 #define G_TEXTURE_GEN_LINEAR 0x00080000 /* Enables automatic generation of 114 * the texture's S/T coordinates. */ 115 #define G_LOD 0x00100000 116 #define G_POINT_LIGHTING 0x00400000 117 118 #define G_MV_MMTX 2 119 #define G_MV_PMTX 6 120 #define G_MV_LIGHT 10 121 #define G_MV_POINT 12 122 #define G_MV_MATRIX 14 123 #define G_MV_NORMALES 14 124 125 #define G_MVO_LOOKATX 0 126 #define G_MVO_LOOKATY 24 127 #define G_MVO_L0 48 128 #define G_MVO_L1 72 129 #define G_MVO_L2 96 130 #define G_MVO_L3 120 131 #define G_MVO_L4 144 132 #define G_MVO_L5 168 133 #define G_MVO_L6 192 134 #define G_MVO_L7 216 135 136 /* MOVEMEM indices 137 * 138 * each of these indexes an entry 139 * in a DMEM table which points to 140 * a 1-4 word block of DMEM in which 141 * to store a 1-4 word DMA. */ 142 #define F3D_MV_VIEWPORT 0x80 143 #define G_MV_LOOKATY 0x82 144 #define G_MV_LOOKATX 0x84 145 #define G_MV_L0 0x86 146 #define G_MV_L1 0x88 147 #define G_MV_L2 0x8a 148 #define G_MV_L3 0x8c 149 #define G_MV_L4 0x8e 150 #define G_MV_L5 0x90 151 #define G_MV_L6 0x92 152 #define G_MV_L7 0x94 153 #define G_MV_TXTATT 0x96 154 #define G_MV_MATRIX_1 0x9E /* NOTE: this is in moveword table */ 155 #define G_MV_MATRIX_2 0x98 156 #define G_MV_MATRIX_3 0x9A 157 #define G_MV_MATRIX_4 0x9C 158 159 /* MOVEWORD indices 160 * 161 * each of these indexes an entry 162 * in a DMEM table which points to 163 * a word in DMEM where an immediate 164 * word will be stored. */ 165 #define G_MW_MATRIX 0x00 166 #define G_MW_NUMLIGHT 0x02 167 #define G_MW_CLIP 0x04 168 #define G_MW_SEGMENT 0x06 169 #define G_MW_FOG 0x08 170 #define G_MW_LIGHTCOL 0x0A 171 #define G_MW_FORCEMTX 0x0C 172 #define G_MW_POINTS 0x0C 173 #define G_MW_PERSPNORM 0x0E 174 #define G_MV_COORDMOD 0x10 /* Conker Bad Fur Day */ 175 176 /* These are offsets from the address in the DMEM table */ 177 #define G_MWO_NUMLIGHT 0x00 178 #define G_MWO_CLIP_RNX 0x04 179 #define G_MWO_CLIP_RNY 0x0c 180 #define G_MWO_CLIP_RPX 0x14 181 #define G_MWO_CLIP_RPY 0x1c 182 #define G_MWO_SEGMENT_0 0x00 183 #define G_MWO_SEGMENT_1 0x01 184 #define G_MWO_SEGMENT_2 0x02 185 #define G_MWO_SEGMENT_3 0x03 186 #define G_MWO_SEGMENT_4 0x04 187 #define G_MWO_SEGMENT_5 0x05 188 #define G_MWO_SEGMENT_6 0x06 189 #define G_MWO_SEGMENT_7 0x07 190 #define G_MWO_SEGMENT_8 0x08 191 #define G_MWO_SEGMENT_9 0x09 192 #define G_MWO_SEGMENT_A 0x0a 193 #define G_MWO_SEGMENT_B 0x0b 194 #define G_MWO_SEGMENT_C 0x0c 195 #define G_MWO_SEGMENT_D 0x0d 196 #define G_MWO_SEGMENT_E 0x0e 197 #define G_MWO_SEGMENT_F 0x0f 198 #define G_MWO_FOG 0x00 199 200 #define F3D_MWO_aLIGHT_1 0x00 201 #define F3D_MWO_bLIGHT_1 0x04 202 #define F3D_MWO_aLIGHT_2 0x20 203 #define F3D_MWO_bLIGHT_2 0x24 204 #define F3D_MWO_aLIGHT_3 0x40 205 #define F3D_MWO_bLIGHT_3 0x44 206 #define F3D_MWO_aLIGHT_4 0x60 207 #define F3D_MWO_bLIGHT_4 0x64 208 #define F3D_MWO_aLIGHT_5 0x80 209 #define F3D_MWO_bLIGHT_5 0x84 210 #define F3D_MWO_aLIGHT_6 0xa0 211 #define F3D_MWO_bLIGHT_6 0xa4 212 #define F3D_MWO_aLIGHT_7 0xc0 213 #define F3D_MWO_bLIGHT_7 0xc4 214 #define F3D_MWO_aLIGHT_8 0xe0 215 #define F3D_MWO_bLIGHT_8 0xe4 216 217 218 #define F3DEX2_MWO_aLIGHT_1 0x00 219 #define F3DEX2_MWO_bLIGHT_1 0x04 220 #define F3DEX2_MWO_aLIGHT_2 0x18 221 #define F3DEX2_MWO_bLIGHT_2 0x1c 222 #define F3DEX2_MWO_aLIGHT_3 0x30 223 #define F3DEX2_MWO_bLIGHT_3 0x34 224 #define F3DEX2_MWO_aLIGHT_4 0x48 225 #define F3DEX2_MWO_bLIGHT_4 0x4c 226 #define F3DEX2_MWO_aLIGHT_5 0x60 227 #define F3DEX2_MWO_bLIGHT_5 0x64 228 #define F3DEX2_MWO_aLIGHT_6 0x78 229 #define F3DEX2_MWO_bLIGHT_6 0x7c 230 #define F3DEX2_MWO_aLIGHT_7 0x90 231 #define F3DEX2_MWO_bLIGHT_7 0x94 232 #define F3DEX2_MWO_aLIGHT_8 0xa8 233 #define F3DEX2_MWO_bLIGHT_8 0xac 234 235 #define F3DEX2_RDPHALF_2 0xF1 236 #define F3DEX2_SETOTHERMODE_H 0xE3 237 #define F3DEX2_SETOTHERMODE_L 0xE2 238 #define F3DEX2_RDPHALF_1 0xE1 239 #define F3DEX2_SPNOOP 0xE0 240 #define F3DEX2_ENDDL 0xDF 241 #define F3DEX2_DL 0xDE 242 #define F3DEX2_LOAD_UCODE 0xDD 243 #define F3DEX2_MOVEMEM 0xDC 244 #define F3DEX2_MOVEWORD 0xDB 245 #define F3DEX2_MTX 0xDA 246 #define F3DEX2_GEOMETRYMODE 0xD9 247 #define F3DEX2_POPMTX 0xD8 248 #define F3DEX2_TEXTURE 0xD7 249 #define F3DEX2_DMA_IO 0xD6 250 #define F3DEX2_SPECIAL_1 0xD5 251 #define F3DEX2_SPECIAL_2 0xD4 252 #define F3DEX2_SPECIAL_3 0xD3 253 254 #define F3DEX2_VTX 0x01 255 #define F3DEX2_MODIFYVTX 0x02 256 #define F3DEX2_CULLDL 0x03 257 #define F3DEX2_BRANCH_Z 0x04 258 #define F3DEX2_TRI1 0x05 259 #define F3DEX2_TRI2 0x06 260 #define F3DEX2_QUAD 0x07 261 #define F3DEX2_LINE3D 0x08 262 263 #define F3DEX2_MV_VIEWPORT 8 264 265 #define G_MWO_MATRIX_XX_XY_I 0x00 266 #define G_MWO_MATRIX_XZ_XW_I 0x04 267 #define G_MWO_MATRIX_YX_YY_I 0x08 268 #define G_MWO_MATRIX_YZ_YW_I 0x0C 269 #define G_MWO_MATRIX_ZX_ZY_I 0x10 270 #define G_MWO_MATRIX_ZZ_ZW_I 0x14 271 #define G_MWO_MATRIX_WX_WY_I 0x18 272 #define G_MWO_MATRIX_WZ_WW_I 0x1C 273 #define G_MWO_MATRIX_XX_XY_F 0x20 274 #define G_MWO_MATRIX_XZ_XW_F 0x24 275 #define G_MWO_MATRIX_YX_YY_F 0x28 276 #define G_MWO_MATRIX_YZ_YW_F 0x2C 277 #define G_MWO_MATRIX_ZX_ZY_F 0x30 278 #define G_MWO_MATRIX_ZZ_ZW_F 0x34 279 #define G_MWO_MATRIX_WX_WY_F 0x38 280 #define G_MWO_MATRIX_WZ_WW_F 0x3C 281 #define G_MWO_POINT_RGBA 0x10 282 #define G_MWO_POINT_ST 0x14 283 #define G_MWO_POINT_XYSCREEN 0x18 284 #define G_MWO_POINT_ZSCREEN 0x1C 285 286 /* Image formats */ 287 #define G_IM_FMT_RGBA 0 288 #define G_IM_FMT_YUV 1 289 #define G_IM_FMT_CI 2 290 #define G_IM_FMT_IA 3 291 #define G_IM_FMT_I 4 292 #define G_IM_FMT_CI_IA 5 /* not real */ 293 294 /* Image sizes */ 295 #define G_IM_SIZ_4b 0 296 #define G_IM_SIZ_8b 1 297 #define G_IM_SIZ_16b 2 298 #define G_IM_SIZ_32b 3 299 #define G_IM_SIZ_DD 5 300 301 #define G_TX_MIRROR 0x1 302 #define G_TX_CLAMP 0x2 303 304 #ifdef DEBUG 305 static const char *ImageFormatText[] = 306 { 307 "G_IM_FMT_RGBA", 308 "G_IM_FMT_YUV", 309 "G_IM_FMT_CI", 310 "G_IM_FMT_IA", 311 "G_IM_FMT_I", 312 "G_IM_FMT_INVALID", 313 "G_IM_FMT_INVALID", 314 "G_IM_FMT_INVALID" 315 }; 316 317 static const char *ImageSizeText[] = 318 { 319 "G_IM_SIZ_4b", 320 "G_IM_SIZ_8b", 321 "G_IM_SIZ_16b", 322 "G_IM_SIZ_32b" 323 }; 324 325 static const char *SegmentText[] = 326 { 327 "G_MWO_SEGMENT_0", "G_MWO_SEGMENT_1", "G_MWO_SEGMENT_2", "G_MWO_SEGMENT_3", 328 "G_MWO_SEGMENT_4", "G_MWO_SEGMENT_5", "G_MWO_SEGMENT_6", "G_MWO_SEGMENT_7", 329 "G_MWO_SEGMENT_8", "G_MWO_SEGMENT_9", "G_MWO_SEGMENT_A", "G_MWO_SEGMENT_B", 330 "G_MWO_SEGMENT_C", "G_MWO_SEGMENT_D", "G_MWO_SEGMENT_E", "G_MWO_SEGMENT_F" 331 }; 332 #endif 333 334 #define G_NOOP 0x00 335 336 #define G_IMMFIRST -65 337 338 /* RDP commands */ 339 /* These GBI commands are common to all ucodes */ 340 #define G_RDPNOOP 0xC0 341 #define G_SETCIMG 0xFF /* -1 */ 342 #define G_SETZIMG 0xFE /* -2 */ 343 #define G_SETTIMG 0xFD /* -3 */ 344 #define G_SETCOMBINE 0xFC /* -4 */ 345 #define G_SETENVCOLOR 0xFB /* -5 */ 346 #define G_SETPRIMCOLOR 0xFA /* -6 */ 347 #define G_SETBLENDCOLOR 0xF9 /* -7 */ 348 #define G_SETFOGCOLOR 0xF8 /* -8 */ 349 #define G_SETFILLCOLOR 0xF7 /* -9 */ 350 #define G_FILLRECT 0xF6 /* -10 */ 351 #define G_SETTILE 0xF5 /* -11 */ 352 #define G_LOADTILE 0xF4 /* -12 */ 353 #define G_LOADBLOCK 0xF3 /* -13 */ 354 #define G_SETTILESIZE 0xF2 /* -14 */ 355 #define G_LOADTLUT 0xF0 /* -16 */ 356 #define G_RDPSETOTHERMODE 0xEF /* -17 */ 357 #define G_SETPRIMDEPTH 0xEE /* -18 */ 358 #define G_SETSCISSOR 0xED /* -19 */ 359 #define G_SETCONVERT 0xEC /* -20 */ 360 #define G_SETKEYR 0xEB /* -21 */ 361 #define G_SETKEYGB 0xEA /* -22 */ 362 #define G_RDPFULLSYNC 0xE9 /* -23 */ 363 #define G_RDPTILESYNC 0xE8 /* -24 */ 364 #define G_RDPPIPESYNC 0xE7 /* -25 */ 365 #define G_RDPLOADSYNC 0xE6 /* -26 */ 366 #define G_TEXRECTFLIP 0xE5 /* -27 */ 367 #define G_TEXRECT 0xE4 /* -28 */ 368 369 #define G_TRI_FILL 0xC8 /* fill triangle: 11001000 */ 370 #define G_TRI_FILL_ZBUFF 0xC9 /* fill, zbuff triangle: 11001001 */ 371 #define G_TRI_TXTR 0xCA /* texture triangle: 11001010 */ 372 #define G_TRI_TXTR_ZBUFF 0xCB /* texture, zbuff triangle: 11001011 */ 373 #define G_TRI_SHADE 0xCC /* shade triangle: 11001100 */ 374 #define G_TRI_SHADE_ZBUFF 0xCD /* shade, zbuff triangle: 11001101 */ 375 #define G_TRI_SHADE_TXTR 0xCE /* shade, texture triangle: 11001110 */ 376 #define G_TRI_SHADE_TXTR_ZBUFF 0xCF /* shade, txtr, zbuff trngl: 11001111 */ 377 378 #define G_SETOTHERMODE_H 0xe3 379 #define G_SETOTHERMODE_L 0xe2 380 381 /* G_SETOTHERMODE_L sft: shift count */ 382 #define G_MDSFT_ALPHACOMPARE 0 383 #define G_MDSFT_ZSRCSEL 2 384 #define G_MDSFT_RENDERMODE 3 385 #define G_MDSFT_BLENDER 16 386 387 /* G_SETOTHERMODE_H sft: shift count */ 388 #define G_MDSFT_BLENDMASK 0 /* unsupported */ 389 #define G_MDSFT_ALPHADITHER 4 390 #define G_MDSFT_RGBDITHER 6 391 392 #define G_MDSFT_COMBKEY 8 393 #define G_MDSFT_TEXTCONV 9 394 #define G_MDSFT_TEXTFILT 12 395 #define G_MDSFT_TEXTLUT 14 396 #define G_MDSFT_TEXTLOD 16 397 #define G_MDSFT_TEXTDETAIL 17 398 #define G_MDSFT_TEXTPERSP 19 399 #define G_MDSFT_CYCLETYPE 20 400 #define G_MDSFT_COLORDITHER 22 /* unsupported in HW 2.0 */ 401 #define G_MDSFT_PIPELINE 23 402 403 /* G_SETOTHERMODE_H gPipelineMode */ 404 #define G_PM_1PRIMITIVE 1 405 #define G_PM_NPRIMITIVE 0 406 407 /* G_SETOTHERMODE_H gSetCycleType */ 408 #define G_CYC_1CYCLE 0 409 #define G_CYC_2CYCLE 1 410 #define G_CYC_COPY 2 411 #define G_CYC_FILL 3 412 413 /* G_SETOTHERMODE_H gSetTexturePersp */ 414 #define G_TP_NONE 0 415 #define G_TP_PERSP 1 416 417 /* G_SETOTHERMODE_H gSetTextureDetail */ 418 #define G_TD_CLAMP 0 419 #define G_TD_SHARPEN 1 420 #define G_TD_DETAIL 2 421 422 /* G_SETOTHERMODE_H gSetTextureLOD */ 423 #define G_TL_TILE 0 424 #define G_TL_LOD 1 425 426 /* G_SETOTHERMODE_H gSetTextureLUT */ 427 #define G_TT_NONE 0 428 #define G_TT_RGBA16 2 429 #define G_TT_IA16 3 430 431 /* G_SETOTHERMODE_H gSetTextureFilter */ 432 #define G_TF_POINT 0 433 #define G_TF_AVERAGE 3 434 #define G_TF_BILERP 2 435 436 /* G_SETOTHERMODE_H gSetTextureConvert */ 437 #define G_TC_CONV 0 438 #define G_TC_FILTCONV 5 439 #define G_TC_FILT 6 440 441 /* G_SETOTHERMODE_H gSetCombineKey */ 442 #define G_CK_NONE 0 443 #define G_CK_KEY 1 444 445 /* G_SETOTHERMODE_H gSetColorDither */ 446 #define G_CD_MAGICSQ 0 447 #define G_CD_BAYER 1 448 #define G_CD_NOISE 2 449 450 #define G_CD_DISABLE 3 451 #define G_CD_ENABLE G_CD_NOISE /* HW 1.0 compatibility mode */ 452 453 /* G_SETOTHERMODE_H gSetAlphaDither */ 454 #define G_AD_PATTERN 0 455 #define G_AD_NOTPATTERN 1 456 #define G_AD_NOISE 2 457 #define G_AD_DISABLE 3 458 459 /* G_SETOTHERMODE_L gSetAlphaCompare */ 460 #define G_AC_NONE 0 461 #define G_AC_THRESHOLD 1 462 #define G_AC_DITHER 3 463 464 /* G_SETOTHERMODE_L gSetDepthSource */ 465 #define G_ZS_PIXEL 0 466 #define G_ZS_PRIM 1 467 468 /* G_SETOTHERMODE_L gSetRenderMode */ 469 #define AA_EN 1 470 #define Z_CMP 1 471 #define Z_UPD 1 472 #define IM_RD 1 473 #define CLR_ON_CVG 0x80 474 #define CVG_DST_CLAMP 0 475 #define CVG_DST_WRAP 1 476 #define CVG_DST_FULL 2 477 #define CVG_DST_SAVE 3 478 #define ZMODE_OPA 0 479 #define ZMODE_INTER 1 480 #define ZMODE_XLU 2 481 #define ZMODE_DEC 3 482 #define CVG_X_ALPHA 1 483 #define FORCE_BL 0x4000 484 #define ALPHA_CVG_SEL 0x2000 485 #define TEX_EDGE 0 // not used 486 487 #define G_SC_NON_INTERLACE 0 488 #define G_SC_EVEN_INTERLACE 2 489 #define G_SC_ODD_INTERLACE 3 490 491 #ifdef DEBUG 492 static const char *AAEnableText = "AA_EN"; 493 static const char *DepthCompareText = "Z_CMP"; 494 static const char *DepthUpdateText = "Z_UPD"; 495 static const char *ClearOnCvgText = "CLR_ON_CVG"; 496 static const char *CvgXAlphaText = "CVG_X_ALPHA"; 497 static const char *AlphaCvgSelText = "ALPHA_CVG_SEL"; 498 static const char *ForceBlenderText = "FORCE_BL"; 499 500 static const char *AlphaCompareText[] = 501 { 502 "G_AC_NONE", "G_AC_THRESHOLD", "G_AC_INVALID", "G_AC_DITHER" 503 }; 504 505 static const char *DepthSourceText[] = 506 { 507 "G_ZS_PIXEL", "G_ZS_PRIM" 508 }; 509 510 static const char *AlphaDitherText[] = 511 { 512 "G_AD_PATTERN", "G_AD_NOTPATTERN", "G_AD_NOISE", "G_AD_DISABLE" 513 }; 514 515 static const char *ColorDitherText[] = 516 { 517 "G_CD_MAGICSQ", "G_CD_BAYER", "G_CD_NOISE", "G_CD_DISABLE" 518 }; 519 520 static const char *CombineKeyText[] = 521 { 522 "G_CK_NONE", "G_CK_KEY" 523 }; 524 525 static const char *TextureConvertText[] = 526 { 527 "G_TC_CONV", "G_TC_INVALID", "G_TC_INVALID", "G_TC_INVALID", "G_TC_INVALID", "G_TC_FILTCONV", "G_TC_FILT", "G_TC_INVALID" 528 }; 529 530 static const char *TextureFilterText[] = 531 { 532 "G_TF_POINT", "G_TF_INVALID", "G_TF_BILERP", "G_TF_AVERAGE" 533 }; 534 535 static const char *TextureLUTText[] = 536 { 537 "G_TT_NONE", "G_TT_INVALID", "G_TT_RGBA16", "G_TT_IA16" 538 }; 539 540 static const char *TextureLODText[] = 541 { 542 "G_TL_TILE", "G_TL_LOD" 543 }; 544 545 static const char *TextureDetailText[] = 546 { 547 "G_TD_CLAMP", "G_TD_SHARPEN", "G_TD_DETAIL" 548 }; 549 550 static const char *TexturePerspText[] = 551 { 552 "G_TP_NONE", "G_TP_PERSP" 553 }; 554 555 static const char *CycleTypeText[] = 556 { 557 "G_CYC_1CYCLE", "G_CYC_2CYCLE", "G_CYC_COPY", "G_CYC_FILL" 558 }; 559 560 static const char *PipelineModeText[] = 561 { 562 "G_PM_NPRIMITIVE", "G_PM_1PRIMITIVE" 563 }; 564 565 static const char *CvgDestText[] = 566 { 567 "CVG_DST_CLAMP", "CVG_DST_WRAP", "CVG_DST_FULL", "CVG_DST_SAVE" 568 }; 569 570 static const char *DepthModeText[] = 571 { 572 "ZMODE_OPA", "ZMODE_INTER", "ZMODE_XLU", "ZMODE_DEC" 573 }; 574 575 static const char *ScissorModeText[] = 576 { 577 "G_SC_NON_INTERLACE", "G_SC_INVALID", "G_SC_EVEN_INTERLACE", "G_SC_ODD_INTERLACE" 578 }; 579 #endif 580 581 /* Color combiner constants: */ 582 #define G_CCMUX_COMBINED 0 583 #define G_CCMUX_TEXEL0 1 584 #define G_CCMUX_TEXEL1 2 585 #define G_CCMUX_PRIMITIVE 3 586 #define G_CCMUX_SHADE 4 587 #define G_CCMUX_ENVIRONMENT 5 588 #define G_CCMUX_CENTER 6 589 #define G_CCMUX_SCALE 6 590 #define G_CCMUX_COMBINED_ALPHA 7 591 #define G_CCMUX_TEXEL0_ALPHA 8 592 #define G_CCMUX_TEXEL1_ALPHA 9 593 #define G_CCMUX_PRIMITIVE_ALPHA 10 594 #define G_CCMUX_SHADE_ALPHA 11 595 #define G_CCMUX_ENV_ALPHA 12 596 #define G_CCMUX_LOD_FRACTION 13 597 #define G_CCMUX_PRIM_LOD_FRAC 14 598 #define G_CCMUX_NOISE 7 599 #define G_CCMUX_K4 7 600 #define G_CCMUX_K5 15 601 #define G_CCMUX_1 6 602 #define G_CCMUX_0 31 603 604 /* Alpha combiner constants: */ 605 #define G_ACMUX_COMBINED 0 606 #define G_ACMUX_TEXEL0 1 607 #define G_ACMUX_TEXEL1 2 608 #define G_ACMUX_PRIMITIVE 3 609 #define G_ACMUX_SHADE 4 610 #define G_ACMUX_ENVIRONMENT 5 611 #define G_ACMUX_LOD_FRACTION 0 612 #define G_ACMUX_PRIM_LOD_FRAC 6 613 #define G_ACMUX_1 6 614 #define G_ACMUX_0 7 615 616 #ifdef DEBUG 617 static const char *saRGBText[] = 618 { 619 "COMBINED", "TEXEL0", "TEXEL1", "PRIMITIVE", 620 "SHADE", "ENVIRONMENT", "NOISE", "1", 621 "0", "0", "0", "0", 622 "0", "0", "0", "0" 623 }; 624 625 static const char *sbRGBText[] = 626 { 627 "COMBINED", "TEXEL0", "TEXEL1", "PRIMITIVE", 628 "SHADE", "ENVIRONMENT", "CENTER", "K4", 629 "0", "0", "0", "0", 630 "0", "0", "0", "0" 631 }; 632 633 static const char *mRGBText[] = 634 { 635 "COMBINED", "TEXEL0", "TEXEL1", "PRIMITIVE", 636 "SHADE", "ENVIRONMENT", "SCALE", "COMBINED_ALPHA", 637 "TEXEL0_ALPHA", "TEXEL1_ALPHA", "PRIMITIVE_ALPHA", "SHADE_ALPHA", 638 "ENV_ALPHA", "LOD_FRACTION", "PRIM_LOD_FRAC", "K5", 639 "0", "0", "0", "0", 640 "0", "0", "0", "0", 641 "0", "0", "0", "0", 642 "0", "0", "0", "0" 643 }; 644 645 static const char *aRGBText[] = 646 { 647 "COMBINED", "TEXEL0", "TEXEL1", "PRIMITIVE", 648 "SHADE", "ENVIRONMENT", "1", "0", 649 }; 650 651 static const char *saAText[] = 652 { 653 "COMBINED", "TEXEL0", "TEXEL1", "PRIMITIVE", 654 "SHADE", "ENVIRONMENT", "1", "0", 655 }; 656 657 static const char *sbAText[] = 658 { 659 "COMBINED", "TEXEL0", "TEXEL1", "PRIMITIVE", 660 "SHADE", "ENVIRONMENT", "1", "0", 661 }; 662 663 static const char *mAText[] = 664 { 665 "LOD_FRACTION", "TEXEL0", "TEXEL1", "PRIMITIVE", 666 "SHADE", "ENVIRONMENT", "PRIM_LOD_FRAC", "0", 667 }; 668 669 static const char *aAText[] = 670 { 671 "COMBINED", "TEXEL0", "TEXEL1", "PRIMITIVE", 672 "SHADE", "ENVIRONMENT", "1", "0", 673 }; 674 #endif 675 676 #define LIGHT_1 1 677 #define LIGHT_2 2 678 #define LIGHT_3 3 679 #define LIGHT_4 4 680 #define LIGHT_5 5 681 #define LIGHT_6 6 682 #define LIGHT_7 7 683 #define LIGHT_8 8 684 685 /* Flags to inhibit pushing of the display list (on branch) */ 686 #define G_DL_PUSH 0x00 687 #define G_DL_NOPUSH 0x01 688 689 /* Blender */ 690 #define BLEND_FOG_ASHADE 0xc800 691 #define BLEND_FOG_APRIME 0xc400 692 #define BLEND_XLU 0x0040 693 694 #define ZMODE_DECAL 0xc00 695 #define ZLUT_SIZE 0x40000 696 697 #define X_CLIP_MAX 0x01 698 #define X_CLIP_MIN 0x02 699 #define Y_CLIP_MAX 0x04 700 #define Y_CLIP_MIN 0x08 701 #define Z_CLIP_MAX 0x10 702 #define Z_CLIP_MIN 0x20 703 704 /* G_MTX: parameter flags */ 705 # define G_MTX_MODELVIEW 0x00 /* matrix types */ 706 # define G_MTX_PROJECTION 0x04 707 # define G_MTX_MUL 0x00 /* concat or load */ 708 # define G_MTX_LOAD 0x02 709 # define G_MTX_NOPUSH 0x00 /* push or not */ 710 # define G_MTX_PUSH 0x01 711 712 #define RDRAM_UWORD(addr) (*(uint32_t *)((addr)+ (uint8_t*)gfx_info.RDRAM)) 713 #define RDRAM_SWORD(addr) (*(int32_t *)((addr)+ (uint8_t*)gfx_info.RDRAM)) 714 #define RDRAM_UHALF(addr) (*(uint16_t *)(((addr)^2) + (uint8_t*)gfx_info.RDRAM)) 715 #define RDRAM_SHALF(addr) (*(int16_t *)(((addr)^2)+ (uint8_t*)gfx_info.RDRAM)) 716 #define RDRAM_UBYTE(addr) (*(uint8_t *)(((addr)^3)+ (uint8_t*)gfx_info.RDRAM)) 717 #define RDRAM_SBYTE(addr) (*(int8_t *)(((addr)^3) + (uint8_t*)gfx_info.RDRAM)) 718 #define pRDRAM_UWORD(addr) ((uint32_t *)((addr) + (uint8_t*)gfx_info.RDRAM)) 719 #define pRDRAM_SWORD(addr) ((int32_t *)((addr)+ (uint8_t*)gfx_info.RDRAM)) 720 #define pRDRAM_UHALF(addr) ((uint16_t *)(((addr)^2) + (uint8_t*)gfx_info.RDRAM)) 721 #define pRDRAM_SHALF(addr) ((int16_t*)(((addr)^2) + (uint8_t*)gfx_info.RDRAM)) 722 #define pRDRAM_UBYTE(addr) ((uint8_t *)(((addr)^3) + (uint8_t*)gfx_info.RDRAM)) 723 #define pRDRAM_SBYTE(addr) ((int8_t *)(((addr)^3)) + (uint8_t*)gfx_info.RDRAM) 724 725 #ifdef __cplusplus 726 } 727 #endif 728 729 #endif 730 731