95 #define G_RDPHALF_2 0xf1
96 #define G_SETOTHERMODE_H 0xe3
97 #define G_SETOTHERMODE_L 0xe2
98 #define G_RDPHALF_1 0xe1
102 #define G_LOAD_UCODE 0xdd
103 #define G_MOVEMEM 0xdc
104 #define G_MOVEWORD 0xdb
106 #define G_GEOMETRYMODE 0xd9
107 #define G_POPMTX 0xd8
108 #define G_TEXTURE 0xd7
109 #define G_DMA_IO 0xd6
110 #define G_SPECIAL_1 0xd5
111 #define G_SPECIAL_2 0xd4
112 #define G_SPECIAL_3 0xd3
115 #define G_MODIFYVTX 0x02
116 #define G_CULLDL 0x03
117 #define G_BRANCH_Z 0x04
121 #define G_LINE3D 0x08
127 #define G_RESERVED0 2
130 #define G_RESERVED1 5
132 #define G_RESERVED2 7
133 #define G_RESERVED3 8
134 #define G_SPRITE2D_BASE 9
137 #define G_IMMFIRST -65
138 #define G_TRI1 (G_IMMFIRST-0)
139 #define G_CULLDL (G_IMMFIRST-1)
140 #define G_POPMTX (G_IMMFIRST-2)
141 #define G_MOVEWORD (G_IMMFIRST-3)
142 #define G_TEXTURE (G_IMMFIRST-4)
143 #define G_SETOTHERMODE_H (G_IMMFIRST-5)
144 #define G_SETOTHERMODE_L (G_IMMFIRST-6)
145 #define G_ENDDL (G_IMMFIRST-7)
146 #define G_SETGEOMETRYMODE (G_IMMFIRST-8)
147 #define G_CLEARGEOMETRYMODE (G_IMMFIRST-9)
148 #define G_LINE3D (G_IMMFIRST-10)
149 #define G_RDPHALF_1 (G_IMMFIRST-11)
150 #define G_RDPHALF_2 (G_IMMFIRST-12)
151 #define G_RDPHALF_CONT (G_IMMFIRST-13)
152 #if (defined(F3DEX_GBI)||defined(F3DLP_GBI))
154 # define G_MODIFYVTX (G_IMMFIRST-13)
156 # define G_TRI2 (G_IMMFIRST-14)
157 # define G_BRANCH_Z (G_IMMFIRST-15)
158 # define G_LOAD_UCODE (G_IMMFIRST-16)
159 # define G_QUAD (G_IMMFIRST-10)
165 #define G_SPRITE2D_SCALEFLIP (G_IMMFIRST-1)
166 #define G_SPRITE2D_DRAW (G_IMMFIRST-2)
174 #define G_SETCIMG 0xff
175 #define G_SETZIMG 0xfe
176 #define G_SETTIMG 0xfd
177 #define G_SETCOMBINE 0xfc
178 #define G_SETENVCOLOR 0xfb
179 #define G_SETPRIMCOLOR 0xfa
180 #define G_SETBLENDCOLOR 0xf9
181 #define G_SETFOGCOLOR 0xf8
182 #define G_SETFILLCOLOR 0xf7
183 #define G_FILLRECT 0xf6
184 #define G_SETTILE 0xf5
185 #define G_LOADTILE 0xf4
186 #define G_LOADBLOCK 0xf3
187 #define G_SETTILESIZE 0xf2
188 #define G_LOADTLUT 0xf0
189 #define G_RDPSETOTHERMODE 0xef
190 #define G_SETPRIMDEPTH 0xee
191 #define G_SETSCISSOR 0xed
192 #define G_SETCONVERT 0xec
193 #define G_SETKEYR 0xeb
194 #define G_SETKEYGB 0xea
195 #define G_RDPFULLSYNC 0xe9
196 #define G_RDPTILESYNC 0xe8
197 #define G_RDPPIPESYNC 0xe7
198 #define G_RDPLOADSYNC 0xe6
199 #define G_TEXRECTFLIP 0xe5
200 #define G_TEXRECT 0xe4
211 #define G_TRI_FILL 0xc8
212 #define G_TRI_SHADE 0xcc
213 #define G_TRI_TXTR 0xca
214 #define G_TRI_SHADE_TXTR 0xce
215 #define G_TRI_FILL_ZBUFF 0xc9
216 #define G_TRI_SHADE_ZBUFF 0xcd
217 #define G_TRI_TXTR_ZBUFF 0xcb
218 #define G_TRI_SHADE_TXTR_ZBUFF 0xcf
234 #define G_RDP_TRI_FILL_MASK 0x08
235 #define G_RDP_TRI_SHADE_MASK 0x04
236 #define G_RDP_TRI_TXTR_MASK 0x02
237 #define G_RDP_TRI_ZBUFF_MASK 0x01
256 #define G_RDP_ADDR_FIXUP 3
257 #ifdef _LANGUAGE_ASSEMBLY
258 #define G_RDP_TEXRECT_CHECK ((-1*G_TEXRECTFLIP)& 0xff)
262 #define GDMACMD(x) (x)
263 #define GIMMCMD(x) (G_IMMFIRST-(x))
264 #define GRDPCMD(x) (0xff-(x))
266 #define G_DMACMDSIZ 128
267 #define G_IMMCMDSIZ 64
268 #define G_RDPCMDSIZ 64
273 #define G_TEXTURE_IMAGE_FRAC 2
274 #define G_TEXTURE_SCALE_FRAC 16
275 #define G_SCALE_FRAC 8
276 #define G_ROTATE_FRAC 16
291 #define G_MAXFBZ 0x3fff
293 #define GPACK_RGBA5551(r, g, b, a) ((((r)<<8) & 0xf800) | \
294 (((g)<<3) & 0x7c0) | \
295 (((b)>>2) & 0x3e) | ((a) & 0x1))
296 #define GPACK_ZDZ(z, dz) ((z) << 2 | (dz))
302 # define G_MTX_MODELVIEW 0x00
303 # define G_MTX_PROJECTION 0x04
304 # define G_MTX_MUL 0x00
305 # define G_MTX_LOAD 0x02
306 # define G_MTX_NOPUSH 0x00
307 # define G_MTX_PUSH 0x01
309 # define G_MTX_MODELVIEW 0x00
310 # define G_MTX_PROJECTION 0x01
311 # define G_MTX_MUL 0x00
312 # define G_MTX_LOAD 0x02
313 # define G_MTX_NOPUSH 0x00
314 # define G_MTX_PUSH 0x04
342 #define G_ZBUFFER 0x00000001
343 #define G_SHADE 0x00000004
346 # define G_TEXTURE_ENABLE 0x00000000
347 # define G_SHADING_SMOOTH 0x00200000
348 # define G_CULL_FRONT 0x00000200
349 # define G_CULL_BACK 0x00000400
350 # define G_CULL_BOTH 0x00000600
352 # define G_TEXTURE_ENABLE 0x00000002
353 # define G_SHADING_SMOOTH 0x00000200
354 # define G_CULL_FRONT 0x00001000
355 # define G_CULL_BACK 0x00002000
356 # define G_CULL_BOTH 0x00003000
358 #define G_FOG 0x00010000
359 #define G_LIGHTING 0x00020000
360 #define G_TEXTURE_GEN 0x00040000
361 #define G_TEXTURE_GEN_LINEAR 0x00080000
362 #define G_LOD 0x00100000
363 #if (defined(F3DEX_GBI)||defined(F3DLP_GBI))
364 # define G_CLIPPING 0x00800000
366 # define G_CLIPPING 0x00000000
369 #ifdef _LANGUAGE_ASSEMBLY
370 #define G_FOG_H (G_FOG/0x10000)
371 #define G_LIGHTING_H (G_LIGHTING/0x10000)
372 #define G_TEXTURE_GEN_H (G_TEXTURE_GEN/0x10000)
373 #define G_TEXTURE_GEN_LINEAR_H (G_TEXTURE_GEN_LINEAR/0x10000)
374 #define G_LOD_H (G_LOD/0x10000)
375 #if (defined(F3DEX_GBI)||defined(F3DLP_GBI))
376 # define G_CLIPPING_H (G_CLIPPING/0x10000)
381 #ifdef _LANGUAGE_ASSEMBLY
382 #define G_TX_LOADTILE 7
383 #define G_TX_RENDERTILE 0
385 #define G_TX_NOMIRROR 0
387 #define G_TX_MIRROR 0x1
388 #define G_TX_CLAMP 0x2
389 #define G_TX_NOMASK 0
396 #define G_IM_FMT_RGBA 0
397 #define G_IM_FMT_YUV 1
398 #define G_IM_FMT_CI 2
399 #define G_IM_FMT_IA 3
405 #define G_IM_SIZ_4b 0
406 #define G_IM_SIZ_8b 1
407 #define G_IM_SIZ_16b 2
408 #define G_IM_SIZ_32b 3
409 #define G_IM_SIZ_DD 5
411 #define G_IM_SIZ_4b_BYTES 0
412 #define G_IM_SIZ_4b_TILE_BYTES G_IM_SIZ_4b_BYTES
413 #define G_IM_SIZ_4b_LINE_BYTES G_IM_SIZ_4b_BYTES
415 #define G_IM_SIZ_8b_BYTES 1
416 #define G_IM_SIZ_8b_TILE_BYTES G_IM_SIZ_8b_BYTES
417 #define G_IM_SIZ_8b_LINE_BYTES G_IM_SIZ_8b_BYTES
419 #define G_IM_SIZ_16b_BYTES 2
420 #define G_IM_SIZ_16b_TILE_BYTES G_IM_SIZ_16b_BYTES
421 #define G_IM_SIZ_16b_LINE_BYTES G_IM_SIZ_16b_BYTES
423 #define G_IM_SIZ_32b_BYTES 4
424 #define G_IM_SIZ_32b_TILE_BYTES 2
425 #define G_IM_SIZ_32b_LINE_BYTES 2
427 #define G_IM_SIZ_4b_LOAD_BLOCK G_IM_SIZ_16b
428 #define G_IM_SIZ_8b_LOAD_BLOCK G_IM_SIZ_16b
429 #define G_IM_SIZ_16b_LOAD_BLOCK G_IM_SIZ_16b
430 #define G_IM_SIZ_32b_LOAD_BLOCK G_IM_SIZ_32b
432 #define G_IM_SIZ_4b_SHIFT 2
433 #define G_IM_SIZ_8b_SHIFT 1
434 #define G_IM_SIZ_16b_SHIFT 0
435 #define G_IM_SIZ_32b_SHIFT 0
437 #define G_IM_SIZ_4b_INCR 3
438 #define G_IM_SIZ_8b_INCR 1
439 #define G_IM_SIZ_16b_INCR 0
440 #define G_IM_SIZ_32b_INCR 0
446 #define G_CCMUX_COMBINED 0
447 #define G_CCMUX_TEXEL0 1
448 #define G_CCMUX_TEXEL1 2
449 #define G_CCMUX_PRIMITIVE 3
450 #define G_CCMUX_SHADE 4
451 #define G_CCMUX_ENVIRONMENT 5
452 #define G_CCMUX_CENTER 6
453 #define G_CCMUX_SCALE 6
454 #define G_CCMUX_COMBINED_ALPHA 7
455 #define G_CCMUX_TEXEL0_ALPHA 8
456 #define G_CCMUX_TEXEL1_ALPHA 9
457 #define G_CCMUX_PRIMITIVE_ALPHA 10
458 #define G_CCMUX_SHADE_ALPHA 11
459 #define G_CCMUX_ENV_ALPHA 12
460 #define G_CCMUX_LOD_FRACTION 13
461 #define G_CCMUX_PRIM_LOD_FRAC 14
462 #define G_CCMUX_NOISE 7
464 #define G_CCMUX_K5 15
469 #define G_ACMUX_COMBINED 0
470 #define G_ACMUX_TEXEL0 1
471 #define G_ACMUX_TEXEL1 2
472 #define G_ACMUX_PRIMITIVE 3
473 #define G_ACMUX_SHADE 4
474 #define G_ACMUX_ENVIRONMENT 5
475 #define G_ACMUX_LOD_FRACTION 0
476 #define G_ACMUX_PRIM_LOD_FRAC 6
481 #define G_CC_PRIMITIVE 0, 0, 0, PRIMITIVE, 0, 0, 0, PRIMITIVE
482 #define G_CC_SHADE 0, 0, 0, SHADE, 0, 0, 0, SHADE
484 #define G_CC_MODULATEI TEXEL0, 0, SHADE, 0, 0, 0, 0, SHADE
485 #define G_CC_MODULATEIDECALA TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0
486 #define G_CC_MODULATEIFADE TEXEL0, 0, SHADE, 0, 0, 0, 0, ENVIRONMENT
488 #define G_CC_MODULATERGB G_CC_MODULATEI
489 #define G_CC_MODULATERGBDECALA G_CC_MODULATEIDECALA
490 #define G_CC_MODULATERGBFADE G_CC_MODULATEIFADE
492 #define G_CC_MODULATEIA TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0
493 #define G_CC_MODULATEIFADEA TEXEL0, 0, SHADE, 0, TEXEL0, 0, ENVIRONMENT, 0
495 #define G_CC_MODULATEFADE TEXEL0, 0, SHADE, 0, ENVIRONMENT, 0, TEXEL0, 0
497 #define G_CC_MODULATERGBA G_CC_MODULATEIA
498 #define G_CC_MODULATERGBFADEA G_CC_MODULATEIFADEA
500 #define G_CC_MODULATEI_PRIM TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE
501 #define G_CC_MODULATEIA_PRIM TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0
502 #define G_CC_MODULATEIDECALA_PRIM TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, TEXEL0
504 #define G_CC_MODULATERGB_PRIM G_CC_MODULATEI_PRIM
505 #define G_CC_MODULATERGBA_PRIM G_CC_MODULATEIA_PRIM
506 #define G_CC_MODULATERGBDECALA_PRIM G_CC_MODULATEIDECALA_PRIM
508 #define G_CC_FADE SHADE, 0, ENVIRONMENT, 0, SHADE, 0, ENVIRONMENT, 0
509 #define G_CC_FADEA TEXEL0, 0, ENVIRONMENT, 0, TEXEL0, 0, ENVIRONMENT, 0
511 #define G_CC_DECALRGB 0, 0, 0, TEXEL0, 0, 0, 0, SHADE
512 #define G_CC_DECALRGBA 0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0
513 #define G_CC_DECALFADE 0, 0, 0, TEXEL0, 0, 0, 0, ENVIRONMENT
515 #define G_CC_DECALFADEA 0, 0, 0, TEXEL0, TEXEL0, 0, ENVIRONMENT, 0
517 #define G_CC_BLENDI ENVIRONMENT, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE
518 #define G_CC_BLENDIA ENVIRONMENT, SHADE, TEXEL0, SHADE, TEXEL0, 0, SHADE, 0
519 #define G_CC_BLENDIDECALA ENVIRONMENT, SHADE, TEXEL0, SHADE, 0, 0, 0, TEXEL0
521 #define G_CC_BLENDRGBA TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, SHADE
522 #define G_CC_BLENDRGBDECALA TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, TEXEL0
523 #define G_CC_BLENDRGBFADEA TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, ENVIRONMENT
525 #define G_CC_ADDRGB TEXEL0, 0, TEXEL0, SHADE, 0, 0, 0, SHADE
526 #define G_CC_ADDRGBDECALA TEXEL0, 0, TEXEL0, SHADE, 0, 0, 0, TEXEL0
527 #define G_CC_ADDRGBFADE TEXEL0, 0, TEXEL0, SHADE, 0, 0, 0, ENVIRONMENT
529 #define G_CC_REFLECTRGB ENVIRONMENT, 0, TEXEL0, SHADE, 0, 0, 0, SHADE
530 #define G_CC_REFLECTRGBDECALA ENVIRONMENT, 0, TEXEL0, SHADE, 0, 0, 0, TEXEL0
532 #define G_CC_HILITERGB PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE
533 #define G_CC_HILITERGBA PRIMITIVE, SHADE, TEXEL0, SHADE, PRIMITIVE, SHADE, TEXEL0, SHADE
534 #define G_CC_HILITERGBDECALA PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, TEXEL0
536 #define G_CC_SHADEDECALA 0, 0, 0, SHADE, 0, 0, 0, TEXEL0
537 #define G_CC_SHADEFADEA 0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT
539 #define G_CC_BLENDPE PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, SHADE, 0
540 #define G_CC_BLENDPEDECALA PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, TEXEL0
543 #define _G_CC_BLENDPE ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, SHADE, 0
544 #define _G_CC_BLENDPEDECALA ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, 0, 0, 0, TEXEL0
545 #define _G_CC_TWOCOLORTEX PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE
547 #define _G_CC_SPARSEST PRIMITIVE, TEXEL0, LOD_FRACTION, TEXEL0, PRIMITIVE, TEXEL0, LOD_FRACTION, TEXEL0
548 #define G_CC_TEMPLERP TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0
551 #define G_CC_TRILERP TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0
552 #define G_CC_INTERFERENCE TEXEL0, 0, TEXEL1, 0, TEXEL0, 0, TEXEL1, 0
557 #define G_CC_1CYUV2RGB TEXEL0, K4, K5, TEXEL0, 0, 0, 0, SHADE
563 #define G_CC_YUV2RGB TEXEL1, K4, K5, TEXEL1, 0, 0, 0, 0
566 #define G_CC_PASS2 0, 0, 0, COMBINED, 0, 0, 0, COMBINED
567 #define G_CC_MODULATEI2 COMBINED, 0, SHADE, 0, 0, 0, 0, SHADE
568 #define G_CC_MODULATEIA2 COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, 0
569 #define G_CC_MODULATERGB2 G_CC_MODULATEI2
570 #define G_CC_MODULATERGBA2 G_CC_MODULATEIA2
571 #define G_CC_MODULATEI_PRIM2 COMBINED, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE
572 #define G_CC_MODULATEIA_PRIM2 COMBINED, 0, PRIMITIVE, 0, COMBINED, 0, PRIMITIVE, 0
573 #define G_CC_MODULATERGB_PRIM2 G_CC_MODULATEI_PRIM2
574 #define G_CC_MODULATERGBA_PRIM2 G_CC_MODULATEIA_PRIM2
575 #define G_CC_DECALRGB2 0, 0, 0, COMBINED, 0, 0, 0, SHADE
580 #define G_CC_BLENDI2 ENVIRONMENT, SHADE, COMBINED, SHADE, 0, 0, 0, SHADE
581 #define G_CC_BLENDIA2 ENVIRONMENT, SHADE, COMBINED, SHADE, COMBINED, 0, SHADE, 0
582 #define G_CC_CHROMA_KEY2 TEXEL0, CENTER, SCALE, 0, 0, 0, 0, 0
583 #define G_CC_HILITERGB2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, SHADE
584 #define G_CC_HILITERGBA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, ENVIRONMENT, COMBINED, TEXEL0, COMBINED
585 #define G_CC_HILITERGBDECALA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, TEXEL0
586 #define G_CC_HILITERGBPASSA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, COMBINED
591 #define G_MDSFT_ALPHACOMPARE 0
592 #define G_MDSFT_ZSRCSEL 2
593 #define G_MDSFT_RENDERMODE 3
594 #define G_MDSFT_BLENDER 16
599 #define G_MDSFT_BLENDMASK 0
600 #define G_MDSFT_ALPHADITHER 4
601 #define G_MDSFT_RGBDITHER 6
603 #define G_MDSFT_COMBKEY 8
604 #define G_MDSFT_TEXTCONV 9
605 #define G_MDSFT_TEXTFILT 12
606 #define G_MDSFT_TEXTLUT 14
607 #define G_MDSFT_TEXTLOD 16
608 #define G_MDSFT_TEXTDETAIL 17
609 #define G_MDSFT_TEXTPERSP 19
610 #define G_MDSFT_CYCLETYPE 20
611 #define G_MDSFT_COLORDITHER 22
612 #define G_MDSFT_PIPELINE 23
615 #define G_PM_1PRIMITIVE (1 << G_MDSFT_PIPELINE)
616 #define G_PM_NPRIMITIVE (0 << G_MDSFT_PIPELINE)
619 #define G_CYC_1CYCLE (0 << G_MDSFT_CYCLETYPE)
620 #define G_CYC_2CYCLE (1 << G_MDSFT_CYCLETYPE)
621 #define G_CYC_COPY (2 << G_MDSFT_CYCLETYPE)
622 #define G_CYC_FILL (3 << G_MDSFT_CYCLETYPE)
625 #define G_TP_NONE (0 << G_MDSFT_TEXTPERSP)
626 #define G_TP_PERSP (1 << G_MDSFT_TEXTPERSP)
629 #define G_TD_CLAMP (0 << G_MDSFT_TEXTDETAIL)
630 #define G_TD_SHARPEN (1 << G_MDSFT_TEXTDETAIL)
631 #define G_TD_DETAIL (2 << G_MDSFT_TEXTDETAIL)
634 #define G_TL_TILE (0 << G_MDSFT_TEXTLOD)
635 #define G_TL_LOD (1 << G_MDSFT_TEXTLOD)
638 #define G_TT_NONE (0 << G_MDSFT_TEXTLUT)
639 #define G_TT_RGBA16 (2 << G_MDSFT_TEXTLUT)
640 #define G_TT_IA16 (3 << G_MDSFT_TEXTLUT)
643 #define G_TF_POINT (0 << G_MDSFT_TEXTFILT)
644 #define G_TF_AVERAGE (3 << G_MDSFT_TEXTFILT)
645 #define G_TF_BILERP (2 << G_MDSFT_TEXTFILT)
648 #define G_TC_CONV (0 << G_MDSFT_TEXTCONV)
649 #define G_TC_FILTCONV (5 << G_MDSFT_TEXTCONV)
650 #define G_TC_FILT (6 << G_MDSFT_TEXTCONV)
653 #define G_CK_NONE (0 << G_MDSFT_COMBKEY)
654 #define G_CK_KEY (1 << G_MDSFT_COMBKEY)
657 #define G_CD_MAGICSQ (0 << G_MDSFT_RGBDITHER)
658 #define G_CD_BAYER (1 << G_MDSFT_RGBDITHER)
659 #define G_CD_NOISE (2 << G_MDSFT_RGBDITHER)
661 #ifndef _HW_VERSION_1
662 #define G_CD_DISABLE (3 << G_MDSFT_RGBDITHER)
663 #define G_CD_ENABLE G_CD_NOISE
665 #define G_CD_ENABLE (1 << G_MDSFT_COLORDITHER)
666 #define G_CD_DISABLE (0 << G_MDSFT_COLORDITHER)
670 #define G_AD_PATTERN (0 << G_MDSFT_ALPHADITHER)
671 #define G_AD_NOTPATTERN (1 << G_MDSFT_ALPHADITHER)
672 #define G_AD_NOISE (2 << G_MDSFT_ALPHADITHER)
673 #define G_AD_DISABLE (3 << G_MDSFT_ALPHADITHER)
676 #define G_AC_NONE (0 << G_MDSFT_ALPHACOMPARE)
677 #define G_AC_THRESHOLD (1 << G_MDSFT_ALPHACOMPARE)
678 #define G_AC_DITHER (3 << G_MDSFT_ALPHACOMPARE)
681 #define G_ZS_PIXEL (0 << G_MDSFT_ZSRCSEL)
682 #define G_ZS_PRIM (1 << G_MDSFT_ZSRCSEL)
689 #define CLR_ON_CVG 0x80
690 #define CVG_DST_CLAMP 0
691 #define CVG_DST_WRAP 0x100
692 #define CVG_DST_FULL 0x200
693 #define CVG_DST_SAVE 0x300
695 #define ZMODE_INTER 0x400
696 #define ZMODE_XLU 0x800
697 #define ZMODE_DEC 0xc00
698 #define CVG_X_ALPHA 0x1000
699 #define ALPHA_CVG_SEL 0x2000
700 #define FORCE_BL 0x4000
701 #define TEX_EDGE 0x0000
703 #define G_BL_CLR_IN 0
704 #define G_BL_CLR_MEM 1
705 #define G_BL_CLR_BL 2
706 #define G_BL_CLR_FOG 3
711 #define G_BL_A_SHADE 2
715 #define GBL_c1(m1a, m1b, m2a, m2b) \
716 (m1a) << 30 | (m1b) << 26 | (m2a) << 22 | (m2b) << 18
717 #define GBL_c2(m1a, m1b, m2a, m2b) \
718 (m1a) << 28 | (m1b) << 24 | (m2a) << 20 | (m2b) << 16
720 #define RM_AA_ZB_OPA_SURF(clk) \
721 AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \
722 ZMODE_OPA | ALPHA_CVG_SEL | \
723 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
725 #define RM_RA_ZB_OPA_SURF(clk) \
726 AA_EN | Z_CMP | Z_UPD | CVG_DST_CLAMP | \
727 ZMODE_OPA | ALPHA_CVG_SEL | \
728 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
730 #define RM_AA_ZB_XLU_SURF(clk) \
731 AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \
732 FORCE_BL | ZMODE_XLU | \
733 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
735 #define RM_AA_ZB_OPA_DECAL(clk) \
736 AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | ALPHA_CVG_SEL | \
738 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
740 #define RM_RA_ZB_OPA_DECAL(clk) \
741 AA_EN | Z_CMP | CVG_DST_WRAP | ALPHA_CVG_SEL | \
743 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
745 #define RM_AA_ZB_XLU_DECAL(clk) \
746 AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \
747 FORCE_BL | ZMODE_DEC | \
748 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
750 #define RM_AA_ZB_OPA_INTER(clk) \
751 AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \
752 ALPHA_CVG_SEL | ZMODE_INTER | \
753 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
755 #define RM_RA_ZB_OPA_INTER(clk) \
756 AA_EN | Z_CMP | Z_UPD | CVG_DST_CLAMP | \
757 ALPHA_CVG_SEL | ZMODE_INTER | \
758 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
760 #define RM_AA_ZB_XLU_INTER(clk) \
761 AA_EN | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \
762 FORCE_BL | ZMODE_INTER | \
763 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
765 #define RM_AA_ZB_XLU_LINE(clk) \
766 AA_EN | Z_CMP | IM_RD | CVG_DST_CLAMP | CVG_X_ALPHA | \
767 ALPHA_CVG_SEL | FORCE_BL | ZMODE_XLU | \
768 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
770 #define RM_AA_ZB_DEC_LINE(clk) \
771 AA_EN | Z_CMP | IM_RD | CVG_DST_SAVE | CVG_X_ALPHA | \
772 ALPHA_CVG_SEL | FORCE_BL | ZMODE_DEC | \
773 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
775 #define RM_AA_ZB_TEX_EDGE(clk) \
776 AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \
777 CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \
778 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
780 #define RM_AA_ZB_TEX_INTER(clk) \
781 AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \
782 CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_INTER | TEX_EDGE | \
783 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
785 #define RM_AA_ZB_SUB_SURF(clk) \
786 AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | \
787 ZMODE_OPA | ALPHA_CVG_SEL | \
788 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
790 #define RM_AA_ZB_PCL_SURF(clk) \
791 AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \
792 ZMODE_OPA | G_AC_DITHER | \
793 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
795 #define RM_AA_ZB_OPA_TERR(clk) \
796 AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \
797 ZMODE_OPA | ALPHA_CVG_SEL | \
798 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
800 #define RM_AA_ZB_TEX_TERR(clk) \
801 AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \
802 CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \
803 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
805 #define RM_AA_ZB_SUB_TERR(clk) \
806 AA_EN | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | \
807 ZMODE_OPA | ALPHA_CVG_SEL | \
808 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
811 #define RM_AA_OPA_SURF(clk) \
812 AA_EN | IM_RD | CVG_DST_CLAMP | \
813 ZMODE_OPA | ALPHA_CVG_SEL | \
814 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
816 #define RM_RA_OPA_SURF(clk) \
817 AA_EN | CVG_DST_CLAMP | \
818 ZMODE_OPA | ALPHA_CVG_SEL | \
819 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
821 #define RM_AA_XLU_SURF(clk) \
822 AA_EN | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | FORCE_BL | \
824 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
826 #define RM_AA_XLU_LINE(clk) \
827 AA_EN | IM_RD | CVG_DST_CLAMP | CVG_X_ALPHA | \
828 ALPHA_CVG_SEL | FORCE_BL | ZMODE_OPA | \
829 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
831 #define RM_AA_DEC_LINE(clk) \
832 AA_EN | IM_RD | CVG_DST_FULL | CVG_X_ALPHA | \
833 ALPHA_CVG_SEL | FORCE_BL | ZMODE_OPA | \
834 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
836 #define RM_AA_TEX_EDGE(clk) \
837 AA_EN | IM_RD | CVG_DST_CLAMP | \
838 CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \
839 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
841 #define RM_AA_SUB_SURF(clk) \
842 AA_EN | IM_RD | CVG_DST_FULL | \
843 ZMODE_OPA | ALPHA_CVG_SEL | \
844 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
846 #define RM_AA_PCL_SURF(clk) \
847 AA_EN | IM_RD | CVG_DST_CLAMP | \
848 ZMODE_OPA | G_AC_DITHER | \
849 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
851 #define RM_AA_OPA_TERR(clk) \
852 AA_EN | IM_RD | CVG_DST_CLAMP | \
853 ZMODE_OPA | ALPHA_CVG_SEL | \
854 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
856 #define RM_AA_TEX_TERR(clk) \
857 AA_EN | IM_RD | CVG_DST_CLAMP | \
858 CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \
859 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
861 #define RM_AA_SUB_TERR(clk) \
862 AA_EN | IM_RD | CVG_DST_FULL | \
863 ZMODE_OPA | ALPHA_CVG_SEL | \
864 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
867 #define RM_ZB_OPA_SURF(clk) \
868 Z_CMP | Z_UPD | CVG_DST_FULL | ALPHA_CVG_SEL | \
870 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
872 #define RM_ZB_XLU_SURF(clk) \
873 Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_XLU | \
874 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
876 #define RM_ZB_OPA_DECAL(clk) \
877 Z_CMP | CVG_DST_FULL | ALPHA_CVG_SEL | ZMODE_DEC | \
878 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
880 #define RM_ZB_XLU_DECAL(clk) \
881 Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_DEC | \
882 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
884 #define RM_ZB_CLD_SURF(clk) \
885 Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_XLU | \
886 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
888 #define RM_ZB_OVL_SURF(clk) \
889 Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_DEC | \
890 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
892 #define RM_ZB_PCL_SURF(clk) \
893 Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | \
895 GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)
898 #define RM_OPA_SURF(clk) \
899 CVG_DST_CLAMP | FORCE_BL | ZMODE_OPA | \
900 GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)
902 #define RM_XLU_SURF(clk) \
903 IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_OPA | \
904 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
906 #define RM_TEX_EDGE(clk) \
907 CVG_DST_CLAMP | CVG_X_ALPHA | ALPHA_CVG_SEL | FORCE_BL |\
908 ZMODE_OPA | TEX_EDGE | AA_EN | \
909 GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)
911 #define RM_CLD_SURF(clk) \
912 IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_OPA | \
913 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
915 #define RM_PCL_SURF(clk) \
916 CVG_DST_FULL | FORCE_BL | ZMODE_OPA | \
918 GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)
920 #define RM_ADD(clk) \
921 IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_OPA | \
922 GBL_c##clk(G_BL_CLR_IN, G_BL_A_FOG, G_BL_CLR_MEM, G_BL_1)
924 #define RM_NOOP(clk) \
925 GBL_c##clk(0, 0, 0, 0)
927 #define RM_VISCVG(clk) \
929 GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_BL, G_BL_A_MEM)
932 #define RM_OPA_CI(clk) \
933 CVG_DST_CLAMP | ZMODE_OPA | \
934 GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)
937 #define RM_CUSTOM_AA_ZB_XLU_SURF(clk) \
938 RM_AA_ZB_XLU_SURF(clk) | Z_UPD
941 #define G_RM_AA_ZB_OPA_SURF RM_AA_ZB_OPA_SURF(1)
942 #define G_RM_AA_ZB_OPA_SURF2 RM_AA_ZB_OPA_SURF(2)
943 #define G_RM_AA_ZB_XLU_SURF RM_AA_ZB_XLU_SURF(1)
944 #define G_RM_AA_ZB_XLU_SURF2 RM_AA_ZB_XLU_SURF(2)
945 #define G_RM_AA_ZB_OPA_DECAL RM_AA_ZB_OPA_DECAL(1)
946 #define G_RM_AA_ZB_OPA_DECAL2 RM_AA_ZB_OPA_DECAL(2)
947 #define G_RM_AA_ZB_XLU_DECAL RM_AA_ZB_XLU_DECAL(1)
948 #define G_RM_AA_ZB_XLU_DECAL2 RM_AA_ZB_XLU_DECAL(2)
949 #define G_RM_AA_ZB_OPA_INTER RM_AA_ZB_OPA_INTER(1)
950 #define G_RM_AA_ZB_OPA_INTER2 RM_AA_ZB_OPA_INTER(2)
951 #define G_RM_AA_ZB_XLU_INTER RM_AA_ZB_XLU_INTER(1)
952 #define G_RM_AA_ZB_XLU_INTER2 RM_AA_ZB_XLU_INTER(2)
953 #define G_RM_AA_ZB_XLU_LINE RM_AA_ZB_XLU_LINE(1)
954 #define G_RM_AA_ZB_XLU_LINE2 RM_AA_ZB_XLU_LINE(2)
955 #define G_RM_AA_ZB_DEC_LINE RM_AA_ZB_DEC_LINE(1)
956 #define G_RM_AA_ZB_DEC_LINE2 RM_AA_ZB_DEC_LINE(2)
957 #define G_RM_AA_ZB_TEX_EDGE RM_AA_ZB_TEX_EDGE(1)
958 #define G_RM_AA_ZB_TEX_EDGE2 RM_AA_ZB_TEX_EDGE(2)
959 #define G_RM_AA_ZB_TEX_INTER RM_AA_ZB_TEX_INTER(1)
960 #define G_RM_AA_ZB_TEX_INTER2 RM_AA_ZB_TEX_INTER(2)
961 #define G_RM_AA_ZB_SUB_SURF RM_AA_ZB_SUB_SURF(1)
962 #define G_RM_AA_ZB_SUB_SURF2 RM_AA_ZB_SUB_SURF(2)
963 #define G_RM_AA_ZB_PCL_SURF RM_AA_ZB_PCL_SURF(1)
964 #define G_RM_AA_ZB_PCL_SURF2 RM_AA_ZB_PCL_SURF(2)
965 #define G_RM_AA_ZB_OPA_TERR RM_AA_ZB_OPA_TERR(1)
966 #define G_RM_AA_ZB_OPA_TERR2 RM_AA_ZB_OPA_TERR(2)
967 #define G_RM_AA_ZB_TEX_TERR RM_AA_ZB_TEX_TERR(1)
968 #define G_RM_AA_ZB_TEX_TERR2 RM_AA_ZB_TEX_TERR(2)
969 #define G_RM_AA_ZB_SUB_TERR RM_AA_ZB_SUB_TERR(1)
970 #define G_RM_AA_ZB_SUB_TERR2 RM_AA_ZB_SUB_TERR(2)
972 #define G_RM_RA_ZB_OPA_SURF RM_RA_ZB_OPA_SURF(1)
973 #define G_RM_RA_ZB_OPA_SURF2 RM_RA_ZB_OPA_SURF(2)
974 #define G_RM_RA_ZB_OPA_DECAL RM_RA_ZB_OPA_DECAL(1)
975 #define G_RM_RA_ZB_OPA_DECAL2 RM_RA_ZB_OPA_DECAL(2)
976 #define G_RM_RA_ZB_OPA_INTER RM_RA_ZB_OPA_INTER(1)
977 #define G_RM_RA_ZB_OPA_INTER2 RM_RA_ZB_OPA_INTER(2)
979 #define G_RM_AA_OPA_SURF RM_AA_OPA_SURF(1)
980 #define G_RM_AA_OPA_SURF2 RM_AA_OPA_SURF(2)
981 #define G_RM_AA_XLU_SURF RM_AA_XLU_SURF(1)
982 #define G_RM_AA_XLU_SURF2 RM_AA_XLU_SURF(2)
983 #define G_RM_AA_XLU_LINE RM_AA_XLU_LINE(1)
984 #define G_RM_AA_XLU_LINE2 RM_AA_XLU_LINE(2)
985 #define G_RM_AA_DEC_LINE RM_AA_DEC_LINE(1)
986 #define G_RM_AA_DEC_LINE2 RM_AA_DEC_LINE(2)
987 #define G_RM_AA_TEX_EDGE RM_AA_TEX_EDGE(1)
988 #define G_RM_AA_TEX_EDGE2 RM_AA_TEX_EDGE(2)
989 #define G_RM_AA_SUB_SURF RM_AA_SUB_SURF(1)
990 #define G_RM_AA_SUB_SURF2 RM_AA_SUB_SURF(2)
991 #define G_RM_AA_PCL_SURF RM_AA_PCL_SURF(1)
992 #define G_RM_AA_PCL_SURF2 RM_AA_PCL_SURF(2)
993 #define G_RM_AA_OPA_TERR RM_AA_OPA_TERR(1)
994 #define G_RM_AA_OPA_TERR2 RM_AA_OPA_TERR(2)
995 #define G_RM_AA_TEX_TERR RM_AA_TEX_TERR(1)
996 #define G_RM_AA_TEX_TERR2 RM_AA_TEX_TERR(2)
997 #define G_RM_AA_SUB_TERR RM_AA_SUB_TERR(1)
998 #define G_RM_AA_SUB_TERR2 RM_AA_SUB_TERR(2)
1000 #define G_RM_RA_OPA_SURF RM_RA_OPA_SURF(1)
1001 #define G_RM_RA_OPA_SURF2 RM_RA_OPA_SURF(2)
1003 #define G_RM_ZB_OPA_SURF RM_ZB_OPA_SURF(1)
1004 #define G_RM_ZB_OPA_SURF2 RM_ZB_OPA_SURF(2)
1005 #define G_RM_ZB_XLU_SURF RM_ZB_XLU_SURF(1)
1006 #define G_RM_ZB_XLU_SURF2 RM_ZB_XLU_SURF(2)
1007 #define G_RM_ZB_OPA_DECAL RM_ZB_OPA_DECAL(1)
1008 #define G_RM_ZB_OPA_DECAL2 RM_ZB_OPA_DECAL(2)
1009 #define G_RM_ZB_XLU_DECAL RM_ZB_XLU_DECAL(1)
1010 #define G_RM_ZB_XLU_DECAL2 RM_ZB_XLU_DECAL(2)
1011 #define G_RM_ZB_CLD_SURF RM_ZB_CLD_SURF(1)
1012 #define G_RM_ZB_CLD_SURF2 RM_ZB_CLD_SURF(2)
1013 #define G_RM_ZB_OVL_SURF RM_ZB_OVL_SURF(1)
1014 #define G_RM_ZB_OVL_SURF2 RM_ZB_OVL_SURF(2)
1015 #define G_RM_ZB_PCL_SURF RM_ZB_PCL_SURF(1)
1016 #define G_RM_ZB_PCL_SURF2 RM_ZB_PCL_SURF(2)
1018 #define G_RM_OPA_SURF RM_OPA_SURF(1)
1019 #define G_RM_OPA_SURF2 RM_OPA_SURF(2)
1020 #define G_RM_XLU_SURF RM_XLU_SURF(1)
1021 #define G_RM_XLU_SURF2 RM_XLU_SURF(2)
1022 #define G_RM_CLD_SURF RM_CLD_SURF(1)
1023 #define G_RM_CLD_SURF2 RM_CLD_SURF(2)
1024 #define G_RM_TEX_EDGE RM_TEX_EDGE(1)
1025 #define G_RM_TEX_EDGE2 RM_TEX_EDGE(2)
1026 #define G_RM_PCL_SURF RM_PCL_SURF(1)
1027 #define G_RM_PCL_SURF2 RM_PCL_SURF(2)
1028 #define G_RM_ADD RM_ADD(1)
1029 #define G_RM_ADD2 RM_ADD(2)
1030 #define G_RM_NOOP RM_NOOP(1)
1031 #define G_RM_NOOP2 RM_NOOP(2)
1032 #define G_RM_VISCVG RM_VISCVG(1)
1033 #define G_RM_VISCVG2 RM_VISCVG(2)
1034 #define G_RM_OPA_CI RM_OPA_CI(1)
1035 #define G_RM_OPA_CI2 RM_OPA_CI(2)
1037 #define G_RM_CUSTOM_AA_ZB_XLU_SURF RM_CUSTOM_AA_ZB_XLU_SURF(1)
1038 #define G_RM_CUSTOM_AA_ZB_XLU_SURF2 RM_CUSTOM_AA_ZB_XLU_SURF(2)
1041 #define G_RM_FOG_SHADE_A GBL_c1(G_BL_CLR_FOG, G_BL_A_SHADE, G_BL_CLR_IN, G_BL_1MA)
1042 #define G_RM_FOG_PRIM_A GBL_c1(G_BL_CLR_FOG, G_BL_A_FOG, G_BL_CLR_IN, G_BL_1MA)
1043 #define G_RM_PASS GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)
1058 #define G_SC_NON_INTERLACE 0
1059 #define G_SC_ODD_INTERLACE 3
1060 #define G_SC_EVEN_INTERLACE 2
1063 #define G_DL_PUSH 0x00
1064 #define G_DL_NOPUSH 0x01
1069 #if defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS)
1109 unsigned short flag;
1111 unsigned char cn[4];
1119 unsigned short flag;
1128 long long int force_structure_alignment;
1136 void *SourceImagePointer;
1139 short SubImageWidth;
1140 short SubImageHeight;
1141 char SourceImageType;
1142 char SourceImageBitSize;
1143 short SourceImageOffsetS;
1144 short SourceImageOffsetT;
1156 long long int force_structure_allignment[3];
1172 typedef s32 Mtx_t[4][4];
1176 long long int force_structure_alignment;
1200 #define G_MAXZ 0x03ff
1221 long long int force_structure_alignment;
1234 # define G_MV_MMTX 2
1235 # define G_MV_PMTX 6
1236 # define G_MV_VIEWPORT 8
1237 # define G_MV_LIGHT 10
1238 # define G_MV_POINT 12
1239 # define G_MV_MATRIX 14
1240 # define G_MVO_LOOKATX (0*24)
1241 # define G_MVO_LOOKATY (1*24)
1242 # define G_MVO_L0 (2*24)
1243 # define G_MVO_L1 (3*24)
1244 # define G_MVO_L2 (4*24)
1245 # define G_MVO_L3 (5*24)
1246 # define G_MVO_L4 (6*24)
1247 # define G_MVO_L5 (7*24)
1248 # define G_MVO_L6 (8*24)
1249 # define G_MVO_L7 (9*24)
1251 # define G_MV_VIEWPORT 0x80
1252 # define G_MV_LOOKATY 0x82
1253 # define G_MV_LOOKATX 0x84
1254 # define G_MV_L0 0x86
1255 # define G_MV_L1 0x88
1256 # define G_MV_L2 0x8a
1257 # define G_MV_L3 0x8c
1258 # define G_MV_L4 0x8e
1259 # define G_MV_L5 0x90
1260 # define G_MV_L6 0x92
1261 # define G_MV_L7 0x94
1262 # define G_MV_TXTATT 0x96
1263 # define G_MV_MATRIX_1 0x9e
1264 # define G_MV_MATRIX_2 0x98
1265 # define G_MV_MATRIX_3 0x9a
1266 # define G_MV_MATRIX_4 0x9c
1277 #define G_MW_MATRIX 0x00
1278 #define G_MW_NUMLIGHT 0x02
1279 #define G_MW_CLIP 0x04
1280 #define G_MW_SEGMENT 0x06
1281 #define G_MW_FOG 0x08
1282 #define G_MW_LIGHTCOL 0x0a
1284 # define G_MW_FORCEMTX 0x0c
1286 # define G_MW_POINTS 0x0c
1288 #define G_MW_PERSPNORM 0x0e
1293 #define G_MWO_NUMLIGHT 0x00
1294 #define G_MWO_CLIP_RNX 0x04
1295 #define G_MWO_CLIP_RNY 0x0c
1296 #define G_MWO_CLIP_RPX 0x14
1297 #define G_MWO_CLIP_RPY 0x1c
1298 #define G_MWO_SEGMENT_0 0x00
1299 #define G_MWO_SEGMENT_1 0x01
1300 #define G_MWO_SEGMENT_2 0x02
1301 #define G_MWO_SEGMENT_3 0x03
1302 #define G_MWO_SEGMENT_4 0x04
1303 #define G_MWO_SEGMENT_5 0x05
1304 #define G_MWO_SEGMENT_6 0x06
1305 #define G_MWO_SEGMENT_7 0x07
1306 #define G_MWO_SEGMENT_8 0x08
1307 #define G_MWO_SEGMENT_9 0x09
1308 #define G_MWO_SEGMENT_A 0x0a
1309 #define G_MWO_SEGMENT_B 0x0b
1310 #define G_MWO_SEGMENT_C 0x0c
1311 #define G_MWO_SEGMENT_D 0x0d
1312 #define G_MWO_SEGMENT_E 0x0e
1313 #define G_MWO_SEGMENT_F 0x0f
1314 #define G_MWO_FOG 0x00
1315 #define G_MWO_aLIGHT_1 0x00
1316 #define G_MWO_bLIGHT_1 0x04
1318 #define G_MWO_aLIGHT_2 0x18
1319 #define G_MWO_bLIGHT_2 0x1c
1320 #define G_MWO_aLIGHT_3 0x30
1321 #define G_MWO_bLIGHT_3 0x34
1322 #define G_MWO_aLIGHT_4 0x48
1323 #define G_MWO_bLIGHT_4 0x4c
1324 #define G_MWO_aLIGHT_5 0x60
1325 #define G_MWO_bLIGHT_5 0x64
1326 #define G_MWO_aLIGHT_6 0x78
1327 #define G_MWO_bLIGHT_6 0x7c
1328 #define G_MWO_aLIGHT_7 0x90
1329 #define G_MWO_bLIGHT_7 0x94
1330 #define G_MWO_aLIGHT_8 0xa8
1331 #define G_MWO_bLIGHT_8 0xac
1333 #define G_MWO_aLIGHT_2 0x20
1334 #define G_MWO_bLIGHT_2 0x24
1335 #define G_MWO_aLIGHT_3 0x40
1336 #define G_MWO_bLIGHT_3 0x44
1337 #define G_MWO_aLIGHT_4 0x60
1338 #define G_MWO_bLIGHT_4 0x64
1339 #define G_MWO_aLIGHT_5 0x80
1340 #define G_MWO_bLIGHT_5 0x84
1341 #define G_MWO_aLIGHT_6 0xa0
1342 #define G_MWO_bLIGHT_6 0xa4
1343 #define G_MWO_aLIGHT_7 0xc0
1344 #define G_MWO_bLIGHT_7 0xc4
1345 #define G_MWO_aLIGHT_8 0xe0
1346 #define G_MWO_bLIGHT_8 0xe4
1348 #define G_MWO_MATRIX_XX_XY_I 0x00
1349 #define G_MWO_MATRIX_XZ_XW_I 0x04
1350 #define G_MWO_MATRIX_YX_YY_I 0x08
1351 #define G_MWO_MATRIX_YZ_YW_I 0x0c
1352 #define G_MWO_MATRIX_ZX_ZY_I 0x10
1353 #define G_MWO_MATRIX_ZZ_ZW_I 0x14
1354 #define G_MWO_MATRIX_WX_WY_I 0x18
1355 #define G_MWO_MATRIX_WZ_WW_I 0x1c
1356 #define G_MWO_MATRIX_XX_XY_F 0x20
1357 #define G_MWO_MATRIX_XZ_XW_F 0x24
1358 #define G_MWO_MATRIX_YX_YY_F 0x28
1359 #define G_MWO_MATRIX_YZ_YW_F 0x2c
1360 #define G_MWO_MATRIX_ZX_ZY_F 0x30
1361 #define G_MWO_MATRIX_ZZ_ZW_F 0x34
1362 #define G_MWO_MATRIX_WX_WY_F 0x38
1363 #define G_MWO_MATRIX_WZ_WW_F 0x3c
1364 #define G_MWO_POINT_RGBA 0x10
1365 #define G_MWO_POINT_ST 0x14
1366 #define G_MWO_POINT_XYSCREEN 0x18
1367 #define G_MWO_POINT_ZSCREEN 0x1c
1380 unsigned char col[3];
1382 unsigned char colc[3];
1389 unsigned char col[3];
1391 unsigned char colc[3];
1401 long long int force_structure_alignment[2];
1406 long long int force_structure_alignment[1];
1460 long int force_structure_alignment[4];
1463 #define gdSPDefLights0(ar,ag,ab) \
1464 { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \
1465 {{{ { 0, 0, 0},0,{ 0, 0, 0},0,{ 0, 0, 0},0}}} }
1466 #define gdSPDefLights1(ar,ag,ab,r1,g1,b1,x1,y1,z1) \
1467 { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \
1468 {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}} }
1469 #define gdSPDefLights2(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2) \
1470 { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \
1471 {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \
1472 {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}} }
1473 #define gdSPDefLights3(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3) \
1474 { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \
1475 {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \
1476 {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \
1477 {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}} }
1478 #define gdSPDefLights4(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3,r4,g4,b4,x4,y4,z4) \
1479 { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \
1480 {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \
1481 {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \
1482 {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}, \
1483 {{ {r4,g4,b4},0,{r4,g4,b4},0,{x4,y4,z4},0}}} }
1484 #define gdSPDefLights5(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3,r4,g4,b4,x4,y4,z4,r5,g5,b5,x5,y5,z5) \
1485 { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \
1486 {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \
1487 {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \
1488 {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}, \
1489 {{ {r4,g4,b4},0,{r4,g4,b4},0,{x4,y4,z4},0}}, \
1490 {{ {r5,g5,b5},0,{r5,g5,b5},0,{x5,y5,z5},0}}} }
1493 #define gdSPDefLights6(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3,r4,g4,b4,x4,y4,z4,r5,g5,b5,x5,y5,z5,r6,g6,b6,x6,y6,z6) \
1494 { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \
1495 {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \
1496 {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \
1497 {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}, \
1498 {{ {r4,g4,b4},0,{r4,g4,b4},0,{x4,y4,z4},0}}, \
1499 {{ {r5,g5,b5},0,{r5,g5,b5},0,{x5,y5,z5},0}}, \
1500 {{ {r6,g6,b6},0,{r6,g6,b6},0,{x6,y6,z6},0}}} }
1503 #define gdSPDefLights7(ar,ag,ab,r1,g1,b1,x1,y1,z1,r2,g2,b2,x2,y2,z2,r3,g3,b3,x3,y3,z3,r4,g4,b4,x4,y4,z4,r5,g5,b5,x5,y5,z5,r6,g6,b6,x6,y6,z6,r7,g7,b7,x7,y7,z7) \
1504 { {{ {ar,ag,ab},0,{ar,ag,ab},0}}, \
1505 {{{ {r1,g1,b1},0,{r1,g1,b1},0,{x1,y1,z1},0}}, \
1506 {{ {r2,g2,b2},0,{r2,g2,b2},0,{x2,y2,z2},0}}, \
1507 {{ {r3,g3,b3},0,{r3,g3,b3},0,{x3,y3,z3},0}}, \
1508 {{ {r4,g4,b4},0,{r4,g4,b4},0,{x4,y4,z4},0}}, \
1509 {{ {r5,g5,b5},0,{r5,g5,b5},0,{x5,y5,z5},0}}, \
1510 {{ {r6,g6,b6},0,{r6,g6,b6},0,{x6,y6,z6},0}}, \
1511 {{ {r7,g7,b7},0,{r7,g7,b7},0,{x7,y7,z7},0}}} }
1514 #define gdSPDefLookAt(rightx,righty,rightz,upx,upy,upz) \
1515 { {{ {{0,0,0},0,{0,0,0},0,{rightx,righty,rightz},0}}, \
1516 { {{0,0x80,0},0,{0,0x80,0},0,{upx,upy,upz},0}}} }
1526 unsigned int len:16;
1543 unsigned char param:8;
1569 unsigned int data:32;
1577 unsigned int data:32;
1582 unsigned char lodscale;
1617 unsigned int muxs0:24;
1618 unsigned int muxs1:32;
1624 unsigned char prim_min_level;
1625 unsigned char prim_level;
1626 unsigned long color;
1646 unsigned int pad0:1;
1647 unsigned int line:9;
1648 unsigned int tmem:9;
1649 unsigned int pad1:5;
1650 unsigned int tile:3;
1651 unsigned int palette:4;
1654 unsigned int maskt:4;
1655 unsigned int shiftt:4;
1658 unsigned int masks:4;
1659 unsigned int shifts:4;
1667 unsigned int tile:3;
1672 typedef Gloadtile Gloadblock;
1674 typedef Gloadtile Gsettilesize;
1676 typedef Gloadtile Gloadtlut;
1682 unsigned int pad1:5;
1683 unsigned int tile:3;
1688 unsigned int dsdx:16;
1689 unsigned int dtdy:16;
1703 #define MakeTexRect(xh,yh,flip,tile,xl,yl,s,t,dsdx,dtdy) \
1704 G_TEXRECT, xh, yh, 0, flip, 0, tile, xl, yl, s, t, dsdx, dtdy
1725 #if !defined(F3D_OLD) && IS_BIG_ENDIAN && !IS_64_BIT
1731 GsetothermodeH setothermodeH;
1732 GsetothermodeL setothermodeL;
1734 Gperspnorm perspnorm;
1736 Gsetcombine setcombine;
1741 Gsettilesize settilesize;
1744 long long int force_structure_alignment;
1754 #define gDma0p(pkt, c, s, l) \
1756 Gfx *_g = (Gfx *)(pkt); \
1758 _g->words.w0 = _SHIFTL((c), 24, 8) | _SHIFTL((l), 0, 24); \
1759 _g->words.w1 = (uintptr_t)(s); \
1762 #define gsDma0p(c, s, l) \
1764 _SHIFTL((c), 24, 8) | _SHIFTL((l), 0, 24), (uintptr_t)(s) \
1767 #define gDma1p(pkt, c, s, l, p) \
1769 Gfx *_g = (Gfx *)(pkt); \
1771 _g->words.w0 = (_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | \
1772 _SHIFTL((l), 0, 16)); \
1773 _g->words.w1 = (uintptr_t)(s); \
1776 #define gsDma1p(c, s, l, p) \
1778 (_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | \
1779 _SHIFTL((l), 0, 16)), \
1783 #define gDma2p(pkt, c, adrs, len, idx, ofs) \
1785 Gfx *_g = (Gfx *)(pkt); \
1786 _g->words.w0 = (_SHIFTL((c),24,8)|_SHIFTL(((len)-1)/8,19,5)| \
1787 _SHIFTL((ofs)/8,8,8)|_SHIFTL((idx),0,8)); \
1788 _g->words.w1 = (uintptr_t)(adrs); \
1790 #define gsDma2p(c, adrs, len, idx, ofs) \
1792 (_SHIFTL((c),24,8)|_SHIFTL(((len)-1)/8,19,5)| \
1793 _SHIFTL((ofs)/8,8,8)|_SHIFTL((idx),0,8)), \
1797 #define gSPNoOp(pkt) gDma0p(pkt, G_SPNOOP, 0, 0)
1798 #define gsSPNoOp() gsDma0p(G_SPNOOP, 0, 0)
1801 # define gSPMatrix(pkt, m, p) \
1802 gDma2p((pkt),G_MTX,(m),sizeof(Mtx),(p)^G_MTX_PUSH,0)
1803 # define gsSPMatrix(m, p) \
1804 gsDma2p( G_MTX,(m),sizeof(Mtx),(p)^G_MTX_PUSH,0)
1806 # define gSPMatrix(pkt, m, p) gDma1p(pkt, G_MTX, m, sizeof(Mtx), p)
1807 # define gsSPMatrix(m, p) gsDma1p(G_MTX, m, sizeof(Mtx), p)
1810 #if defined(F3DEX_GBI_2)
1820 # define gSPVertex(pkt, v, n, v0) \
1822 Gfx *_g = (Gfx *)(pkt); \
1824 _SHIFTL(G_VTX,24,8)|_SHIFTL((n),12,8)|_SHIFTL((v0)+(n),1,7); \
1825 _g->words.w1 = (uintptr_t)(v); \
1827 # define gsSPVertex(v, n, v0) \
1829 (_SHIFTL(G_VTX,24,8)|_SHIFTL((n),12,8)|_SHIFTL((v0)+(n),1,7)), \
1832 #elif (defined(F3DEX_GBI)||defined(F3DLP_GBI))
1842 # define gSPVertex(pkt, v, n, v0) \
1843 gDma1p((pkt),G_VTX,(v),((n)<<10)|(sizeof(Vtx)*(n)-1),(v0)*2)
1844 # define gsSPVertex(v, n, v0) \
1845 gsDma1p(G_VTX,(v),((n)<<10)|(sizeof(Vtx)*(n)-1),(v0)*2)
1847 # define gSPVertex(pkt, v, n, v0) \
1848 gDma1p(pkt, G_VTX, v, sizeof(Vtx)*(n),((n)-1)<<4|(v0))
1849 # define gsSPVertex(v, n, v0) \
1850 gsDma1p(G_VTX, v, sizeof(Vtx)*(n), ((n)-1)<<4|(v0))
1855 # define gSPViewport(pkt, v) \
1856 gDma2p((pkt), G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT, 0)
1857 # define gsSPViewport(v) \
1858 gsDma2p( G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT, 0)
1860 # define gSPViewport(pkt,v) \
1861 gDma1p((pkt), G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT)
1862 # define gsSPViewport(v) \
1863 gsDma1p( G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT)
1866 #define gSPDisplayList(pkt,dl) gDma1p(pkt,G_DL,dl,0,G_DL_PUSH)
1867 #define gsSPDisplayList( dl) gsDma1p( G_DL,dl,0,G_DL_PUSH)
1869 #define gSPBranchList(pkt,dl) gDma1p(pkt,G_DL,dl,0,G_DL_NOPUSH)
1870 #define gsSPBranchList( dl) gsDma1p( G_DL,dl,0,G_DL_NOPUSH)
1872 #define gSPSprite2DBase(pkt, s) gDma1p(pkt, G_SPRITE2D_BASE, s, sizeof(uSprite), 0)
1873 #define gsSPSprite2DBase(s) gsDma1p(G_SPRITE2D_BASE, s, sizeof(uSprite), 0)
1878 #define gImmp0(pkt, c) \
1880 Gfx *_g = (Gfx *)(pkt); \
1882 _g->words.w0 = _SHIFTL((c), 24, 8); \
1885 #define gsImmp0(c) \
1887 _SHIFTL((c), 24, 8) \
1890 #define gImmp1(pkt, c, p0) \
1892 Gfx *_g = (Gfx *)(pkt); \
1894 _g->words.w0 = _SHIFTL((c), 24, 8); \
1895 _g->words.w1 = (uintptr_t)(p0); \
1898 #define gsImmp1(c, p0) \
1900 _SHIFTL((c), 24, 8), (uintptr_t)(p0) \
1903 #define gImmp2(pkt, c, p0, p1) \
1905 Gfx *_g = (Gfx *)(pkt); \
1907 _g->words.w0 = _SHIFTL((c), 24, 8); \
1908 _g->words.w1 = _SHIFTL((p0), 16, 16) | _SHIFTL((p1), 8, 8); \
1911 #define gsImmp2(c, p0, p1) \
1913 _SHIFTL((c), 24, 8), _SHIFTL((p0), 16, 16) | _SHIFTL((p1), 8, 8)\
1916 #define gImmp3(pkt, c, p0, p1, p2) \
1918 Gfx *_g = (Gfx *)(pkt); \
1920 _g->words.w0 = _SHIFTL((c), 24, 8); \
1921 _g->words.w1 = (_SHIFTL((p0), 16, 16) | _SHIFTL((p1), 8, 8) | \
1922 _SHIFTL((p2), 0, 8)); \
1925 #define gsImmp3(c, p0, p1, p2) \
1927 _SHIFTL((c), 24, 8), (_SHIFTL((p0), 16, 16) | \
1928 _SHIFTL((p1), 8, 8) | _SHIFTL((p2), 0, 8))\
1931 #define gImmp21(pkt, c, p0, p1, dat) \
1933 Gfx *_g = (Gfx *)(pkt); \
1935 _g->words.w0 = (_SHIFTL((c), 24, 8) | _SHIFTL((p0), 8, 16) | \
1936 _SHIFTL((p1), 0, 8)); \
1937 _g->words.w1 = (uintptr_t) (dat); \
1940 #define gsImmp21(c, p0, p1, dat) \
1942 _SHIFTL((c), 24, 8) | _SHIFTL((p0), 8, 16) | _SHIFTL((p1), 0, 8),\
1947 #define gMoveWd(pkt, index, offset, data) \
1948 gDma1p((pkt), G_MOVEWORD, data, offset, index)
1949 #define gsMoveWd( index, offset, data) \
1950 gsDma1p( G_MOVEWORD, data, offset, index)
1952 #define gMoveWd(pkt, index, offset, data) \
1953 gImmp21((pkt), G_MOVEWORD, offset, index, data)
1954 #define gsMoveWd( index, offset, data) \
1955 gsImmp21( G_MOVEWORD, offset, index, data)
1960 #define gSPSprite2DScaleFlip(pkt, sx, sy, fx, fy) \
1962 Gfx *_g = (Gfx *)(pkt); \
1964 _g->words.w0 = (_SHIFTL(G_SPRITE2D_SCALEFLIP, 24, 8) | \
1965 _SHIFTL((fx), 8, 8) | \
1966 _SHIFTL((fy), 0, 8)); \
1967 _g->words.w1 = (_SHIFTL((sx), 16, 16) | \
1968 _SHIFTL((sy), 0, 16)); \
1971 #define gsSPSprite2DScaleFlip(sx, sy, fx, fy) \
1973 (_SHIFTL(G_SPRITE2D_SCALEFLIP, 24, 8) | \
1974 _SHIFTL((fx), 8, 8) | \
1975 _SHIFTL((fy), 0, 8)), \
1976 (_SHIFTL((sx), 16, 16) | \
1977 _SHIFTL((sy), 0, 16)) \
1980 #define gSPSprite2DDraw(pkt, px, py) \
1982 Gfx *_g = (Gfx *)(pkt); \
1984 _g->words.w0 = (_SHIFTL(G_SPRITE2D_DRAW, 24, 8)); \
1985 _g->words.w1 = (_SHIFTL((px), 16, 16) | \
1986 _SHIFTL((py), 0, 16)); \
1989 #define gsSPSprite2DDraw(px, py) \
1991 (_SHIFTL(G_SPRITE2D_DRAW, 24, 8)), \
1992 (_SHIFTL((px), 16, 16) | \
1993 _SHIFTL((py), 0, 16)) \
2001 #if (defined(F3DLP_GBI)||defined(F3DEX_GBI))
2002 # define __gsSP1Triangle_w1(v0, v1, v2) \
2003 (_SHIFTL((v0)*2,16,8)|_SHIFTL((v1)*2,8,8)|_SHIFTL((v2)*2,0,8))
2004 # define __gsSP1Triangle_w1f(v0, v1, v2, flag) \
2005 (((flag) == 0) ? __gsSP1Triangle_w1(v0, v1, v2): \
2006 ((flag) == 1) ? __gsSP1Triangle_w1(v1, v2, v0): \
2007 __gsSP1Triangle_w1(v2, v0, v1))
2008 # define __gsSPLine3D_w1(v0, v1, wd) \
2009 (_SHIFTL((v0)*2,16,8)|_SHIFT((v1)*2,8,8)|_SHIFT((wd),0,8))
2010 # define __gsSPLine3D_w1f(v0, v1, wd, flag) \
2011 (((flag) == 0) ? __gsSPLine3D_w1(v0, v1, wd): \
2012 __gsSPLine3D_w1(v1, v0, wd))
2015 #define __gsSP1Quadrangle_w1(v0, v1, v2, v3) \
2016 (_SHIFTL((v3)*2,24,8)|_SHIFTL((v0)*2,16,8)|\
2017 _SHIFTL((v1)*2,8,8)|_SHIFTL((v2)*2,0,8))
2019 # define __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag) \
2020 (((flag) == 0) ? __gsSP1Triangle_w1(v0, v1, v2): \
2021 ((flag) == 1) ? __gsSP1Triangle_w1(v1, v2, v3): \
2022 ((flag) == 2) ? __gsSP1Triangle_w1(v2, v3, v0): \
2023 __gsSP1Triangle_w1(v3, v0, v1))
2024 # define __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag) \
2025 (((flag) == 0) ? __gsSP1Triangle_w1(v0, v2, v3): \
2026 ((flag) == 1) ? __gsSP1Triangle_w1(v1, v3, v0): \
2027 ((flag) == 2) ? __gsSP1Triangle_w1(v2, v0, v1): \
2028 __gsSP1Triangle_w1(v3, v1, v2))
2030 # define __gsSP1Triangle_w1f(v0, v1, v2, flag) \
2031 (_SHIFTL((flag), 24,8)|_SHIFTL((v0)*10,16,8)| \
2032 _SHIFTL((v1)*10, 8,8)|_SHIFTL((v2)*10, 0,8))
2033 # define __gsSPLine3D_w1f(v0, v1, wd, flag) \
2034 (_SHIFTL((flag), 24,8)|_SHIFTL((v0)*10,16,8)| \
2035 _SHIFTL((v1)*10, 8,8)|_SHIFTL((wd), 0,8))
2042 #define gSP1Triangle(pkt, v0, v1, v2, flag) \
2044 Gfx *_g = (Gfx *)(pkt); \
2046 _g->words.w0 = _SHIFTL(G_TRI1, 24, 8)| \
2047 __gsSP1Triangle_w1f(v0, v1, v2, flag); \
2050 #define gsSP1Triangle(v0, v1, v2, flag) \
2052 _SHIFTL(G_TRI1, 24, 8)|__gsSP1Triangle_w1f(v0, v1, v2, flag), \
2059 #define gSPLine3D(pkt, v0, v1, flag) \
2061 Gfx *_g = (Gfx *)(pkt); \
2063 _g->words.w0 = _SHIFTL(G_LINE3D, 24, 8)| \
2064 __gsSPLine3D_w1f(v0, v1, 0, flag); \
2067 #define gsSPLine3D(v0, v1, flag) \
2069 _SHIFTL(G_LINE3D, 24, 8)|__gsSPLine3D_w1f(v0, v1, 0, flag), \
2082 #define gSPLineW3D(pkt, v0, v1, wd, flag) \
2084 Gfx *_g = (Gfx *)(pkt); \
2086 _g->words.w0 = _SHIFTL(G_LINE3D, 24, 8)| \
2087 __gsSPLine3D_w1f(v0, v1, wd, flag); \
2090 #define gsSPLineW3D(v0, v1, wd, flag) \
2092 _SHIFTL(G_LINE3D, 24, 8)|__gsSPLine3D_w1f(v0, v1, wd, flag), \
2099 #define gSP1Quadrangle(pkt, v0, v1, v2, v3, flag) \
2101 Gfx *_g = (Gfx *)(pkt); \
2103 _g->words.w0 = (_SHIFTL(G_QUAD, 24, 8)| \
2104 __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)); \
2105 _g->words.w1 = __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag); \
2108 #define gsSP1Quadrangle(v0, v1, v2, v3, flag) \
2110 (_SHIFTL(G_QUAD, 24, 8)| \
2111 __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)), \
2112 __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag) \
2119 #define gSP1Triangle(pkt, v0, v1, v2, flag) \
2121 Gfx *_g = (Gfx *)(pkt); \
2123 _g->words.w0 = _SHIFTL(G_TRI1, 24, 8); \
2124 _g->words.w1 = __gsSP1Triangle_w1f(v0, v1, v2, flag); \
2126 #define gsSP1Triangle(v0, v1, v2, flag) \
2128 _SHIFTL(G_TRI1, 24, 8), \
2129 __gsSP1Triangle_w1f(v0, v1, v2, flag) \
2135 #define gSPLine3D(pkt, v0, v1, flag) \
2137 Gfx *_g = (Gfx *)(pkt); \
2139 _g->words.w0 = _SHIFTL(G_LINE3D, 24, 8); \
2140 _g->words.w1 = __gsSPLine3D_w1f(v0, v1, 0, flag); \
2142 #define gsSPLine3D(v0, v1, flag) \
2144 _SHIFTL(G_LINE3D, 24, 8), \
2145 __gsSPLine3D_w1f(v0, v1, 0, flag) \
2157 #define gSPLineW3D(pkt, v0, v1, wd, flag) \
2159 Gfx *_g = (Gfx *)(pkt); \
2161 _g->words.w0 = _SHIFTL(G_LINE3D, 24, 8); \
2162 _g->words.w1 = __gsSPLine3D_w1f(v0, v1, wd, flag); \
2164 #define gsSPLineW3D(v0, v1, wd, flag) \
2166 _SHIFTL(G_LINE3D, 24, 8), \
2167 __gsSPLine3D_w1f(v0, v1, wd, flag) \
2177 #define gSP1Quadrangle(v0, v1, v2, v3, flag) \
2179 Gfx *_g = (Gfx *)(pkt); \
2181 _g->words.w0 = _SHIFTL(G_QUAD, 24, 8); \
2182 _g->words.w1 = __gsSP1Quadrangle_w1(v0, v1, v2, v3); \
2185 #define gsSP1Quadrangle(v0, v1, v2, v3, flag) \
2187 _SHIFTL(G_QUAD, 24, 8), \
2188 __gsSP1Quadrangle_w1(v0, v1, v2, v3) \
2194 #define gSP1Quadrangle(pkt, v0, v1, v2, v3, flag) \
2196 Gfx *_g = (Gfx *)(pkt); \
2198 _g->words.w0 = (_SHIFTL(G_TRI2, 24, 8)| \
2199 __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)); \
2200 _g->words.w1 = __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag); \
2203 #define gsSP1Quadrangle(v0, v1, v2, v3, flag) \
2205 (_SHIFTL(G_TRI2, 24, 8)| \
2206 __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)), \
2207 __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag) \
2212 #if (defined(F3DLP_GBI)||defined(F3DEX_GBI))
2216 #define gSP2Triangles(pkt, v00, v01, v02, flag0, v10, v11, v12, flag1) \
2218 Gfx *_g = (Gfx *)(pkt); \
2220 _g->words.w0 = (_SHIFTL(G_TRI2, 24, 8)| \
2221 __gsSP1Triangle_w1f(v00, v01, v02, flag0)); \
2222 _g->words.w1 = __gsSP1Triangle_w1f(v10, v11, v12, flag1); \
2225 #define gsSP2Triangles(v00, v01, v02, flag0, v10, v11, v12, flag1) \
2227 (_SHIFTL(G_TRI2, 24, 8)| \
2228 __gsSP1Triangle_w1f(v00, v01, v02, flag0)), \
2229 __gsSP1Triangle_w1f(v10, v11, v12, flag1) \
2232 #define gSP2Triangles(pkt, v00, v01, v02, flag0, v10, v11, v12, flag1) \
2234 gSP1Triangle(pkt, v00, v01, v02, flag0); \
2235 gSP1Triangle(pkt, v10, v11, v12, flag1); \
2237 #define gsSP2Triangles(v00, v01, v02, flag0, v10, v11, v12, flag1) \
2238 gsSP1Triangle(v00, v01, v02, flag0), \
2239 gsSP1Triangle(v10, v11, v12, flag1)
2243 #if (defined(F3DEX_GBI)||defined(F3DLP_GBI))
2244 #define gSPCullDisplayList(pkt,vstart,vend) \
2246 Gfx *_g = (Gfx *)(pkt); \
2248 _g->words.w0 = _SHIFTL(G_CULLDL, 24, 8) | \
2249 _SHIFTL((vstart)*2, 0, 16); \
2250 _g->words.w1 = _SHIFTL((vend)*2, 0, 16); \
2253 #define gsSPCullDisplayList(vstart,vend) \
2255 _SHIFTL(G_CULLDL, 24, 8) | _SHIFTL((vstart)*2, 0, 16), \
2256 _SHIFTL((vend)*2, 0, 16) \
2260 #define gSPCullDisplayList(pkt,vstart,vend) \
2262 Gfx *_g = (Gfx *)(pkt); \
2264 _g->words.w0 = _SHIFTL(G_CULLDL, 24, 8) | \
2265 ((0x0f & (vstart))*40); \
2266 _g->words.w1 = (unsigned int)((0x0f & ((vend)+1))*40); \
2269 #define gsSPCullDisplayList(vstart,vend) \
2271 _SHIFTL(G_CULLDL, 24, 8) | ((0x0f & (vstart))*40), \
2272 ((0x0f & ((vend)+1))*40) \
2276 #define gSPSegment(pkt, segment, base) \
2277 gMoveWd(pkt, G_MW_SEGMENT, (segment)*4, base)
2278 #define gsSPSegment(segment, base) \
2279 gsMoveWd( G_MW_SEGMENT, (segment)*4, base)
2284 #define FR_NEG_FRUSTRATIO_1 0x00000001
2285 #define FR_POS_FRUSTRATIO_1 0x0000ffff
2286 #define FR_NEG_FRUSTRATIO_2 0x00000002
2287 #define FR_POS_FRUSTRATIO_2 0x0000fffe
2288 #define FR_NEG_FRUSTRATIO_3 0x00000003
2289 #define FR_POS_FRUSTRATIO_3 0x0000fffd
2290 #define FR_NEG_FRUSTRATIO_4 0x00000004
2291 #define FR_POS_FRUSTRATIO_4 0x0000fffc
2292 #define FR_NEG_FRUSTRATIO_5 0x00000005
2293 #define FR_POS_FRUSTRATIO_5 0x0000fffb
2294 #define FR_NEG_FRUSTRATIO_6 0x00000006
2295 #define FR_POS_FRUSTRATIO_6 0x0000fffa
2299 #define gSPClipRatio(pkt, r) \
2301 gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RNX, FR_NEG_##r); \
2302 gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RNY, FR_NEG_##r); \
2303 gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RPX, FR_POS_##r); \
2304 gMoveWd(pkt, G_MW_CLIP, G_MWO_CLIP_RPY, FR_POS_##r); \
2307 #define gsSPClipRatio(r) \
2308 gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RNX, FR_NEG_##r), \
2309 gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RNY, FR_NEG_##r), \
2310 gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RPX, FR_POS_##r), \
2311 gsMoveWd(G_MW_CLIP, G_MWO_CLIP_RPY, FR_POS_##r)
2321 #define gSPInsertMatrix(pkt, where, num) \
2322 ERROR!! gSPInsertMatrix is no longer supported.
2323 #define gsSPInsertMatrix(where, num) \
2324 ERROR!! gsSPInsertMatrix is no longer supported.
2326 #define gSPInsertMatrix(pkt, where, num) \
2327 gMoveWd(pkt, G_MW_MATRIX, where, num)
2328 #define gsSPInsertMatrix(where, num) \
2329 gsMoveWd(G_MW_MATRIX, where, num)
2338 #define gSPForceMatrix(pkt, mptr) \
2339 { gDma2p((pkt),G_MOVEMEM,(mptr),sizeof(Mtx),G_MV_MATRIX,0); \
2340 gMoveWd((pkt), G_MW_FORCEMTX,0,0x00010000); \
2342 #define gsSPForceMatrix(mptr) \
2343 gsDma2p(G_MOVEMEM,(mptr),sizeof(Mtx),G_MV_MATRIX,0), \
2344 gsMoveWd(G_MW_FORCEMTX,0,0x00010000)
2347 #define gSPForceMatrix(pkt, mptr) \
2349 gDma1p(pkt, G_MOVEMEM, mptr, 16, G_MV_MATRIX_1); \
2350 gDma1p(pkt, G_MOVEMEM, (char *)(mptr)+16, 16, G_MV_MATRIX_2); \
2351 gDma1p(pkt, G_MOVEMEM, (char *)(mptr)+32, 16, G_MV_MATRIX_3); \
2352 gDma1p(pkt, G_MOVEMEM, (char *)(mptr)+48, 16, G_MV_MATRIX_4); \
2354 #define gsSPForceMatrix(mptr) \
2355 gsDma1p( G_MOVEMEM, mptr, 16, G_MV_MATRIX_1), \
2356 gsDma1p( G_MOVEMEM, (char *)(mptr)+16, 16, G_MV_MATRIX_2), \
2357 gsDma1p( G_MOVEMEM, (char *)(mptr)+32, 16, G_MV_MATRIX_3), \
2358 gsDma1p( G_MOVEMEM, (char *)(mptr)+48, 16, G_MV_MATRIX_4)
2368 #if (defined(F3DEX_GBI)||defined(F3DLP_GBI))
2369 # define gSPModifyVertex(pkt, vtx, where, val) \
2371 Gfx *_g = (Gfx *)(pkt); \
2372 _g->words.w0 = (_SHIFTL(G_MODIFYVTX,24,8)| \
2373 _SHIFTL((where),16,8)|_SHIFTL((vtx)*2,0,16)); \
2374 _g->words.w1 = (unsigned int)(val); \
2376 # define gsSPModifyVertex(vtx, where, val) \
2378 _SHIFTL(G_MODIFYVTX,24,8)| \
2379 _SHIFTL((where),16,8)|_SHIFTL((vtx)*2,0,16), \
2380 (unsigned int)(val) \
2383 # define gSPModifyVertex(pkt, vtx, where, val) \
2384 gMoveWd(pkt, G_MW_POINTS, (vtx)*40+(where), val)
2385 # define gsSPModifyVertex(vtx, where, val) \
2386 gsMoveWd(G_MW_POINTS, (vtx)*40+(where), val)
2389 #if (defined(F3DEX_GBI)||defined(F3DLP_GBI))
2401 #define G_BZ_PERSP 0
2402 #define G_BZ_ORTHO 1
2404 #define G_DEPTOZSrg(zval, near, far, flag, zmin, zmax) \
2405 (((unsigned int)FTOFIX32(((flag) == G_BZ_PERSP ? \
2406 (1.0f-(float)(near)/(float)(zval)) / \
2407 (1.0f-(float)(near)/(float)(far )) : \
2408 ((float)(zval) - (float)(near)) / \
2409 ((float)(far ) - (float)(near))))) * \
2410 (((int)((zmax) - (zmin)))&~1) + (int)FTOFIX32(zmin))
2412 #define G_DEPTOZS(zval, near, far, flag) \
2413 G_DEPTOZSrg(zval, near, far, flag, 0, G_MAXZ)
2415 #define gSPBranchLessZrg(pkt, dl, vtx, zval, near, far, flag, zmin, zmax) \
2417 Gfx *_g = (Gfx *)(pkt); \
2418 _g->words.w0 = _SHIFTL(G_RDPHALF_1,24,8); \
2419 _g->words.w1 = (uintptr_t)(dl); \
2420 _g = (Gfx *)(pkt); \
2421 _g->words.w0 = (_SHIFTL(G_BRANCH_Z,24,8)| \
2422 _SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12)); \
2423 _g->words.w1 = G_DEPTOZSrg(zval, near, far, flag, zmin, zmax); \
2426 #define gsSPBranchLessZrg(dl, vtx, zval, near, far, flag, zmin, zmax) \
2427 {{ _SHIFTL(G_RDPHALF_1,24,8), \
2428 (uintptr_t)(dl), }}, \
2429 {{ _SHIFTL(G_BRANCH_Z,24,8)|_SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12),\
2430 G_DEPTOZSrg(zval, near, far, flag, zmin, zmax), }}
2432 #define gSPBranchLessZ(pkt, dl, vtx, zval, near, far, flag) \
2433 gSPBranchLessZrg(pkt, dl, vtx, zval, near, far, flag, 0, G_MAXZ)
2434 #define gsSPBranchLessZ(dl, vtx, zval, near, far, flag) \
2435 gsSPBranchLessZrg(dl, vtx, zval, near, far, flag, 0, G_MAXZ)
2444 #define gSPBranchLessZraw(pkt, dl, vtx, zval) \
2446 Gfx *_g = (Gfx *)(pkt); \
2447 _g->words.w0 = _SHIFTL(G_RDPHALF_1,24,8); \
2448 _g->words.w1 = (uintptr_t)(dl); \
2449 _g = (Gfx *)(pkt); \
2450 _g->words.w0 = (_SHIFTL(G_BRANCH_Z,24,8)| \
2451 _SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12)); \
2452 _g->words.w1 = (unsigned int)(zval); \
2455 #define gsSPBranchLessZraw(dl, vtx, zval) \
2456 {{ _SHIFTL(G_RDPHALF_1,24,8), \
2457 (uintptr_t)(dl), }}, \
2458 {{ _SHIFTL(G_BRANCH_Z,24,8)|_SHIFTL((vtx)*5,12,12)|_SHIFTL((vtx)*2,0,12),\
2459 (unsigned int)(zval), }}
2467 #define gSPLoadUcodeEx(pkt, uc_start, uc_dstart, uc_dsize) \
2469 Gfx *_g = (Gfx *)(pkt); \
2470 _g->words.w0 = _SHIFTL(G_RDPHALF_1,24,8); \
2471 _g->words.w1 = (uintptr_t)(uc_dstart); \
2472 _g = (Gfx *)(pkt); \
2473 _g->words.w0 = (_SHIFTL(G_LOAD_UCODE,24,8)| \
2474 _SHIFTL((int)(uc_dsize)-1,0,16)); \
2475 _g->words.w1 = (uintptr_t)(uc_start); \
2478 #define gsSPLoadUcodeEx(uc_start, uc_dstart, uc_dsize) \
2479 {{ _SHIFTL(G_RDPHALF_1,24,8), \
2480 (uintptr_t)(uc_dstart), }}, \
2481 {{ _SHIFTL(G_LOAD_UCODE,24,8)| \
2482 _SHIFTL((int)(uc_dsize)-1,0,16), \
2483 (uintptr_t)(uc_start), }}
2485 #define gSPLoadUcode(pkt, uc_start, uc_dstart) \
2486 gSPLoadUcodeEx((pkt), (uc_start), (uc_dstart), SP_UCODE_DATA_SIZE)
2487 #define gsSPLoadUcode(uc_start, uc_dstart) \
2488 gsSPLoadUcodeEx((uc_start), (uc_dstart), SP_UCODE_DATA_SIZE)
2490 #define gSPLoadUcodeL(pkt, ucode) \
2491 gSPLoadUcode((pkt), OS_K0_TO_PHYSICAL(&##ucode##TextStart), \
2492 OS_K0_TO_PHYSICAL(&##ucode##DataStart))
2493 #define gsSPLoadUcodeL(ucode) \
2494 gsSPLoadUcode(OS_K0_TO_PHYSICAL(&##ucode##TextStart), \
2495 OS_K0_TO_PHYSICAL(&##ucode##DataStart))
2502 #define gSPDma_io(pkt, flag, dmem, dram, size) \
2504 Gfx *_g = (Gfx *)(pkt); \
2505 _g->words.w0 = _SHIFTL(G_DMA_IO,24,8)|_SHIFTL((flag),23,1)| \
2506 _SHIFTL((dmem)/8,13,10)|_SHIFTL((size)-1,0,12); \
2507 _g->words.w1 = (uintptr_t)(dram); \
2510 #define gsSPDma_io(flag, dmem, dram, size) \
2512 _SHIFTL(G_DMA_IO,24,8)|_SHIFTL((flag),23,1)| \
2513 _SHIFTL((dmem)/8,13,10)|_SHIFTL((size)-1,0,12), \
2517 #define gSPDmaRead(pkt,dmem,dram,size) gSPDma_io((pkt),0,(dmem),(dram),(size))
2518 #define gsSPDmaRead(dmem,dram,size) gsSPDma_io(0,(dmem),(dram),(size))
2519 #define gSPDmaWrite(pkt,dmem,dram,size) gSPDma_io((pkt),1,(dmem),(dram),(size))
2520 #define gsSPDmaWrite(dmem,dram,size) gsSPDma_io(1,(dmem),(dram),(size))
2527 # define NUML(n) ((n)*24)
2529 # define NUML(n) (((n)+1)*32 + 0x80000000)
2531 #define NUMLIGHTS_0 1
2532 #define NUMLIGHTS_1 1
2533 #define NUMLIGHTS_2 2
2534 #define NUMLIGHTS_3 3
2535 #define NUMLIGHTS_4 4
2536 #define NUMLIGHTS_5 5
2537 #define NUMLIGHTS_6 6
2538 #define NUMLIGHTS_7 7
2544 #define gSPNumLights(pkt, n) \
2545 gMoveWd(pkt, G_MW_NUMLIGHT, G_MWO_NUMLIGHT, NUML(n))
2546 #define gsSPNumLights(n) \
2547 gsMoveWd( G_MW_NUMLIGHT, G_MWO_NUMLIGHT, NUML(n))
2566 # define gSPLight(pkt, l, n) \
2567 gDma2p((pkt),G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,(n)*24+24)
2568 # define gsSPLight(l, n) \
2569 gsDma2p( G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,(n)*24+24)
2571 # define gSPLight(pkt, l, n) \
2572 gDma1p(pkt, G_MOVEMEM, l, sizeof(Light),((n)-1)*2+G_MV_L0)
2573 # define gsSPLight(l, n) \
2574 gsDma1p( G_MOVEMEM, l, sizeof(Light),((n)-1)*2+G_MV_L0)
2582 #define gSPLightColor(pkt, n, col) \
2584 gMoveWd(pkt, G_MW_LIGHTCOL, G_MWO_a##n, col); \
2585 gMoveWd(pkt, G_MW_LIGHTCOL, G_MWO_b##n, col); \
2587 #define gsSPLightColor(n, col) \
2588 gsMoveWd(G_MW_LIGHTCOL, G_MWO_a##n, col), \
2589 gsMoveWd(G_MW_LIGHTCOL, G_MWO_b##n, col)
2593 #define gSPSetLights0(pkt,name) \
2595 gSPNumLights(pkt,NUMLIGHTS_0); \
2596 gSPLight(pkt,&name.l[0],1); \
2597 gSPLight(pkt,&name.a,2); \
2599 #define gsSPSetLights0(name) \
2600 gsSPNumLights(NUMLIGHTS_0), \
2601 gsSPLight(&name.l[0],1), \
2602 gsSPLight(&name.a,2)
2604 #define gSPSetLights1(pkt,name) \
2606 gSPNumLights(pkt,NUMLIGHTS_1); \
2607 gSPLight(pkt,&name.l[0],1); \
2608 gSPLight(pkt,&name.a,2); \
2610 #define gsSPSetLights1(name) \
2611 gsSPNumLights(NUMLIGHTS_1), \
2612 gsSPLight(&name.l[0],1), \
2613 gsSPLight(&name.a,2)
2615 #define gSPSetLights2(pkt,name) \
2617 gSPNumLights(pkt,NUMLIGHTS_2); \
2618 gSPLight(pkt,&name.l[0],1); \
2619 gSPLight(pkt,&name.l[1],2); \
2620 gSPLight(pkt,&name.a,3); \
2622 #define gsSPSetLights2(name) \
2623 gsSPNumLights(NUMLIGHTS_2), \
2624 gsSPLight(&name.l[0],1), \
2625 gsSPLight(&name.l[1],2), \
2626 gsSPLight(&name.a,3)
2628 #define gSPSetLights3(pkt,name) \
2630 gSPNumLights(pkt,NUMLIGHTS_3); \
2631 gSPLight(pkt,&name.l[0],1); \
2632 gSPLight(pkt,&name.l[1],2); \
2633 gSPLight(pkt,&name.l[2],3); \
2634 gSPLight(pkt,&name.a,4); \
2636 #define gsSPSetLights3(name) \
2637 gsSPNumLights(NUMLIGHTS_3), \
2638 gsSPLight(&name.l[0],1), \
2639 gsSPLight(&name.l[1],2), \
2640 gsSPLight(&name.l[2],3), \
2641 gsSPLight(&name.a,4)
2643 #define gSPSetLights4(pkt,name) \
2645 gSPNumLights(pkt,NUMLIGHTS_4); \
2646 gSPLight(pkt,&name.l[0],1); \
2647 gSPLight(pkt,&name.l[1],2); \
2648 gSPLight(pkt,&name.l[2],3); \
2649 gSPLight(pkt,&name.l[3],4); \
2650 gSPLight(pkt,&name.a,5); \
2652 #define gsSPSetLights4(name) \
2653 gsSPNumLights(NUMLIGHTS_4), \
2654 gsSPLight(&name.l[0],1), \
2655 gsSPLight(&name.l[1],2), \
2656 gsSPLight(&name.l[2],3), \
2657 gsSPLight(&name.l[3],4), \
2658 gsSPLight(&name.a,5)
2660 #define gSPSetLights5(pkt,name) \
2662 gSPNumLights(pkt,NUMLIGHTS_5); \
2663 gSPLight(pkt,&name.l[0],1); \
2664 gSPLight(pkt,&name.l[1],2); \
2665 gSPLight(pkt,&name.l[2],3); \
2666 gSPLight(pkt,&name.l[3],4); \
2667 gSPLight(pkt,&name.l[4],5); \
2668 gSPLight(pkt,&name.a,6); \
2671 #define gsSPSetLights5(name) \
2672 gsSPNumLights(NUMLIGHTS_5), \
2673 gsSPLight(&name.l[0],1), \
2674 gsSPLight(&name.l[1],2), \
2675 gsSPLight(&name.l[2],3), \
2676 gsSPLight(&name.l[3],4), \
2677 gsSPLight(&name.l[4],5), \
2678 gsSPLight(&name.a,6)
2680 #define gSPSetLights6(pkt,name) \
2682 gSPNumLights(pkt,NUMLIGHTS_6); \
2683 gSPLight(pkt,&name.l[0],1); \
2684 gSPLight(pkt,&name.l[1],2); \
2685 gSPLight(pkt,&name.l[2],3); \
2686 gSPLight(pkt,&name.l[3],4); \
2687 gSPLight(pkt,&name.l[4],5); \
2688 gSPLight(pkt,&name.l[5],6); \
2689 gSPLight(pkt,&name.a,7); \
2692 #define gsSPSetLights6(name) \
2693 gsSPNumLights(NUMLIGHTS_6), \
2694 gsSPLight(&name.l[0],1), \
2695 gsSPLight(&name.l[1],2), \
2696 gsSPLight(&name.l[2],3), \
2697 gsSPLight(&name.l[3],4), \
2698 gsSPLight(&name.l[4],5), \
2699 gsSPLight(&name.l[5],6), \
2700 gsSPLight(&name.a,7)
2702 #define gSPSetLights7(pkt,name) \
2704 gSPNumLights(pkt,NUMLIGHTS_7); \
2705 gSPLight(pkt,&name.l[0],1); \
2706 gSPLight(pkt,&name.l[1],2); \
2707 gSPLight(pkt,&name.l[2],3); \
2708 gSPLight(pkt,&name.l[3],4); \
2709 gSPLight(pkt,&name.l[4],5); \
2710 gSPLight(pkt,&name.l[5],6); \
2711 gSPLight(pkt,&name.l[6],7); \
2712 gSPLight(pkt,&name.a,8); \
2715 #define gsSPSetLights7(name) \
2716 gsSPNumLights(NUMLIGHTS_7), \
2717 gsSPLight(&name.l[0],1), \
2718 gsSPLight(&name.l[1],2), \
2719 gsSPLight(&name.l[2],3), \
2720 gsSPLight(&name.l[3],4), \
2721 gsSPLight(&name.l[4],5), \
2722 gsSPLight(&name.l[5],6), \
2723 gsSPLight(&name.l[6],7), \
2724 gsSPLight(&name.a,8)
2730 # define gSPLookAtX(pkt, l) \
2731 gDma2p((pkt),G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,G_MVO_LOOKATX)
2732 # define gsSPLookAtX(l) \
2733 gsDma2p( G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,G_MVO_LOOKATX)
2734 # define gSPLookAtY(pkt, l) \
2735 gDma2p((pkt),G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,G_MVO_LOOKATY)
2736 # define gsSPLookAtY(l) \
2737 gsDma2p( G_MOVEMEM,(l),sizeof(Light),G_MV_LIGHT,G_MVO_LOOKATY)
2739 # define gSPLookAtX(pkt, l) \
2740 gDma1p(pkt, G_MOVEMEM, l, sizeof(Light),G_MV_LOOKATX)
2741 # define gsSPLookAtX(l) \
2742 gsDma1p( G_MOVEMEM, l, sizeof(Light),G_MV_LOOKATX)
2743 # define gSPLookAtY(pkt, l) \
2744 gDma1p(pkt, G_MOVEMEM, l, sizeof(Light),G_MV_LOOKATY)
2745 # define gsSPLookAtY(l) \
2746 gsDma1p( G_MOVEMEM, l, sizeof(Light),G_MV_LOOKATY)
2749 #define gSPLookAt(pkt, la) \
2751 gSPLookAtX(pkt,la) \
2752 gSPLookAtY(pkt,(char *)(la)+16) \
2754 #define gsSPLookAt(la) \
2756 gsSPLookAtY((char *)(la)+16)
2758 #define gDPSetHilite1Tile(pkt, tile, hilite, width, height) \
2759 gDPSetTileSize(pkt, tile, (hilite)->h.x1 & 0xfff, (hilite)->h.y1 & 0xfff, \
2760 ((((width)-1)*4)+(hilite)->h.x1) & 0xfff, ((((height)-1)*4)+(hilite)->h.y1) & 0xfff)
2762 #define gDPSetHilite2Tile(pkt, tile, hilite, width, height) \
2763 gDPSetTileSize(pkt, tile, (hilite)->h.x2 & 0xfff, (hilite)->h.y2 & 0xfff, \
2764 ((((width)-1)*4)+(hilite)->h.x2) & 0xfff, ((((height)-1)*4)+(hilite)->h.y2) & 0xfff)
2780 #define gSPFogFactor(pkt, fm, fo) \
2781 gMoveWd(pkt, G_MW_FOG, G_MWO_FOG, \
2782 (_SHIFTL(fm,16,16) | _SHIFTL(fo,0,16)))
2784 #define gsSPFogFactor(fm, fo) \
2785 gsMoveWd(G_MW_FOG, G_MWO_FOG, \
2786 (_SHIFTL(fm,16,16) | _SHIFTL(fo,0,16)))
2788 #define gSPFogPosition(pkt, min, max) \
2789 gMoveWd(pkt, G_MW_FOG, G_MWO_FOG, \
2790 (_SHIFTL((128000/((max)-(min))),16,16) | \
2791 _SHIFTL(((500-(min))*256/((max)-(min))),0,16)))
2793 #define gsSPFogPosition(min, max) \
2794 gsMoveWd(G_MW_FOG, G_MWO_FOG, \
2795 (_SHIFTL((128000/((max)-(min))),16,16) | \
2796 _SHIFTL(((500-(min))*256/((max)-(min))),0,16)))
2802 # define gSPTexture(pkt, s, t, level, tile, on) \
2804 Gfx *_g = (Gfx *)(pkt); \
2806 _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8) | \
2807 _SHIFTL(BOWTIE_VAL,16,8) | \
2808 _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | \
2809 _SHIFTL((on),1,7)); \
2810 _g->words.w1 = (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)); \
2812 # define gsSPTexture(s, t, level, tile, on) \
2814 (_SHIFTL(G_TEXTURE,24,8) | _SHIFTL(BOWTIE_VAL,16,8) | \
2815 _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | _SHIFTL((on),1,7)),\
2816 (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)) \
2822 # define gSPTextureL(pkt, s, t, level, xparam, tile, on) \
2824 Gfx *_g = (Gfx *)(pkt); \
2826 _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8) | \
2827 _SHIFTL((xparam),16,8) | \
2828 _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | \
2829 _SHIFTL((on),1,7)); \
2830 _g->words.w1 = (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)); \
2832 # define gsSPTextureL(s, t, level, xparam, tile, on) \
2834 (_SHIFTL(G_TEXTURE,24,8) | _SHIFTL((xparam),16,8) | \
2835 _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | _SHIFTL((on),1,7)),\
2836 (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)) \
2842 # define gSPTexture(pkt, s, t, level, tile, on) \
2844 Gfx *_g = (Gfx *)(pkt); \
2846 _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8)|_SHIFTL(BOWTIE_VAL,16,8)|\
2847 _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)| \
2848 _SHIFTL((on),0,8)); \
2849 _g->words.w1 = (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)); \
2851 # define gsSPTexture(s, t, level, tile, on) \
2853 (_SHIFTL(G_TEXTURE,24,8)|_SHIFTL(BOWTIE_VAL,16,8)| \
2854 _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)|_SHIFTL((on),0,8)), \
2855 (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)) \
2861 # define gSPTextureL(pkt, s, t, level, xparam, tile, on) \
2863 Gfx *_g = (Gfx *)(pkt); \
2865 _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8)|_SHIFTL((xparam),16,8)| \
2866 _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)| \
2867 _SHIFTL((on),0,8)); \
2868 _g->words.w1 = (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)); \
2870 # define gsSPTextureL(s, t, level, xparam, tile, on) \
2872 (_SHIFTL(G_TEXTURE,24,8)|_SHIFTL((xparam),16,8)| \
2873 _SHIFTL((level),11,3)|_SHIFTL((tile),8,3)|_SHIFTL((on),0,8)), \
2874 (_SHIFTL((s),16,16)|_SHIFTL((t),0,16)) \
2879 # define gSPPerspNormalize(pkt, s) gMoveWd(pkt, G_MW_PERSPNORM, 0, (s))
2880 # define gsSPPerspNormalize(s) gsMoveWd( G_MW_PERSPNORM, 0, (s))
2882 # define gSPPerspNormalize(pkt, s) \
2884 Gfx *_g = (Gfx *)(pkt); \
2886 _g->words.w0 = _SHIFTL(G_RDPHALF_1, 24, 8); \
2887 _g->words.w1 = (s); \
2889 # define gsSPPerspNormalize(s) \
2891 _SHIFTL(G_RDPHALF_1, 24, 8), \
2897 # define gSPPopMatrixN(pkt, n, num) gDma2p((pkt),G_POPMTX,(num)*64,64,2,0)
2898 # define gsSPPopMatrixN(n, num) gsDma2p( G_POPMTX,(num)*64,64,2,0)
2899 # define gSPPopMatrix(pkt, n) gSPPopMatrixN((pkt), (n), 1)
2900 # define gsSPPopMatrix(n) gsSPPopMatrixN( (n), 1)
2902 # define gSPPopMatrix(pkt, n) gImmp1(pkt, G_POPMTX, n)
2903 # define gsSPPopMatrix(n) gsImmp1( G_POPMTX, n)
2906 #define gSPEndDisplayList(pkt) \
2908 Gfx *_g = (Gfx *)(pkt); \
2910 _g->words.w0 = _SHIFTL(G_ENDDL, 24, 8); \
2914 #define gsSPEndDisplayList() \
2916 _SHIFTL(G_ENDDL, 24, 8), 0 \
2928 #define gSPGeometryMode(pkt, c, s) \
2930 Gfx *_g = (Gfx *)(pkt); \
2931 _g->words.w0 = _SHIFTL(G_GEOMETRYMODE,24,8)|_SHIFTL(~(u32)(c),0,24);\
2932 _g->words.w1 = (u32)(s); \
2935 #define gsSPGeometryMode(c, s) \
2937 (_SHIFTL(G_GEOMETRYMODE,24,8)|_SHIFTL(~(u32)(c),0,24)),(u32)(s) \
2939 #define gSPSetGeometryMode(pkt, word) gSPGeometryMode((pkt),0,(word))
2940 #define gsSPSetGeometryMode(word) gsSPGeometryMode(0,(word))
2941 #define gSPClearGeometryMode(pkt, word) gSPGeometryMode((pkt),(word),0)
2942 #define gsSPClearGeometryMode(word) gsSPGeometryMode((word),0)
2943 #define gSPLoadGeometryMode(pkt, word) gSPGeometryMode((pkt),-1,(word))
2944 #define gsSPLoadGeometryMode(word) gsSPGeometryMode(-1,(word))
2945 #define gsSPGeometryModeSetFirst(c, s) gsSPGeometryMode(c, s)
2947 #define gSPSetGeometryMode(pkt, word) \
2949 Gfx *_g = (Gfx *)(pkt); \
2951 _g->words.w0 = _SHIFTL(G_SETGEOMETRYMODE, 24, 8); \
2952 _g->words.w1 = (unsigned int)(word); \
2955 #define gsSPSetGeometryMode(word) \
2957 _SHIFTL(G_SETGEOMETRYMODE, 24, 8), (unsigned int)(word) \
2960 #define gSPClearGeometryMode(pkt, word) \
2962 Gfx *_g = (Gfx *)(pkt); \
2964 _g->words.w0 = _SHIFTL(G_CLEARGEOMETRYMODE, 24, 8); \
2965 _g->words.w1 = (unsigned int)(word); \
2968 #define gsSPClearGeometryMode(word) \
2970 _SHIFTL(G_CLEARGEOMETRYMODE, 24, 8), (unsigned int)(word) \
2978 #define gsSPGeometryMode(c, s) \
2979 gsSPClearGeometryMode(c), \
2980 gsSPSetGeometryMode(s)
2981 #define gsSPGeometryModeSetFirst(c, s) \
2982 gsSPSetGeometryMode(s), \
2983 gsSPClearGeometryMode(c)
2987 #define gSPSetOtherMode(pkt, cmd, sft, len, data) \
2989 Gfx *_g = (Gfx *)(pkt); \
2990 _g->words.w0 = (_SHIFTL(cmd,24,8)|_SHIFTL(32-(sft)-(len),8,8)| \
2991 _SHIFTL((len)-1,0,8)); \
2992 _g->words.w1 = (unsigned int)(data); \
2995 #define gsSPSetOtherMode(cmd, sft, len, data) \
2997 _SHIFTL(cmd,24,8)|_SHIFTL(32-(sft)-(len),8,8)|_SHIFTL((len)-1,0,8), \
2998 (unsigned int)(data) \
3001 #define gSPSetOtherMode(pkt, cmd, sft, len, data) \
3003 Gfx *_g = (Gfx *)(pkt); \
3005 _g->words.w0 = (_SHIFTL(cmd, 24, 8) | _SHIFTL(sft, 8, 8) | \
3006 _SHIFTL(len, 0, 8)); \
3007 _g->words.w1 = (unsigned int)(data); \
3010 #define gsSPSetOtherMode(cmd, sft, len, data) \
3012 _SHIFTL(cmd, 24, 8) | _SHIFTL(sft, 8, 8) | _SHIFTL(len, 0, 8), \
3013 (unsigned int)(data) \
3020 #define gDPPipelineMode(pkt, mode) \
3021 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_PIPELINE, 1, mode)
3022 #define gsDPPipelineMode(mode) \
3023 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_PIPELINE, 1, mode)
3025 #define gDPSetCycleType(pkt, type) \
3026 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_CYCLETYPE, 2, type)
3027 #define gsDPSetCycleType(type) \
3028 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_CYCLETYPE, 2, type)
3030 #define gDPSetTexturePersp(pkt, type) \
3031 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTPERSP, 1, type)
3032 #define gsDPSetTexturePersp(type) \
3033 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTPERSP, 1, type)
3035 #define gDPSetTextureDetail(pkt, type) \
3036 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTDETAIL, 2, type)
3037 #define gsDPSetTextureDetail(type) \
3038 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTDETAIL, 2, type)
3040 #define gDPSetTextureLOD(pkt, type) \
3041 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTLOD, 1, type)
3042 #define gsDPSetTextureLOD(type) \
3043 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTLOD, 1, type)
3045 #define gDPSetTextureLUT(pkt, type) \
3046 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTLUT, 2, type)
3047 #define gsDPSetTextureLUT(type) \
3048 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTLUT, 2, type)
3050 #define gDPSetTextureFilter(pkt, type) \
3051 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTFILT, 2, type)
3052 #define gsDPSetTextureFilter(type) \
3053 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTFILT, 2, type)
3055 #define gDPSetTextureConvert(pkt, type) \
3056 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTCONV, 3, type)
3057 #define gsDPSetTextureConvert(type) \
3058 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_TEXTCONV, 3, type)
3060 #define gDPSetCombineKey(pkt, type) \
3061 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_COMBKEY, 1, type)
3062 #define gsDPSetCombineKey(type) \
3063 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_COMBKEY, 1, type)
3065 #ifndef _HW_VERSION_1
3066 #define gDPSetColorDither(pkt, mode) \
3067 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_RGBDITHER, 2, mode)
3068 #define gsDPSetColorDither(mode) \
3069 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_RGBDITHER, 2, mode)
3071 #define gDPSetColorDither(pkt, mode) \
3072 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_COLORDITHER, 1, mode)
3073 #define gsDPSetColorDither(mode) \
3074 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_COLORDITHER, 1, mode)
3077 #ifndef _HW_VERSION_1
3078 #define gDPSetAlphaDither(pkt, mode) \
3079 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 2, mode)
3080 #define gsDPSetAlphaDither(mode) \
3081 gsSPSetOtherMode(G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 2, mode)
3088 #define gDPSetBlendMask(pkt, mask) gDPNoOp(pkt)
3089 #define gsDPSetBlendMask(mask) gsDPNoOp()
3091 #define gDPSetAlphaCompare(pkt, type) \
3092 gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 2, type)
3093 #define gsDPSetAlphaCompare(type) \
3094 gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 2, type)
3096 #define gDPSetDepthSource(pkt, src) \
3097 gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_ZSRCSEL, 1, src)
3098 #define gsDPSetDepthSource(src) \
3099 gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_ZSRCSEL, 1, src)
3101 #define gDPSetRenderMode(pkt, c0, c1) \
3102 gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_RENDERMODE, 29, \
3104 #define gsDPSetRenderMode(c0, c1) \
3105 gsSPSetOtherMode(G_SETOTHERMODE_L, G_MDSFT_RENDERMODE, 29, \
3108 #define gSetImage(pkt, cmd, fmt, siz, width, i) \
3110 Gfx *_g = (Gfx *)(pkt); \
3112 _g->words.w0 = _SHIFTL(cmd, 24, 8) | _SHIFTL(fmt, 21, 3) | \
3113 _SHIFTL(siz, 19, 2) | _SHIFTL((width)-1, 0, 12); \
3114 _g->words.w1 = (uintptr_t)(i); \
3117 #define gsSetImage(cmd, fmt, siz, width, i) \
3119 _SHIFTL(cmd, 24, 8) | _SHIFTL(fmt, 21, 3) | \
3120 _SHIFTL(siz, 19, 2) | _SHIFTL((width)-1, 0, 12), \
3124 #define gDPSetColorImage(pkt, f, s, w, i) gSetImage(pkt, G_SETCIMG, f, s, w, i)
3125 #define gsDPSetColorImage(f, s, w, i) gsSetImage(G_SETCIMG, f, s, w, i)
3129 #define gDPSetDepthImage(pkt, i) gSetImage(pkt, G_SETZIMG, 0, 0, 1, i)
3130 #define gsDPSetDepthImage(i) gsSetImage(G_SETZIMG, 0, 0, 1, i)
3132 #define gDPSetMaskImage(pkt, i) gDPSetDepthImage(pkt, i)
3133 #define gsDPSetMaskImage(i) gsDPSetDepthImage(i)
3135 #define gDPSetTextureImage(pkt, f, s, w, i) gSetImage(pkt, G_SETTIMG, f, s, w, i)
3136 #define gsDPSetTextureImage(f, s, w, i) gsSetImage(G_SETTIMG, f, s, w, i)
3142 #define gDPSetCombine(pkt, muxs0, muxs1) \
3144 Gfx *_g = (Gfx *)(pkt); \
3146 _g->words.w0 = _SHIFTL(G_SETCOMBINE, 24, 8) | _SHIFTL(muxs0, 0, 24);\
3147 _g->words.w1 = (unsigned int)(muxs1); \
3150 #define gsDPSetCombine(muxs0, muxs1) \
3152 _SHIFTL(G_SETCOMBINE, 24, 8) | _SHIFTL(muxs0, 0, 24), \
3153 (unsigned int)(muxs1) \
3156 #define GCCc0w0(saRGB0, mRGB0, saA0, mA0) \
3157 (_SHIFTL((saRGB0), 20, 4) | _SHIFTL((mRGB0), 15, 5) | \
3158 _SHIFTL((saA0), 12, 3) | _SHIFTL((mA0), 9, 3))
3160 #define GCCc1w0(saRGB1, mRGB1) \
3161 (_SHIFTL((saRGB1), 5, 4) | _SHIFTL((mRGB1), 0, 5))
3163 #define GCCc0w1(sbRGB0, aRGB0, sbA0, aA0) \
3164 (_SHIFTL((sbRGB0), 28, 4) | _SHIFTL((aRGB0), 15, 3) | \
3165 _SHIFTL((sbA0), 12, 3) | _SHIFTL((aA0), 9, 3))
3167 #define GCCc1w1(sbRGB1, saA1, mA1, aRGB1, sbA1, aA1) \
3168 (_SHIFTL((sbRGB1), 24, 4) | _SHIFTL((saA1), 21, 3) | \
3169 _SHIFTL((mA1), 18, 3) | _SHIFTL((aRGB1), 6, 3) | \
3170 _SHIFTL((sbA1), 3, 3) | _SHIFTL((aA1), 0, 3))
3172 #define gDPSetCombineLERP(pkt, a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0, \
3173 a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1) \
3175 Gfx *_g = (Gfx *)(pkt); \
3177 _g->words.w0 = _SHIFTL(G_SETCOMBINE, 24, 8) | \
3178 _SHIFTL(GCCc0w0(G_CCMUX_##a0, G_CCMUX_##c0, \
3179 G_ACMUX_##Aa0, G_ACMUX_##Ac0) | \
3180 GCCc1w0(G_CCMUX_##a1, G_CCMUX_##c1), \
3182 _g->words.w1 = (unsigned int)(GCCc0w1(G_CCMUX_##b0, \
3186 GCCc1w1(G_CCMUX_##b1, \
3194 #define gsDPSetCombineLERP(a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0, \
3195 a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1) \
3197 _SHIFTL(G_SETCOMBINE, 24, 8) | \
3198 _SHIFTL(GCCc0w0(G_CCMUX_##a0, G_CCMUX_##c0, \
3199 G_ACMUX_##Aa0, G_ACMUX_##Ac0) | \
3200 GCCc1w0(G_CCMUX_##a1, G_CCMUX_##c1), 0, 24), \
3201 (unsigned int)(GCCc0w1(G_CCMUX_##b0, G_CCMUX_##d0, \
3202 G_ACMUX_##Ab0, G_ACMUX_##Ad0) | \
3203 GCCc1w1(G_CCMUX_##b1, G_ACMUX_##Aa1, \
3204 G_ACMUX_##Ac1, G_CCMUX_##d1, \
3205 G_ACMUX_##Ab1, G_ACMUX_##Ad1)) \
3218 #define gDPSetCombineMode(pkt, a, b) gDPSetCombineLERP(pkt, a, b)
3219 #define gsDPSetCombineMode(a, b) gsDPSetCombineLERP(a, b)
3221 #define gDPSetColor(pkt, c, d) \
3223 Gfx *_g = (Gfx *)(pkt); \
3225 _g->words.w0 = _SHIFTL(c, 24, 8); \
3226 _g->words.w1 = (unsigned int)(d); \
3229 #define gsDPSetColor(c, d) \
3231 _SHIFTL(c, 24, 8), (unsigned int)(d) \
3234 #define DPRGBColor(pkt, cmd, r, g, b, a) \
3235 gDPSetColor(pkt, cmd, \
3236 (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | \
3237 _SHIFTL(b, 8, 8) | _SHIFTL(a, 0, 8)))
3238 #define sDPRGBColor(cmd, r, g, b, a) \
3240 (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | \
3241 _SHIFTL(b, 8, 8) | _SHIFTL(a, 0, 8)))
3243 #define gDPSetEnvColor(pkt, r, g, b, a) \
3244 DPRGBColor(pkt, G_SETENVCOLOR, r,g,b,a)
3245 #define gsDPSetEnvColor(r, g, b, a) \
3246 sDPRGBColor(G_SETENVCOLOR, r,g,b,a)
3247 #define gDPSetBlendColor(pkt, r, g, b, a) \
3248 DPRGBColor(pkt, G_SETBLENDCOLOR, r,g,b,a)
3249 #define gsDPSetBlendColor(r, g, b, a) \
3250 sDPRGBColor(G_SETBLENDCOLOR, r,g,b,a)
3251 #define gDPSetFogColor(pkt, r, g, b, a) \
3252 DPRGBColor(pkt, G_SETFOGCOLOR, r,g,b,a)
3253 #define gsDPSetFogColor(r, g, b, a) \
3254 sDPRGBColor(G_SETFOGCOLOR, r,g,b,a)
3255 #define gDPSetFillColor(pkt, d) \
3256 gDPSetColor(pkt, G_SETFILLCOLOR, (d))
3257 #define gsDPSetFillColor(d) \
3258 gsDPSetColor(G_SETFILLCOLOR, (d))
3260 #define gDPSetPrimDepth(pkt, z, dz) \
3261 gDPSetColor(pkt, G_SETPRIMDEPTH, \
3262 _SHIFTL(z, 16, 16) | _SHIFTL(dz, 0, 16))
3263 #define gsDPSetPrimDepth(z, dz) \
3264 gsDPSetColor(G_SETPRIMDEPTH, _SHIFTL(z, 16, 16) | \
3267 #define gDPSetPrimColor(pkt, m, l, r, g, b, a) \
3269 Gfx *_g = (Gfx *)(pkt); \
3271 _g->words.w0 = (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | \
3272 _SHIFTL(m, 8, 8) | _SHIFTL(l, 0, 8)); \
3273 _g->words.w1 = (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | \
3274 _SHIFTL(b, 8, 8) | _SHIFTL(a, 0, 8)); \
3277 #define gsDPSetPrimColor(m, l, r, g, b, a) \
3279 (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | _SHIFTL(m, 8, 8) | \
3280 _SHIFTL(l, 0, 8)), \
3281 (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | _SHIFTL(b, 8, 8) | \
3313 #define gDPSetOtherMode(pkt, mode0, mode1) \
3315 Gfx *_g = (Gfx *)(pkt); \
3317 _g->words.w0 = _SHIFTL(G_RDPSETOTHERMODE,24,8)|_SHIFTL(mode0,0,24);\
3318 _g->words.w1 = (unsigned int)(mode1); \
3321 #define gsDPSetOtherMode(mode0, mode1) \
3323 _SHIFTL(G_RDPSETOTHERMODE,24,8)|_SHIFTL(mode0,0,24), \
3324 (unsigned int)(mode1) \
3333 #define G_TX_LOADTILE 7
3334 #define G_TX_RENDERTILE 0
3336 #define G_TX_NOMIRROR 0
3338 #define G_TX_MIRROR 0x1
3339 #define G_TX_CLAMP 0x2
3340 #define G_TX_NOMASK 0
3341 #define G_TX_NOLOD 0
3345 #define MAX(a, b) ((a) > (b) ? (a) : (b))
3349 #define MIN(a, b) ((a) < (b) ? (a) : (b))
3359 #define G_TX_DXT_FRAC 11
3371 #ifdef _HW_VERSION_1
3372 #define G_TX_LDBLK_MAX_TXL 4095
3374 #define G_TX_LDBLK_MAX_TXL 2047
3377 #define TXL2WORDS(txls, b_txl) MAX(1, ((txls)*(b_txl)/8))
3378 #define CALC_DXT(width, b_txl) \
3379 (((1 << G_TX_DXT_FRAC) + TXL2WORDS(width, b_txl) - 1) / \
3380 TXL2WORDS(width, b_txl))
3382 #define TXL2WORDS_4b(txls) MAX(1, ((txls)/16))
3383 #define CALC_DXT_4b(width) \
3384 (((1 << G_TX_DXT_FRAC) + TXL2WORDS_4b(width) - 1) / \
3385 TXL2WORDS_4b(width))
3387 #define gDPLoadTileGeneric(pkt, c, tile, uls, ult, lrs, lrt) \
3389 Gfx *_g = (Gfx *)(pkt); \
3391 _g->words.w0 = _SHIFTL(c, 24, 8) | _SHIFTL(uls, 12, 12) | \
3392 _SHIFTL(ult, 0, 12); \
3393 _g->words.w1 = _SHIFTL(tile, 24, 3) | _SHIFTL(lrs, 12, 12) | \
3394 _SHIFTL(lrt, 0, 12); \
3397 #define gsDPLoadTileGeneric(c, tile, uls, ult, lrs, lrt) \
3399 _SHIFTL(c, 24, 8) | _SHIFTL(uls, 12, 12) | _SHIFTL(ult, 0, 12), \
3400 _SHIFTL(tile, 24, 3) | _SHIFTL(lrs, 12, 12) | _SHIFTL(lrt, 0, 12)\
3403 #define gDPSetTileSize(pkt, t, uls, ult, lrs, lrt) \
3404 gDPLoadTileGeneric(pkt, G_SETTILESIZE, t, uls, ult, lrs, lrt)
3405 #define gsDPSetTileSize(t, uls, ult, lrs, lrt) \
3406 gsDPLoadTileGeneric(G_SETTILESIZE, t, uls, ult, lrs, lrt)
3407 #define gDPLoadTile(pkt, t, uls, ult, lrs, lrt) \
3408 gDPLoadTileGeneric(pkt, G_LOADTILE, t, uls, ult, lrs, lrt)
3409 #define gsDPLoadTile(t, uls, ult, lrs, lrt) \
3410 gsDPLoadTileGeneric(G_LOADTILE, t, uls, ult, lrs, lrt)
3412 #define gDPSetTile(pkt, fmt, siz, line, tmem, tile, palette, cmt, \
3413 maskt, shiftt, cms, masks, shifts) \
3415 Gfx *_g = (Gfx *)(pkt); \
3417 _g->words.w0 = _SHIFTL(G_SETTILE, 24, 8) | _SHIFTL(fmt, 21, 3) |\
3418 _SHIFTL(siz, 19, 2) | _SHIFTL(line, 9, 9) | \
3419 _SHIFTL(tmem, 0, 9); \
3420 _g->words.w1 = _SHIFTL(tile, 24, 3) | _SHIFTL(palette, 20, 4) | \
3421 _SHIFTL(cmt, 18, 2) | _SHIFTL(maskt, 14, 4) | \
3422 _SHIFTL(shiftt, 10, 4) |_SHIFTL(cms, 8, 2) | \
3423 _SHIFTL(masks, 4, 4) | _SHIFTL(shifts, 0, 4); \
3426 #define gsDPSetTile(fmt, siz, line, tmem, tile, palette, cmt, \
3427 maskt, shiftt, cms, masks, shifts) \
3429 (_SHIFTL(G_SETTILE, 24, 8) | _SHIFTL(fmt, 21, 3) | \
3430 _SHIFTL(siz, 19, 2) | _SHIFTL(line, 9, 9) | _SHIFTL(tmem, 0, 9)),\
3431 (_SHIFTL(tile, 24, 3) | _SHIFTL(palette, 20, 4) | \
3432 _SHIFTL(cmt, 18, 2) | _SHIFTL(maskt, 14, 4) | \
3433 _SHIFTL(shiftt, 10, 4) | _SHIFTL(cms, 8, 2) | \
3434 _SHIFTL(masks, 4, 4) | _SHIFTL(shifts, 0, 4)) \
3447 #define gDPLoadBlock(pkt, tile, uls, ult, lrs, dxt) \
3449 Gfx *_g = (Gfx *)(pkt); \
3451 _g->words.w0 = (_SHIFTL(G_LOADBLOCK, 24, 8) | \
3452 _SHIFTL(uls, 12, 12) | _SHIFTL(ult, 0, 12)); \
3453 _g->words.w1 = (_SHIFTL(tile, 24, 3) | \
3454 _SHIFTL((MIN(lrs,G_TX_LDBLK_MAX_TXL)), 12, 12) |\
3455 _SHIFTL(dxt, 0, 12)); \
3458 #define gsDPLoadBlock(tile, uls, ult, lrs, dxt) \
3460 (_SHIFTL(G_LOADBLOCK, 24, 8) | _SHIFTL(uls, 12, 12) | \
3461 _SHIFTL(ult, 0, 12)), \
3462 (_SHIFTL(tile, 24, 3) | \
3463 _SHIFTL((MIN(lrs,G_TX_LDBLK_MAX_TXL)), 12, 12) | \
3464 _SHIFTL(dxt, 0, 12)) \
3467 #define gDPLoadTLUTCmd(pkt, tile, count) \
3469 Gfx *_g = (Gfx *)pkt; \
3471 _g->words.w0 = _SHIFTL(G_LOADTLUT, 24, 8); \
3472 _g->words.w1 = _SHIFTL((tile), 24, 3) | _SHIFTL((count), 14, 10);\
3475 #define gsDPLoadTLUTCmd(tile, count) \
3477 _SHIFTL(G_LOADTLUT, 24, 8), \
3478 _SHIFTL((tile), 24, 3) | _SHIFTL((count), 14, 10) \
3481 #define gDPLoadTextureBlock(pkt, timg, fmt, siz, width, height, \
3482 pal, cms, cmt, masks, maskt, shifts, shiftt) \
3484 gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
3485 gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \
3486 0 , cmt, maskt, shiftt, cms, masks, shifts); \
3488 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
3489 (((width)*(height) + siz##_INCR) >> siz##_SHIFT) -1, \
3490 CALC_DXT(width, siz##_BYTES)); \
3492 gDPSetTile(pkt, fmt, siz, \
3493 (((width) * siz##_LINE_BYTES)+7)>>3, 0, \
3494 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
3496 gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
3497 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3498 ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
3501 #define gDPLoadTextureBlockYuv(pkt, timg, fmt, siz, width, height, \
3502 pal, cms, cmt, masks, maskt, shifts, shiftt) \
3504 gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
3505 gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \
3506 0 , cmt, maskt, shiftt, cms, masks, shifts); \
3508 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
3509 (((width)*(height) + siz##_INCR) >> siz##_SHIFT) -1, \
3510 CALC_DXT(width, siz##_BYTES)); \
3512 gDPSetTile(pkt, fmt, siz, \
3513 (((width) * 1)+7)>>3, 0, \
3514 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
3516 gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
3517 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3518 ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
3524 #define gDPLoadTextureBlockS(pkt, timg, fmt, siz, width, height, \
3525 pal, cms, cmt, masks, maskt, shifts, shiftt) \
3527 gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
3528 gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \
3529 0 , cmt, maskt, shiftt, cms, masks, shifts); \
3531 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
3532 (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1,0); \
3534 gDPSetTile(pkt, fmt, siz, \
3535 (((width) * siz##_LINE_BYTES)+7)>>3, 0, \
3536 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
3538 gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
3539 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3540 ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
3547 #define gDPLoadMultiBlockS(pkt, timg, tmem, rtile, fmt, siz, width, \
3548 height, pal, cms, cmt, masks, maskt, shifts, shiftt) \
3550 gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
3551 gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \
3552 0 , cmt, maskt, shiftt, cms, masks, shifts); \
3554 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
3555 (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1,0); \
3557 gDPSetTile(pkt, fmt, siz, \
3558 (((width) * siz##_LINE_BYTES)+7)>>3, tmem, \
3559 rtile, pal, cmt, maskt, shiftt, cms, masks, \
3561 gDPSetTileSize(pkt, rtile, 0, 0, \
3562 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3563 ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
3567 #define gDPLoadTextureBlockYuvS(pkt, timg, fmt, siz, width, height, \
3568 pal, cms, cmt, masks, maskt, shifts, shiftt) \
3570 gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
3571 gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \
3572 0 , cmt, maskt, shiftt, cms, masks, shifts); \
3574 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
3575 (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1,0); \
3577 gDPSetTile(pkt, fmt, siz, \
3578 (((width) * 1)+7)>>3, 0, \
3579 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
3581 gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
3582 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3583 ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
3589 #define _gDPLoadTextureBlock(pkt, timg, tmem, fmt, siz, width, height, \
3590 pal, cms, cmt, masks, maskt, shifts, shiftt) \
3592 gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
3593 gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \
3594 0, cmt, maskt, shiftt, cms, masks, shifts); \
3596 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
3597 (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \
3598 CALC_DXT(width, siz##_BYTES)); \
3600 gDPSetTile(pkt, fmt, siz, (((width) * siz##_LINE_BYTES)+7)>>3, \
3601 tmem, G_TX_RENDERTILE, pal, cmt, \
3602 maskt, shiftt, cms, masks, shifts); \
3603 gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
3604 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3605 ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
3611 #define _gDPLoadTextureBlockTile(pkt, timg, tmem, rtile, fmt, siz, width, \
3612 height, pal, cms, cmt, masks, maskt, shifts, shiftt) \
3614 gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
3615 gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, 0,\
3616 cmt, maskt, shiftt, cms, masks, shifts); \
3618 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
3619 (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \
3620 CALC_DXT(width, siz##_BYTES)); \
3622 gDPSetTile(pkt, fmt, siz, (((width) * siz##_LINE_BYTES)+7)>>3, \
3623 tmem, rtile, pal, cmt, \
3624 maskt, shiftt, cms, masks, shifts); \
3625 gDPSetTileSize(pkt, rtile, 0, 0, \
3626 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3627 ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
3633 #define gDPLoadMultiBlock(pkt, timg, tmem, rtile, fmt, siz, width, \
3634 height, pal, cms, cmt, masks, maskt, shifts, shiftt) \
3636 gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
3637 gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, 0,\
3638 cmt, maskt, shiftt, cms, masks, shifts); \
3640 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
3641 (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \
3642 CALC_DXT(width, siz##_BYTES)); \
3644 gDPSetTile(pkt, fmt, siz, (((width) * siz##_LINE_BYTES)+7)>>3, \
3645 tmem, rtile, pal, cmt, \
3646 maskt, shiftt, cms, masks, shifts); \
3647 gDPSetTileSize(pkt, rtile, 0, 0, \
3648 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3649 ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
3652 #define gsDPLoadTextureBlock(timg, fmt, siz, width, height, \
3653 pal, cms, cmt, masks, maskt, shifts, shiftt) \
3655 gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \
3656 gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, 0, \
3657 G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, \
3660 gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \
3661 (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \
3662 CALC_DXT(width, siz##_BYTES)), \
3664 gsDPSetTile(fmt, siz, ((((width) * siz##_LINE_BYTES)+7)>>3), 0, \
3665 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
3667 gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \
3668 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3669 ((height)-1) << G_TEXTURE_IMAGE_FRAC)
3675 #define gsDPLoadTextureBlockS(timg, fmt, siz, width, height, \
3676 pal, cms, cmt, masks, maskt, shifts, shiftt) \
3678 gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \
3679 gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, 0 , \
3680 cmt, maskt,shiftt, cms, masks, shifts), \
3682 gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \
3683 (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, 0 ),\
3685 gsDPSetTile(fmt, siz, ((((width) * siz##_LINE_BYTES)+7)>>3), 0, \
3686 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
3688 gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \
3689 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3690 ((height)-1) << G_TEXTURE_IMAGE_FRAC)
3695 #define _gsDPLoadTextureBlock(timg, tmem, fmt, siz, width, height, \
3696 pal, cms, cmt, masks, maskt, shifts, shiftt) \
3698 gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \
3699 gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \
3700 0 , cmt, maskt, shiftt, cms, masks, shifts), \
3702 gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \
3703 (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \
3704 CALC_DXT(width, siz##_BYTES)), \
3706 gsDPSetTile(fmt, siz, \
3707 ((((width) * siz##_LINE_BYTES)+7)>>3), tmem, \
3708 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
3710 gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \
3711 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3712 ((height)-1) << G_TEXTURE_IMAGE_FRAC)
3718 #define _gsDPLoadTextureBlockTile(timg, tmem, rtile, fmt, siz, width, \
3719 height, pal, cms, cmt, masks, maskt, shifts, shiftt) \
3721 gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \
3722 gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \
3723 0 , cmt, maskt, shiftt, cms, masks, shifts), \
3725 gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \
3726 (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \
3727 CALC_DXT(width, siz##_BYTES)), \
3729 gsDPSetTile(fmt, siz, \
3730 ((((width) * siz##_LINE_BYTES)+7)>>3), tmem, \
3731 rtile, pal, cmt, maskt, shiftt, cms, masks, \
3733 gsDPSetTileSize(rtile, 0, 0, \
3734 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3735 ((height)-1) << G_TEXTURE_IMAGE_FRAC)
3742 #define gsDPLoadMultiBlock(timg, tmem, rtile, fmt, siz, width, \
3743 height, pal, cms, cmt, masks, maskt, shifts, shiftt) \
3745 gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \
3746 gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \
3747 0 , cmt, maskt, shiftt, cms, masks, shifts), \
3749 gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \
3750 (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, \
3751 CALC_DXT(width, siz##_BYTES)), \
3753 gsDPSetTile(fmt, siz, \
3754 ((((width) * siz##_LINE_BYTES)+7)>>3), tmem, \
3755 rtile, pal, cmt, maskt, shiftt, cms, masks, \
3757 gsDPSetTileSize(rtile, 0, 0, \
3758 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3759 ((height)-1) << G_TEXTURE_IMAGE_FRAC)
3770 #define gsDPLoadMultiBlockS(timg, tmem, rtile, fmt, siz, width, height, \
3771 pal, cms, cmt, masks, maskt, shifts, shiftt) \
3773 gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \
3774 gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, 0 , \
3775 cmt, maskt,shiftt, cms, masks, shifts), \
3777 gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \
3778 (((width)*(height) + siz##_INCR) >> siz##_SHIFT)-1, 0 ),\
3780 gsDPSetTile(fmt, siz, ((((width) * siz##_LINE_BYTES)+7)>>3), tmem,\
3781 rtile, pal, cmt, maskt, shiftt, cms, masks, \
3783 gsDPSetTileSize(rtile, 0, 0, \
3784 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3785 ((height)-1) << G_TEXTURE_IMAGE_FRAC)
3788 #define gDPLoadTextureBlock_4b(pkt, timg, fmt, width, height, \
3789 pal, cms, cmt, masks, maskt, shifts, shiftt) \
3791 gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \
3792 gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, \
3793 cmt, maskt, shiftt, cms, masks, shifts); \
3795 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
3796 (((width)*(height)+3)>>2)-1, \
3797 CALC_DXT_4b(width)); \
3799 gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), 0, \
3800 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
3802 gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
3803 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3804 ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
3810 #define gDPLoadTextureBlock_4bS(pkt, timg, fmt, width, height, \
3811 pal, cms, cmt, masks, maskt, shifts, shiftt) \
3813 gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \
3814 gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, \
3815 cmt, maskt, shiftt, cms, masks, shifts); \
3817 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
3818 (((width)*(height)+3)>>2)-1, 0 ); \
3820 gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), 0, \
3821 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
3823 gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
3824 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3825 ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
3831 #define gDPLoadMultiBlock_4b(pkt, timg, tmem, rtile, fmt, width, height,\
3832 pal, cms, cmt, masks, maskt, shifts, shiftt) \
3834 gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \
3835 gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0, \
3836 cmt, maskt, shiftt, cms, masks, shifts); \
3838 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
3839 (((width)*(height)+3)>>2)-1, \
3840 CALC_DXT_4b(width)); \
3842 gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \
3843 rtile, pal, cmt, maskt, shiftt, cms, masks, \
3845 gDPSetTileSize(pkt, rtile, 0, 0, \
3846 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3847 ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
3854 #define gDPLoadMultiBlock_4bS(pkt, timg, tmem, rtile, fmt, width, height,\
3855 pal, cms, cmt, masks, maskt, shifts, shiftt) \
3857 gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \
3858 gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0, \
3859 cmt, maskt, shiftt, cms, masks, shifts); \
3861 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
3862 (((width)*(height)+3)>>2)-1, 0 ); \
3864 gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \
3865 rtile, pal, cmt, maskt, shiftt, cms, masks, \
3867 gDPSetTileSize(pkt, rtile, 0, 0, \
3868 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3869 ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
3873 #define _gDPLoadTextureBlock_4b(pkt, timg, tmem, fmt, width, height, \
3874 pal, cms, cmt, masks, maskt, shifts, shiftt) \
3876 gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \
3877 gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0, \
3878 cmt, maskt, shiftt, cms, masks, shifts); \
3880 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
3881 (((width)*(height)+3)>>2)-1, \
3882 CALC_DXT_4b(width)); \
3884 gDPSetTile(pkt, fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \
3885 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
3887 gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
3888 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3889 ((height)-1) << G_TEXTURE_IMAGE_FRAC) \
3892 #define gsDPLoadTextureBlock_4b(timg, fmt, width, height, \
3893 pal, cms, cmt, masks, maskt, shifts, shiftt) \
3895 gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \
3896 gsDPSetTile(fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0 , cmt, \
3897 maskt, shiftt, cms, masks, shifts), \
3899 gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1, \
3900 CALC_DXT_4b(width)), \
3902 gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), 0, \
3903 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
3905 gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \
3906 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3907 ((height)-1) << G_TEXTURE_IMAGE_FRAC)
3909 #define gsDPLoadTextureBlock_4bS(timg, fmt, width, height, \
3910 pal, cms, cmt, masks, maskt, shifts, shiftt) \
3912 gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \
3913 gsDPSetTile(fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0 , cmt, \
3914 maskt, shiftt, cms, masks, shifts), \
3916 gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1,0),\
3918 gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), 0, \
3919 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
3921 gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \
3922 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3923 ((height)-1) << G_TEXTURE_IMAGE_FRAC)
3929 #define gsDPLoadMultiBlock_4b(timg, tmem, rtile, fmt, width, height, \
3930 pal, cms, cmt, masks, maskt, shifts, shiftt) \
3932 gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \
3933 gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0 , cmt, \
3934 maskt, shiftt, cms, masks, shifts), \
3936 gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1, \
3937 CALC_DXT_4b(width)), \
3939 gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \
3940 rtile, pal, cmt, maskt, shiftt, cms, masks, \
3942 gsDPSetTileSize(rtile, 0, 0, \
3943 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3944 ((height)-1) << G_TEXTURE_IMAGE_FRAC)
3951 #define gsDPLoadMultiBlock_4bS(timg, tmem, rtile, fmt, width, height, \
3952 pal, cms, cmt, masks, maskt, shifts, shiftt) \
3954 gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \
3955 gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0 , cmt, \
3956 maskt, shiftt, cms, masks, shifts), \
3958 gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1,0),\
3960 gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \
3961 rtile, pal, cmt, maskt, shiftt, cms, masks, \
3963 gsDPSetTileSize(rtile, 0, 0, \
3964 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3965 ((height)-1) << G_TEXTURE_IMAGE_FRAC)
3971 #define _gsDPLoadTextureBlock_4b(timg, tmem, fmt, width, height, \
3972 pal, cms, cmt, masks, maskt, shifts, shiftt) \
3974 gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \
3975 gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, 0 , cmt, \
3976 maskt, shiftt, cms, masks, shifts), \
3978 gsDPLoadBlock(G_TX_LOADTILE, 0, 0, (((width)*(height)+3)>>2)-1, \
3979 CALC_DXT_4b(width)), \
3981 gsDPSetTile(fmt, G_IM_SIZ_4b, ((((width)>>1)+7)>>3), tmem, \
3982 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
3984 gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \
3985 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
3986 ((height)-1) << G_TEXTURE_IMAGE_FRAC)
3988 #ifndef _HW_VERSION_1
3990 #define gDPLoadTextureTile(pkt, timg, fmt, siz, width, height, \
3991 uls, ult, lrs, lrt, pal, \
3992 cms, cmt, masks, maskt, shifts, shiftt) \
3994 gDPSetTextureImage(pkt, fmt, siz, width, timg); \
3995 gDPSetTile(pkt, fmt, siz, \
3996 (((((lrs)-(uls)+1) * siz##_TILE_BYTES)+7)>>3), 0, \
3997 G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \
4000 gDPLoadTile( pkt, G_TX_LOADTILE, \
4001 (uls)<<G_TEXTURE_IMAGE_FRAC, \
4002 (ult)<<G_TEXTURE_IMAGE_FRAC, \
4003 (lrs)<<G_TEXTURE_IMAGE_FRAC, \
4004 (lrt)<<G_TEXTURE_IMAGE_FRAC); \
4006 gDPSetTile(pkt, fmt, siz, \
4007 (((((lrs)-(uls)+1) * siz##_LINE_BYTES)+7)>>3), 0, \
4008 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
4010 gDPSetTileSize(pkt, G_TX_RENDERTILE, \
4011 (uls)<<G_TEXTURE_IMAGE_FRAC, \
4012 (ult)<<G_TEXTURE_IMAGE_FRAC, \
4013 (lrs)<<G_TEXTURE_IMAGE_FRAC, \
4014 (lrt)<<G_TEXTURE_IMAGE_FRAC) \
4019 #define gDPLoadTextureTile(pkt, timg, fmt, siz, width, height, \
4020 uls, ult, lrs, lrt, pal, \
4021 cms, cmt, masks, maskt, shifts, shiftt) \
4024 int _loadtile_i, _loadtile_nw; Gfx *_loadtile_temp = pkt; \
4025 guDPLoadTextureTile(_loadtile_temp, timg, fmt, siz, \
4027 uls, ult, lrs, lrt, pal, \
4028 cms, cmt, masks, maskt, shifts, shiftt); \
4029 _loadtile_nw = guGetDPLoadTextureTileSz(ult, lrt) - 1; \
4030 for(_loadtile_i = 0; _loadtile_i < _loadtile_nw; _loadtile_i++) \
4040 #define gDPLoadMultiTile(pkt, timg, tmem, rtile, fmt, siz, width, height,\
4041 uls, ult, lrs, lrt, pal, \
4042 cms, cmt, masks, maskt, shifts, shiftt) \
4044 gDPSetTextureImage(pkt, fmt, siz, width, timg); \
4045 gDPSetTile(pkt, fmt, siz, \
4046 (((((lrs)-(uls)+1) * siz##_TILE_BYTES)+7)>>3), tmem, \
4047 G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \
4050 gDPLoadTile( pkt, G_TX_LOADTILE, \
4051 (uls)<<G_TEXTURE_IMAGE_FRAC, \
4052 (ult)<<G_TEXTURE_IMAGE_FRAC, \
4053 (lrs)<<G_TEXTURE_IMAGE_FRAC, \
4054 (lrt)<<G_TEXTURE_IMAGE_FRAC); \
4056 gDPSetTile(pkt, fmt, siz, \
4057 (((((lrs)-(uls)+1) * siz##_LINE_BYTES)+7)>>3), tmem, \
4058 rtile, pal, cmt, maskt, shiftt, cms, masks, \
4060 gDPSetTileSize(pkt, rtile, \
4061 (uls)<<G_TEXTURE_IMAGE_FRAC, \
4062 (ult)<<G_TEXTURE_IMAGE_FRAC, \
4063 (lrs)<<G_TEXTURE_IMAGE_FRAC, \
4064 (lrt)<<G_TEXTURE_IMAGE_FRAC) \
4068 #define gsDPLoadTextureTile(timg, fmt, siz, width, height, \
4069 uls, ult, lrs, lrt, pal, \
4070 cms, cmt, masks, maskt, shifts, shiftt) \
4072 gsDPSetTextureImage(fmt, siz, width, timg), \
4073 gsDPSetTile(fmt, siz, \
4074 (((((lrs)-(uls)+1) * siz##_TILE_BYTES)+7)>>3), 0, \
4075 G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \
4078 gsDPLoadTile( G_TX_LOADTILE, \
4079 (uls)<<G_TEXTURE_IMAGE_FRAC, \
4080 (ult)<<G_TEXTURE_IMAGE_FRAC, \
4081 (lrs)<<G_TEXTURE_IMAGE_FRAC, \
4082 (lrt)<<G_TEXTURE_IMAGE_FRAC), \
4084 gsDPSetTile(fmt, siz, \
4085 (((((lrs)-(uls)+1) * siz##_LINE_BYTES)+7)>>3), 0, \
4086 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks,\
4088 gsDPSetTileSize(G_TX_RENDERTILE, \
4089 (uls)<<G_TEXTURE_IMAGE_FRAC, \
4090 (ult)<<G_TEXTURE_IMAGE_FRAC, \
4091 (lrs)<<G_TEXTURE_IMAGE_FRAC, \
4092 (lrt)<<G_TEXTURE_IMAGE_FRAC)
4098 #define gsDPLoadMultiTile(timg, tmem, rtile, fmt, siz, width, height, \
4099 uls, ult, lrs, lrt, pal, \
4100 cms, cmt, masks, maskt, shifts, shiftt) \
4102 gsDPSetTextureImage(fmt, siz, width, timg), \
4103 gsDPSetTile(fmt, siz, \
4104 (((((lrs)-(uls)+1) * siz##_TILE_BYTES)+7)>>3), \
4105 tmem, G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, \
4108 gsDPLoadTile( G_TX_LOADTILE, \
4109 (uls)<<G_TEXTURE_IMAGE_FRAC, \
4110 (ult)<<G_TEXTURE_IMAGE_FRAC, \
4111 (lrs)<<G_TEXTURE_IMAGE_FRAC, \
4112 (lrt)<<G_TEXTURE_IMAGE_FRAC), \
4114 gsDPSetTile(fmt, siz, \
4115 (((((lrs)-(uls)+1) * siz##_LINE_BYTES)+7)>>3), \
4116 tmem, rtile, pal, cmt, maskt, shiftt, cms, masks, \
4118 gsDPSetTileSize(rtile, \
4119 (uls)<<G_TEXTURE_IMAGE_FRAC, \
4120 (ult)<<G_TEXTURE_IMAGE_FRAC, \
4121 (lrs)<<G_TEXTURE_IMAGE_FRAC, \
4122 (lrt)<<G_TEXTURE_IMAGE_FRAC)
4124 #define gDPLoadTextureTile_4b(pkt, timg, fmt, width, height, \
4125 uls, ult, lrs, lrt, pal, \
4126 cms, cmt, masks, maskt, shifts, shiftt) \
4128 gDPSetTextureImage(pkt, fmt, G_IM_SIZ_8b, ((width)>>1), timg); \
4129 gDPSetTile(pkt, fmt, G_IM_SIZ_8b, \
4130 (((((lrs)-(uls)+1)>>1)+7)>>3), 0, \
4131 G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \
4134 gDPLoadTile( pkt, G_TX_LOADTILE, \
4135 (uls)<<(G_TEXTURE_IMAGE_FRAC-1), \
4136 (ult)<<(G_TEXTURE_IMAGE_FRAC), \
4137 (lrs)<<(G_TEXTURE_IMAGE_FRAC-1), \
4138 (lrt)<<(G_TEXTURE_IMAGE_FRAC)); \
4140 gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \
4141 (((((lrs)-(uls)+1)>>1)+7)>>3), 0, \
4142 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, \
4144 gDPSetTileSize(pkt, G_TX_RENDERTILE, \
4145 (uls)<<G_TEXTURE_IMAGE_FRAC, \
4146 (ult)<<G_TEXTURE_IMAGE_FRAC, \
4147 (lrs)<<G_TEXTURE_IMAGE_FRAC, \
4148 (lrt)<<G_TEXTURE_IMAGE_FRAC) \
4155 #define gDPLoadMultiTile_4b(pkt, timg, tmem, rtile, fmt, width, height, \
4156 uls, ult, lrs, lrt, pal, \
4157 cms, cmt, masks, maskt, shifts, shiftt) \
4159 gDPSetTextureImage(pkt, fmt, G_IM_SIZ_8b, ((width)>>1), timg); \
4160 gDPSetTile(pkt, fmt, G_IM_SIZ_8b, \
4161 (((((lrs)-(uls)+1)>>1)+7)>>3), tmem, \
4162 G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \
4165 gDPLoadTile( pkt, G_TX_LOADTILE, \
4166 (uls)<<(G_TEXTURE_IMAGE_FRAC-1), \
4167 (ult)<<(G_TEXTURE_IMAGE_FRAC), \
4168 (lrs)<<(G_TEXTURE_IMAGE_FRAC-1), \
4169 (lrt)<<(G_TEXTURE_IMAGE_FRAC)); \
4171 gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \
4172 (((((lrs)-(uls)+1)>>1)+7)>>3), tmem, \
4173 rtile, pal, cmt, maskt, shiftt, cms, masks, \
4175 gDPSetTileSize(pkt, rtile, \
4176 (uls)<<G_TEXTURE_IMAGE_FRAC, \
4177 (ult)<<G_TEXTURE_IMAGE_FRAC, \
4178 (lrs)<<G_TEXTURE_IMAGE_FRAC, \
4179 (lrt)<<G_TEXTURE_IMAGE_FRAC) \
4182 #define gsDPLoadTextureTile_4b(timg, fmt, width, height, \
4183 uls, ult, lrs, lrt, pal, \
4184 cms, cmt, masks, maskt, shifts, shiftt) \
4186 gsDPSetTextureImage(fmt, G_IM_SIZ_8b, ((width)>>1), timg), \
4187 gsDPSetTile(fmt, G_IM_SIZ_8b, (((((lrs)-(uls)+1)>>1)+7)>>3), 0, \
4188 G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, masks, \
4191 gsDPLoadTile( G_TX_LOADTILE, \
4192 (uls)<<(G_TEXTURE_IMAGE_FRAC-1), \
4193 (ult)<<(G_TEXTURE_IMAGE_FRAC), \
4194 (lrs)<<(G_TEXTURE_IMAGE_FRAC-1), \
4195 (lrt)<<(G_TEXTURE_IMAGE_FRAC)), \
4197 gsDPSetTile(fmt, G_IM_SIZ_4b, (((((lrs)-(uls)+1)>>1)+7)>>3), 0, \
4198 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
4200 gsDPSetTileSize(G_TX_RENDERTILE, \
4201 (uls)<<G_TEXTURE_IMAGE_FRAC, \
4202 (ult)<<G_TEXTURE_IMAGE_FRAC, \
4203 (lrs)<<G_TEXTURE_IMAGE_FRAC, \
4204 (lrt)<<G_TEXTURE_IMAGE_FRAC)
4210 #define gsDPLoadMultiTile_4b(timg, tmem, rtile, fmt, width, height, \
4211 uls, ult, lrs, lrt, pal, \
4212 cms, cmt, masks, maskt, shifts, shiftt) \
4214 gsDPSetTextureImage(fmt, G_IM_SIZ_8b, ((width)>>1), timg), \
4215 gsDPSetTile(fmt, G_IM_SIZ_8b, (((((lrs)-(uls)+1)>>1)+7)>>3), \
4216 tmem, G_TX_LOADTILE, 0 , cmt, maskt, shiftt, cms, \
4219 gsDPLoadTile( G_TX_LOADTILE, \
4220 (uls)<<(G_TEXTURE_IMAGE_FRAC-1), \
4221 (ult)<<(G_TEXTURE_IMAGE_FRAC), \
4222 (lrs)<<(G_TEXTURE_IMAGE_FRAC-1), \
4223 (lrt)<<(G_TEXTURE_IMAGE_FRAC)), \
4225 gsDPSetTile(fmt, G_IM_SIZ_4b, (((((lrs)-(uls)+1)>>1)+7)>>3), \
4226 tmem, rtile, pal, cmt, maskt, shiftt, cms, masks, \
4228 gsDPSetTileSize(rtile, \
4229 (uls)<<G_TEXTURE_IMAGE_FRAC, \
4230 (ult)<<G_TEXTURE_IMAGE_FRAC, \
4231 (lrs)<<G_TEXTURE_IMAGE_FRAC, \
4232 (lrt)<<G_TEXTURE_IMAGE_FRAC)
4238 #ifndef _HW_VERSION_1
4240 #define gDPLoadTLUT_pal16(pkt, pal, dram) \
4242 gDPSetTextureImage(pkt, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram); \
4244 gDPSetTile(pkt, 0, 0, 0, (256+(((pal)&0xf)*16)), \
4245 G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0); \
4247 gDPLoadTLUTCmd(pkt, G_TX_LOADTILE, 15); \
4253 #define gDPLoadTLUT_pal16(pkt, pal, dram) \
4255 _gDPLoadTextureBlock(pkt, dram, (256+(((pal)&0xf)*16)), \
4256 G_IM_FMT_RGBA, G_IM_SIZ_16b, 4*16, 1, \
4257 pal, 0, 0, 0, 0, 0, 0)
4266 #ifndef _HW_VERSION_1
4268 #define gsDPLoadTLUT_pal16(pal, dram) \
4270 gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram), \
4272 gsDPSetTile(0, 0, 0, (256+(((pal)&0xf)*16)), \
4273 G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0), \
4275 gsDPLoadTLUTCmd(G_TX_LOADTILE, 15), \
4280 #define gsDPLoadTLUT_pal16(pal, dram) \
4282 _gsDPLoadTextureBlock(dram, (256+(((pal)&0xf)*16)), \
4283 G_IM_FMT_RGBA, G_IM_SIZ_16b, 4*16, 1, \
4284 pal, 0, 0, 0, 0, 0, 0)
4292 #ifndef _HW_VERSION_1
4294 #define gDPLoadTLUT_pal256(pkt, dram) \
4296 gDPSetTextureImage(pkt, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram); \
4298 gDPSetTile(pkt, 0, 0, 0, 256, \
4299 G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0); \
4301 gDPLoadTLUTCmd(pkt, G_TX_LOADTILE, 255); \
4307 #define gDPLoadTLUT_pal256(pkt, dram) \
4309 _gDPLoadTextureBlock(pkt, dram, 256, \
4310 G_IM_FMT_RGBA, G_IM_SIZ_16b, 4*256, 1, \
4311 0, 0, 0, 0, 0, 0, 0)
4317 #ifndef _HW_VERSION_1
4319 #define gsDPLoadTLUT_pal256(dram) \
4321 gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram), \
4323 gsDPSetTile(0, 0, 0, 256, \
4324 G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0), \
4326 gsDPLoadTLUTCmd(G_TX_LOADTILE, 255), \
4331 #define gsDPLoadTLUT_pal256(dram) \
4333 _gsDPLoadTextureBlock(dram, 256, \
4334 G_IM_FMT_RGBA, G_IM_SIZ_16b, 4*256, 1, \
4335 0, 0, 0, 0, 0, 0, 0)
4340 #ifndef _HW_VERSION_1
4342 #define gDPLoadTLUT(pkt, count, tmemaddr, dram) \
4344 gDPSetTextureImage(pkt, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram); \
4346 gDPSetTile(pkt, 0, 0, 0, tmemaddr, \
4347 G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0); \
4349 gDPLoadTLUTCmd(pkt, G_TX_LOADTILE, ((count)-1)); \
4355 #define gDPLoadTLUT(pkt, count, tmemaddr, dram) \
4357 _gDPLoadTextureBlock(pkt, dram, tmemaddr, \
4358 G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, count, \
4359 0, 0, 0, 0, 0, 0, 0)
4364 #ifndef _HW_VERSION_1
4366 #define gsDPLoadTLUT(count, tmemaddr, dram) \
4368 gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram), \
4370 gsDPSetTile(0, 0, 0, tmemaddr, \
4371 G_TX_LOADTILE, 0 , 0, 0, 0, 0, 0, 0), \
4373 gsDPLoadTLUTCmd(G_TX_LOADTILE, ((count)-1)), \
4377 #define gsDPLoadTLUT(count, tmemaddr, dram) \
4379 _gsDPLoadTextureBlock(dram, tmemaddr, \
4380 G_IM_FMT_RGBA, G_IM_SIZ_16b, 4, count, \
4381 0, 0, 0, 0, 0, 0, 0)
4385 #define gDPSetScissor(pkt, mode, ulx, uly, lrx, lry) \
4387 Gfx *_g = (Gfx *)pkt; \
4389 _g->words.w0 = _SHIFTL(G_SETSCISSOR, 24, 8) | \
4390 _SHIFTL((int)((float)(ulx)*4.0F), 12, 12) | \
4391 _SHIFTL((int)((float)(uly)*4.0F), 0, 12); \
4392 _g->words.w1 = _SHIFTL(mode, 24, 2) | \
4393 _SHIFTL((int)((float)(lrx)*4.0F), 12, 12) | \
4394 _SHIFTL((int)((float)(lry)*4.0F), 0, 12); \
4398 #define gDPSetScissorFrac(pkt, mode, ulx, uly, lrx, lry) \
4400 Gfx *_g = (Gfx *)pkt; \
4402 _g->words.w0 = _SHIFTL(G_SETSCISSOR, 24, 8) | \
4403 _SHIFTL((int)((ulx)), 12, 12) | \
4404 _SHIFTL((int)((uly)), 0, 12); \
4405 _g->words.w1 = _SHIFTL(mode, 24, 2) | \
4406 _SHIFTL((int)((lrx)), 12, 12) | \
4407 _SHIFTL((int)((lry)), 0, 12); \
4410 #define gsDPSetScissor(mode, ulx, uly, lrx, lry) \
4412 _SHIFTL(G_SETSCISSOR, 24, 8) | \
4413 _SHIFTL((int)((float)(ulx)*4.0F), 12, 12) | \
4414 _SHIFTL((int)((float)(uly)*4.0F), 0, 12), \
4415 _SHIFTL(mode, 24, 2) | \
4416 _SHIFTL((int)((float)(lrx)*4.0F), 12, 12) | \
4417 _SHIFTL((int)((float)(lry)*4.0F), 0, 12) \
4420 #define gsDPSetScissorFrac(mode, ulx, uly, lrx, lry) \
4422 _SHIFTL(G_SETSCISSOR, 24, 8) | \
4423 _SHIFTL((int)((ulx)), 12, 12) | \
4424 _SHIFTL((int)((uly)), 0, 12), \
4425 _SHIFTL(mode, 24, 2) | \
4426 _SHIFTL((int)(lrx), 12, 12) | \
4427 _SHIFTL((int)(lry), 0, 12) \
4431 #define gDPFillRectangle(pkt, ulx, uly, lrx, lry) \
4433 Gfx *_g = (Gfx *)(pkt); \
4435 _g->words.w0 = (_SHIFTL(G_FILLRECT, 24, 8) | \
4436 _SHIFTL((lrx), 14, 10) | _SHIFTL((lry), 2, 10));\
4437 _g->words.w1 = (_SHIFTL((ulx), 14, 10) | _SHIFTL((uly), 2, 10));\
4440 #define gsDPFillRectangle(ulx, uly, lrx, lry) \
4442 (_SHIFTL(G_FILLRECT, 24, 8) | _SHIFTL((lrx), 14, 10) | \
4443 _SHIFTL((lry), 2, 10)), \
4444 (_SHIFTL((ulx), 14, 10) | _SHIFTL((uly), 2, 10)) \
4448 #define gDPScisFillRectangle(pkt, ulx, uly, lrx, lry) \
4450 Gfx *_g = (Gfx *)(pkt); \
4452 _g->words.w0 = (_SHIFTL(G_FILLRECT, 24, 8) | \
4453 _SHIFTL(MAX((lrx),0), 14, 10) | \
4454 _SHIFTL(MAX((lry),0), 2, 10)); \
4455 _g->words.w1 = (_SHIFTL(MAX((ulx),0), 14, 10) | \
4456 _SHIFTL(MAX((uly),0), 2, 10)); \
4459 #define gDPSetConvert(pkt, k0, k1, k2, k3, k4, k5) \
4461 Gfx *_g = (Gfx *)(pkt); \
4463 _g->words.w0 = (_SHIFTL(G_SETCONVERT, 24, 8) | \
4464 _SHIFTL(k0, 13, 9) | _SHIFTL(k1, 4, 9) | \
4465 _SHIFTR(k2, 5, 4)); \
4466 _g->words.w1 = (_SHIFTL(k2, 27, 5) | _SHIFTL(k3, 18, 9) | \
4467 _SHIFTL(k4, 9, 9) | _SHIFTL(k5, 0, 9)); \
4470 #define gsDPSetConvert(k0, k1, k2, k3, k4, k5) \
4472 (_SHIFTL(G_SETCONVERT, 24, 8) | \
4473 _SHIFTL(k0, 13, 9) | _SHIFTL(k1, 4, 9) | _SHIFTR(k2, 5, 4)), \
4474 (_SHIFTL(k2, 27, 5) | _SHIFTL(k3, 18, 9) | _SHIFTL(k4, 9, 9) | \
4475 _SHIFTL(k5, 0, 9)) \
4478 #define gDPSetKeyR(pkt, cR, sR, wR) \
4480 Gfx *_g = (Gfx *)(pkt); \
4482 _g->words.w0 = _SHIFTL(G_SETKEYR, 24, 8); \
4483 _g->words.w1 = (_SHIFTL(wR, 16, 12) | _SHIFTL(cR, 8, 8) | \
4484 _SHIFTL(sR, 0, 8)); \
4487 #define gsDPSetKeyR(cR, sR, wR) \
4489 _SHIFTL(G_SETKEYR, 24, 8), \
4490 _SHIFTL(wR, 16, 12) | _SHIFTL(cR, 8, 8) | _SHIFTL(sR, 0, 8) \
4493 #define gDPSetKeyGB(pkt, cG, sG, wG, cB, sB, wB) \
4495 Gfx *_g = (Gfx *)(pkt); \
4497 _g->words.w0 = (_SHIFTL(G_SETKEYGB, 24, 8) | \
4498 _SHIFTL(wG, 12, 12) | _SHIFTL(wB, 0, 12)); \
4499 _g->words.w1 = (_SHIFTL(cG, 24, 8) | _SHIFTL(sG, 16, 8) | \
4500 _SHIFTL(cB, 8, 8) | _SHIFTL(sB, 0, 8)); \
4503 #define gsDPSetKeyGB(cG, sG, wG, cB, sB, wB) \
4505 (_SHIFTL(G_SETKEYGB, 24, 8) | _SHIFTL(wG, 12, 12) | \
4506 _SHIFTL(wB, 0, 12)), \
4507 (_SHIFTL(cG, 24, 8) | _SHIFTL(sG, 16, 8) | _SHIFTL(cB, 8, 8) | \
4508 _SHIFTL(sB, 0, 8)) \
4511 #define gDPNoParam(pkt, cmd) \
4513 Gfx *_g = (Gfx *)(pkt); \
4515 _g->words.w0 = _SHIFTL(cmd, 24, 8); \
4519 #define gsDPNoParam(cmd) \
4521 _SHIFTL(cmd, 24, 8), 0 \
4524 #define gDPParam(pkt, cmd, param) \
4526 Gfx *_g = (Gfx *)(pkt); \
4528 _g->words.w0 = _SHIFTL(cmd, 24, 8); \
4529 _g->words.w1 = (param); \
4532 #define gsDPParam(cmd, param) \
4534 _SHIFTL(cmd, 24, 8), (param) \
4542 #define gsDPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
4544 (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \
4545 _SHIFTL(yh, 0, 12)), \
4546 (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12)), \
4549 _SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16), \
4550 _SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16) \
4553 #define gDPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\
4555 Gfx *_g = (Gfx *)(pkt); \
4557 _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \
4558 _SHIFTL(yh, 0, 12)); \
4559 _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \
4560 _SHIFTL(yl, 0, 12)); \
4562 _g->words.w0 = (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16)); \
4563 _g->words.w1 = (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)); \
4566 #define gsDPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
4568 (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \
4569 _SHIFTL(yh, 0, 12)), \
4570 (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12)), \
4573 _SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16), \
4574 _SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16) \
4577 #define gDPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\
4579 Gfx *_g = (Gfx *)(pkt); \
4581 _g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \
4582 _SHIFTL(yh, 0, 12)); \
4583 _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \
4584 _SHIFTL(yl, 0, 12)); \
4586 _g->words.w0 = (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16)); \
4587 _g->words.w1 = (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)); \
4591 # define gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\
4593 Gfx *_g = (Gfx *)(pkt); \
4595 _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \
4596 _SHIFTL(yh, 0, 12)); \
4597 _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \
4598 _SHIFTL(yl, 0, 12)); \
4599 gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \
4600 gImmp1(pkt, G_RDPHALF_CONT, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)));\
4603 #define gsSPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
4604 {{(_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | _SHIFTL(yh, 0, 12)),\
4605 (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12))}}, \
4606 gsImmp1(G_RDPHALF_2, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))), \
4607 gsImmp1(G_RDPHALF_CONT, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)))
4610 # define gSPScisTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
4612 Gfx *_g = (Gfx *)(pkt); \
4614 _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | \
4615 _SHIFTL(MAX((s16)(xh),0), 12, 12) | \
4616 _SHIFTL(MAX((s16)(yh),0), 0, 12)); \
4617 _g->words.w1 = (_SHIFTL((tile), 24, 3) | \
4618 _SHIFTL(MAX((s16)(xl),0), 12, 12) | \
4619 _SHIFTL(MAX((s16)(yl),0), 0, 12)); \
4620 gImmp1(pkt, G_RDPHALF_2, \
4622 (((s16)(xl) < 0) ? \
4623 (((s16)(dsdx) < 0) ? \
4624 (MAX((((s16)(xl)*(s16)(dsdx))>>7),0)) : \
4625 (MIN((((s16)(xl)*(s16)(dsdx))>>7),0))) : 0)), \
4629 (((s16)(dtdy) < 0) ? \
4630 (MAX((((s16)(yl)*(s16)(dtdy))>>7),0)) : \
4631 (MIN((((s16)(yl)*(s16)(dtdy))>>7),0))) : 0)), \
4633 gImmp1(pkt, G_RDPHALF_CONT, (_SHIFTL((dsdx), 16, 16) | \
4634 _SHIFTL((dtdy), 0, 16))); \
4637 # define gsSPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
4638 {{(_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \
4639 _SHIFTL(yh, 0, 12)), \
4640 (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12))}}, \
4641 gsImmp1(G_RDPHALF_2, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))), \
4642 gsImmp1(G_RDPHALF_CONT, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)))
4644 # define gSPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
4646 Gfx *_g = (Gfx *)(pkt); \
4648 _g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) |\
4649 _SHIFTL(yh, 0, 12)); \
4650 _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \
4651 _SHIFTL(yl, 0, 12)); \
4652 gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \
4653 gImmp1(pkt, G_RDPHALF_CONT, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))); \
4656 # define gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\
4658 Gfx *_g = (Gfx *)(pkt); \
4660 _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \
4661 _SHIFTL(yh, 0, 12)); \
4662 _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \
4663 _SHIFTL(yl, 0, 12)); \
4664 gImmp1(pkt, G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \
4665 gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)));\
4668 #define gsSPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
4669 {{(_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | _SHIFTL(yh, 0, 12)),\
4670 (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12))}}, \
4671 gsImmp1(G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))), \
4672 gsImmp1(G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)))
4675 # define gSPScisTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
4677 Gfx *_g = (Gfx *)(pkt); \
4679 _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | \
4680 _SHIFTL(MAX((s16)(xh),0), 12, 12) | \
4681 _SHIFTL(MAX((s16)(yh),0), 0, 12)); \
4682 _g->words.w1 = (_SHIFTL((tile), 24, 3) | \
4683 _SHIFTL(MAX((s16)(xl),0), 12, 12) | \
4684 _SHIFTL(MAX((s16)(yl),0), 0, 12)); \
4685 gImmp1(pkt, G_RDPHALF_1, \
4687 (((s16)(xl) < 0) ? \
4688 (((s16)(dsdx) < 0) ? \
4689 (MAX((((s16)(xl)*(s16)(dsdx))>>7),0)) : \
4690 (MIN((((s16)(xl)*(s16)(dsdx))>>7),0))) : 0)), \
4694 (((s16)(dtdy) < 0) ? \
4695 (MAX((((s16)(yl)*(s16)(dtdy))>>7),0)) : \
4696 (MIN((((s16)(yl)*(s16)(dtdy))>>7),0))) : 0)), \
4698 gImmp1(pkt, G_RDPHALF_2, (_SHIFTL((dsdx), 16, 16) | \
4699 _SHIFTL((dtdy), 0, 16))); \
4702 # define gsSPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
4703 {{(_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \
4704 _SHIFTL(yh, 0, 12)), \
4705 (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | _SHIFTL(yl, 0, 12))}}, \
4706 gsImmp1(G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))), \
4707 gsImmp1(G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)))
4709 # define gSPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
4711 Gfx *_g = (Gfx *)(pkt); \
4713 _g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) |\
4714 _SHIFTL(yh, 0, 12)); \
4715 _g->words.w1 = (_SHIFTL(tile, 24, 3) | _SHIFTL(xl, 12, 12) | \
4716 _SHIFTL(yl, 0, 12)); \
4717 gImmp1(pkt, G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \
4718 gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))); \
4722 #define gsDPWord(wordhi, wordlo) \
4723 gsImmp1(G_RDPHALF_1, (uintptr_t)(wordhi)), \
4724 gsImmp1(G_RDPHALF_2, (uintptr_t)(wordlo))
4726 #define gDPWord(pkt, wordhi, wordlo) \
4728 Gfx *_g = (Gfx *)(pkt); \
4730 gImmp1(pkt, G_RDPHALF_1, (uintptr_t)(wordhi)); \
4731 gImmp1(pkt, G_RDPHALF_2, (uintptr_t)(wordlo)); \
4734 #define gDPFullSync(pkt) gDPNoParam(pkt, G_RDPFULLSYNC)
4735 #define gsDPFullSync() gsDPNoParam(G_RDPFULLSYNC)
4736 #define gDPTileSync(pkt) gDPNoParam(pkt, G_RDPTILESYNC)
4737 #define gsDPTileSync() gsDPNoParam(G_RDPTILESYNC)
4738 #define gDPPipeSync(pkt) gDPNoParam(pkt, G_RDPPIPESYNC)
4739 #define gsDPPipeSync() gsDPNoParam(G_RDPPIPESYNC)
4740 #define gDPLoadSync(pkt) gDPNoParam(pkt, G_RDPLOADSYNC)
4741 #define gsDPLoadSync() gsDPNoParam(G_RDPLOADSYNC)
4742 #define gDPNoOp(pkt) gDPNoParam(pkt, G_NOOP)
4743 #define gsDPNoOp() gsDPNoParam(G_NOOP)
4744 #define gDPNoOpTag(pkt, tag) gDPParam(pkt, G_NOOP, tag)
4745 #define gsDPNoOpTag(tag) gsDPParam(G_NOOP, tag)
signed int s32
Definition: ultratypes.h:15