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
108#define G_TEXTURE 0xd7
110#define G_SPECIAL_1 0xd5
111#define G_SPECIAL_2 0xd4
112#define G_SPECIAL_3 0xd3
115#define G_MODIFYVTX 0x02
117#define G_BRANCH_Z 0x04
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
396#define G_IM_FMT_RGBA 0
397#define G_IM_FMT_YUV 1
407#define G_IM_SIZ_16b 2
408#define G_IM_SIZ_32b 3
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
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)
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
704#define G_BL_CLR_MEM 1
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)
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];
1172typedef s32 Mtx_t[4][4];
1176 long long int force_structure_alignment;
1200#define G_MAXZ 0x03ff
1221 long long int force_structure_alignment;
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;
1672typedef Gloadtile Gloadblock;
1674typedef Gloadtile Gsettilesize;
1676typedef 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); \
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))
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
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
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