14#include "ultra64/mbi.h"
23#ifdef REQUIRE_SEMICOLONS_AFTER_GBI_COMMANDS
26#define _DW(macro) do {macro} while (0)
30#define _DW(macro) macro
38#define G_TRI_FILL 0xC8
39#define G_TRI_SHADE 0xCC
40#define G_TRI_TXTR 0xCA
41#define G_TRI_SHADE_TXTR 0xCE
42#define G_TRI_FILL_ZBUFF 0xC9
43#define G_TRI_SHADE_ZBUFF 0xCD
44#define G_TRI_TXTR_ZBUFF 0xCB
45#define G_TRI_SHADE_TXTR_ZBUFF 0xCF
48#define G_RDP_TRI_FILL_MASK 0x08
49#define G_RDP_TRI_SHADE_MASK 0x04
50#define G_RDP_TRI_TXTR_MASK 0x02
51#define G_RDP_TRI_ZBUFF_MASK 0x01
63#define G_GEOMETRYMODE 0xD9
65#define G_MOVEWORD 0xDB
67#define G_LOAD_UCODE 0xDD
71#define G_RDPHALF_1 0xE1
72#define G_SETOTHERMODE_L 0xE2
73#define G_SETOTHERMODE_H 0xE3
75#define G_TEXRECTFLIP 0xE5
76#define G_RDPLOADSYNC 0xE6
77#define G_RDPPIPESYNC 0xE7
78#define G_RDPTILESYNC 0xE8
79#define G_RDPFULLSYNC 0xE9
80#define G_SETKEYGB 0xEA
82#define G_SETCONVERT 0xEC
83#define G_SETSCISSOR 0xED
84#define G_SETPRIMDEPTH 0xEE
85#define G_RDPSETOTHERMODE 0xEF
86#define G_LOADTLUT 0xF0
87#define G_RDPHALF_2 0xF1
88#define G_SETTILESIZE 0xF2
89#define G_LOADBLOCK 0xF3
90#define G_LOADTILE 0xF4
92#define G_FILLRECT 0xF6
93#define G_SETFILLCOLOR 0xF7
94#define G_SETFOGCOLOR 0xF8
95#define G_SETBLENDCOLOR 0xF9
96#define G_SETPRIMCOLOR 0xFA
97#define G_SETENVCOLOR 0xFB
98#define G_SETCOMBINE 0xFC
100#define G_SETZIMG 0xFE
101#define G_SETCIMG 0xFF
104#define G_MODIFYVTX 0x02
106#define G_BRANCH_WZ 0x04
110#define G_TRISTRIP 0x08
112#define G_LIGHTTORDP 0x0A
113#define G_RELSEGMENT 0x0B
116#define G_BRANCH_Z G_BRANCH_WZ
117#define G_BRANCH_W G_BRANCH_WZ
124#define G_MAX_VERTS 56
127#define G_MAX_LIGHTS 9
130#define G_INPUT_BUFFER_CMDS 21
140#define G_ZBUFFER 0x00000001
141#define G_TEXTURE_ENABLE 0x00000000
142#define G_SHADE 0x00000004
143#define G_AMBOCCLUSION 0x00000040
144#define G_ATTROFFSET_Z_ENABLE 0x00000080
145#define G_ATTROFFSET_ST_ENABLE 0x00000100
146#define G_CULL_NEITHER 0x00000000
147#define G_CULL_FRONT 0x00000200
148#define G_CULL_BACK 0x00000400
149#define G_CULL_BOTH 0x00000600
150#define G_PACKED_NORMALS 0x00000800
151#define G_LIGHTTOALPHA 0x00001000
152#define G_LIGHTING_SPECULAR 0x00002000
153#define G_FRESNEL_COLOR 0x00004000
154#define G_FRESNEL_ALPHA 0x00008000
155#define G_FOG 0x00010000
156#define G_LIGHTING 0x00020000
157#define G_TEXTURE_GEN 0x00040000
158#define G_TEXTURE_GEN_LINEAR 0x00080000
159#define G_LOD 0x00100000
160#define G_SHADING_SMOOTH 0x00200000
161#define G_LIGHTING_POSITIONAL 0x00400000
162#define G_CLIPPING 0x00800000
173#define G_MTX_MODELVIEW 0x00
178#define G_MTX_PROJECTION 0x04
183#define G_MTX_MUL 0x00
188#define G_MTX_LOAD 0x02
193#define G_MTX_NOPUSH 0x00
198#define G_MTX_PUSH 0x01
201#define G_NORMALS_MODE_FAST 0x00
202#define G_NORMALS_MODE_AUTO 0x01
203#define G_NORMALS_MODE_MANUAL 0x02
206#define G_ALPHA_COMPARE_CULL_DISABLE 0
207#define G_ALPHA_COMPARE_CULL_BELOW 1
208#define G_ALPHA_COMPARE_CULL_ABOVE -1
215#define G_MV_TEMPMTX0 0
217#define G_MV_TEMPMTX1 4
219#define G_MV_VIEWPORT 8
224#define G_MV_PMTX G_MV_VPMTX
232#define G_MW_NUMLIGHT 0x02
234#define G_MW_SEGMENT 0x06
236#define G_MW_LIGHTCOL 0x0A
240#define G_MW_HALFWORD_FLAG 0x8000
245#define G_MWO_NUMLIGHT 0x00
246#define G_MWO_FOG 0x00
248#define G_MWO_SEGMENT_0 0x00
249#define G_MWO_SEGMENT_1 0x01
250#define G_MWO_SEGMENT_2 0x02
251#define G_MWO_SEGMENT_3 0x03
252#define G_MWO_SEGMENT_4 0x04
253#define G_MWO_SEGMENT_5 0x05
254#define G_MWO_SEGMENT_6 0x06
255#define G_MWO_SEGMENT_7 0x07
256#define G_MWO_SEGMENT_8 0x08
257#define G_MWO_SEGMENT_9 0x09
258#define G_MWO_SEGMENT_A 0x0A
259#define G_MWO_SEGMENT_B 0x0B
260#define G_MWO_SEGMENT_C 0x0C
261#define G_MWO_SEGMENT_D 0x0D
262#define G_MWO_SEGMENT_E 0x0E
263#define G_MWO_SEGMENT_F 0x0F
266#define G_MWO_aLIGHT_1 0x00
267#define G_MWO_bLIGHT_1 0x04
268#define G_MWO_aLIGHT_2 0x10
269#define G_MWO_bLIGHT_2 0x14
270#define G_MWO_aLIGHT_3 0x20
271#define G_MWO_bLIGHT_3 0x24
272#define G_MWO_aLIGHT_4 0x30
273#define G_MWO_bLIGHT_4 0x34
274#define G_MWO_aLIGHT_5 0x40
275#define G_MWO_bLIGHT_5 0x44
276#define G_MWO_aLIGHT_6 0x50
277#define G_MWO_bLIGHT_6 0x54
278#define G_MWO_aLIGHT_7 0x60
279#define G_MWO_bLIGHT_7 0x64
280#define G_MWO_aLIGHT_8 0x70
281#define G_MWO_bLIGHT_8 0x74
282#define G_MWO_aLIGHT_9 0x80
283#define G_MWO_bLIGHT_9 0x84
284#define G_MWO_aLIGHT_10 0x90
285#define G_MWO_bLIGHT_10 0x94
291#define G_MWO_POINT_RGBA 0x10
296#define G_MWO_POINT_ST 0x14
302#define G_MWO_POINT_XYSCREEN 0x18
308#define G_MWO_POINT_ZSCREEN 0x1C
310#define G_MWO_AO_AMBIENT 0x00
311#define G_MWO_AO_DIRECTIONAL 0x02
312#define G_MWO_AO_POINT 0x04
313#define G_MWO_PERSPNORM 0x06
314#define G_MWO_FRESNEL_SCALE 0x0C
315#define G_MWO_FRESNEL_OFFSET 0x0E
316#define G_MWO_ATTR_OFFSET_S 0x10
317#define G_MWO_ATTR_OFFSET_T 0x12
318#define G_MWO_ATTR_OFFSET_Z 0x14
319#define G_MWO_ALPHA_COMPARE_CULL 0x16
320#define G_MWO_NORMALS_MODE 0x18
321#define G_MWO_LAST_MAT_DL_ADDR 0x1A
330#define G_TEXTURE_IMAGE_FRAC 2
331#define G_TEXTURE_SCALE_FRAC 16
332#define G_SCALE_FRAC 8
333#define G_ROTATE_FRAC 16
340#define G_MAXFBZ 0x3FFF
342#define GPACK_RGBA5551(r, g, b, a) \
343 ((((r) << 8) & 0xF800) | \
344 (((g) << 3) & 0x07C0) | \
345 (((b) >> 2) & 0x003E) | \
348#define GPACK_IA16(i, a) (((i) << 8) | (a))
350#define GPACK_ZDZ(z, dz) (((z) << 2) | (dz))
355#define G_IM_FMT_RGBA 0
356#define G_IM_FMT_YUV 1
366#define G_IM_SIZ_16b 2
367#define G_IM_SIZ_32b 3
370#define G_IM_SIZ_4b_BYTES 0
371#define G_IM_SIZ_4b_TILE_BYTES G_IM_SIZ_4b_BYTES
372#define G_IM_SIZ_4b_LINE_BYTES G_IM_SIZ_4b_BYTES
374#define G_IM_SIZ_8b_BYTES 1
375#define G_IM_SIZ_8b_TILE_BYTES G_IM_SIZ_8b_BYTES
376#define G_IM_SIZ_8b_LINE_BYTES G_IM_SIZ_8b_BYTES
378#define G_IM_SIZ_16b_BYTES 2
379#define G_IM_SIZ_16b_TILE_BYTES G_IM_SIZ_16b_BYTES
380#define G_IM_SIZ_16b_LINE_BYTES G_IM_SIZ_16b_BYTES
382#define G_IM_SIZ_32b_BYTES 4
383#define G_IM_SIZ_32b_TILE_BYTES 2
384#define G_IM_SIZ_32b_LINE_BYTES 2
386#define G_IM_SIZ_4b_LOAD_BLOCK G_IM_SIZ_16b
387#define G_IM_SIZ_8b_LOAD_BLOCK G_IM_SIZ_16b
388#define G_IM_SIZ_16b_LOAD_BLOCK G_IM_SIZ_16b
389#define G_IM_SIZ_32b_LOAD_BLOCK G_IM_SIZ_32b
391#define G_IM_SIZ_4b_SHIFT 2
392#define G_IM_SIZ_8b_SHIFT 1
393#define G_IM_SIZ_16b_SHIFT 0
394#define G_IM_SIZ_32b_SHIFT 0
396#define G_IM_SIZ_4b_INCR 3
397#define G_IM_SIZ_8b_INCR 1
398#define G_IM_SIZ_16b_INCR 0
399#define G_IM_SIZ_32b_INCR 0
405#define G_CCMUX_COMBINED 0
406#define G_CCMUX_TEXEL0 1
407#define G_CCMUX_TEXEL1 2
408#define G_CCMUX_PRIMITIVE 3
409#define G_CCMUX_SHADE 4
410#define G_CCMUX_ENVIRONMENT 5
411#define G_CCMUX_CENTER 6
412#define G_CCMUX_SCALE 6
413#define G_CCMUX_COMBINED_ALPHA 7
414#define G_CCMUX_TEXEL0_ALPHA 8
415#define G_CCMUX_TEXEL1_ALPHA 9
416#define G_CCMUX_PRIMITIVE_ALPHA 10
417#define G_CCMUX_SHADE_ALPHA 11
418#define G_CCMUX_ENV_ALPHA 12
419#define G_CCMUX_LOD_FRACTION 13
420#define G_CCMUX_PRIM_LOD_FRAC 14
421#define G_CCMUX_NOISE 7
428#define G_ACMUX_COMBINED 0
429#define G_ACMUX_TEXEL0 1
430#define G_ACMUX_TEXEL1 2
431#define G_ACMUX_PRIMITIVE 3
432#define G_ACMUX_SHADE 4
433#define G_ACMUX_ENVIRONMENT 5
434#define G_ACMUX_LOD_FRACTION 0
435#define G_ACMUX_PRIM_LOD_FRAC 6
442#define G_CC_PRIMITIVE 0, 0, 0, PRIMITIVE, 0, 0, 0, PRIMITIVE
443#define G_CC_SHADE 0, 0, 0, SHADE, 0, 0, 0, SHADE
445#define G_CC_MODULATEI TEXEL0, 0, SHADE, 0, 0, 0, 0, SHADE
446#define G_CC_MODULATEIDECALA TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0
447#define G_CC_MODULATEIFADE TEXEL0, 0, SHADE, 0, 0, 0, 0, ENVIRONMENT
449#define G_CC_MODULATERGB G_CC_MODULATEI
450#define G_CC_MODULATERGBDECALA G_CC_MODULATEIDECALA
451#define G_CC_MODULATERGBFADE G_CC_MODULATEIFADE
453#define G_CC_MODULATEIA TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0
454#define G_CC_MODULATEIFADEA TEXEL0, 0, SHADE, 0, TEXEL0, 0, ENVIRONMENT, 0
456#define G_CC_MODULATEFADE TEXEL0, 0, SHADE, 0, ENVIRONMENT, 0, TEXEL0, 0
458#define G_CC_MODULATERGBA G_CC_MODULATEIA
459#define G_CC_MODULATERGBFADEA G_CC_MODULATEIFADEA
461#define G_CC_MODULATEI_PRIM TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE
462#define G_CC_MODULATEIA_PRIM TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0
463#define G_CC_MODULATEIDECALA_PRIM TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, TEXEL0
465#define G_CC_MODULATERGB_PRIM G_CC_MODULATEI_PRIM
466#define G_CC_MODULATERGBA_PRIM G_CC_MODULATEIA_PRIM
467#define G_CC_MODULATERGBDECALA_PRIM G_CC_MODULATEIDECALA_PRIM
469#define G_CC_FADE SHADE, 0, ENVIRONMENT, 0, SHADE, 0, ENVIRONMENT, 0
470#define G_CC_FADEA TEXEL0, 0, ENVIRONMENT, 0, TEXEL0, 0, ENVIRONMENT, 0
472#define G_CC_DECALRGB 0, 0, 0, TEXEL0, 0, 0, 0, SHADE
473#define G_CC_DECALRGBA 0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0
474#define G_CC_DECALFADE 0, 0, 0, TEXEL0, 0, 0, 0, ENVIRONMENT
476#define G_CC_DECALFADEA 0, 0, 0, TEXEL0, TEXEL0, 0, ENVIRONMENT, 0
478#define G_CC_BLENDI ENVIRONMENT, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE
479#define G_CC_BLENDIA ENVIRONMENT, SHADE, TEXEL0, SHADE, TEXEL0, 0, SHADE, 0
480#define G_CC_BLENDIDECALA ENVIRONMENT, SHADE, TEXEL0, SHADE, 0, 0, 0, TEXEL0
482#define G_CC_BLENDRGBA TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, SHADE
483#define G_CC_BLENDRGBDECALA TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, TEXEL0
484#define G_CC_BLENDRGBFADEA TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, ENVIRONMENT
486#define G_CC_ADDRGB TEXEL0, 0, TEXEL0, SHADE, 0, 0, 0, SHADE
487#define G_CC_ADDRGBDECALA TEXEL0, 0, TEXEL0, SHADE, 0, 0, 0, TEXEL0
488#define G_CC_ADDRGBFADE TEXEL0, 0, TEXEL0, SHADE, 0, 0, 0, ENVIRONMENT
490#define G_CC_REFLECTRGB ENVIRONMENT, 0, TEXEL0, SHADE, 0, 0, 0, SHADE
491#define G_CC_REFLECTRGBDECALA ENVIRONMENT, 0, TEXEL0, SHADE, 0, 0, 0, TEXEL0
493#define G_CC_HILITERGB PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE
494#define G_CC_HILITERGBA PRIMITIVE, SHADE, TEXEL0, SHADE, PRIMITIVE, SHADE, TEXEL0, SHADE
495#define G_CC_HILITERGBDECALA PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, TEXEL0
497#define G_CC_SHADEDECALA 0, 0, 0, SHADE, 0, 0, 0, TEXEL0
498#define G_CC_SHADEFADEA 0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT
500#define G_CC_BLENDPE PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, SHADE, 0
501#define G_CC_BLENDPEDECALA PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, TEXEL0
504#define _G_CC_BLENDPE ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, SHADE, 0
505#define _G_CC_BLENDPEDECALA ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, 0, 0, 0, TEXEL0
506#define _G_CC_TWOCOLORTEX PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE
508#define _G_CC_SPARSEST PRIMITIVE, TEXEL0, LOD_FRACTION, TEXEL0, PRIMITIVE, TEXEL0, LOD_FRACTION, TEXEL0
509#define G_CC_TEMPLERP TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0
512#define G_CC_TRILERP TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0
513#define G_CC_INTERFERENCE TEXEL0, 0, TEXEL1, 0, TEXEL0, 0, TEXEL1, 0
518#define G_CC_1CYUV2RGB TEXEL0, K4, K5, TEXEL0, 0, 0, 0, SHADE
524#define G_CC_YUV2RGB TEXEL1, K4, K5, TEXEL1, 0, 0, 0, 0
527#define G_CC_PASS2 0, 0, 0, COMBINED, 0, 0, 0, COMBINED
528#define G_CC_MODULATEI2 COMBINED, 0, SHADE, 0, 0, 0, 0, SHADE
529#define G_CC_MODULATEIA2 COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, 0
530#define G_CC_MODULATERGB2 G_CC_MODULATEI2
531#define G_CC_MODULATERGBA2 G_CC_MODULATEIA2
532#define G_CC_MODULATEI_PRIM2 COMBINED, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE
533#define G_CC_MODULATEIA_PRIM2 COMBINED, 0, PRIMITIVE, 0, COMBINED, 0, PRIMITIVE, 0
534#define G_CC_MODULATERGB_PRIM2 G_CC_MODULATEI_PRIM2
535#define G_CC_MODULATERGBA_PRIM2 G_CC_MODULATEIA_PRIM2
536#define G_CC_DECALRGB2 0, 0, 0, COMBINED, 0, 0, 0, SHADE
541#define G_CC_BLENDI2 ENVIRONMENT, SHADE, COMBINED, SHADE, 0, 0, 0, SHADE
542#define G_CC_BLENDIA2 ENVIRONMENT, SHADE, COMBINED, SHADE, COMBINED, 0, SHADE, 0
543#define G_CC_CHROMA_KEY2 TEXEL0, CENTER, SCALE, 0, 0, 0, 0, 0
544#define G_CC_HILITERGB2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, SHADE
545#define G_CC_HILITERGBA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, ENVIRONMENT, COMBINED, TEXEL0, COMBINED
546#define G_CC_HILITERGBDECALA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, TEXEL0
547#define G_CC_HILITERGBPASSA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, COMBINED
553#define G_CC_1CYUV2RGB TEXEL0, K4, K5, TEXEL0, 0, 0, 0, SHADE
559#define G_CC_YUV2RGB TEXEL1, K4, K5, TEXEL1, 0, 0, 0, 0
562#define G_CC_PASS2 0, 0, 0, COMBINED, 0, 0, 0, COMBINED
563#define G_CC_MODULATEI2 COMBINED, 0, SHADE, 0, 0, 0, 0, SHADE
564#define G_CC_MODULATEIA2 COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, 0
565#define G_CC_MODULATERGB2 G_CC_MODULATEI2
566#define G_CC_MODULATERGBA2 G_CC_MODULATEIA2
567#define G_CC_MODULATEI_PRIM2 COMBINED, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE
568#define G_CC_MODULATEIA_PRIM2 COMBINED, 0, PRIMITIVE, 0, COMBINED, 0, PRIMITIVE, 0
569#define G_CC_MODULATERGB_PRIM2 G_CC_MODULATEI_PRIM2
570#define G_CC_MODULATERGBA_PRIM2 G_CC_MODULATEIA_PRIM2
571#define G_CC_DECALRGB2 0, 0, 0, COMBINED, 0, 0, 0, SHADE
576#define G_CC_BLENDI2 ENVIRONMENT, SHADE, COMBINED, SHADE, 0, 0, 0, SHADE
577#define G_CC_BLENDIA2 ENVIRONMENT, SHADE, COMBINED, SHADE, COMBINED, 0, SHADE, 0
578#define G_CC_CHROMA_KEY2 TEXEL0, CENTER, SCALE, 0, 0, 0, 0, 0
579#define G_CC_HILITERGB2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, SHADE
580#define G_CC_HILITERGBA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, ENVIRONMENT, COMBINED, TEXEL0, COMBINED
581#define G_CC_HILITERGBDECALA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, TEXEL0
582#define G_CC_HILITERGBPASSA2 ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, COMBINED
587#define G_MDSFT_ALPHACOMPARE 0
588#define G_MDSFT_ZSRCSEL 2
589#define G_MDSFT_RENDERMODE 3
590#define G_MDSFT_BLENDER 16
595#define G_MDSFT_ALPHADITHER 4
596#define G_MDSFT_RGBDITHER 6
597#define G_MDSFT_COMBKEY 8
598#define G_MDSFT_TEXTCONV 9
599#define G_MDSFT_TEXTFILT 12
600#define G_MDSFT_TEXTLUT 14
601#define G_MDSFT_TEXTLOD 16
602#define G_MDSFT_TEXTDETAIL 17
603#define G_MDSFT_TEXTPERSP 19
604#define G_MDSFT_CYCLETYPE 20
605#define G_MDSFT_COLORDITHER 22
606#define G_MDSFT_PIPELINE 23
609#define G_PM_1PRIMITIVE (1 << G_MDSFT_PIPELINE)
610#define G_PM_NPRIMITIVE (0 << G_MDSFT_PIPELINE)
613#define G_CYC_1CYCLE (0 << G_MDSFT_CYCLETYPE)
614#define G_CYC_2CYCLE (1 << G_MDSFT_CYCLETYPE)
615#define G_CYC_COPY (2 << G_MDSFT_CYCLETYPE)
616#define G_CYC_FILL (3 << G_MDSFT_CYCLETYPE)
619#define G_TP_NONE (0 << G_MDSFT_TEXTPERSP)
620#define G_TP_PERSP (1 << G_MDSFT_TEXTPERSP)
623#define G_TD_CLAMP (0 << G_MDSFT_TEXTDETAIL)
624#define G_TD_SHARPEN (1 << G_MDSFT_TEXTDETAIL)
625#define G_TD_DETAIL (2 << G_MDSFT_TEXTDETAIL)
628#define G_TL_TILE (0 << G_MDSFT_TEXTLOD)
629#define G_TL_LOD (1 << G_MDSFT_TEXTLOD)
632#define G_TT_NONE (0 << G_MDSFT_TEXTLUT)
633#define G_TT_RGBA16 (2 << G_MDSFT_TEXTLUT)
634#define G_TT_IA16 (3 << G_MDSFT_TEXTLUT)
637#define G_TF_POINT (0 << G_MDSFT_TEXTFILT)
638#define G_TF_AVERAGE (3 << G_MDSFT_TEXTFILT)
639#define G_TF_BILERP (2 << G_MDSFT_TEXTFILT)
642#define G_TC_CONV (0 << G_MDSFT_TEXTCONV)
643#define G_TC_FILTCONV (5 << G_MDSFT_TEXTCONV)
644#define G_TC_FILT (6 << G_MDSFT_TEXTCONV)
647#define G_CK_NONE (0 << G_MDSFT_COMBKEY)
648#define G_CK_KEY (1 << G_MDSFT_COMBKEY)
651#define G_CD_MAGICSQ (0 << G_MDSFT_RGBDITHER)
652#define G_CD_BAYER (1 << G_MDSFT_RGBDITHER)
653#define G_CD_NOISE (2 << G_MDSFT_RGBDITHER)
654#define G_CD_DISABLE (3 << G_MDSFT_RGBDITHER)
657#define G_AD_PATTERN (0 << G_MDSFT_ALPHADITHER)
658#define G_AD_NOTPATTERN (1 << G_MDSFT_ALPHADITHER)
659#define G_AD_NOISE (2 << G_MDSFT_ALPHADITHER)
660#define G_AD_DISABLE (3 << G_MDSFT_ALPHADITHER)
663#define G_AC_NONE (0 << G_MDSFT_ALPHACOMPARE)
664#define G_AC_THRESHOLD (1 << G_MDSFT_ALPHACOMPARE)
665#define G_AC_DITHER (3 << G_MDSFT_ALPHACOMPARE)
668#define G_ZS_PIXEL (0 << G_MDSFT_ZSRCSEL)
669#define G_ZS_PRIM (1 << G_MDSFT_ZSRCSEL)
690#define CLR_ON_CVG 0x0080
691#define CVG_DST_CLAMP 0x0000
692#define CVG_DST_WRAP 0x0100
693#define CVG_DST_FULL 0x0200
694#define CVG_DST_SAVE 0x0300
695#define ZMODE_OPA 0x0000
696#define ZMODE_INTER 0x0400
697#define ZMODE_XLU 0x0800
698#define ZMODE_DEC 0x0C00
699#define CVG_X_ALPHA 0x1000
700#define ALPHA_CVG_SEL 0x2000
701#define FORCE_BL 0x4000
702#define TEX_EDGE 0x0000
705#define G_BL_CLR_MEM 1
707#define G_BL_CLR_FOG 3
712#define G_BL_A_SHADE 2
716#define GBL_c1(m1a, m1b, m2a, m2b) \
717 (m1a) << 30 | (m1b) << 26 | (m2a) << 22 | (m2b) << 18
718#define GBL_c2(m1a, m1b, m2a, m2b) \
719 (m1a) << 28 | (m1b) << 24 | (m2a) << 20 | (m2b) << 16
721#define RM_AA_ZB_OPA_SURF(clk) \
722 AA_DEF | Z_CMP | Z_UPD | RD_DEF | CVG_DST_CLAMP | \
723 ZMODE_OPA | ALPHA_CVG_SEL | \
724 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
726#define RM_RA_ZB_OPA_SURF(clk) \
727 AA_DEF | Z_CMP | Z_UPD | CVG_DST_CLAMP | \
728 ZMODE_OPA | ALPHA_CVG_SEL | \
729 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
731#define RM_AA_ZB_XLU_SURF(clk) \
732 AA_DEF | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \
733 FORCE_BL | ZMODE_XLU | \
734 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
736#define RM_AA_ZB_OPA_DECAL(clk) \
737 AA_DEF | Z_CMP | RD_DEF | CVG_DST_WRAP | ALPHA_CVG_SEL | \
739 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
741#define RM_RA_ZB_OPA_DECAL(clk) \
742 AA_DEF | Z_CMP | CVG_DST_WRAP | ALPHA_CVG_SEL | \
744 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
746#define RM_AA_ZB_XLU_DECAL(clk) \
747 AA_DEF | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \
748 FORCE_BL | ZMODE_DEC | \
749 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
751#define RM_AA_ZB_OPA_INTER(clk) \
752 AA_DEF | Z_CMP | Z_UPD | RD_DEF | CVG_DST_CLAMP | \
753 ALPHA_CVG_SEL | ZMODE_INTER | \
754 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
756#define RM_RA_ZB_OPA_INTER(clk) \
757 AA_DEF | Z_CMP | Z_UPD | CVG_DST_CLAMP | \
758 ALPHA_CVG_SEL | ZMODE_INTER | \
759 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
761#define RM_AA_ZB_XLU_INTER(clk) \
762 AA_DEF | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | \
763 FORCE_BL | ZMODE_INTER | \
764 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
766#define RM_AA_ZB_XLU_LINE(clk) \
767 AA_DEF | Z_CMP | IM_RD | CVG_DST_CLAMP | CVG_X_ALPHA | \
768 ALPHA_CVG_SEL | FORCE_BL | ZMODE_XLU | \
769 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
771#define RM_AA_ZB_DEC_LINE(clk) \
772 AA_DEF | Z_CMP | IM_RD | CVG_DST_SAVE | CVG_X_ALPHA | \
773 ALPHA_CVG_SEL | FORCE_BL | ZMODE_DEC | \
774 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
777#define RM_AA_ZB_TEX_EDGE(clk) \
778 AA_EN | Z_CMP | Z_UPD | RD_DEF | CVG_DST_CLAMP | \
779 CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \
780 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
782#define RM_AA_ZB_TEX_INTER(clk) \
783 AA_DEF | Z_CMP | Z_UPD | RD_DEF | CVG_DST_CLAMP | \
784 CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_INTER | TEX_EDGE | \
785 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
787#define RM_AA_ZB_SUB_SURF(clk) \
788 AA_DEF | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | \
789 ZMODE_OPA | ALPHA_CVG_SEL | \
790 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
792#define RM_AA_ZB_PCL_SURF(clk) \
793 AA_DEF | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP | \
794 ZMODE_OPA | G_AC_DITHER | \
795 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
797#define RM_AA_ZB_OPA_TERR(clk) \
798 AA_DEF | Z_CMP | Z_UPD | RD_DEF | CVG_DST_CLAMP | \
799 ZMODE_OPA | ALPHA_CVG_SEL | \
800 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
802#define RM_AA_ZB_TEX_TERR(clk) \
803 AA_DEF | Z_CMP | Z_UPD | RD_DEF | CVG_DST_CLAMP | \
804 CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \
805 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
807#define RM_AA_ZB_SUB_TERR(clk) \
808 AA_DEF | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL | \
809 ZMODE_OPA | ALPHA_CVG_SEL | \
810 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
813#define RM_AA_OPA_SURF(clk) \
814 AA_DEF | RD_DEF | CVG_DST_CLAMP | \
815 ZMODE_OPA | ALPHA_CVG_SEL | \
816 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
818#define RM_RA_OPA_SURF(clk) \
819 AA_DEF | CVG_DST_CLAMP | \
820 ZMODE_OPA | ALPHA_CVG_SEL | \
821 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
823#define RM_AA_XLU_SURF(clk) \
824 AA_DEF | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | FORCE_BL | \
826 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
828#define RM_AA_XLU_LINE(clk) \
829 AA_DEF | IM_RD | CVG_DST_CLAMP | CVG_X_ALPHA | \
830 ALPHA_CVG_SEL | FORCE_BL | ZMODE_OPA | \
831 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
833#define RM_AA_DEC_LINE(clk) \
834 AA_DEF | IM_RD | CVG_DST_FULL | CVG_X_ALPHA | \
835 ALPHA_CVG_SEL | FORCE_BL | ZMODE_OPA | \
836 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
839#define RM_AA_TEX_EDGE(clk) \
840 AA_EN | RD_DEF | CVG_DST_CLAMP | \
841 CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \
842 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
844#define RM_AA_SUB_SURF(clk) \
845 AA_DEF | IM_RD | CVG_DST_FULL | \
846 ZMODE_OPA | ALPHA_CVG_SEL | \
847 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
849#define RM_AA_PCL_SURF(clk) \
850 AA_DEF | IM_RD | CVG_DST_CLAMP | \
851 ZMODE_OPA | G_AC_DITHER | \
852 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
854#define RM_AA_OPA_TERR(clk) \
855 AA_DEF | RD_DEF | CVG_DST_CLAMP | \
856 ZMODE_OPA | ALPHA_CVG_SEL | \
857 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
859#define RM_AA_TEX_TERR(clk) \
860 AA_DEF | RD_DEF | CVG_DST_CLAMP | \
861 CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE | \
862 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
864#define RM_AA_SUB_TERR(clk) \
865 AA_DEF | IM_RD | CVG_DST_FULL | \
866 ZMODE_OPA | ALPHA_CVG_SEL | \
867 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
870#define RM_ZB_OPA_SURF(clk) \
871 Z_CMP | Z_UPD | CVG_DST_FULL | ALPHA_CVG_SEL | \
873 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
875#define RM_ZB_XLU_SURF(clk) \
876 Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_XLU | \
877 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
879#define RM_ZB_OPA_DECAL(clk) \
880 Z_CMP | CVG_DST_FULL | ALPHA_CVG_SEL | ZMODE_DEC | \
881 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM)
883#define RM_ZB_XLU_DECAL(clk) \
884 Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_DEC | \
885 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
887#define RM_ZB_CLD_SURF(clk) \
888 Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_XLU | \
889 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
891#define RM_ZB_OVL_SURF(clk) \
892 Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_DEC | \
893 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
895#define RM_ZB_PCL_SURF(clk) \
896 Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA | \
898 GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)
901#define RM_OPA_SURF(clk) \
902 CVG_DST_CLAMP | FORCE_BL | ZMODE_OPA | \
903 GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)
905#define RM_XLU_SURF(clk) \
906 IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_OPA | \
907 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
909#define RM_TEX_EDGE(clk) \
910 CVG_DST_CLAMP | CVG_X_ALPHA | ALPHA_CVG_SEL | FORCE_BL | \
911 ZMODE_OPA | TEX_EDGE | AA_EN | \
912 GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)
914#define RM_CLD_SURF(clk) \
915 IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_OPA | \
916 GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)
918#define RM_PCL_SURF(clk) \
919 CVG_DST_FULL | FORCE_BL | ZMODE_OPA | \
921 GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)
924 IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_OPA | \
925 GBL_c##clk(G_BL_CLR_IN, G_BL_A_FOG, G_BL_CLR_MEM, G_BL_1)
927#define RM_NOOP(clk) \
928 GBL_c##clk(0, 0, 0, 0)
930#define RM_VISCVG(clk) \
932 GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_BL, G_BL_A_MEM)
935#define RM_OPA_CI(clk) \
936 CVG_DST_CLAMP | ZMODE_OPA | \
937 GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)
940#define RM_CUSTOM_AA_ZB_XLU_SURF(clk) \
941 RM_AA_ZB_XLU_SURF(clk) | Z_UPD
943#define G_RM_CUSTOM_AA_ZB_XLU_SURF RM_CUSTOM_AA_ZB_XLU_SURF(1)
944#define G_RM_CUSTOM_AA_ZB_XLU_SURF2 RM_CUSTOM_AA_ZB_XLU_SURF(2)
946#define G_RM_AA_ZB_OPA_SURF RM_AA_ZB_OPA_SURF(1)
947#define G_RM_AA_ZB_OPA_SURF2 RM_AA_ZB_OPA_SURF(2)
948#define G_RM_AA_ZB_XLU_SURF RM_AA_ZB_XLU_SURF(1)
949#define G_RM_AA_ZB_XLU_SURF2 RM_AA_ZB_XLU_SURF(2)
950#define G_RM_AA_ZB_OPA_DECAL RM_AA_ZB_OPA_DECAL(1)
951#define G_RM_AA_ZB_OPA_DECAL2 RM_AA_ZB_OPA_DECAL(2)
952#define G_RM_AA_ZB_XLU_DECAL RM_AA_ZB_XLU_DECAL(1)
953#define G_RM_AA_ZB_XLU_DECAL2 RM_AA_ZB_XLU_DECAL(2)
954#define G_RM_AA_ZB_OPA_INTER RM_AA_ZB_OPA_INTER(1)
955#define G_RM_AA_ZB_OPA_INTER2 RM_AA_ZB_OPA_INTER(2)
956#define G_RM_AA_ZB_XLU_INTER RM_AA_ZB_XLU_INTER(1)
957#define G_RM_AA_ZB_XLU_INTER2 RM_AA_ZB_XLU_INTER(2)
958#define G_RM_AA_ZB_XLU_LINE RM_AA_ZB_XLU_LINE(1)
959#define G_RM_AA_ZB_XLU_LINE2 RM_AA_ZB_XLU_LINE(2)
960#define G_RM_AA_ZB_DEC_LINE RM_AA_ZB_DEC_LINE(1)
961#define G_RM_AA_ZB_DEC_LINE2 RM_AA_ZB_DEC_LINE(2)
962#define G_RM_AA_ZB_TEX_EDGE RM_AA_ZB_TEX_EDGE(1)
963#define G_RM_AA_ZB_TEX_EDGE2 RM_AA_ZB_TEX_EDGE(2)
964#define G_RM_AA_ZB_TEX_INTER RM_AA_ZB_TEX_INTER(1)
965#define G_RM_AA_ZB_TEX_INTER2 RM_AA_ZB_TEX_INTER(2)
966#define G_RM_AA_ZB_SUB_SURF RM_AA_ZB_SUB_SURF(1)
967#define G_RM_AA_ZB_SUB_SURF2 RM_AA_ZB_SUB_SURF(2)
968#define G_RM_AA_ZB_PCL_SURF RM_AA_ZB_PCL_SURF(1)
969#define G_RM_AA_ZB_PCL_SURF2 RM_AA_ZB_PCL_SURF(2)
970#define G_RM_AA_ZB_OPA_TERR RM_AA_ZB_OPA_TERR(1)
971#define G_RM_AA_ZB_OPA_TERR2 RM_AA_ZB_OPA_TERR(2)
972#define G_RM_AA_ZB_TEX_TERR RM_AA_ZB_TEX_TERR(1)
973#define G_RM_AA_ZB_TEX_TERR2 RM_AA_ZB_TEX_TERR(2)
974#define G_RM_AA_ZB_SUB_TERR RM_AA_ZB_SUB_TERR(1)
975#define G_RM_AA_ZB_SUB_TERR2 RM_AA_ZB_SUB_TERR(2)
977#define G_RM_RA_ZB_OPA_SURF RM_RA_ZB_OPA_SURF(1)
978#define G_RM_RA_ZB_OPA_SURF2 RM_RA_ZB_OPA_SURF(2)
979#define G_RM_RA_ZB_OPA_DECAL RM_RA_ZB_OPA_DECAL(1)
980#define G_RM_RA_ZB_OPA_DECAL2 RM_RA_ZB_OPA_DECAL(2)
981#define G_RM_RA_ZB_OPA_INTER RM_RA_ZB_OPA_INTER(1)
982#define G_RM_RA_ZB_OPA_INTER2 RM_RA_ZB_OPA_INTER(2)
984#define G_RM_AA_OPA_SURF RM_AA_OPA_SURF(1)
985#define G_RM_AA_OPA_SURF2 RM_AA_OPA_SURF(2)
986#define G_RM_AA_XLU_SURF RM_AA_XLU_SURF(1)
987#define G_RM_AA_XLU_SURF2 RM_AA_XLU_SURF(2)
988#define G_RM_AA_XLU_LINE RM_AA_XLU_LINE(1)
989#define G_RM_AA_XLU_LINE2 RM_AA_XLU_LINE(2)
990#define G_RM_AA_DEC_LINE RM_AA_DEC_LINE(1)
991#define G_RM_AA_DEC_LINE2 RM_AA_DEC_LINE(2)
992#define G_RM_AA_TEX_EDGE RM_AA_TEX_EDGE(1)
993#define G_RM_AA_TEX_EDGE2 RM_AA_TEX_EDGE(2)
994#define G_RM_AA_SUB_SURF RM_AA_SUB_SURF(1)
995#define G_RM_AA_SUB_SURF2 RM_AA_SUB_SURF(2)
996#define G_RM_AA_PCL_SURF RM_AA_PCL_SURF(1)
997#define G_RM_AA_PCL_SURF2 RM_AA_PCL_SURF(2)
998#define G_RM_AA_OPA_TERR RM_AA_OPA_TERR(1)
999#define G_RM_AA_OPA_TERR2 RM_AA_OPA_TERR(2)
1000#define G_RM_AA_TEX_TERR RM_AA_TEX_TERR(1)
1001#define G_RM_AA_TEX_TERR2 RM_AA_TEX_TERR(2)
1002#define G_RM_AA_SUB_TERR RM_AA_SUB_TERR(1)
1003#define G_RM_AA_SUB_TERR2 RM_AA_SUB_TERR(2)
1005#define G_RM_RA_OPA_SURF RM_RA_OPA_SURF(1)
1006#define G_RM_RA_OPA_SURF2 RM_RA_OPA_SURF(2)
1008#define G_RM_ZB_OPA_SURF RM_ZB_OPA_SURF(1)
1009#define G_RM_ZB_OPA_SURF2 RM_ZB_OPA_SURF(2)
1010#define G_RM_ZB_XLU_SURF RM_ZB_XLU_SURF(1)
1011#define G_RM_ZB_XLU_SURF2 RM_ZB_XLU_SURF(2)
1012#define G_RM_ZB_OPA_DECAL RM_ZB_OPA_DECAL(1)
1013#define G_RM_ZB_OPA_DECAL2 RM_ZB_OPA_DECAL(2)
1014#define G_RM_ZB_XLU_DECAL RM_ZB_XLU_DECAL(1)
1015#define G_RM_ZB_XLU_DECAL2 RM_ZB_XLU_DECAL(2)
1016#define G_RM_ZB_CLD_SURF RM_ZB_CLD_SURF(1)
1017#define G_RM_ZB_CLD_SURF2 RM_ZB_CLD_SURF(2)
1018#define G_RM_ZB_OVL_SURF RM_ZB_OVL_SURF(1)
1019#define G_RM_ZB_OVL_SURF2 RM_ZB_OVL_SURF(2)
1020#define G_RM_ZB_PCL_SURF RM_ZB_PCL_SURF(1)
1021#define G_RM_ZB_PCL_SURF2 RM_ZB_PCL_SURF(2)
1023#define G_RM_OPA_SURF RM_OPA_SURF(1)
1024#define G_RM_OPA_SURF2 RM_OPA_SURF(2)
1025#define G_RM_XLU_SURF RM_XLU_SURF(1)
1026#define G_RM_XLU_SURF2 RM_XLU_SURF(2)
1027#define G_RM_CLD_SURF RM_CLD_SURF(1)
1028#define G_RM_CLD_SURF2 RM_CLD_SURF(2)
1029#define G_RM_TEX_EDGE RM_TEX_EDGE(1)
1030#define G_RM_TEX_EDGE2 RM_TEX_EDGE(2)
1031#define G_RM_PCL_SURF RM_PCL_SURF(1)
1032#define G_RM_PCL_SURF2 RM_PCL_SURF(2)
1033#define G_RM_ADD RM_ADD(1)
1034#define G_RM_ADD2 RM_ADD(2)
1035#define G_RM_NOOP RM_NOOP(1)
1036#define G_RM_NOOP2 RM_NOOP(2)
1037#define G_RM_VISCVG RM_VISCVG(1)
1038#define G_RM_VISCVG2 RM_VISCVG(2)
1039#define G_RM_OPA_CI RM_OPA_CI(1)
1040#define G_RM_OPA_CI2 RM_OPA_CI(2)
1043#define G_RM_FOG_SHADE_A GBL_c1(G_BL_CLR_FOG, G_BL_A_SHADE, G_BL_CLR_IN, G_BL_1MA)
1044#define G_RM_FOG_PRIM_A GBL_c1(G_BL_CLR_FOG, G_BL_A_FOG, G_BL_CLR_IN, G_BL_1MA)
1045#define G_RM_PASS GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1)
1060#define G_SC_NON_INTERLACE 0
1061#define G_SC_ODD_INTERLACE 3
1062#define G_SC_EVEN_INTERLACE 2
1075 unsigned char cn[4];
1105 long long int force_structure_alignment;
1128 long long int force_structure_alignment;
1131#define IPART(x) (((s32)((x) * 0x10000) >> 16) & 0xFFFF)
1132#define FPART(x) ((s32)((x) * 0x10000) & 0xFFFF)
1134#define gdSPDefMtx( \
1140 (IPART(xx) << 16) | IPART(yx), \
1141 (IPART(zx) << 16) | IPART(wx), \
1142 (IPART(xy) << 16) | IPART(yy), \
1143 (IPART(zy) << 16) | IPART(wy), \
1144 (IPART(xz) << 16) | IPART(yz), \
1145 (IPART(zz) << 16) | IPART(wz), \
1146 (IPART(xw) << 16) | IPART(yw), \
1147 (IPART(zw) << 16) | IPART(ww), \
1148 (FPART(xx) << 16) | FPART(yx), \
1149 (FPART(zx) << 16) | FPART(wx), \
1150 (FPART(xy) << 16) | FPART(yy), \
1151 (FPART(zy) << 16) | FPART(wy), \
1152 (FPART(xz) << 16) | FPART(yz), \
1153 (FPART(zz) << 16) | FPART(wz), \
1154 (FPART(xw) << 16) | FPART(yw), \
1155 (FPART(zw) << 16) | FPART(ww), \
1178#define G_MAXZ 0x03FF
1199 long long int force_structure_alignment[2];
1209 unsigned char col[3];
1211 unsigned char colc[3];
1226 unsigned char col[3];
1228 unsigned char colc[3];
1239 unsigned char col[3];
1241 unsigned char colc[3];
1284} OcclusionPlaneCandidate;
1289 long long int force_structure_alignment[2];
1294 long long int force_structure_alignment[1];
1299 long long int force_structure_alignment[1];
1304 long int force_structure_alignment;
1310 long long int force_structure_alignment[3];
1369#define gDefAmbient(r, g, b) \
1371 { (r), (g), (b) }, 0, \
1372 { (r), (g), (b) }, 0, \
1375#define gDefLight(r, g, b, x, y, z) \
1377 { (r), (g), (b) }, 0, \
1378 { (r), (g), (b) }, 0, \
1379 { (x), (y), (z) }, 0, \
1383#define gdSPDefLights0(ar, ag, ab) \
1385 gDefAmbient(ar, ag, ab), \
1388#define gdSPDefLights1(ar, ag, ab, \
1389 r1, g1, b1, x1, y1, z1) \
1392 gDefLight(r1, g1, b1, x1, y1, z1), \
1394 gDefAmbient(ar, ag, ab), \
1397#define gdSPDefLights2(ar, ag, ab, \
1398 r1, g1, b1, x1, y1, z1, \
1399 r2, g2, b2, x2, y2, z2) \
1402 gDefLight(r1, g1, b1, x1, y1, z1), \
1403 gDefLight(r2, g2, b2, x2, y2, z2), \
1405 gDefAmbient(ar, ag, ab), \
1408#define gdSPDefLights3(ar, ag, ab, \
1409 r1, g1, b1, x1, y1, z1, \
1410 r2, g2, b2, x2, y2, z2) \
1411 r3, g3, b3, x3, y3, z3) \
1414 gDefLight(r1, g1, b1, x1, y1, z1), \
1415 gDefLight(r2, g2, b2, x2, y2, z2), \
1416 gDefLight(r3, g3, b3, x3, y3, z3), \
1418 gDefAmbient(ar, ag, ab), \
1421#define gdSPDefLights4(ar, ag, ab, \
1422 r1, g1, b1, x1, y1, z1, \
1423 r2, g2, b2, x2, y2, z2, \
1424 r3, g3, b3, x3, y3, z3, \
1425 r4, g4, b4, x4, y4, z4) \
1428 gDefLight(r1, g1, b1, x1, y1, z1), \
1429 gDefLight(r2, g2, b2, x2, y2, z2), \
1430 gDefLight(r3, g3, b3, x3, y3, z3), \
1431 gDefLight(r4, g4, b4, x4, y4, z4), \
1433 gDefAmbient(ar, ag, ab), \
1436#define gdSPDefLights5(ar, ag, ab, \
1437 r1, g1, b1, x1, y1, z1, \
1438 r2, g2, b2, x2, y2, z2, \
1439 r3, g3, b3, x3, y3, z3, \
1440 r4, g4, b4, x4, y4, z4, \
1441 r5, g5, b5, x5, y5, z5) \
1444 gDefLight(r1, g1, b1, x1, y1, z1), \
1445 gDefLight(r2, g2, b2, x2, y2, z2), \
1446 gDefLight(r3, g3, b3, x3, y3, z3), \
1447 gDefLight(r4, g4, b4, x4, y4, z4), \
1448 gDefLight(r5, g5, b5, x5, y5, z5), \
1450 gDefAmbient(ar, ag, ab), \
1453#define gdSPDefLights6(ar, ag, ab, \
1454 r1, g1, b1, x1, y1, z1, \
1455 r2, g2, b2, x2, y2, z2, \
1456 r3, g3, b3, x3, y3, z3, \
1457 r4, g4, b4, x4, y4, z4, \
1458 r5, g5, b5, x5, y5, z5, \
1459 r6, g6, b6, x6, y6, z6) \
1462 gDefLight(r1, g1, b1, x1, y1, z1), \
1463 gDefLight(r2, g2, b2, x2, y2, z2), \
1464 gDefLight(r3, g3, b3, x3, y3, z3), \
1465 gDefLight(r4, g4, b4, x4, y4, z4), \
1466 gDefLight(r5, g5, b5, x5, y5, z5), \
1467 gDefLight(r6, g6, b6, x6, y6, z6), \
1469 gDefAmbient(ar, ag, ab), \
1472#define gdSPDefLights7(ar, ag, ab, \
1473 r1, g1, b1, x1, y1, z1, \
1474 r2, g2, b2, x2, y2, z2, \
1475 r3, g3, b3, x3, y3, z3, \
1476 r4, g4, b4, x4, y4, z4, \
1477 r5, g5, b5, x5, y5, z5, \
1478 r6, g6, b6, x6, y6, z6, \
1479 r7, g7, b7, x7, y7, z7) \
1482 gDefLight(r1, g1, b1, x1, y1, z1), \
1483 gDefLight(r2, g2, b2, x2, y2, z2), \
1484 gDefLight(r3, g3, b3, x3, y3, z3), \
1485 gDefLight(r4, g4, b4, x4, y4, z4), \
1486 gDefLight(r5, g5, b5, x5, y5, z5), \
1487 gDefLight(r6, g6, b6, x6, y6, z6), \
1488 gDefLight(r7, g7, b7, x7, y7, z7), \
1490 gDefAmbient(ar, ag, ab), \
1493#define gdSPDefLights8(ar, ag, ab, \
1494 r1, g1, b1, x1, y1, z1, \
1495 r2, g2, b2, x2, y2, z2, \
1496 r3, g3, b3, x3, y3, z3, \
1497 r4, g4, b4, x4, y4, z4, \
1498 r5, g5, b5, x5, y5, z5, \
1499 r6, g6, b6, x6, y6, z6, \
1500 r7, g7, b7, x7, y7, z7, \
1501 r8, g8, b8, x8, y8, z8) \
1504 gDefLight(r1, g1, b1, x1, y1, z1), \
1505 gDefLight(r2, g2, b2, x2, y2, z2), \
1506 gDefLight(r3, g3, b3, x3, y3, z3), \
1507 gDefLight(r4, g4, b4, x4, y4, z4), \
1508 gDefLight(r5, g5, b5, x5, y5, z5), \
1509 gDefLight(r6, g6, b6, x6, y6, z6), \
1510 gDefLight(r7, g7, b7, x7, y7, z7), \
1511 gDefLight(r8, g8, b8, x8, y8, z8), \
1513 gDefAmbient(ar, ag, ab), \
1516#define gdSPDefLights9(ar, ag, ab, \
1517 r1, g1, b1, x1, y1, z1, \
1518 r2, g2, b2, x2, y2, z2, \
1519 r3, g3, b3, x3, y3, z3, \
1520 r4, g4, b4, x4, y4, z4, \
1521 r5, g5, b5, x5, y5, z5, \
1522 r6, g6, b6, x6, y6, z6, \
1523 r7, g7, b7, x7, y7, z7, \
1524 r8, g8, b8, x8, y8, z8, \
1525 r9, g9, b9, x9, y9, z9) \
1528 gDefLight(r1, g1, b1, x1, y1, z1), \
1529 gDefLight(r2, g2, b2, x2, y2, z2), \
1530 gDefLight(r3, g3, b3, x3, y3, z3), \
1531 gDefLight(r4, g4, b4, x4, y4, z4), \
1532 gDefLight(r5, g5, b5, x5, y5, z5), \
1533 gDefLight(r6, g6, b6, x6, y6, z6), \
1534 gDefLight(r7, g7, b7, x7, y7, z7), \
1535 gDefLight(r8, g8, b8, x8, y8, z8), \
1536 gDefLight(r9, g9, b9, x9, y9, z9), \
1538 gDefAmbient(ar, ag, ab), \
1541#define gDefPointLight(r, g, b, x, y, z, kc, kl, kq) \
1543 { (r1), (g1), (b1) }, (kc), \
1544 { (r1), (g1), (b1) }, (kl), \
1545 { (x1), (y1), (z1) }, (kq), \
1549#define gdSPDefPointLights0(ar, ag, ab) \
1551 gDefAmbient(ar, ag, ab), \
1554#define gdSPDefPointLights1(ar, ag, ab, \
1555 r1, g1, b1, x1, y1, z1, c1, l1, q1) \
1558 gDefPointLight(r1, g1, b1, x1, y1, z1, c1, l1, q1), \
1560 gDefAmbient(ar, ag, ab), \
1563#define gdSPDefPointLights2(ar, ag, ab, \
1564 r1, g1, b1, x1, y1, z1, c1, l1, q1, \
1565 r2, g2, b2, x2, y2, z2, c2, l2, q2) \
1568 gDefPointLight(r1, g1, b1, x1, y1, z1, c1, l1, q1), \
1569 gDefPointLight(r2, g2, b2, x2, y2, z2, c2, l2, q2), \
1571 gDefAmbient(ar, ag, ab), \
1574#define gdSPDefPointLights3(ar, ag, ab, \
1575 r1, g1, b1, x1, y1, z1, c1, l1, q1, \
1576 r2, g2, b2, x2, y2, z2, c2, l2, q2, \
1577 r3, g3, b3, x3, y3, z3, c3, l3, q3) \
1580 gDefPointLight(r1, g1, b1, x1, y1, z1, c1, l1, q1), \
1581 gDefPointLight(r2, g2, b2, x2, y2, z2, c2, l2, q2), \
1582 gDefPointLight(r3, g3, b3, x3, y3, z3, c3, l3, q3), \
1584 gDefAmbient(ar, ag, ab), \
1587#define gdSPDefPointLights4(ar, ag, ab, \
1588 r1, g1, b1, x1, y1, z1, c1, l1, q1, \
1589 r2, g2, b2, x2, y2, z2, c2, l2, q2, \
1590 r3, g3, b3, x3, y3, z3, c3, l3, q3, \
1591 r4, g4, b4, x4, y4, z4, c4, l4, q4) \
1594 gDefPointLight(r1, g1, b1, x1, y1, z1, c1, l1, q1), \
1595 gDefPointLight(r2, g2, b2, x2, y2, z2, c2, l2, q2), \
1596 gDefPointLight(r3, g3, b3, x3, y3, z3, c3, l3, q3), \
1597 gDefPointLight(r4, g4, b4, x4, y4, z4, c4, l4, q4), \
1599 gDefAmbient(ar, ag, ab), \
1602#define gdSPDefPointLights5(ar, ag, ab, \
1603 r1, g1, b1, x1, y1, z1, c1, l1, q1, \
1604 r2, g2, b2, x2, y2, z2, c2, l2, q2, \
1605 r3, g3, b3, x3, y3, z3, c3, l3, q3, \
1606 r4, g4, b4, x4, y4, z4, c4, l4, q4, \
1607 r5, g5, b5, x5, y5, z5, c5, l5, q5) \
1610 gDefPointLight(r1, g1, b1, x1, y1, z1, c1, l1, q1), \
1611 gDefPointLight(r2, g2, b2, x2, y2, z2, c2, l2, q2), \
1612 gDefPointLight(r3, g3, b3, x3, y3, z3, c3, l3, q3), \
1613 gDefPointLight(r4, g4, b4, x4, y4, z4, c4, l4, q4), \
1614 gDefPointLight(r5, g5, b5, x5, y5, z5, c5, l5, q5), \
1616 gDefAmbient(ar, ag, ab), \
1619#define gdSPDefPointLights6(ar, ag, ab, \
1620 r1, g1, b1, x1, y1, z1, c1, l1, q1, \
1621 r2, g2, b2, x2, y2, z2, c2, l2, q2, \
1622 r3, g3, b3, x3, y3, z3, c3, l3, q3, \
1623 r4, g4, b4, x4, y4, z4, c4, l4, q4, \
1624 r5, g5, b5, x5, y5, z5, c5, l5, q5, \
1625 r6, g6, b6, x6, y6, z6, c6, l6, q6) \
1628 gDefPointLight(r1, g1, b1, x1, y1, z1, c1, l1, q1), \
1629 gDefPointLight(r2, g2, b2, x2, y2, z2, c2, l2, q2), \
1630 gDefPointLight(r3, g3, b3, x3, y3, z3, c3, l3, q3), \
1631 gDefPointLight(r4, g4, b4, x4, y4, z4, c4, l4, q4), \
1632 gDefPointLight(r5, g5, b5, x5, y5, z5, c5, l5, q5), \
1633 gDefPointLight(r6, g6, b6, x6, y6, z6, c6, l6, q6), \
1635 gDefAmbient(ar, ag, ab), \
1638#define gdSPDefPointLights7(ar, ag, ab, \
1639 r1, g1, b1, x1, y1, z1, c1, l1, q1, \
1640 r2, g2, b2, x2, y2, z2, c2, l2, q2, \
1641 r3, g3, b3, x3, y3, z3, c3, l3, q3, \
1642 r4, g4, b4, x4, y4, z4, c4, l4, q4, \
1643 r5, g5, b5, x5, y5, z5, c5, l5, q5, \
1644 r6, g6, b6, x6, y6, z6, c6, l6, q6, \
1645 r7, g7, b7, x7, y7, z7, c7, l7, q7) \
1648 gDefPointLight(r1, g1, b1, x1, y1, z1, c1, l1, q1), \
1649 gDefPointLight(r2, g2, b2, x2, y2, z2, c2, l2, q2), \
1650 gDefPointLight(r3, g3, b3, x3, y3, z3, c3, l3, q3), \
1651 gDefPointLight(r4, g4, b4, x4, y4, z4, c4, l4, q4), \
1652 gDefPointLight(r5, g5, b5, x5, y5, z5, c5, l5, q5), \
1653 gDefPointLight(r6, g6, b6, x6, y6, z6, c6, l6, q6), \
1654 gDefPointLight(r7, g7, b7, x7, y7, z7, c7, l7, q7), \
1656 gDefAmbient(ar, ag, ab), \
1659#define gdSPDefPointLights8(ar, ag, ab, \
1660 r1, g1, b1, x1, y1, z1, c1, l1, q1, \
1661 r2, g2, b2, x2, y2, z2, c2, l2, q2, \
1662 r3, g3, b3, x3, y3, z3, c3, l3, q3, \
1663 r4, g4, b4, x4, y4, z4, c4, l4, q4, \
1664 r5, g5, b5, x5, y5, z5, c5, l5, q5, \
1665 r6, g6, b6, x6, y6, z6, c6, l6, q6, \
1666 r7, g7, b7, x7, y7, z7, c7, l7, q7, \
1667 r8, g8, b8, x8, y8, z8, c8, l8, q8) \
1670 gDefPointLight(r1, g1, b1, x1, y1, z1, c1, l1, q1), \
1671 gDefPointLight(r2, g2, b2, x2, y2, z2, c2, l2, q2), \
1672 gDefPointLight(r3, g3, b3, x3, y3, z3, c3, l3, q3), \
1673 gDefPointLight(r4, g4, b4, x4, y4, z4, c4, l4, q4), \
1674 gDefPointLight(r5, g5, b5, x5, y5, z5, c5, l5, q5), \
1675 gDefPointLight(r6, g6, b6, x6, y6, z6, c6, l6, q6), \
1676 gDefPointLight(r7, g7, b7, x7, y7, z7, c7, l7, q7), \
1677 gDefPointLight(r8, g8, b8, x8, y8, z8, c8, l8, q8), \
1679 gDefAmbient(ar, ag, ab), \
1682#define gdSPDefPointLights9(ar, ag, ab, \
1683 r1, g1, b1, x1, y1, z1, c1, l1, q1, \
1684 r2, g2, b2, x2, y2, z2, c2, l2, q2, \
1685 r3, g3, b3, x3, y3, z3, c3, l3, q3, \
1686 r4, g4, b4, x4, y4, z4, c4, l4, q4, \
1687 r5, g5, b5, x5, y5, z5, c5, l5, q5, \
1688 r6, g6, b6, x6, y6, z6, c6, l6, q6, \
1689 r7, g7, b7, x7, y7, z7, c7, l7, q7, \
1690 r8, g8, b8, x8, y8, z8, c8, l8, q8, \
1691 r9, g9, b9, x9, y9, z9, c9, l9, q9) \
1694 gDefPointLight(r1, g1, b1, x1, y1, z1, c1, l1, q1), \
1695 gDefPointLight(r2, g2, b2, x2, y2, z2, c2, l2, q2), \
1696 gDefPointLight(r3, g3, b3, x3, y3, z3, c3, l3, q3), \
1697 gDefPointLight(r4, g4, b4, x4, y4, z4, c4, l4, q4), \
1698 gDefPointLight(r5, g5, b5, x5, y5, z5, c5, l5, q5), \
1699 gDefPointLight(r6, g6, b6, x6, y6, z6, c6, l6, q6), \
1700 gDefPointLight(r7, g7, b7, x7, y7, z7, c7, l7, q7), \
1701 gDefPointLight(r8, g8, b8, x8, y8, z8, c8, l8, q8), \
1702 gDefPointLight(r9, g9, b9, x9, y9, z9, c9, l9, q9), \
1704 gDefAmbient(ar, ag, ab), \
1707#define gdSPDefLookAt(rightx, righty, rightz, upx, upy, upz) \
1709 {{{ rightx, righty, rightz }, 0 }}, \
1710 {{{ upx, upy, upz }, 0 }}, \
1715 unsigned int type : 8;
1716 unsigned int len : 16;
1733 unsigned int par : 8;
1734 unsigned int len : 16;
1743 unsigned int len : 8;
1744 unsigned int ofs : 8;
1745 unsigned int par : 8;
1754 unsigned int index : 8;
1755 unsigned int offset : 16;
1764 unsigned int size : 8;
1765 unsigned int offset : 8;
1766 unsigned int index : 8;
1791 unsigned int pad : 8;
1792 unsigned short vstart_x2;
1793 unsigned short pad2;
1794 unsigned short vend_x2;
1799 unsigned int pad : 24;
1822 unsigned int sft : 8;
1823 unsigned int len : 8;
1824 unsigned int data : 32;
1830 unsigned int sft : 8;
1831 unsigned int len : 8;
1832 unsigned int data : 32;
1837 unsigned char lodscale;
1838 unsigned char pad : 2;
1839 unsigned char level : 3;
1840 unsigned char tile : 3;
1859 unsigned int fmt : 3;
1860 unsigned int siz : 2;
1861 unsigned int pad : 7;
1862 unsigned int wd : 12;
1869 unsigned int a0 : 4;
1870 unsigned int c0 : 5;
1871 unsigned int Aa0 : 3;
1872 unsigned int Ac0 : 3;
1873 unsigned int a1 : 4;
1874 unsigned int c1 : 5;
1876 unsigned int b0 : 4;
1877 unsigned int b1 : 4;
1878 unsigned int Aa1 : 3;
1879 unsigned int Ac1 : 3;
1880 unsigned int d0 : 3;
1881 unsigned int Ab0 : 3;
1882 unsigned int Ad0 : 3;
1883 unsigned int d1 : 3;
1884 unsigned int Ab1 : 3;
1885 unsigned int Ad1 : 3;
1891 unsigned char prim_min_level;
1892 unsigned char prim_level;
1894 unsigned long color;
1910 unsigned int pad : 8;
1919 unsigned int fmt : 3;
1920 unsigned int siz : 2;
1921 unsigned int pad0 : 1;
1922 unsigned int line : 9;
1923 unsigned int tmem : 9;
1924 unsigned int pad1 : 5;
1925 unsigned int tile : 3;
1926 unsigned int palette : 4;
1927 unsigned int ct : 1;
1928 unsigned int mt : 1;
1929 unsigned int maskt : 4;
1930 unsigned int shiftt : 4;
1931 unsigned int cs : 1;
1932 unsigned int ms : 1;
1933 unsigned int masks : 4;
1934 unsigned int shifts : 4;
1939 unsigned int sl : 12;
1940 unsigned int tl : 12;
1942 unsigned int tile : 3;
1943 unsigned int sh : 12;
1944 unsigned int th : 12;
1947typedef Gloadtile Gloadblock;
1949typedef Gloadtile Gsettilesize;
1951typedef Gloadtile Gloadtlut;
1954 unsigned int cmd : 8;
1955 unsigned int xl : 12;
1956 unsigned int yl : 12;
1957 unsigned int pad1 : 5;
1958 unsigned int tile : 3;
1959 unsigned int xh : 12;
1960 unsigned int yh : 12;
1961 unsigned int s : 16;
1962 unsigned int t : 16;
1963 unsigned int dsdx : 16;
1964 unsigned int dtdy : 16;
1967#define MakeTexRect(xh,yh,flip,tile,xl,yl,s,t,dsdx,dtdy) \
1968 G_TEXRECT, xh, yh, 0, flip, 0, tile, xl, yl, s, t, dsdx, dtdy
1982 unsigned int pad : 4;
1983 unsigned int len : 8;
1984 unsigned int pad2 : 4;
2015 GsetothermodeH setothermodeH;
2016 GsetothermodeL setothermodeL;
2018 Gperspnorm perspnorm;
2020 Gsetcombine setcombine;
2025 Gsettilesize settilesize;
2027 Gsetprimdepth setprimdepth;
2028 long long int force_structure_alignment;
2038#define gDma0p(pkt, c, s, l) \
2040 Gfx *_g = (Gfx *)(pkt); \
2042 _g->words.w0 = (_SHIFTL((c), 24, 8) | \
2043 _SHIFTL((l), 0, 24)); \
2044 _g->words.w1 = (unsigned int)(s); \
2047#define gsDma0p(c, s, l) \
2049 (_SHIFTL((c), 24, 8) | \
2050 _SHIFTL((l), 0, 24)), \
2054#define gDma1p(pkt, c, s, l, p) \
2056 Gfx *_g = (Gfx *)(pkt); \
2058 _g->words.w0 = (_SHIFTL((c), 24, 8) | \
2059 _SHIFTL((p), 16, 8) | \
2060 _SHIFTL((l), 0, 16)); \
2061 _g->words.w1 = (unsigned int)(s); \
2064#define gsDma1p(c, s, l, p) \
2066 (_SHIFTL((c), 24, 8) | \
2067 _SHIFTL((p), 16, 8) | \
2068 _SHIFTL((l), 0, 16)), \
2072#define gDma2p(pkt, c, adrs, len, idx, ofs) \
2074 Gfx *_g = (Gfx *)(pkt); \
2076 _g->words.w0 = (_SHIFTL((c), 24, 8) | \
2077 _SHIFTL(((len) - 1) / 8, 19, 5) | \
2078 _SHIFTL((ofs) / 8, 8, 8) | \
2079 _SHIFTL((idx), 0, 8)); \
2080 _g->words.w1 = (unsigned int)(adrs); \
2083#define gsDma2p(c, adrs, len, idx, ofs) \
2085 (_SHIFTL((c), 24, 8) | \
2086 _SHIFTL(((len) - 1) / 8, 19, 5) | \
2087 _SHIFTL((ofs) / 8, 8, 8) | \
2088 _SHIFTL((idx), 0, 8)), \
2089 (unsigned int)(adrs) \
2092#define gSPNoOp(pkt) gDma0p(pkt, G_SPNOOP, 0, 0)
2093#define gsSPNoOp() gsDma0p( G_SPNOOP, 0, 0)
2153#define gSPMatrix(pkt, m, p) \
2154 gDma2p((pkt),G_MTX, (m), sizeof(Mtx), (p) ^ G_MTX_PUSH, 0)
2160#define gsSPMatrix(m, p) \
2161 gsDma2p( G_MTX, (m), sizeof(Mtx), (p) ^ G_MTX_PUSH, 0)
2176#define gSPPopMatrixN(pkt, n, num) gDma2p((pkt), G_POPMTX, (num) * 64, 64, 2, 0)
2182#define gsSPPopMatrixN(n, num) gsDma2p( G_POPMTX, (num) * 64, 64, 2, 0)
2195#define gSPPopMatrix(pkt, n) gSPPopMatrixN((pkt), (n), 1)
2201#define gsSPPopMatrix(n) gsSPPopMatrixN( (n), 1)
2228#define gSPVertex(pkt, v, n, v0) \
2230 Gfx *_g = (Gfx *)(pkt); \
2232 _g->words.w0 = (_SHIFTL(G_VTX, 24, 8) | \
2233 _SHIFTL((n), 12, 8) | \
2234 _SHIFTL((v0) + (n), 1, 7)); \
2235 _g->words.w1 = (unsigned int)(v); \
2243#define gsSPVertex(v, n, v0) \
2245 (_SHIFTL(G_VTX, 24, 8) | \
2246 _SHIFTL((n), 12, 8) | \
2247 _SHIFTL((v0) + (n), 1, 7)), \
2251#define gSPViewport(pkt, v) \
2252 gDma2p((pkt), G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT, 0)
2253#define gsSPViewport(v) \
2254 gsDma2p( G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT, 0)
2260#define _gSPDisplayListRaw(pkt,dl,hint) gDma1p(pkt, G_DL, dl, hint, G_DL_PUSH)
2261#define _gsSPDisplayListRaw( dl,hint) gsDma1p( G_DL, dl, hint, G_DL_PUSH)
2263#define _gSPBranchListRaw(pkt,dl,hint) gDma1p(pkt, G_DL, dl, hint, G_DL_NOPUSH)
2264#define _gsSPBranchListRaw( dl,hint) gsDma1p( G_DL, dl, hint, G_DL_NOPUSH)
2266#define _gSPEndDisplayListRaw(pkt,hint) gDma0p(pkt, G_ENDDL, 0, hint)
2267#define _gsSPEndDisplayListRaw(hint) gsDma0p( G_ENDDL, 0, hint)
2273#define _DLHINTVALUE(count) \
2274 (((count) > 0 && ((count) % G_INPUT_BUFFER_CMDS) > 0) ? \
2275 ((G_INPUT_BUFFER_CMDS - ((count) % G_INPUT_BUFFER_CMDS)) << 3) : 0)
2288#define gSPDisplayListHint(pkt, dl, count) _gSPDisplayListRaw(pkt, dl, _DLHINTVALUE(count))
2292#define gsSPDisplayListHint( dl, count) _gsSPDisplayListRaw( dl, _DLHINTVALUE(count))
2297#define gSPBranchListHint(pkt, dl, count) _gSPBranchListRaw( pkt, dl, _DLHINTVALUE(count))
2302#define gsSPBranchListHint( dl, count) _gsSPBranchListRaw( dl, _DLHINTVALUE(count))
2307#define gSPEndDisplayListHint(pkt, count) _gSPEndDisplayListRaw( pkt, _DLHINTVALUE(count))
2312#define gsSPEndDisplayListHint( count) _gsSPEndDisplayListRaw( _DLHINTVALUE(count))
2317#define gSPDisplayList(pkt, dl) _gSPDisplayListRaw(pkt, dl, 0)
2321#define gsSPDisplayList( dl) _gsSPDisplayListRaw( dl, 0)
2326#define gSPBranchList(pkt, dl) _gSPBranchListRaw( pkt, dl, 0)
2330#define gsSPBranchList( dl) _gsSPBranchListRaw( dl, 0)
2335#define gSPEndDisplayList(pkt) _gSPEndDisplayListRaw( pkt, 0)
2339#define gsSPEndDisplayList( ) _gsSPEndDisplayListRaw( 0)
2348#define gSPLoadUcodeEx(pkt, uc_start, uc_dstart, uc_dsize) \
2350 Gfx *_g = (Gfx *)(pkt); \
2352 _g->words.w0 = _SHIFTL(G_RDPHALF_1, 24, 8); \
2353 _g->words.w1 = (unsigned int)(uc_dstart); \
2355 _g = (Gfx *)(pkt); \
2357 _g->words.w0 = (_SHIFTL(G_LOAD_UCODE, 24, 8) | \
2358 _SHIFTL((int)(uc_dsize) - 1, 0, 16)); \
2359 _g->words.w1 = (unsigned int)(uc_start); \
2365#define gsSPLoadUcodeEx(uc_start, uc_dstart, uc_dsize) \
2367 _SHIFTL(G_RDPHALF_1, 24, 8), \
2368 (unsigned int)(uc_dstart), \
2371 (_SHIFTL(G_LOAD_UCODE, 24, 8) | \
2372 _SHIFTL((int)(uc_dsize) - 1, 0, 16)), \
2373 (unsigned int)(uc_start), \
2376#define gSPLoadUcode(pkt, uc_start, uc_dstart) \
2377 gSPLoadUcodeEx((pkt), (uc_start), (uc_dstart), SP_UCODE_DATA_SIZE)
2378#define gsSPLoadUcode(uc_start, uc_dstart) \
2379 gsSPLoadUcodeEx((uc_start), (uc_dstart), SP_UCODE_DATA_SIZE)
2381#define gSPLoadUcodeL(pkt, ucode) \
2382 gSPLoadUcode((pkt), OS_K0_TO_PHYSICAL(& ucode##TextStart), \
2383 OS_K0_TO_PHYSICAL(& ucode##DataStart))
2384#define gsSPLoadUcodeL(ucode) \
2385 gsSPLoadUcode( OS_K0_TO_PHYSICAL(& ucode##TextStart), \
2386 OS_K0_TO_PHYSICAL(& ucode##DataStart))
2391#define gSPDma_io(pkt, flag, dmem, dram, size) \
2393 Gfx *_g = (Gfx *)(pkt); \
2395 _g->words.w0 = (_SHIFTL(G_DMA_IO, 24, 8) | \
2396 _SHIFTL((flag), 23, 1) | \
2397 _SHIFTL((dmem) / 8, 13, 10) | \
2398 _SHIFTL((size) - 1, 0, 12)); \
2399 _g->words.w1 = (unsigned int)(dram); \
2405#define gsSPDma_io(flag, dmem, dram, size) \
2407 (_SHIFTL(G_DMA_IO, 24, 8) | \
2408 _SHIFTL((flag), 23, 1) | \
2409 _SHIFTL((dmem) / 8, 13, 10) | \
2410 _SHIFTL((size) - 1, 0, 12)), \
2411 (unsigned int)(dram) \
2414#define gSPDmaRead(pkt,dmem,dram,size) gSPDma_io((pkt),0,(dmem),(dram),(size))
2415#define gsSPDmaRead(dmem,dram,size) gsSPDma_io( 0,(dmem),(dram),(size))
2416#define gSPDmaWrite(pkt,dmem,dram,size) gSPDma_io((pkt),1,(dmem),(dram),(size))
2417#define gsSPDmaWrite(dmem,dram,size) gsSPDma_io( 1,(dmem),(dram),(size))
2429#define gSPMemset(pkt, dram, value, size) \
2431 gImmp1(pkt, G_RDPHALF_1, ((value) & 0xFFFF)); \
2432 gDma0p(pkt, G_MEMSET, (dram), ((size) & 0xFFFFF0)); \
2438#define gsSPMemset(pkt, dram, value, size) \
2439 gsImmp1(G_RDPHALF_1, ((value) & 0xFFFF)), \
2440 gsDma0p(G_MEMSET, (dram), ((size) & 0xFFFFF0))
2445#define gImmp0(pkt, c) \
2447 Gfx *_g = (Gfx *)(pkt); \
2449 _g->words.w0 = _SHIFTL((c), 24, 8); \
2457 _SHIFTL((c), 24, 8) \
2460#define gImmp1(pkt, c, p0) \
2462 Gfx *_g = (Gfx *)(pkt); \
2464 _g->words.w0 = _SHIFTL((c), 24, 8); \
2465 _g->words.w1 = (unsigned int)(p0); \
2468#define gsImmp1(c, p0) \
2470 _SHIFTL((c), 24, 8), \
2471 (unsigned int)(p0) \
2474#define gImmp2(pkt, c, p0, p1) \
2476 Gfx *_g = (Gfx *)(pkt); \
2478 _g->words.w0 = _SHIFTL((c), 24, 8); \
2479 _g->words.w1 = (_SHIFTL((p0), 16, 16) | \
2480 _SHIFTL((p1), 8, 8)); \
2483#define gsImmp2(c, p0, p1) \
2485 _SHIFTL((c), 24, 8), \
2486 (_SHIFTL((p0), 16, 16) | \
2487 _SHIFTL((p1), 8, 8)) \
2490#define gImmp3(pkt, c, p0, p1, p2) \
2492 Gfx *_g = (Gfx *)(pkt); \
2494 _g->words.w0 = _SHIFTL((c), 24, 8); \
2495 _g->words.w1 = (_SHIFTL((p0), 16, 16) | \
2496 _SHIFTL((p1), 8, 8) | \
2497 _SHIFTL((p2), 0, 8)); \
2500#define gsImmp3(c, p0, p1, p2) \
2502 _SHIFTL((c), 24, 8), \
2503 (_SHIFTL((p0), 16, 16) | \
2504 _SHIFTL((p1), 8, 8) | \
2505 _SHIFTL((p2), 0, 8)) \
2508#define gImmp21(pkt, c, p0, p1, dat) \
2510 Gfx *_g = (Gfx *)(pkt); \
2512 _g->words.w0 = (_SHIFTL((c), 24, 8) | \
2513 _SHIFTL((p0), 8, 16) | \
2514 _SHIFTL((p1), 0, 8)); \
2515 _g->words.w1 = (unsigned int) (dat); \
2518#define gsImmp21(c, p0, p1, dat) \
2520 (_SHIFTL((c), 24, 8) | \
2521 _SHIFTL((p0), 8, 16) | \
2522 _SHIFTL((p1), 0, 8)), \
2523 (unsigned int) (dat) \
2526#define gMoveWd(pkt, index, offset, data) \
2527 gDma1p((pkt), G_MOVEWORD, data, (offset & 0xFFF), index)
2528#define gsMoveWd( index, offset, data) \
2529 gsDma1p( G_MOVEWORD, data, (offset & 0xFFF), index)
2531#define gMoveHalfwd(pkt, index, offset, data) \
2532 gDma1p((pkt), G_MOVEWORD, data, (offset & 0xFFF) | G_MW_HALFWORD_FLAG, index)
2533#define gsMoveHalfwd( index, offset, data) \
2534 gsDma1p( G_MOVEWORD, data, (offset & 0xFFF) | G_MW_HALFWORD_FLAG, index)
2541#define __gsSP1Triangle_w1(v0, v1, v2) \
2542 (_SHIFTL((v0) * 2, 16, 8) | \
2543 _SHIFTL((v1) * 2, 8, 8) | \
2544 _SHIFTL((v2) * 2, 0, 8))
2546#define __gsSP1Triangle_w1f(v0, v1, v2, flag) \
2547 (((flag) == 0) ? __gsSP1Triangle_w1(v0, v1, v2) : \
2548 ((flag) == 1) ? __gsSP1Triangle_w1(v1, v2, v0) : \
2549 __gsSP1Triangle_w1(v2, v0, v1))
2551#define __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag) \
2552 (((flag) == 0) ? __gsSP1Triangle_w1(v0, v1, v2) : \
2553 ((flag) == 1) ? __gsSP1Triangle_w1(v1, v2, v3) : \
2554 ((flag) == 2) ? __gsSP1Triangle_w1(v2, v3, v0) : \
2555 __gsSP1Triangle_w1(v3, v0, v1))
2557#define __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag) \
2558 (((flag) == 0) ? __gsSP1Triangle_w1(v0, v2, v3) : \
2559 ((flag) == 1) ? __gsSP1Triangle_w1(v1, v3, v0) : \
2560 ((flag) == 2) ? __gsSP1Triangle_w1(v2, v0, v1) : \
2561 __gsSP1Triangle_w1(v3, v1, v2))
2567#define gSP1Triangle(pkt, v0, v1, v2, flag) \
2569 Gfx *_g = (Gfx *)(pkt); \
2570 _g->words.w0 = (_SHIFTL(G_TRI1, 24, 8) | \
2571 __gsSP1Triangle_w1f(v0, v1, v2, flag)); \
2577#define gsSP1Triangle(v0, v1, v2, flag) \
2579 (_SHIFTL(G_TRI1, 24, 8) | \
2580 __gsSP1Triangle_w1f(v0, v1, v2, flag)), \
2587#define gSP1Quadrangle(pkt, v0, v1, v2, v3, flag) \
2589 Gfx *_g = (Gfx *)(pkt); \
2590 _g->words.w0 = (_SHIFTL(G_QUAD, 24, 8) | \
2591 __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)); \
2592 _g->words.w1 = (__gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag)); \
2598#define gsSP1Quadrangle(v0, v1, v2, v3, flag) \
2600 (_SHIFTL(G_QUAD, 24, 8) | \
2601 __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)), \
2602 __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag) \
2608#define gSP2Triangles(pkt, v00, v01, v02, flag0, v10, v11, v12, flag1) \
2610 Gfx *_g = (Gfx *)(pkt); \
2611 _g->words.w0 = (_SHIFTL(G_TRI2, 24, 8) | \
2612 __gsSP1Triangle_w1f(v00, v01, v02, flag0)); \
2613 _g->words.w1 = __gsSP1Triangle_w1f(v10, v11, v12, flag1); \
2619#define gsSP2Triangles(v00, v01, v02, flag0, v10, v11, v12, flag1) \
2621 (_SHIFTL(G_TRI2, 24, 8) | \
2622 __gsSP1Triangle_w1f(v00, v01, v02, flag0)), \
2623 __gsSP1Triangle_w1f(v10, v11, v12, flag1) \
2629#define _gSP5Triangles(pkt, cmd, v1, v2, v3, v4, v5, v6, v7) \
2631 Gfx *_g = (Gfx *)(pkt); \
2632 _g->words.w0 = (_SHIFTL(cmd, 24, 8) | \
2633 _SHIFTL((v1)*2, 16, 8) | \
2634 _SHIFTL((v2)*2, 8, 8) | \
2635 _SHIFTL((v3)*2, 0, 8)); \
2636 _g->words.w1 = (_SHIFTL((v4)*2, 24, 8) | \
2637 _SHIFTL((v5)*2, 16, 8) | \
2638 _SHIFTL((v6)*2, 8, 8) | \
2639 _SHIFTL((v7)*2, 0, 8)); \
2641#define _gsSP5Triangles(cmd, v1, v2, v3, v4, v5, v6, v7) \
2643 (_SHIFTL(cmd, 24, 8) | \
2644 _SHIFTL((v1)*2, 16, 8) | \
2645 _SHIFTL((v2)*2, 8, 8) | \
2646 _SHIFTL((v3)*2, 0, 8)), \
2647 (_SHIFTL((v4)*2, 24, 8) | \
2648 _SHIFTL((v5)*2, 16, 8) | \
2649 _SHIFTL((v6)*2, 8, 8) | \
2650 _SHIFTL((v7)*2, 0, 8)) \
2662#define gSPTriStrip(pkt, v1, v2, v3, v4, v5, v6, v7) \
2663 _gSP5Triangles(pkt, G_TRISTRIP, v1, v2, v3, v4, v5, v6, v7)
2667#define gsSPTriStrip(v1, v2, v3, v4, v5, v6, v7) \
2668 _gsSP5Triangles(G_TRISTRIP, v1, v2, v3, v4, v5, v6, v7)
2674#define gSPTriFan(pkt, v1, v2, v3, v4, v5, v6, v7) \
2675 _gSP5Triangles(pkt, G_TRIFAN, v1, v2, v3, v4, v5, v6, v7)
2679#define gsSPTriFan(v1, v2, v3, v4, v5, v6, v7) \
2680 _gsSP5Triangles(G_TRIFAN, v1, v2, v3, v4, v5, v6, v7)
2686#ifdef F3DEX2_SEGMENTS
2690#define gSPSegment(pkt, segment, base) \
2691 gMoveWd(pkt, G_MW_SEGMENT, (segment) * 4, (base))
2692#define gsSPSegment(segment, base) \
2693 gsMoveWd( G_MW_SEGMENT, (segment) * 4, (base))
2697#define gSPSegment(pkt, segment, base) \
2698 gDma1p((pkt), G_RELSEGMENT, (base), ((segment) * 4) & 0xFFF, G_MW_SEGMENT)
2699#define gsSPSegment(segment, base) \
2700 gsDma1p( G_RELSEGMENT, (base), ((segment) * 4) & 0xFFF, G_MW_SEGMENT)
2703#define gSPPerspNormalize(pkt, s) gMoveHalfwd(pkt, G_MW_FX, G_MWO_PERSPNORM, (s))
2704#define gsSPPerspNormalize(s) gsMoveHalfwd( G_MW_FX, G_MWO_PERSPNORM, (s))
2711#define gSPClipRatio(pkt, r) gSPNoOp(pkt)
2717#define gsSPClipRatio(r) gsSPNoOp()
2725#define gSPForceMatrix(pkt, mptr) gSPNoOp(pkt)
2731#define gsSPForceMatrix(mptr) gsSPNoOp()
2768#define gSPAmbOcclusionAmb(pkt, amb) gMoveHalfwd(pkt, G_MW_FX, G_MWO_AO_AMBIENT, amb)
2772#define gsSPAmbOcclusionAmb(amb) gsMoveHalfwd( G_MW_FX, G_MWO_AO_AMBIENT, amb)
2776#define gSPAmbOcclusionDir(pkt, dir) gMoveHalfwd(pkt, G_MW_FX, G_MWO_AO_DIRECTIONAL, dir)
2780#define gsSPAmbOcclusionDir(dir) gsMoveHalfwd( G_MW_FX, G_MWO_AO_DIRECTIONAL, dir)
2784#define gSPAmbOcclusionPoint(pkt, point) gMoveHalfwd(pkt, G_MW_FX, G_MWO_AO_POINT, point)
2788#define gsSPAmbOcclusionPoint(point) gsMoveHalfwd( G_MW_FX, G_MWO_AO_POINT, point)
2790#define gSPAmbOcclusionAmbDir(pkt, amb, dir) \
2791 gMoveWd(pkt, G_MW_FX, G_MWO_AO_AMBIENT, \
2792 (_SHIFTL((amb), 16, 16) | _SHIFTL((dir), 0, 16)))
2793#define gsSPAmbOcclusionAmbDir(amb, dir) \
2794 gsMoveWd(G_MW_FX, G_MWO_AO_AMBIENT, \
2795 (_SHIFTL((amb), 16, 16) | _SHIFTL((dir), 0, 16)))
2796#define gSPAmbOcclusionDirPoint(pkt, dir, point) \
2797 gMoveWd(pkt, G_MW_FX, G_MWO_AO_DIRECTIONAL, \
2798 (_SHIFTL((dir), 16, 16) | _SHIFTL((point), 0, 16)))
2799#define gsSPAmbOcclusionDirPoint(dir, point) \
2800 gsMoveWd(G_MW_FX, G_MWO_AO_DIRECTIONAL, \
2801 (_SHIFTL((dir), 16, 16) | _SHIFTL((point), 0, 16)))
2803#define gSPAmbOcclusion(pkt, amb, dir, point) \
2805 gSPAmbOcclusionAmbDir(pkt, amb, dir); \
2806 gSPAmbOcclusionPoint(pkt, point); \
2808#define gsSPAmbOcclusion(amb, dir, point) \
2809 gsSPAmbOcclusionAmbDir(amb, dir), \
2810 gsSPAmbOcclusionPoint(point)
2845#define gSPFresnelScale(pkt, scale) \
2846 gMoveHalfwd(pkt, G_MW_FX, G_MWO_FRESNEL_SCALE, scale)
2850#define gsSPFresnelScale(scale) \
2851 gsMoveHalfwd(G_MW_FX, G_MWO_FRESNEL_SCALE, scale)
2855#define gSPFresnelOffset(pkt, offset) \
2856 gMoveHalfwd(pkt, G_MW_FX, G_MWO_FRESNEL_OFFSET, offset)
2860#define gsSPFresnelOffset(offset) \
2861 gsMoveHalfwd(G_MW_FX, G_MWO_FRESNEL_OFFSET, offset)
2865#define gSPFresnel(pkt, scale, offset) \
2866 gMoveWd(pkt, G_MW_FX, G_MWO_FRESNEL_SCALE, \
2867 (_SHIFTL((scale), 16, 16) | _SHIFTL((offset), 0, 16)))
2871#define gsSPFresnel(scale, offset) \
2872 gsMoveWd(G_MW_FX, G_MWO_FRESNEL_SCALE, \
2873 (_SHIFTL((scale), 16, 16) | _SHIFTL((offset), 0, 16)))
2888#define gSPAttrOffsetST(pkt, s, t) \
2889 gMoveWd(pkt, G_MW_FX, G_MWO_ATTR_OFFSET_S, \
2890 (_SHIFTL((s), 16, 16) | _SHIFTL((t), 0, 16)))
2894#define gsSPAttrOffsetST(s, t) \
2895 gsMoveWd(G_MW_FX, G_MWO_ATTR_OFFSET_S, \
2896 (_SHIFTL((s), 16, 16) | _SHIFTL((t), 0, 16)))
2900#define gSPAttrOffsetZ(pkt, z) \
2901 gMoveHalfwd(pkt, G_MW_FX, G_MWO_ATTR_OFFSET_Z, z)
2905#define gsSPAttrOffsetZ(z) \
2906 gsMoveHalfwd(G_MW_FX, G_MWO_ATTR_OFFSET_Z, z)
2944#define gSPAlphaCompareCull(pkt, mode, thresh) \
2945 gMoveHalfwd(pkt, G_MW_FX, G_MWO_ALPHA_COMPARE_CULL, \
2946 (_SHIFTL((mode), 8, 8) | _SHIFTL((thresh), 0, 8)))
2950#define gsSPAlphaCompareCull(mode, thresh) \
2951 gsMoveHalfwd(G_MW_FX, G_MWO_ALPHA_COMPARE_CULL, \
2952 (_SHIFTL((mode), 8, 8) | _SHIFTL((thresh), 0, 8)))
2989#define gSPNormalsMode(pkt, mode) \
2990 gMoveHalfwd(pkt, G_MW_FX, G_MWO_NORMALS_MODE, (mode) & 0xFF)
2994#define gsSPNormalsMode(mode) \
2995 gsMoveHalfwd(G_MW_FX, G_MWO_NORMALS_MODE, (mode) & 0xFF)
3025#define gSPDontSkipTexLoadsAcross(pkt) \
3026 gMoveWd(pkt, G_MW_FX, G_MWO_LAST_MAT_DL_ADDR, 0xFFFFFFFF)
3030#define gsSPDontSkipTexLoadsAcross() \
3031 gsMoveWd(G_MW_FX, G_MWO_LAST_MAT_DL_ADDR, 0xFFFFFFFF)
3038 long long int force_structure_alignment;
3054#define gSPMITMatrix(pkt, mit) \
3055 gDma2p((pkt), G_MOVEMEM, (mit), sizeof(MITMtx), G_MV_MMTX, 0x80)
3059#define gsSPMITMatrix(mtx) \
3060 gsDma2p( G_MOVEMEM, (mit), sizeof(MITMtx), G_MV_MMTX, 0x80)
3112# define gSPModifyVertex(pkt, vtx, where, val) \
3114 Gfx *_g = (Gfx *)(pkt); \
3116 _g->words.w0 = (_SHIFTL(G_MODIFYVTX, 24, 8) | \
3117 _SHIFTL((where), 16, 8) | \
3118 _SHIFTL((vtx) * 2, 0, 16)); \
3119 _g->words.w1 = (unsigned int)(val); \
3126# define gsSPModifyVertex(vtx, where, val) \
3128 (_SHIFTL(G_MODIFYVTX, 24, 8) | \
3129 _SHIFTL((where), 16, 8) | \
3130 _SHIFTL((vtx) * 2, 0, 16)), \
3131 (unsigned int)(val) \
3143#define gSPCullDisplayList(pkt,vstart,vend) \
3145 Gfx *_g = (Gfx *)(pkt); \
3147 _g->words.w0 = (_SHIFTL(G_CULLDL, 24, 8) | \
3148 _SHIFTL((vstart) * 2, 0, 16)); \
3149 _g->words.w1 = _SHIFTL((vend) * 2, 0, 16); \
3154#define gsSPCullDisplayList(vstart,vend) \
3156 (_SHIFTL(G_CULLDL, 24, 8) | \
3157 _SHIFTL((vstart) * 2, 0, 16)), \
3158 _SHIFTL((vend) * 2, 0, 16) \
3176# define FTOFIX32(x) (long)((x) * (float)0x00010000)
3182#define G_DEPTOZSrg(zval, near, far, flag, zmin, zmax) \
3183 (((unsigned int)FTOFIX32(((flag) == G_BZ_PERSP ? \
3184 (1.0f - (float)(near) / (float)(zval)) / \
3185 (1.0f - (float)(near) / (float)(far )) : \
3186 ((float)(zval) - (float)(near)) / \
3187 ((float)(far ) - (float)(near))))) * \
3188 (((int)((zmax) - (zmin))) & ~1) + (int)FTOFIX32(zmin))
3190#define G_DEPTOZS(zval, near, far, flag) \
3191 G_DEPTOZSrg(zval, near, far, flag, 0, G_MAXZ)
3193#define gSPBranchLessZrg(pkt, dl, vtx, zval, near, far, flag, zmin, zmax) \
3195 Gfx *_g = (Gfx *)(pkt); \
3197 _g->words.w0 = _SHIFTL(G_RDPHALF_1, 24, 8); \
3198 _g->words.w1 = (unsigned int)(dl); \
3200 _g = (Gfx *)(pkt); \
3202 _g->words.w0 = (_SHIFTL(G_BRANCH_Z, 24, 8) | \
3203 _SHIFTL((vtx) * 5, 12, 12) | \
3204 _SHIFTL((vtx) * 2, 0, 12)); \
3205 _g->words.w1 = G_DEPTOZSrg(zval, near, far, flag, zmin, zmax); \
3208#define gsSPBranchLessZrg(dl, vtx, zval, near, far, flag, zmin, zmax) \
3210 _SHIFTL(G_RDPHALF_1, 24, 8), \
3211 (unsigned int)(dl), \
3214 (_SHIFTL(G_BRANCH_Z, 24, 8) | \
3215 _SHIFTL((vtx) * 5, 12, 12) | \
3216 _SHIFTL((vtx) * 2, 0, 12)), \
3217 G_DEPTOZSrg(zval, near, far, flag, zmin, zmax), \
3220#define gSPBranchLessZ(pkt, dl, vtx, zval, near, far, flag) \
3221 gSPBranchLessZrg(pkt, dl, vtx, zval, near, far, flag, 0, G_MAXZ)
3222#define gsSPBranchLessZ(dl, vtx, zval, near, far, flag) \
3223 gsSPBranchLessZrg(dl, vtx, zval, near, far, flag, 0, G_MAXZ)
3232#define gSPBranchLessZraw(pkt, dl, vtx, zval) \
3234 Gfx *_g = (Gfx *)(pkt); \
3236 _g->words.w0 = _SHIFTL(G_RDPHALF_1, 24, 8); \
3237 _g->words.w1 = (unsigned int)(dl); \
3239 _g = (Gfx *)(pkt); \
3241 _g->words.w0 = (_SHIFTL(G_BRANCH_Z, 24, 8) | \
3242 _SHIFTL((vtx) * 5, 12, 12) | \
3243 _SHIFTL((vtx) * 2, 0, 12)); \
3244 _g->words.w1 = (unsigned int)(zval); \
3250#define gsSPBranchLessZraw(dl, vtx, zval) \
3252 _SHIFTL(G_RDPHALF_1, 24, 8), \
3253 (unsigned int)(dl), \
3256 (_SHIFTL(G_BRANCH_Z, 24, 8) | \
3257 _SHIFTL((vtx) * 5, 12, 12) | \
3258 _SHIFTL((vtx) * 2, 0, 12)), \
3259 (unsigned int)(zval), \
3267#define NUML(n) ((n) * 0x10)
3272#define NUMLIGHTS_0 0
3273#define NUMLIGHTS_1 1
3274#define NUMLIGHTS_2 2
3275#define NUMLIGHTS_3 3
3276#define NUMLIGHTS_4 4
3277#define NUMLIGHTS_5 5
3278#define NUMLIGHTS_6 6
3279#define NUMLIGHTS_7 7
3280#define NUMLIGHTS_8 8
3281#define NUMLIGHTS_9 9
3287#define gSPNumLights(pkt, n) \
3288 gMoveWd(pkt, G_MW_NUMLIGHT, G_MWO_NUMLIGHT, NUML(n))
3292#define gsSPNumLights(n) \
3293 gsMoveWd( G_MW_NUMLIGHT, G_MWO_NUMLIGHT, NUML(n))
3307#define _LIGHT_TO_OFFSET(n) (((n) - 1) * 0x10 + 0x10)
3320#define gSPLight(pkt, l, n) \
3321 gDma2p((pkt), G_MOVEMEM, (l), sizeof(Light), G_MV_LIGHT, _LIGHT_TO_OFFSET(n))
3325#define gsSPLight(l, n) \
3326 gsDma2p( G_MOVEMEM, (l), sizeof(Light), G_MV_LIGHT, _LIGHT_TO_OFFSET(n))
3332#define gSPAmbient(pkt, l, n) \
3333 gDma2p((pkt), G_MOVEMEM, (l), sizeof(Ambient), G_MV_LIGHT, _LIGHT_TO_OFFSET(n))
3337#define gsSPAmbient(l, n) \
3338 gsDma2p( G_MOVEMEM, (l), sizeof(Ambient), G_MV_LIGHT, _LIGHT_TO_OFFSET(n))
3348#define gSPLightColor(pkt, n, col) \
3350 gMoveWd(pkt, G_MW_LIGHTCOL, ((((n) - 1) * 0x10) + 0), ((col) & 0xFFFFFF00)); \
3351 gMoveWd(pkt, G_MW_LIGHTCOL, ((((n) - 1) * 0x10) + 4), ((col) & 0xFFFFFF00)); \
3356#define gsSPLightColor(n, col) \
3357 gsMoveWd(G_MW_LIGHTCOL, ((((n) - 1) * 0x10) + 0), ((col) & 0xFFFFFF00)), \
3358 gsMoveWd(G_MW_LIGHTCOL, ((((n) - 1) * 0x10) + 4), ((col) & 0xFFFFFF00))
3365#define _gSPLightColor2(pkt, n, col1, col2) \
3367 gMoveWd(pkt, G_MW_LIGHTCOL, ((((n) - 1) * 0x10) + 0), col1); \
3368 gMoveWd(pkt, G_MW_LIGHTCOL, ((((n) - 1) * 0x10) + 4), col2); \
3370#define _gsSPLightColor2(n, col1, col2) \
3371 gsMoveWd(G_MW_LIGHTCOL, ((((n) - 1) * 0x10) + 0), col1), \
3372 gsMoveWd(G_MW_LIGHTCOL, ((((n) - 1) * 0x10) + 4), col2)
3399#define gSPSetLights(pkt, n, name) \
3401 gSPNumLights(pkt, n); \
3402 gDma2p((pkt), G_MOVEMEM, &(name), (n) * 0x10 + 8, G_MV_LIGHT, 0x10); \
3407#define gsSPSetLights(n, name) \
3409 gsDma2p(G_MOVEMEM, &(name), (n) * 0x10 + 8, G_MV_LIGHT, 0x10)
3411#define gSPSetLights0(pkt, name) gSPSetLights(pkt, 0, name)
3412#define gsSPSetLights0(name) gsSPSetLights( 0, name)
3413#define gSPSetLights1(pkt, name) gSPSetLights(pkt, 1, name)
3414#ifdef KAZE_GBI_HACKS
3415#define gsSPSetLights1(name) gsSPNoOp()
3417#define gsSPSetLights1(name) gsSPSetLights( 1, name)
3419#define gSPSetLights2(pkt, name) gSPSetLights(pkt, 2, name)
3420#define gsSPSetLights2(name) gsSPSetLights( 2, name)
3421#define gSPSetLights3(pkt, name) gSPSetLights(pkt, 3, name)
3422#define gsSPSetLights3(name) gsSPSetLights( 3, name)
3423#define gSPSetLights4(pkt, name) gSPSetLights(pkt, 4, name)
3424#define gsSPSetLights4(name) gsSPSetLights( 4, name)
3425#define gSPSetLights5(pkt, name) gSPSetLights(pkt, 5, name)
3426#define gsSPSetLights5(name) gsSPSetLights( 5, name)
3427#define gSPSetLights6(pkt, name) gSPSetLights(pkt, 6, name)
3428#define gsSPSetLights6(name) gsSPSetLights( 6, name)
3429#define gSPSetLights7(pkt, name) gSPSetLights(pkt, 7, name)
3430#define gsSPSetLights7(name) gsSPSetLights( 7, name)
3431#define gSPSetLights8(pkt, name) gSPSetLights(pkt, 8, name)
3432#define gsSPSetLights8(name) gsSPSetLights( 8, name)
3433#define gSPSetLights9(pkt, name) gSPSetLights(pkt, 9, name)
3434#define gsSPSetLights9(name) gsSPSetLights( 9, name)
3441#define gSPCameraWorld(pkt, cam) \
3442 gDma2p((pkt), G_MOVEMEM, (cam), sizeof(PlainVtx), G_MV_LIGHT, 0)
3446#define gsSPCameraWorld(cam) \
3447 gsDma2p( G_MOVEMEM, (cam), sizeof(PlainVtx), G_MV_LIGHT, 0)
3454#define gSPLookAt(pkt, la) \
3455 gDma2p((pkt), G_MOVEMEM, (la), sizeof(LookAt), G_MV_LIGHT, 8)
3459#define gsSPLookAt(la) \
3460 gsDma2p( G_MOVEMEM, (la), sizeof(LookAt), G_MV_LIGHT, 8)
3471#define gSPLookAtX(pkt, l) gSPLookAt(pkt, l)
3475#define gsSPLookAtX(l) gsSPLookAt(l)
3479#define gSPLookAtY(pkt, l) gSPNoOp(pkt)
3483#define gsSPLookAtY(l) gsSPNoOp()
3486#define gDPSetHilite1Tile(pkt, tile, hilite, width, height) \
3487 gDPSetTileSize(pkt, tile, \
3488 (hilite)->h.x1 & 0xFFF, \
3489 (hilite)->h.y1 & 0xFFF, \
3490 ((((width) - 1) * 4) + (hilite)->h.x1) & 0xFFF, \
3491 ((((height) - 1) * 4) + (hilite)->h.y1) & 0xFFF)
3492#define gsDPSetHilite1Tile(tile, hilite, width, height) \
3493 gsDPSetTileSize(tile, \
3494 (hilite)->h.x1 & 0xFFF, \
3495 (hilite)->h.y1 & 0xFFF, \
3496 ((((width) - 1) * 4) + (hilite)->h.x1) & 0xFFF, \
3497 ((((height) - 1) * 4) + (hilite)->h.y1) & 0xFFF)
3499#define gDPSetHilite2Tile(pkt, tile, hilite, width, height) \
3500 gDPSetTileSize(pkt, tile, \
3501 (hilite)->h.x2 & 0xFFF, \
3502 (hilite)->h.y2 & 0xFFF, \
3503 ((((width) - 1) * 4) + (hilite)->h.x2) & 0xFFF, \
3504 ((((height) - 1) * 4) + (hilite)->h.y2) & 0xFFF)
3505#define gsDPSetHilite2Tile(tile, hilite, width, height) \
3506 gsDPSetTileSize(tile, \
3507 (hilite)->h.x2 & 0xFFF, \
3508 (hilite)->h.y2 & 0xFFF, \
3509 ((((width) - 1) * 4) + (hilite)->h.x2) & 0xFFF, \
3510 ((((height) - 1) * 4) + (hilite)->h.y2) & 0xFFF)
3525#define gSPOcclusionPlane(pkt, o) \
3526 gDma2p((pkt), G_MOVEMEM, (o), sizeof(OcclusionPlane), G_MV_LIGHT, \
3527 (G_MAX_LIGHTS * 0x10) + 0x18)
3531#define gsSPOcclusionPlane(o) \
3532 gsDma2p( G_MOVEMEM, (o), sizeof(OcclusionPlane), G_MV_LIGHT, \
3533 (G_MAX_LIGHTS * 0x10) + 0x18)
3549#define gSPFogFactor(pkt, fm, fo) \
3550 gMoveWd(pkt, G_MW_FOG, G_MWO_FOG, \
3551 (_SHIFTL(fm, 16, 16) | _SHIFTL(fo, 0, 16)))
3556#define gsSPFogFactor(fm, fo) \
3557 gsMoveWd(G_MW_FOG, G_MWO_FOG, \
3558 (_SHIFTL(fm, 16, 16) | _SHIFTL(fo, 0, 16)))
3560#define gSPFogPosition(pkt, min, max) \
3561 gMoveWd(pkt, G_MW_FOG, G_MWO_FOG, \
3562 (_SHIFTL((128000 / ((max) - (min))), 16, 16) | \
3563 _SHIFTL(((500 - (min)) * 256 / ((max) - (min))), 0, 16)))
3565#define gsSPFogPosition(min, max) \
3566 gsMoveWd(G_MW_FOG, G_MWO_FOG, \
3567 (_SHIFTL((128000 / ((max) - (min))), 16, 16) | \
3568 _SHIFTL(((500 - (min)) * 256 / ((max) - (min))), 0, 16)))
3574#define gSPTexture(pkt, s, t, level, tile, on) \
3576 Gfx *_g = (Gfx *)(pkt); \
3578 _g->words.w0 = (_SHIFTL(G_TEXTURE, 24, 8) | \
3579 _SHIFTL((level), 11, 3) | \
3580 _SHIFTL((tile), 8, 3) | \
3581 _SHIFTL((on), 1, 7)); \
3582 _g->words.w1 = (_SHIFTL((s), 16, 16) | \
3583 _SHIFTL((t), 0, 16)); \
3588#define gsSPTexture(s, t, level, tile, on) \
3590 (_SHIFTL(G_TEXTURE, 24, 8) | \
3591 _SHIFTL((level), 11, 3) | \
3592 _SHIFTL((tile), 8, 3) | \
3593 _SHIFTL((on), 1, 7)), \
3594 (_SHIFTL((s), 16, 16) | \
3595 _SHIFTL((t), 0, 16)) \
3602#define gSPTextureL(pkt, s, t, level, bowtie, tile, on) \
3603 gSPTexture(pkt, s, t, level, tile, on)
3607#define gsSPTextureL(s, t, level, bowtie, tile, on) \
3608 gsSPTexture(s, t, level, tile, on)
3618#define gSPGeometryMode(pkt, c, s) \
3620 Gfx *_g = (Gfx *)(pkt); \
3622 _g->words.w0 = (_SHIFTL(G_GEOMETRYMODE, 24, 8) | \
3623 _SHIFTL(~(u32)(c), 0, 24)); \
3624 _g->words.w1 = (u32)(s); \
3630#define gsSPGeometryMode(c, s) \
3632 (_SHIFTL(G_GEOMETRYMODE, 24, 8) | \
3633 _SHIFTL(~(u32)(c), 0, 24)), \
3637#define gSPSetGeometryMode(pkt, word) gSPGeometryMode((pkt), 0, (word))
3638#define gsSPSetGeometryMode(word) gsSPGeometryMode( 0, (word))
3639#define gSPClearGeometryMode(pkt, word) gSPGeometryMode((pkt), (word), 0)
3640#define gsSPClearGeometryMode(word) gsSPGeometryMode( (word), 0)
3641#define gSPLoadGeometryMode(pkt, word) gSPGeometryMode((pkt), -1, (word))
3642#define gsSPLoadGeometryMode(word) gsSPGeometryMode( -1, (word))
3644#define gsSPGeometryModeSetFirst(c, s) gsSPGeometryMode(c, s)
3646#define gSPSetOtherMode(pkt, cmd, sft, len, data) \
3648 Gfx *_g = (Gfx *)(pkt); \
3650 _g->words.w0 = (_SHIFTL(cmd, 24, 8) | \
3651 _SHIFTL(32 - (sft) - (len), 8, 8) | \
3652 _SHIFTL((len) - 1, 0, 8)); \
3653 _g->words.w1 = (unsigned int)(data); \
3656#define gsSPSetOtherMode(cmd, sft, len, data) \
3658 (_SHIFTL(cmd, 24, 8) | \
3659 _SHIFTL(32 - (sft) - (len), 8, 8) | \
3660 _SHIFTL((len) - 1, 0, 8)), \
3661 (unsigned int)(data) \
3667#define gDPPipelineMode(pkt, mode) \
3668 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_PIPELINE, 1, mode)
3672#define gsDPPipelineMode(mode) \
3673 gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_PIPELINE, 1, mode)
3675#define gDPSetCycleType(pkt, type) \
3676 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_CYCLETYPE, 2, type)
3677#define gsDPSetCycleType(type) \
3678 gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_CYCLETYPE, 2, type)
3680#define gDPSetTexturePersp(pkt, type) \
3681 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTPERSP, 1, type)
3682#define gsDPSetTexturePersp(type) \
3683 gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_TEXTPERSP, 1, type)
3685#define gDPSetTextureDetail(pkt, type) \
3686 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTDETAIL, 2, type)
3687#define gsDPSetTextureDetail(type) \
3688 gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_TEXTDETAIL, 2, type)
3690#define gDPSetTextureLOD(pkt, type) \
3691 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTLOD, 1, type)
3692#define gsDPSetTextureLOD(type) \
3693 gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_TEXTLOD, 1, type)
3695#define gDPSetTextureLUT(pkt, type) \
3696 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTLUT, 2, type)
3697#define gsDPSetTextureLUT(type) \
3698 gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_TEXTLUT, 2, type)
3700#define gDPSetTextureFilter(pkt, type) \
3701 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTFILT, 2, type)
3702#define gsDPSetTextureFilter(type) \
3703 gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_TEXTFILT, 2, type)
3705#define gDPSetTextureConvert(pkt, type) \
3706 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTCONV, 3, type)
3707#define gsDPSetTextureConvert(type) \
3708 gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_TEXTCONV, 3, type)
3710#define gDPSetCombineKey(pkt, type) \
3711 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_COMBKEY, 1, type)
3712#define gsDPSetCombineKey(type) \
3713 gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_COMBKEY, 1, type)
3715#define gDPSetColorDither(pkt, mode) \
3716 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_RGBDITHER, 2, mode)
3717#define gsDPSetColorDither(mode) \
3718 gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_RGBDITHER, 2, mode)
3720#define gDPSetAlphaDither(pkt, mode) \
3721 gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 2, mode)
3722#define gsDPSetAlphaDither(mode) \
3723 gsSPSetOtherMode( G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 2, mode)
3731#define gDPSetBlendMask(pkt, mask) gSPNoOp(pkt)
3735#define gsDPSetBlendMask(mask) gsSPNoOp()
3737#define gDPSetAlphaCompare(pkt, type) \
3738 gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 2, type)
3739#define gsDPSetAlphaCompare(type) \
3740 gsSPSetOtherMode( G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 2, type)
3742#define gDPSetDepthSource(pkt, src) \
3743 gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_ZSRCSEL, 1, src)
3744#define gsDPSetDepthSource(src) \
3745 gsSPSetOtherMode( G_SETOTHERMODE_L, G_MDSFT_ZSRCSEL, 1, src)
3747#define gDPSetRenderMode(pkt, c0, c1) \
3748 gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_RENDERMODE, 29, (c0) | (c1))
3749#define gsDPSetRenderMode(c0, c1) \
3750 gsSPSetOtherMode( G_SETOTHERMODE_L, G_MDSFT_RENDERMODE, 29, (c0) | (c1))
3752#define gSetImage(pkt, cmd, fmt, siz, width, i) \
3754 Gfx *_g = (Gfx *)(pkt); \
3756 _g->words.w0 = (_SHIFTL(cmd, 24, 8) | \
3757 _SHIFTL(fmt, 21, 3) | \
3758 _SHIFTL(siz, 19, 2) | \
3759 _SHIFTL((width) - 1, 0, 12)); \
3760 _g->words.w1 = (unsigned int)(i); \
3763#define gsSetImage(cmd, fmt, siz, width, i) \
3765 (_SHIFTL(cmd, 24, 8) | \
3766 _SHIFTL(fmt, 21, 3) | \
3767 _SHIFTL(siz, 19, 2) | \
3768 _SHIFTL((width) - 1, 0, 12)), \
3772#define gDPSetColorImage(pkt, f, s, w, i) gSetImage(pkt, G_SETCIMG, f, s, w, i)
3773#define gsDPSetColorImage(f, s, w, i) gsSetImage( G_SETCIMG, f, s, w, i)
3777#define gDPSetDepthImage(pkt, i) gSetImage(pkt, G_SETZIMG, 0, 0, 1, i)
3778#define gsDPSetDepthImage(i) gsSetImage( G_SETZIMG, 0, 0, 1, i)
3780#define gDPSetMaskImage(pkt, i) gDPSetDepthImage(pkt, i)
3781#define gsDPSetMaskImage(i) gsDPSetDepthImage( i)
3783#define gDPSetTextureImage(pkt, f, s, w, i) gSetImage(pkt, G_SETTIMG, f, s, w, i)
3784#define gsDPSetTextureImage(f, s, w, i) gsSetImage( G_SETTIMG, f, s, w, i)
3790#define gDPSetCombine(pkt, muxs0, muxs1) \
3792 Gfx *_g = (Gfx *)(pkt); \
3794 _g->words.w0 = (_SHIFTL(G_SETCOMBINE, 24, 8) | \
3795 _SHIFTL(muxs0, 0, 24)); \
3796 _g->words.w1 = (unsigned int)(muxs1); \
3799#define gsDPSetCombine(muxs0, muxs1) \
3801 (_SHIFTL(G_SETCOMBINE, 24, 8) | \
3802 _SHIFTL(muxs0, 0, 24)), \
3803 (unsigned int)(muxs1) \
3806#define GCCc0w0(saRGB0, mRGB0, saA0, mA0) \
3807 (_SHIFTL((saRGB0), 20, 4) | \
3808 _SHIFTL((mRGB0), 15, 5) | \
3809 _SHIFTL((saA0), 12, 3) | \
3810 _SHIFTL((mA0), 9, 3))
3812#define GCCc1w0(saRGB1, mRGB1) \
3813 (_SHIFTL((saRGB1), 5, 4) | \
3814 _SHIFTL((mRGB1), 0, 5))
3816#define GCCc0w1(sbRGB0, aRGB0, sbA0, aA0) \
3817 (_SHIFTL((sbRGB0), 28, 4) | \
3818 _SHIFTL((aRGB0), 15, 3) | \
3819 _SHIFTL((sbA0), 12, 3) | \
3820 _SHIFTL((aA0), 9, 3))
3822#define GCCc1w1(sbRGB1, saA1, mA1, aRGB1, sbA1, aA1) \
3823 (_SHIFTL((sbRGB1), 24, 4) | \
3824 _SHIFTL((saA1), 21, 3) | \
3825 _SHIFTL((mA1), 18, 3) | \
3826 _SHIFTL((aRGB1), 6, 3) | \
3827 _SHIFTL((sbA1), 3, 3) | \
3828 _SHIFTL((aA1), 0, 3))
3830#define gDPSetCombineLERP(pkt, a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0, \
3831 a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1) \
3833 Gfx *_g = (Gfx *)(pkt); \
3835 _g->words.w0 = (_SHIFTL(G_SETCOMBINE, 24, 8) | \
3836 _SHIFTL(GCCc0w0(G_CCMUX_##a0, G_CCMUX_##c0, \
3837 G_ACMUX_##Aa0, G_ACMUX_##Ac0) | \
3838 GCCc1w0(G_CCMUX_##a1, G_CCMUX_##c1), \
3840 _g->words.w1 = (unsigned int)(GCCc0w1(G_CCMUX_##b0, G_CCMUX_##d0, \
3841 G_ACMUX_##Ab0, G_ACMUX_##Ad0) | \
3842 GCCc1w1(G_CCMUX_##b1, G_ACMUX_##Aa1, \
3843 G_ACMUX_##Ac1, G_CCMUX_##d1, \
3844 G_ACMUX_##Ab1, G_ACMUX_##Ad1)); \
3847#define gsDPSetCombineLERP(a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0, \
3848 a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1) \
3850 (_SHIFTL(G_SETCOMBINE, 24, 8) | \
3851 _SHIFTL(GCCc0w0(G_CCMUX_##a0, G_CCMUX_##c0, \
3852 G_ACMUX_##Aa0, G_ACMUX_##Ac0) | \
3853 GCCc1w0(G_CCMUX_##a1, G_CCMUX_##c1), \
3855 (unsigned int)(GCCc0w1(G_CCMUX_##b0, G_CCMUX_##d0, \
3856 G_ACMUX_##Ab0, G_ACMUX_##Ad0) | \
3857 GCCc1w1(G_CCMUX_##b1, G_ACMUX_##Aa1, \
3858 G_ACMUX_##Ac1, G_CCMUX_##d1, \
3859 G_ACMUX_##Ab1, G_ACMUX_##Ad1)) \
3871#define gDPSetCombineMode(pkt, a, b) gDPSetCombineLERP(pkt, a, b)
3875#define gsDPSetCombineMode(a, b) gsDPSetCombineLERP( a, b)
3877#define gDPSetColor(pkt, c, d) \
3879 Gfx *_g = (Gfx *)(pkt); \
3881 _g->words.w0 = _SHIFTL(c, 24, 8); \
3882 _g->words.w1 = (unsigned int)(d); \
3885#define gsDPSetColor(c, d) \
3887 _SHIFTL(c, 24, 8), \
3891#define DPRGBColor(pkt, cmd, r, g, b, a) \
3892 gDPSetColor(pkt, cmd, \
3893 (_SHIFTL(r, 24, 8) | \
3894 _SHIFTL(g, 16, 8) | \
3895 _SHIFTL(b, 8, 8) | \
3898#define sDPRGBColor(cmd, r, g, b, a) \
3900 (_SHIFTL(r, 24, 8) | \
3901 _SHIFTL(g, 16, 8) | \
3902 _SHIFTL(b, 8, 8) | \
3905#define gDPSetEnvColor(pkt, r, g, b, a) \
3906 DPRGBColor(pkt, G_SETENVCOLOR, r, g, b, a)
3908#ifdef KAZE_GBI_HACKS
3909#define gsDPSetEnvColor(r, g, b, a) \
3912#define gsDPSetEnvColor(r, g, b, a) \
3913 sDPRGBColor( G_SETENVCOLOR, r, g, b, a)
3916#define gDPSetBlendColor(pkt, r, g, b, a) \
3917 DPRGBColor(pkt, G_SETBLENDCOLOR, r, g, b, a)
3919#define gsDPSetBlendColor(r, g, b, a) \
3920 sDPRGBColor( G_SETBLENDCOLOR, r, g, b, a)
3922#define gDPSetFogColor(pkt, r, g, b, a) \
3923 DPRGBColor(pkt, G_SETFOGCOLOR, r, g, b, a)
3925#define gsDPSetFogColor(r, g, b, a) \
3926 sDPRGBColor( G_SETFOGCOLOR, r, g, b, a)
3928#define gDPSetFillColor(pkt, d) \
3929 gDPSetColor(pkt, G_SETFILLCOLOR, (d))
3931#define gsDPSetFillColor(d) \
3932 gsDPSetColor( G_SETFILLCOLOR, (d))
3934#define gDPSetPrimDepth(pkt, z, dz) \
3935 gDPSetColor(pkt, G_SETPRIMDEPTH, \
3936 _SHIFTL(z, 16, 16) | _SHIFTL(dz, 0, 16))
3938#define gsDPSetPrimDepth(z, dz) \
3939 gsDPSetColor(G_SETPRIMDEPTH, \
3940 _SHIFTL(z, 16, 16) | _SHIFTL(dz, 0, 16))
3942#define gDPSetPrimColor(pkt, m, l, r, g, b, a) \
3944 Gfx *_g = (Gfx *)(pkt); \
3946 _g->words.w0 = (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | \
3947 _SHIFTL(m, 8, 8) | \
3948 _SHIFTL(l, 0, 8)); \
3949 _g->words.w1 = (_SHIFTL(r, 24, 8) | \
3950 _SHIFTL(g, 16, 8) | \
3951 _SHIFTL(b, 8, 8) | \
3952 _SHIFTL(a, 0, 8)); \
3955#define gsDPSetPrimColor(m, l, r, g, b, a) \
3957 (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | \
3958 _SHIFTL(m, 8, 8) | \
3959 _SHIFTL(l, 0, 8)), \
3960 (_SHIFTL(r, 24, 8) | \
3961 _SHIFTL(g, 16, 8) | \
3962 _SHIFTL(b, 8, 8) | \
3976#define gSPLightToRDP(pkt, light, alpha, word0) \
3978 Gfx *_g = (Gfx *)(pkt); \
3979 _g->words.w0 = (_SHIFTL(G_LIGHTTORDP, 24, 8) | \
3980 _SHIFTL(light * 0x10, 8, 8) | \
3981 _SHIFTL(alpha, 0, 8)); \
3982 _g->words.w1 = (word0); \
3987#define gsSPLightToRDP(light, alpha, word0) \
3989 (_SHIFTL(G_LIGHTTORDP, 24, 8) | \
3990 _SHIFTL(light * 0x10, 8, 8) | \
3991 _SHIFTL(alpha, 0, 8)), \
3994#define gSPLightToPrimColor(pkt, light, alpha, m, l) \
3995 gSPLightToRDP(pkt, light, alpha, \
3996 (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | _SHIFTL(m, 8, 8) | _SHIFTL(l, 0, 8)))
3997#define gsSPLightToPrimColor(light, alpha, m, l) \
3998 gsSPLightToRDP(light, alpha, \
3999 (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | _SHIFTL(m, 8, 8) | _SHIFTL(l, 0, 8)))
4000#define gSPLightToFogColor(pkt, light, alpha) \
4001 gSPLightToRDP(pkt, light, alpha, _SHIFTL(G_SETFOGCOLOR, 24, 8))
4002#define gsSPLightToFogColor(light, alpha) \
4003 gsSPLightToRDP(light, alpha, _SHIFTL(G_SETFOGCOLOR, 24, 8))
4033#define gDPSetOtherMode(pkt, mode0, mode1) \
4035 Gfx *_g = (Gfx *)(pkt); \
4037 _g->words.w0 = (_SHIFTL(G_RDPSETOTHERMODE, 24, 8) | \
4038 _SHIFTL(mode0, 0, 24)); \
4039 _g->words.w1 = (unsigned int)(mode1); \
4045#define gsDPSetOtherMode(mode0, mode1) \
4047 (_SHIFTL(G_RDPSETOTHERMODE, 24, 8) | \
4048 _SHIFTL(mode0, 0, 24)), \
4049 (unsigned int)(mode1) \
4056#define G_TX_LOADTILE 7
4057#define G_TX_RENDERTILE 0
4137#ifdef NO_SYNCS_IN_TEXTURE_LOADS
4138#define gDPLoadSyncInTexLoad(pkt) (void)0
4139#define gDPTileSyncInTexLoad(pkt) (void)0
4140#define gDPPipeSyncInTexLoad(pkt) (void)0
4141#define gsDPLoadSyncInTexLoad
4142#define gsDPTileSyncInTexLoad
4143#define gsDPPipeSyncInTexLoad
4144#define gsDPPipeSyncEndOfTexLoad
4145#define _G_TEXLOADTILE(rtile) (G_TX_LOADTILE - (rtile))
4146#define _G_PALLOADTILE(rtile) (G_TX_LOADTILE - 2 - (rtile))
4148#define gDPLoadSyncInTexLoad(pkt) gDPLoadSync(pkt)
4149#define gDPTileSyncInTexLoad(pkt) gDPTileSync(pkt)
4150#define gDPPipeSyncInTexLoad(pkt) gDPPipeSync(pkt)
4151#define gsDPLoadSyncInTexLoad gsDPLoadSync(),
4152#define gsDPTileSyncInTexLoad gsDPTileSync(),
4153#define gsDPPipeSyncInTexLoad gsDPPipeSync(),
4154#define gsDPPipeSyncEndOfTexLoad , gsDPPipeSync()
4155#define _G_TEXLOADTILE(rtile) G_TX_LOADTILE
4156#define _G_PALLOADTILE(rtile) G_TX_LOADTILE
4160#define G_TX_NOMIRROR (0 << 0)
4161#define G_TX_WRAP (0 << 1)
4162#define G_TX_MIRROR (1 << 0)
4163#define G_TX_CLAMP (1 << 1)
4164#define G_TX_NOMASK 0
4168#define MAX(a, b) ((a) > (b) ? (a) : (b))
4172#define MIN(a, b) ((a) < (b) ? (a) : (b))
4183#define G_TX_DXT_FRAC 11
4195#define G_TX_LDBLK_MAX_TXL 2047
4197#define TXL2WORDS(txls, b_txl) \
4198 MAX(1, ((txls) * (b_txl) / 8))
4200#define CALC_DXT(width, b_txl) \
4201 (((1 << G_TX_DXT_FRAC) + TXL2WORDS(width, b_txl) - 1) / TXL2WORDS(width, b_txl))
4203#define TXL2WORDS_4b(txls) \
4204 MAX(1, ((txls) / 16))
4206#define CALC_DXT_4b(width) \
4207 (((1 << G_TX_DXT_FRAC) + TXL2WORDS_4b(width) - 1) / TXL2WORDS_4b(width))
4209#define gDPLoadTileGeneric(pkt, c, tile, uls, ult, lrs, lrt) \
4211 Gfx *_g = (Gfx *)(pkt); \
4213 _g->words.w0 = (_SHIFTL(c, 24, 8) | \
4214 _SHIFTL(uls, 12, 12) | \
4215 _SHIFTL(ult, 0, 12)); \
4216 _g->words.w1 = (_SHIFTL(tile, 24, 3) | \
4217 _SHIFTL(lrs, 12, 12) | \
4218 _SHIFTL(lrt, 0, 12)); \
4221#define gsDPLoadTileGeneric(c, tile, uls, ult, lrs, lrt) \
4223 (_SHIFTL(c, 24, 8) | \
4224 _SHIFTL(uls, 12, 12) | \
4225 _SHIFTL(ult, 0, 12)), \
4226 (_SHIFTL(tile, 24, 3) | \
4227 _SHIFTL(lrs, 12, 12) | \
4228 _SHIFTL(lrt, 0, 12)) \
4231#define gDPSetTileSize(pkt, t, uls, ult, lrs, lrt) \
4232 gDPLoadTileGeneric(pkt, G_SETTILESIZE, t, uls, ult, lrs, lrt)
4233#define gsDPSetTileSize(t, uls, ult, lrs, lrt) \
4234 gsDPLoadTileGeneric( G_SETTILESIZE, t, uls, ult, lrs, lrt)
4235#define gDPLoadTile(pkt, t, uls, ult, lrs, lrt) \
4236 gDPLoadTileGeneric(pkt, G_LOADTILE, t, uls, ult, lrs, lrt)
4237#define gsDPLoadTile(t, uls, ult, lrs, lrt) \
4238 gsDPLoadTileGeneric( G_LOADTILE, t, uls, ult, lrs, lrt)
4240#define gDPSetTile(pkt, fmt, siz, line, tmem, tile, palette, cmt, \
4241 maskt, shiftt, cms, masks, shifts) \
4243 Gfx *_g = (Gfx *)(pkt); \
4245 _g->words.w0 = (_SHIFTL(G_SETTILE, 24, 8) | \
4246 _SHIFTL(fmt, 21, 3) | \
4247 _SHIFTL(siz, 19, 2) | \
4248 _SHIFTL(line, 9, 9) | \
4249 _SHIFTL(tmem, 0, 9)); \
4250 _g->words.w1 = (_SHIFTL(tile, 24, 3) | \
4251 _SHIFTL(palette, 20, 4) | \
4252 _SHIFTL(cmt, 18, 2) | \
4253 _SHIFTL(maskt, 14, 4) | \
4254 _SHIFTL(shiftt, 10, 4) | \
4255 _SHIFTL(cms, 8, 2) | \
4256 _SHIFTL(masks, 4, 4) | \
4257 _SHIFTL(shifts, 0, 4)); \
4260#define gsDPSetTile(fmt, siz, line, tmem, tile, palette, cmt, \
4261 maskt, shiftt, cms, masks, shifts) \
4263 (_SHIFTL(G_SETTILE, 24, 8) | \
4264 _SHIFTL(fmt, 21, 3) | \
4265 _SHIFTL(siz, 19, 2) | \
4266 _SHIFTL(line, 9, 9) | \
4267 _SHIFTL(tmem, 0, 9)), \
4268 (_SHIFTL(tile, 24, 3) | \
4269 _SHIFTL(palette, 20, 4) | \
4270 _SHIFTL(cmt, 18, 2) | \
4271 _SHIFTL(maskt, 14, 4) | \
4272 _SHIFTL(shiftt, 10, 4) | \
4273 _SHIFTL(cms, 8, 2) | \
4274 _SHIFTL(masks, 4, 4) | \
4275 _SHIFTL(shifts, 0, 4)) \
4278#define gDPLoadBlock(pkt, tile, uls, ult, lrs, dxt) \
4280 Gfx *_g = (Gfx *)(pkt); \
4281 _g->words.w0 = (_SHIFTL(G_LOADBLOCK, 24, 8) | \
4282 _SHIFTL(uls, 12, 12) | \
4283 _SHIFTL(ult, 0, 12)); \
4284 _g->words.w1 = (_SHIFTL(tile, 24, 3) | \
4285 _SHIFTL(MIN(lrs, G_TX_LDBLK_MAX_TXL), 12, 12) | \
4286 _SHIFTL(dxt, 0, 12)); \
4289#define gsDPLoadBlock(tile, uls, ult, lrs, dxt) \
4291 (_SHIFTL(G_LOADBLOCK, 24, 8) | \
4292 _SHIFTL(uls, 12, 12) | \
4293 _SHIFTL(ult, 0, 12)), \
4294 (_SHIFTL(tile, 24, 3) | \
4295 _SHIFTL((MIN(lrs, G_TX_LDBLK_MAX_TXL)), 12, 12) | \
4296 _SHIFTL(dxt, 0, 12)) \
4299#define gDPLoadTLUTCmd(pkt, tile, count) \
4301 Gfx *_g = (Gfx *)pkt; \
4303 _g->words.w0 = _SHIFTL(G_LOADTLUT, 24, 8); \
4304 _g->words.w1 = (_SHIFTL((tile), 24, 3) | \
4305 _SHIFTL((count), 14, 10)); \
4308#define gsDPLoadTLUTCmd(tile, count) \
4310 _SHIFTL(G_LOADTLUT, 24, 8), \
4311 (_SHIFTL((tile), 24, 3) | \
4312 _SHIFTL((count), 14, 10)) \
4315#define gDPLoadTextureBlock(pkt, timg, fmt, siz, width, height, pal, \
4316 cms, cmt, masks, maskt, shifts, shiftt) \
4318 gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
4319 gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \
4320 0, cmt, maskt, shiftt, cms, masks, shifts); \
4321 gDPLoadSyncInTexLoad(pkt); \
4322 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
4323 (((width) * (height) + siz##_INCR) >> siz##_SHIFT) -1, \
4324 CALC_DXT(width, siz##_BYTES)); \
4325 gDPPipeSyncInTexLoad(pkt); \
4326 gDPSetTile(pkt, fmt, siz, \
4327 (((width) * siz##_LINE_BYTES) + 7) >> 3, 0, \
4328 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \
4329 gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
4330 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4331 ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \
4334#define gDPLoadTextureBlockYuv(pkt, timg, fmt, siz, width, height, pal, \
4335 cms, cmt, masks, maskt, shifts, shiftt) \
4337 gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
4338 gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \
4339 0, cmt, maskt, shiftt, cms, masks, shifts); \
4340 gDPLoadSyncInTexLoad(pkt); \
4341 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
4342 (((width) * (height) + siz##_INCR) >> siz##_SHIFT) -1, \
4343 CALC_DXT(width, siz##_BYTES)); \
4344 gDPPipeSyncInTexLoad(pkt); \
4345 gDPSetTile(pkt, fmt, siz, \
4346 (((width) * 1) + 7) >> 3, 0, \
4347 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \
4348 gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
4349 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4350 ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \
4356#define gDPLoadTextureBlockS(pkt, timg, fmt, siz, width, height, pal, \
4357 cms, cmt, masks, maskt, shifts, shiftt) \
4359 gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
4360 gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \
4361 0, cmt, maskt, shiftt, cms, masks, shifts); \
4362 gDPLoadSyncInTexLoad(pkt); \
4363 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
4364 (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, 0); \
4365 gDPPipeSyncInTexLoad(pkt); \
4366 gDPSetTile(pkt, fmt, siz, \
4367 (((width) * siz##_LINE_BYTES) + 7) >> 3, 0, \
4368 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \
4369 gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
4370 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4371 ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \
4378#define gDPLoadMultiBlockS(pkt, timg, tmem, rtile, fmt, siz, width, height, pal, \
4379 cms, cmt, masks, maskt, shifts, shiftt) \
4381 gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
4382 gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, _G_TEXLOADTILE(rtile), \
4383 0, cmt, maskt, shiftt, cms, masks, shifts); \
4384 gDPLoadSyncInTexLoad(pkt); \
4385 gDPLoadBlock(pkt, _G_TEXLOADTILE(rtile), 0, 0, \
4386 (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1,0); \
4387 gDPPipeSyncInTexLoad(pkt); \
4388 gDPSetTile(pkt, fmt, siz, \
4389 (((width) * siz##_LINE_BYTES) + 7) >> 3, tmem, \
4390 rtile, pal, cmt, maskt, shiftt, cms, masks, \
4392 gDPSetTileSize(pkt, rtile, 0, 0, \
4393 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4394 ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \
4398#define gDPLoadTextureBlockYuvS(pkt, timg, fmt, siz, width, height, pal, \
4399 cms, cmt, masks, maskt, shifts, shiftt) \
4401 gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
4402 gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \
4403 0, cmt, maskt, shiftt, cms, masks, shifts); \
4404 gDPLoadSyncInTexLoad(pkt); \
4405 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
4406 (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1,0); \
4407 gDPPipeSyncInTexLoad(pkt); \
4408 gDPSetTile(pkt, fmt, siz, \
4409 (((width) * 1) + 7) >> 3, 0, \
4410 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \
4411 gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
4412 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4413 ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \
4419#define _gDPLoadTextureBlock(pkt, timg, tmem, fmt, siz, width, height, pal, \
4420 cms, cmt, masks, maskt, shifts, shiftt) \
4422 gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
4423 gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \
4424 0, cmt, maskt, shiftt, cms, masks, shifts); \
4425 gDPLoadSyncInTexLoad(pkt); \
4426 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
4427 (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, \
4428 CALC_DXT(width, siz##_BYTES)); \
4429 gDPPipeSyncInTexLoad(pkt); \
4430 gDPSetTile(pkt, fmt, siz, \
4431 (((width) * siz##_LINE_BYTES) + 7) >> 3, tmem, \
4432 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \
4433 gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
4434 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4435 ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \
4441#define _gDPLoadTextureBlockTile(pkt, timg, tmem, rtile, fmt, siz, width, height, pal, \
4442 cms, cmt, masks, maskt, shifts, shiftt) \
4444 gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
4445 gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, _G_TEXLOADTILE(rtile), \
4446 0, cmt, maskt, shiftt, cms, masks, shifts); \
4447 gDPLoadSyncInTexLoad(pkt); \
4448 gDPLoadBlock(pkt, _G_TEXLOADTILE(rtile), 0, 0, \
4449 (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, \
4450 CALC_DXT(width, siz##_BYTES)); \
4451 gDPPipeSyncInTexLoad(pkt); \
4452 gDPSetTile(pkt, fmt, siz, \
4453 (((width) * siz##_LINE_BYTES) + 7) >> 3, tmem, \
4454 rtile, pal, cmt, maskt, shiftt, cms, masks, shifts); \
4455 gDPSetTileSize(pkt, rtile, 0, 0, \
4456 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4457 ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \
4463#define gDPLoadMultiBlock(pkt, timg, tmem, rtile, fmt, siz, width, height, pal, \
4464 cms, cmt, masks, maskt, shifts, shiftt) \
4466 gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \
4467 gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, _G_TEXLOADTILE(rtile), \
4468 0, cmt, maskt, shiftt, cms, masks, shifts); \
4469 gDPLoadSyncInTexLoad(pkt); \
4470 gDPLoadBlock(pkt, _G_TEXLOADTILE(rtile), 0, 0, \
4471 (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, \
4472 CALC_DXT(width, siz##_BYTES)); \
4473 gDPPipeSyncInTexLoad(pkt); \
4474 gDPSetTile(pkt, fmt, siz, \
4475 (((width) * siz##_LINE_BYTES) + 7) >> 3, tmem, \
4476 rtile, pal, cmt, maskt, shiftt, cms, masks, shifts); \
4477 gDPSetTileSize(pkt, rtile, 0, 0, \
4478 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4479 ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \
4482#define gsDPLoadTextureBlock(timg, fmt, siz, width, height, pal, \
4483 cms, cmt, masks, maskt, shifts, shiftt) \
4484 gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \
4485 gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \
4486 0, cmt, maskt, shiftt, cms, masks, shifts), \
4487 gsDPLoadSyncInTexLoad \
4488 gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \
4489 (((width)*(height) + siz##_INCR) >> siz##_SHIFT) - 1, \
4490 CALC_DXT(width, siz##_BYTES)), \
4491 gsDPPipeSyncInTexLoad \
4492 gsDPSetTile(fmt, siz, \
4493 ((((width) * siz##_LINE_BYTES) + 7) >> 3), 0, \
4494 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts), \
4495 gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \
4496 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4497 ((height) - 1) << G_TEXTURE_IMAGE_FRAC)
4503#define gsDPLoadTextureBlockS(timg, fmt, siz, width, height, pal, \
4504 cms, cmt, masks, maskt, shifts, shiftt) \
4505 gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \
4506 gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \
4507 0, cmt, maskt,shiftt, cms, masks, shifts), \
4508 gsDPLoadSyncInTexLoad \
4509 gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \
4510 (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, 0), \
4511 gsDPPipeSyncInTexLoad \
4512 gsDPSetTile(fmt, siz, \
4513 ((((width) * siz##_LINE_BYTES) + 7) >> 3), 0, \
4514 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
4516 gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \
4517 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4518 ((height) - 1) << G_TEXTURE_IMAGE_FRAC)
4523#define _gsDPLoadTextureBlock(timg, tmem, fmt, siz, width, height, pal, \
4524 cms, cmt, masks, maskt, shifts, shiftt) \
4525 gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \
4526 gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE, \
4527 0, cmt, maskt, shiftt, cms, masks, shifts), \
4528 gsDPLoadSyncInTexLoad \
4529 gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \
4530 (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, \
4531 CALC_DXT(width, siz##_BYTES)), \
4532 gsDPPipeSyncInTexLoad \
4533 gsDPSetTile(fmt, siz, \
4534 ((((width) * siz##_LINE_BYTES) + 7) >> 3), tmem, \
4535 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, \
4537 gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \
4538 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4539 ((height) - 1) << G_TEXTURE_IMAGE_FRAC)
4545#define _gsDPLoadTextureBlockTile(timg, tmem, rtile, fmt, siz, width, height, pal, \
4546 cms, cmt, masks, maskt, shifts, shiftt) \
4547 gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \
4548 gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, _G_TEXLOADTILE(rtile), \
4549 0, cmt, maskt, shiftt, cms, masks, shifts), \
4550 gsDPLoadSyncInTexLoad \
4551 gsDPLoadBlock(_G_TEXLOADTILE(rtile), 0, 0, \
4552 (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, \
4553 CALC_DXT(width, siz##_BYTES)), \
4554 gsDPPipeSyncInTexLoad \
4555 gsDPSetTile(fmt, siz, \
4556 ((((width) * siz##_LINE_BYTES) + 7) >> 3), tmem, \
4557 rtile, pal, cmt, maskt, shiftt, cms, masks, \
4559 gsDPSetTileSize(rtile, 0, 0, \
4560 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4561 ((height) - 1) << G_TEXTURE_IMAGE_FRAC)
4568#define gsDPLoadMultiBlock(timg, tmem, rtile, fmt, siz, width, height, pal, \
4569 cms, cmt, masks, maskt, shifts, shiftt) \
4570 gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \
4571 gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, _G_TEXLOADTILE(rtile), \
4572 0, cmt, maskt, shiftt, cms, masks, shifts), \
4573 gsDPLoadSyncInTexLoad \
4574 gsDPLoadBlock(_G_TEXLOADTILE(rtile), 0, 0, \
4575 (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, \
4576 CALC_DXT(width, siz##_BYTES)), \
4577 gsDPPipeSyncInTexLoad \
4578 gsDPSetTile(fmt, siz, \
4579 ((((width) * siz##_LINE_BYTES) + 7) >> 3), tmem, \
4580 rtile, pal, cmt, maskt, shiftt, cms, masks, shifts), \
4581 gsDPSetTileSize(rtile, 0, 0, \
4582 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4583 ((height) - 1) << G_TEXTURE_IMAGE_FRAC)
4593#define gsDPLoadMultiBlockS(timg, tmem, rtile, fmt, siz, width, height, pal, \
4594 cms, cmt, masks, maskt, shifts, shiftt) \
4595 gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg), \
4596 gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, _G_TEXLOADTILE(rtile), \
4597 0, cmt, maskt,shiftt, cms, masks, shifts), \
4598 gsDPLoadSyncInTexLoad \
4599 gsDPLoadBlock(_G_TEXLOADTILE(rtile), 0, 0, \
4600 (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, 0), \
4601 gsDPPipeSyncInTexLoad \
4602 gsDPSetTile(fmt, siz, \
4603 ((((width) * siz##_LINE_BYTES) + 7) >> 3), tmem, \
4604 rtile, pal, cmt, maskt, shiftt, cms, masks, shifts), \
4605 gsDPSetTileSize(rtile, 0, 0, \
4606 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4607 ((height) - 1) << G_TEXTURE_IMAGE_FRAC)
4610#define gDPLoadTextureBlock_4b(pkt, timg, fmt, width, height, pal, \
4611 cms, cmt, masks, maskt, shifts, shiftt) \
4613 gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \
4614 gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, \
4615 0, cmt, maskt, shiftt, cms, masks, shifts); \
4616 gDPLoadSyncInTexLoad(pkt); \
4617 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
4618 (((width) * (height) + 3) >> 2) - 1, \
4619 CALC_DXT_4b(width)); \
4620 gDPPipeSyncInTexLoad(pkt); \
4621 gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \
4622 ((((width) >> 1) + 7) >> 3), 0, \
4623 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \
4624 gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
4625 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4626 ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \
4632#define gDPLoadTextureBlock_4bS(pkt, timg, fmt, width, height, pal, \
4633 cms, cmt, masks, maskt, shifts, shiftt) \
4635 gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \
4636 gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, \
4637 0, cmt, maskt, shiftt, cms, masks, shifts); \
4638 gDPLoadSyncInTexLoad(pkt); \
4639 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
4640 (((width) * (height) + 3) >> 2) - 1, \
4642 gDPPipeSyncInTexLoad(pkt); \
4643 gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \
4644 ((((width) >> 1) + 7) >> 3), 0, \
4645 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \
4646 gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
4647 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4648 ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \
4654#define gDPLoadMultiBlock_4b(pkt, timg, tmem, rtile, fmt, width, height, pal, \
4655 cms, cmt, masks, maskt, shifts, shiftt) \
4657 gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \
4658 gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, _G_TEXLOADTILE(rtile), \
4659 0, cmt, maskt, shiftt, cms, masks, shifts); \
4660 gDPLoadSyncInTexLoad(pkt); \
4661 gDPLoadBlock(pkt, _G_TEXLOADTILE(rtile), 0, 0, \
4662 (((width) * (height) + 3) >> 2) - 1, \
4663 CALC_DXT_4b(width)); \
4664 gDPPipeSyncInTexLoad(pkt); \
4665 gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \
4666 ((((width) >> 1) + 7) >> 3), tmem, \
4667 rtile, pal, cmt, maskt, shiftt, cms, masks, shifts); \
4668 gDPSetTileSize(pkt, rtile, 0, 0, \
4669 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4670 ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \
4677#define gDPLoadMultiBlock_4bS(pkt, timg, tmem, rtile, fmt, width, height, pal, \
4678 cms, cmt, masks, maskt, shifts, shiftt) \
4680 gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \
4681 gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, _G_TEXLOADTILE(rtile), \
4682 0, cmt, maskt, shiftt, cms, masks, shifts); \
4683 gDPLoadSyncInTexLoad(pkt); \
4684 gDPLoadBlock(pkt, _G_TEXLOADTILE(rtile), 0, 0, \
4685 (((width) * (height) + 3) >> 2) - 1, \
4687 gDPPipeSyncInTexLoad(pkt); \
4688 gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \
4689 ((((width) >> 1) + 7) >> 3), tmem, \
4690 rtile, pal, cmt, maskt, shiftt, cms, masks, shifts); \
4691 gDPSetTileSize(pkt, rtile, 0, 0, \
4692 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4693 ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \
4697#define _gDPLoadTextureBlock_4b(pkt, timg, tmem, fmt, width, height, pal, \
4698 cms, cmt, masks, maskt, shifts, shiftt) \
4700 gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \
4701 gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, \
4702 0, cmt, maskt, shiftt, cms, masks, shifts); \
4703 gDPLoadSyncInTexLoad(pkt); \
4704 gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0, \
4705 (((width) * (height) + 3) >> 2) - 1, \
4706 CALC_DXT_4b(width)); \
4707 gDPPipeSyncInTexLoad(pkt); \
4708 gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \
4709 ((((width) >> 1) + 7) >> 3), tmem, \
4710 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \
4711 gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \
4712 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4713 ((height) - 1) << G_TEXTURE_IMAGE_FRAC); \
4716#define gsDPLoadTextureBlock_4b(timg, fmt, width, height, pal, \
4717 cms, cmt, masks, maskt, shifts, shiftt) \
4718 gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \
4719 gsDPSetTile(fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, \
4720 0, cmt, maskt, shiftt, cms, masks, shifts), \
4721 gsDPLoadSyncInTexLoad \
4722 gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \
4723 (((width) * (height) + 3) >> 2) - 1, \
4724 CALC_DXT_4b(width)), \
4725 gsDPPipeSyncInTexLoad \
4726 gsDPSetTile(fmt, G_IM_SIZ_4b, \
4727 ((((width) >> 1) + 7) >> 3), 0, \
4728 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts), \
4729 gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \
4730 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4731 ((height) - 1) << G_TEXTURE_IMAGE_FRAC)
4733#define gsDPLoadTextureBlock_4bS(timg, fmt, width, height, pal, \
4734 cms, cmt, masks, maskt, shifts, shiftt) \
4735 gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \
4736 gsDPSetTile(fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, \
4737 0, cmt, maskt, shiftt, cms, masks, shifts), \
4738 gsDPLoadSyncInTexLoad \
4739 gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \
4740 (((width) * (height) + 3) >> 2) - 1, \
4742 gsDPPipeSyncInTexLoad \
4743 gsDPSetTile(fmt, G_IM_SIZ_4b, \
4744 ((((width) >> 1) + 7) >> 3), 0, \
4745 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts), \
4746 gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \
4747 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4748 ((height) - 1) << G_TEXTURE_IMAGE_FRAC)
4754#define gsDPLoadMultiBlock_4b(timg, tmem, rtile, fmt, width, height, pal, \
4755 cms, cmt, masks, maskt, shifts, shiftt) \
4756 gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \
4757 gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, _G_TEXLOADTILE(rtile), \
4758 0, cmt, maskt, shiftt, cms, masks, shifts), \
4759 gsDPLoadSyncInTexLoad \
4760 gsDPLoadBlock(_G_TEXLOADTILE(rtile), 0, 0, \
4761 (((width) * (height) + 3) >> 2) - 1, \
4762 CALC_DXT_4b(width)), \
4763 gsDPPipeSyncInTexLoad \
4764 gsDPSetTile(fmt, G_IM_SIZ_4b, \
4765 ((((width) >> 1) + 7) >> 3), tmem, \
4766 rtile, pal, cmt, maskt, shiftt, cms, masks, shifts), \
4767 gsDPSetTileSize(rtile, 0, 0, \
4768 ((width)-1) << G_TEXTURE_IMAGE_FRAC, \
4769 ((height)-1) << G_TEXTURE_IMAGE_FRAC)
4776#define gsDPLoadMultiBlock_4bS(timg, tmem, rtile, fmt, width, height, pal, \
4777 cms, cmt, masks, maskt, shifts, shiftt) \
4778 gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \
4779 gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, _G_TEXLOADTILE(rtile), \
4780 0, cmt, maskt, shiftt, cms, masks, shifts), \
4781 gsDPLoadSyncInTexLoad \
4782 gsDPLoadBlock(_G_TEXLOADTILE(rtile), 0, 0, \
4783 (((width) * (height) + 3) >> 2) - 1, \
4785 gsDPPipeSyncInTexLoad \
4786 gsDPSetTile(fmt, G_IM_SIZ_4b, \
4787 ((((width) >> 1) + 7) >> 3), tmem, \
4788 rtile, pal, cmt, maskt, shiftt, cms, masks, shifts), \
4789 gsDPSetTileSize(rtile, 0, 0, \
4790 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4791 ((height) - 1) << G_TEXTURE_IMAGE_FRAC)
4797#define _gsDPLoadTextureBlock_4b(timg, tmem, fmt, width, height, pal, \
4798 cms, cmt, masks, maskt, shifts, shiftt) \
4799 gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg), \
4800 gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE, \
4801 0, cmt, maskt, shiftt, cms, masks, shifts), \
4802 gsDPLoadSyncInTexLoad \
4803 gsDPLoadBlock(G_TX_LOADTILE, 0, 0, \
4804 (((width) * (height) + 3) >> 2) - 1, \
4805 CALC_DXT_4b(width)), \
4806 gsDPPipeSyncInTexLoad \
4807 gsDPSetTile(fmt, G_IM_SIZ_4b, \
4808 ((((width) >> 1) + 7) >> 3), tmem, \
4809 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts), \
4810 gsDPSetTileSize(G_TX_RENDERTILE, 0, 0, \
4811 ((width) - 1) << G_TEXTURE_IMAGE_FRAC, \
4812 ((height) - 1) << G_TEXTURE_IMAGE_FRAC)
4814#define gDPLoadTextureTile(pkt, timg, fmt, siz, width, height, \
4815 uls, ult, lrs, lrt, pal, \
4816 cms, cmt, masks, maskt, shifts, shiftt) \
4818 gDPSetTextureImage(pkt, fmt, siz, width, timg); \
4819 gDPSetTile(pkt, fmt, siz, \
4820 (((((lrs) - (uls) + 1) * siz##_TILE_BYTES) + 7) >> 3), 0, \
4821 G_TX_LOADTILE, 0, cmt, maskt, shiftt, cms, masks, \
4823 gDPLoadSyncInTexLoad(pkt); \
4824 gDPLoadTile(pkt, G_TX_LOADTILE, \
4825 (uls) << G_TEXTURE_IMAGE_FRAC, \
4826 (ult) << G_TEXTURE_IMAGE_FRAC, \
4827 (lrs) << G_TEXTURE_IMAGE_FRAC, \
4828 (lrt) << G_TEXTURE_IMAGE_FRAC); \
4829 gDPPipeSyncInTexLoad(pkt); \
4830 gDPSetTile(pkt, fmt, siz, \
4831 (((((lrs) - (uls) + 1) * siz##_LINE_BYTES) + 7) >> 3), 0, \
4832 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \
4833 gDPSetTileSize(pkt, G_TX_RENDERTILE, \
4834 (uls) << G_TEXTURE_IMAGE_FRAC, \
4835 (ult) << G_TEXTURE_IMAGE_FRAC, \
4836 (lrs) << G_TEXTURE_IMAGE_FRAC, \
4837 (lrt) << G_TEXTURE_IMAGE_FRAC); \
4844#define gDPLoadMultiTile(pkt, timg, tmem, rtile, fmt, siz, width, height, \
4845 uls, ult, lrs, lrt, pal, \
4846 cms, cmt, masks, maskt, shifts, shiftt) \
4848 gDPSetTextureImage(pkt, fmt, siz, width, timg); \
4849 gDPSetTile(pkt, fmt, siz, \
4850 (((((lrs) - (uls) + 1) * siz##_TILE_BYTES) + 7) >> 3), tmem, \
4851 _G_TEXLOADTILE(rtile), 0, cmt, maskt, shiftt, cms, masks, shifts); \
4852 gDPLoadSyncInTexLoad(pkt); \
4853 gDPLoadTile(pkt, _G_TEXLOADTILE(rtile), \
4854 (uls) << G_TEXTURE_IMAGE_FRAC, \
4855 (ult) << G_TEXTURE_IMAGE_FRAC, \
4856 (lrs) << G_TEXTURE_IMAGE_FRAC, \
4857 (lrt) << G_TEXTURE_IMAGE_FRAC); \
4858 gDPPipeSyncInTexLoad(pkt); \
4859 gDPSetTile(pkt, fmt, siz, \
4860 (((((lrs) - (uls) + 1) * siz##_LINE_BYTES) + 7) >> 3), tmem, \
4861 rtile, pal, cmt, maskt, shiftt, cms, masks, shifts); \
4862 gDPSetTileSize(pkt, rtile, \
4863 (uls) << G_TEXTURE_IMAGE_FRAC, \
4864 (ult) << G_TEXTURE_IMAGE_FRAC, \
4865 (lrs) << G_TEXTURE_IMAGE_FRAC, \
4866 (lrt) << G_TEXTURE_IMAGE_FRAC); \
4870#define gsDPLoadTextureTile(timg, fmt, siz, width, height, \
4871 uls, ult, lrs, lrt, pal, \
4872 cms, cmt, masks, maskt, shifts, shiftt) \
4873 gsDPSetTextureImage(fmt, siz, width, timg), \
4874 gsDPSetTile(fmt, siz, \
4875 (((((lrs) - (uls) + 1) * siz##_TILE_BYTES) + 7) >> 3), 0, \
4876 G_TX_LOADTILE, 0, cmt, maskt, shiftt, cms, masks, shifts), \
4877 gsDPLoadSyncInTexLoad \
4878 gsDPLoadTile(G_TX_LOADTILE, \
4879 (uls) << G_TEXTURE_IMAGE_FRAC, \
4880 (ult) << G_TEXTURE_IMAGE_FRAC, \
4881 (lrs) << G_TEXTURE_IMAGE_FRAC, \
4882 (lrt) << G_TEXTURE_IMAGE_FRAC), \
4883 gsDPPipeSyncInTexLoad \
4884 gsDPSetTile(fmt, siz, \
4885 (((((lrs) - (uls) + 1) * siz##_LINE_BYTES) + 7) >> 3), 0, \
4886 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts), \
4887 gsDPSetTileSize(G_TX_RENDERTILE, \
4888 (uls) << G_TEXTURE_IMAGE_FRAC, \
4889 (ult) << G_TEXTURE_IMAGE_FRAC, \
4890 (lrs) << G_TEXTURE_IMAGE_FRAC, \
4891 (lrt) << G_TEXTURE_IMAGE_FRAC)
4897#define gsDPLoadMultiTile(timg, tmem, rtile, fmt, siz, width, height, \
4898 uls, ult, lrs, lrt, pal, \
4899 cms, cmt, masks, maskt, shifts, shiftt) \
4900 gsDPSetTextureImage(fmt, siz, width, timg), \
4901 gsDPSetTile(fmt, siz, \
4902 (((((lrs) - (uls) + 1) * siz##_TILE_BYTES) + 7) >> 3), tmem, \
4903 _G_TEXLOADTILE(rtile), 0, cmt, maskt, shiftt, cms, masks, shifts), \
4904 gsDPLoadSyncInTexLoad \
4905 gsDPLoadTile(_G_TEXLOADTILE(rtile), \
4906 (uls) << G_TEXTURE_IMAGE_FRAC, \
4907 (ult) << G_TEXTURE_IMAGE_FRAC, \
4908 (lrs) << G_TEXTURE_IMAGE_FRAC, \
4909 (lrt) << G_TEXTURE_IMAGE_FRAC), \
4910 gsDPPipeSyncInTexLoad \
4911 gsDPSetTile(fmt, siz, \
4912 (((((lrs) - (uls) + 1) * siz##_LINE_BYTES) + 7) >> 3), \
4913 tmem, rtile, pal, cmt, maskt, shiftt, cms, masks, shifts), \
4914 gsDPSetTileSize(rtile, \
4915 (uls) << G_TEXTURE_IMAGE_FRAC, \
4916 (ult) << G_TEXTURE_IMAGE_FRAC, \
4917 (lrs) << G_TEXTURE_IMAGE_FRAC, \
4918 (lrt) << G_TEXTURE_IMAGE_FRAC)
4920#define gDPLoadTextureTile_4b(pkt, timg, fmt, width, height, \
4921 uls, ult, lrs, lrt, pal, \
4922 cms, cmt, masks, maskt, shifts, shiftt) \
4924 gDPSetTextureImage(pkt, fmt, G_IM_SIZ_8b, ((width) >> 1), timg); \
4925 gDPSetTile(pkt, fmt, G_IM_SIZ_8b, \
4926 (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), 0, \
4927 G_TX_LOADTILE, 0, cmt, maskt, shiftt, cms, masks, shifts); \
4928 gDPLoadSyncInTexLoad(pkt); \
4929 gDPLoadTile(pkt, G_TX_LOADTILE, \
4930 (uls) << (G_TEXTURE_IMAGE_FRAC - 1), \
4931 (ult) << (G_TEXTURE_IMAGE_FRAC), \
4932 (lrs) << (G_TEXTURE_IMAGE_FRAC - 1), \
4933 (lrt) << (G_TEXTURE_IMAGE_FRAC)); \
4934 gDPPipeSyncInTexLoad(pkt); \
4935 gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \
4936 (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), 0, \
4937 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts); \
4938 gDPSetTileSize(pkt, G_TX_RENDERTILE, \
4939 (uls) << G_TEXTURE_IMAGE_FRAC, \
4940 (ult) << G_TEXTURE_IMAGE_FRAC, \
4941 (lrs) << G_TEXTURE_IMAGE_FRAC, \
4942 (lrt) << G_TEXTURE_IMAGE_FRAC); \
4949#define gDPLoadMultiTile_4b(pkt, timg, tmem, rtile, fmt, width, height, \
4950 uls, ult, lrs, lrt, pal, \
4951 cms, cmt, masks, maskt, shifts, shiftt) \
4953 gDPSetTextureImage(pkt, fmt, G_IM_SIZ_8b, ((width) >> 1), timg); \
4954 gDPSetTile(pkt, fmt, G_IM_SIZ_8b, \
4955 (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), tmem, \
4956 _G_TEXLOADTILE(rtile), 0, cmt, maskt, shiftt, cms, masks, shifts); \
4957 gDPLoadSyncInTexLoad(pkt); \
4958 gDPLoadTile(pkt, _G_TEXLOADTILE(rtile), \
4959 (uls) << (G_TEXTURE_IMAGE_FRAC - 1), \
4960 (ult) << (G_TEXTURE_IMAGE_FRAC), \
4961 (lrs) << (G_TEXTURE_IMAGE_FRAC - 1), \
4962 (lrt) << (G_TEXTURE_IMAGE_FRAC)); \
4963 gDPPipeSyncInTexLoad(pkt); \
4964 gDPSetTile(pkt, fmt, G_IM_SIZ_4b, \
4965 (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), tmem, \
4966 rtile, pal, cmt, maskt, shiftt, cms, masks, shifts); \
4967 gDPSetTileSize(pkt, rtile, \
4968 (uls) << G_TEXTURE_IMAGE_FRAC, \
4969 (ult) << G_TEXTURE_IMAGE_FRAC, \
4970 (lrs) << G_TEXTURE_IMAGE_FRAC, \
4971 (lrt) << G_TEXTURE_IMAGE_FRAC); \
4974#define gsDPLoadTextureTile_4b(timg, fmt, width, height, \
4975 uls, ult, lrs, lrt, pal, \
4976 cms, cmt, masks, maskt, shifts, shiftt) \
4977 gsDPSetTextureImage(fmt, G_IM_SIZ_8b, ((width) >> 1), timg), \
4978 gsDPSetTile(fmt, G_IM_SIZ_8b, \
4979 (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), 0, \
4980 G_TX_LOADTILE, 0, cmt, maskt, shiftt, cms, masks, shifts), \
4981 gsDPLoadSyncInTexLoad \
4982 gsDPLoadTile(G_TX_LOADTILE, \
4983 (uls) << (G_TEXTURE_IMAGE_FRAC - 1), \
4984 (ult) << (G_TEXTURE_IMAGE_FRAC), \
4985 (lrs) << (G_TEXTURE_IMAGE_FRAC - 1), \
4986 (lrt) << (G_TEXTURE_IMAGE_FRAC)), \
4987 gsDPPipeSyncInTexLoad \
4988 gsDPSetTile(fmt, G_IM_SIZ_4b, \
4989 (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), 0, \
4990 G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts), \
4991 gsDPSetTileSize(G_TX_RENDERTILE, \
4992 (uls) << G_TEXTURE_IMAGE_FRAC, \
4993 (ult) << G_TEXTURE_IMAGE_FRAC, \
4994 (lrs) << G_TEXTURE_IMAGE_FRAC, \
4995 (lrt) << G_TEXTURE_IMAGE_FRAC)
5000#define gsDPLoadMultiTile_4b(timg, tmem, rtile, fmt, width, height, \
5001 uls, ult, lrs, lrt, pal, \
5002 cms, cmt, masks, maskt, shifts, shiftt) \
5004 gsDPSetTextureImage(fmt, G_IM_SIZ_8b, ((width) >> 1), timg), \
5005 gsDPSetTile(fmt, G_IM_SIZ_8b, \
5006 (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), tmem, \
5007 _G_TEXLOADTILE(rtile), 0, cmt, maskt, shiftt, cms, masks, shifts), \
5008 gsDPLoadSyncInTexLoad \
5009 gsDPLoadTile(_G_TEXLOADTILE(rtile), \
5010 (uls) << (G_TEXTURE_IMAGE_FRAC - 1), \
5011 (ult) << (G_TEXTURE_IMAGE_FRAC), \
5012 (lrs) << (G_TEXTURE_IMAGE_FRAC - 1), \
5013 (lrt) << (G_TEXTURE_IMAGE_FRAC)), \
5014 gsDPPipeSyncInTexLoad \
5015 gsDPSetTile(fmt, G_IM_SIZ_4b, \
5016 (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), tmem, \
5017 rtile, pal, cmt, maskt, shiftt, cms, masks, shifts), \
5018 gsDPSetTileSize(rtile, \
5019 (uls) << G_TEXTURE_IMAGE_FRAC, \
5020 (ult) << G_TEXTURE_IMAGE_FRAC, \
5021 (lrs) << G_TEXTURE_IMAGE_FRAC, \
5022 (lrt) << G_TEXTURE_IMAGE_FRAC)
5030#define gDPLoadTLUT_pal16(pkt, pal, dram) \
5032 gDPSetTextureImage(pkt, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram); \
5033 gDPTileSyncInTexLoad(pkt); \
5034 gDPSetTile(pkt, 0, 0, 0, (256 + (((pal) & 0xF) * 16)), \
5035 _G_PALLOADTILE((pal) & 1), 0, 0, 0, 0, 0, 0, 0); \
5036 gDPLoadSyncInTexLoad(pkt); \
5037 gDPLoadTLUTCmd(pkt, _G_PALLOADTILE((pal) & 1), 15); \
5038 gDPPipeSyncInTexLoad(pkt); \
5043#define gsDPLoadTLUT_pal16(pal, dram) \
5044 gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram), \
5045 gsDPTileSyncInTexLoad \
5046 gsDPSetTile(0, 0, 0, (256 + (((pal) & 0xF) * 16)), \
5047 _G_PALLOADTILE((pal) & 1), 0, 0, 0, 0, 0, 0, 0), \
5048 gsDPLoadSyncInTexLoad \
5049 gsDPLoadTLUTCmd(_G_PALLOADTILE((pal) & 1), 15) \
5050 gsDPPipeSyncEndOfTexLoad
5056#define gDPLoadTLUT_pal256(pkt, dram) \
5058 gDPSetTextureImage(pkt, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram); \
5059 gDPTileSyncInTexLoad(pkt); \
5060 gDPSetTile(pkt, 0, 0, 0, 256, \
5061 _G_PALLOADTILE(0), 0, 0, 0, 0, 0, 0, 0); \
5062 gDPLoadSyncInTexLoad(pkt); \
5063 gDPLoadTLUTCmd(pkt, _G_PALLOADTILE(0), 255); \
5064 gDPPipeSyncInTexLoad(pkt); \
5070#define gsDPLoadTLUT_pal256(dram) \
5071 gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram), \
5072 gsDPTileSyncInTexLoad \
5073 gsDPSetTile(0, 0, 0, 256, \
5074 _G_PALLOADTILE(0), 0, 0, 0, 0, 0, 0, 0), \
5075 gsDPLoadSyncInTexLoad \
5076 gsDPLoadTLUTCmd(_G_PALLOADTILE(0), 255) \
5077 gsDPPipeSyncEndOfTexLoad
5084#define _G_PALTMEMTOTILE(tmemaddr) _G_PALLOADTILE(((tmemaddr) >> 4) & 1)
5086#define gDPLoadTLUT(pkt, count, tmemaddr, dram) \
5088 gDPSetTextureImage(pkt, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram); \
5089 gDPTileSyncInTexLoad(pkt); \
5090 gDPSetTile(pkt, 0, 0, 0, tmemaddr, \
5091 _G_PALTMEMTOTILE(tmemaddr), 0, 0, 0, 0, 0, 0, 0); \
5092 gDPLoadSyncInTexLoad(pkt); \
5093 gDPLoadTLUTCmd(pkt, _G_PALTMEMTOTILE(tmemaddr), ((count) - 1)); \
5094 gDPPipeSyncInTexLoad(pkt); \
5097#define gsDPLoadTLUT(count, tmemaddr, dram) \
5098 gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram), \
5099 gsDPTileSyncInTexLoad \
5100 gsDPSetTile(0, 0, 0, tmemaddr, \
5101 _G_PALTMEMTOTILE(tmemaddr), 0, 0, 0, 0, 0, 0, 0), \
5102 gsDPLoadSyncInTexLoad \
5103 gsDPLoadTLUTCmd(_G_PALTMEMTOTILE(tmemaddr), ((count) - 1)) \
5104 gsDPPipeSyncEndOfTexLoad
5108#define gDPSetScissor(pkt, mode, ulx, uly, lrx, lry) \
5110 Gfx *_g = (Gfx *)pkt; \
5112 _g->words.w0 = (_SHIFTL(G_SETSCISSOR, 24, 8) | \
5113 _SHIFTL((int)((float)(ulx) * 4.0f), 12, 12) | \
5114 _SHIFTL((int)((float)(uly) * 4.0f), 0, 12)); \
5115 _g->words.w1 = (_SHIFTL(mode, 24, 2) | \
5116 _SHIFTL((int)((float)(lrx) * 4.0f), 12, 12) | \
5117 _SHIFTL((int)((float)(lry) * 4.0f), 0, 12)); \
5121#define gDPSetScissorFrac(pkt, mode, ulx, uly, lrx, lry) \
5123 Gfx *_g = (Gfx *)pkt; \
5125 _g->words.w0 = (_SHIFTL(G_SETSCISSOR, 24, 8) | \
5126 _SHIFTL((int)((ulx)), 12, 12) | \
5127 _SHIFTL((int)((uly)), 0, 12)); \
5128 _g->words.w1 = (_SHIFTL(mode, 24, 2) | \
5129 _SHIFTL((int)((lrx)), 12, 12) | \
5130 _SHIFTL((int)((lry)), 0, 12)); \
5133#define gsDPSetScissor(mode, ulx, uly, lrx, lry) \
5135 (_SHIFTL(G_SETSCISSOR, 24, 8) | \
5136 _SHIFTL((int)((float)(ulx) * 4.0f), 12, 12) | \
5137 _SHIFTL((int)((float)(uly) * 4.0f), 0, 12)), \
5138 (_SHIFTL(mode, 24, 2) | \
5139 _SHIFTL((int)((float)(lrx) * 4.0f), 12, 12) | \
5140 _SHIFTL((int)((float)(lry) * 4.0f), 0, 12)) \
5143#define gsDPSetScissorFrac(mode, ulx, uly, lrx, lry) \
5145 (_SHIFTL(G_SETSCISSOR, 24, 8) | \
5146 _SHIFTL((int)((ulx)), 12, 12) | \
5147 _SHIFTL((int)((uly)), 0, 12)), \
5148 (_SHIFTL(mode, 24, 2) | \
5149 _SHIFTL((int)(lrx), 12, 12) | \
5150 _SHIFTL((int)(lry), 0, 12)) \
5154#define gDPFillRectangle(pkt, ulx, uly, lrx, lry) \
5156 Gfx *_g = (Gfx *)(pkt); \
5158 _g->words.w0 = (_SHIFTL(G_FILLRECT, 24, 8) | \
5159 _SHIFTL((lrx), 14, 10) | \
5160 _SHIFTL((lry), 2, 10)); \
5161 _g->words.w1 = (_SHIFTL((ulx), 14, 10) | \
5162 _SHIFTL((uly), 2, 10)); \
5165#define gsDPFillRectangle(ulx, uly, lrx, lry) \
5167 (_SHIFTL(G_FILLRECT, 24, 8) | \
5168 _SHIFTL((lrx), 14, 10) | \
5169 _SHIFTL((lry), 2, 10)), \
5170 (_SHIFTL((ulx), 14, 10) | \
5171 _SHIFTL((uly), 2, 10)) \
5175#define gDPScisFillRectangle(pkt, ulx, uly, lrx, lry) \
5177 Gfx *_g = (Gfx *)(pkt); \
5179 _g->words.w0 = (_SHIFTL(G_FILLRECT, 24, 8) | \
5180 _SHIFTL(MAX((lrx), 0), 14, 10) | \
5181 _SHIFTL(MAX((lry), 0), 2, 10)); \
5182 _g->words.w1 = (_SHIFTL(MAX((ulx), 0), 14, 10) | \
5183 _SHIFTL(MAX((uly), 0), 2, 10)); \
5186#define gDPSetConvert(pkt, k0, k1, k2, k3, k4, k5) \
5188 Gfx *_g = (Gfx *)(pkt); \
5190 _g->words.w0 = (_SHIFTL(G_SETCONVERT, 24, 8) | \
5191 _SHIFTL(k0, 13, 9) | \
5192 _SHIFTL(k1, 4, 9) | \
5193 _SHIFTR(k2, 5, 4)); \
5194 _g->words.w1 = (_SHIFTL(k2, 27, 5) | \
5195 _SHIFTL(k3, 18, 9) | \
5196 _SHIFTL(k4, 9, 9) | \
5197 _SHIFTL(k5, 0, 9)); \
5200#define gsDPSetConvert(k0, k1, k2, k3, k4, k5) \
5202 (_SHIFTL(G_SETCONVERT, 24, 8) | \
5203 _SHIFTL(k0, 13, 9) | \
5204 _SHIFTL(k1, 4, 9) | \
5205 _SHIFTL(k2, 5, 4)), \
5206 (_SHIFTL(k2, 27, 5) | \
5207 _SHIFTL(k3, 18, 9) | \
5208 _SHIFTL(k4, 9, 9) | \
5209 _SHIFTL(k5, 0, 9)) \
5212#define gDPSetKeyR(pkt, cR, sR, wR) \
5214 Gfx *_g = (Gfx *)(pkt); \
5216 _g->words.w0 = _SHIFTL(G_SETKEYR, 24, 8); \
5217 _g->words.w1 = (_SHIFTL(wR, 16, 12) | \
5218 _SHIFTL(cR, 8, 8) | \
5219 _SHIFTL(sR, 0, 8)); \
5222#define gsDPSetKeyR(cR, sR, wR) \
5224 _SHIFTL(G_SETKEYR, 24, 8), \
5225 (_SHIFTL(wR, 16, 12) | \
5226 _SHIFTL(cR, 8, 8) | \
5227 _SHIFTL(sR, 0, 8)) \
5230#define gDPSetKeyGB(pkt, cG, sG, wG, cB, sB, wB) \
5232 Gfx *_g = (Gfx *)(pkt); \
5234 _g->words.w0 = (_SHIFTL(G_SETKEYGB, 24, 8) | \
5235 _SHIFTL(wG, 12, 12) | \
5236 _SHIFTL(wB, 0, 12)); \
5237 _g->words.w1 = (_SHIFTL(cG, 24, 8) | \
5238 _SHIFTL(sG, 16, 8) | \
5239 _SHIFTL(cB, 8, 8) | \
5240 _SHIFTL(sB, 0, 8)); \
5243#define gsDPSetKeyGB(cG, sG, wG, cB, sB, wB) \
5245 (_SHIFTL(G_SETKEYGB, 24, 8) | \
5246 _SHIFTL(wG, 12, 12) | \
5247 _SHIFTL(wB, 0, 12)), \
5248 (_SHIFTL(cG, 24, 8) | \
5249 _SHIFTL(sG, 16, 8) | \
5250 _SHIFTL(cB, 8, 8) | \
5251 _SHIFTL(sB, 0, 8)) \
5254#define gDPNoParam(pkt, cmd) \
5256 Gfx *_g = (Gfx *)(pkt); \
5258 _g->words.w0 = _SHIFTL(cmd, 24, 8); \
5262#define gsDPNoParam(cmd) \
5264 _SHIFTL(cmd, 24, 8), \
5268#define gDPParam(pkt, cmd, param) \
5270 Gfx *_g = (Gfx *)(pkt); \
5272 _g->words.w0 = _SHIFTL(cmd, 24, 8); \
5273 _g->words.w1 = (param); \
5276#define gsDPParam(cmd, param) \
5278 _SHIFTL(cmd, 24, 8), \
5288#define gsDPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
5290 (_SHIFTL(G_TEXRECT, 24, 8) | \
5291 _SHIFTL(xh, 12, 12) | \
5292 _SHIFTL(yh, 0, 12)), \
5293 (_SHIFTL(tile, 24, 3) | \
5294 _SHIFTL(xl, 12, 12) | \
5295 _SHIFTL(yl, 0, 12)), \
5298 (_SHIFTL(s, 16, 16) | \
5299 _SHIFTL(t, 0, 16)), \
5300 (_SHIFTL(dsdx, 16, 16) | \
5301 _SHIFTL(dtdy, 0, 16)) \
5307#define gDPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
5309 Gfx *_g = (Gfx *)(pkt); \
5311 _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | \
5312 _SHIFTL(xh, 12, 12) | \
5313 _SHIFTL(yh, 0, 12)); \
5314 _g->words.w1 = (_SHIFTL(tile, 24, 3) | \
5315 _SHIFTL(xl, 12, 12) | \
5316 _SHIFTL(yl, 0, 12)); \
5318 _g->words.w0 = (_SHIFTL(s, 16, 16) | \
5319 _SHIFTL(t, 0, 16)); \
5320 _g->words.w1 = (_SHIFTL(dsdx, 16, 16) | \
5321 _SHIFTL(dtdy, 0, 16)); \
5324#define gsDPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
5326 (_SHIFTL(G_TEXRECTFLIP, 24, 8) | \
5327 _SHIFTL(xh, 12, 12) | \
5328 _SHIFTL(yh, 0, 12)), \
5329 (_SHIFTL(tile, 24, 3) | \
5330 _SHIFTL(xl, 12, 12) | \
5331 _SHIFTL(yl, 0, 12)), \
5334 (_SHIFTL(s, 16, 16) | \
5335 _SHIFTL(t, 0, 16)), \
5336 (_SHIFTL(dsdx, 16, 16) | \
5337 _SHIFTL(dtdy, 0, 16)) \
5340#define gDPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
5342 Gfx *_g = (Gfx *)(pkt); \
5344 _g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24, 8) | \
5345 _SHIFTL(xh, 12, 12) | \
5346 _SHIFTL(yh, 0, 12)); \
5347 _g->words.w1 = (_SHIFTL(tile, 24, 3) | \
5348 _SHIFTL(xl, 12, 12) | \
5349 _SHIFTL(yl, 0, 12)); \
5351 _g->words.w0 = (_SHIFTL(s, 16, 16) | \
5352 _SHIFTL(t, 0, 16)); \
5353 _g->words.w1 = (_SHIFTL(dsdx, 16, 16) | \
5354 _SHIFTL(dtdy, 0, 16)); \
5357#define gsSPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
5358 (_SHIFTL(G_TEXRECT, 24, 8) | \
5359 _SHIFTL(xh, 12, 12) | \
5360 _SHIFTL(yh, 0, 12)), \
5361 (_SHIFTL(tile, 24, 3) | \
5362 _SHIFTL(xl, 12, 12) | \
5363 _SHIFTL(yl, 0, 12)), \
5364 gsImmp1(G_RDPHALF_1, \
5365 (_SHIFTL(s, 16, 16) | \
5366 _SHIFTL(t, 0, 16))), \
5367 gsImmp1(G_RDPHALF_2, \
5368 (_SHIFTL(dsdx, 16, 16) | \
5369 _SHIFTL(dtdy, 0, 16)))
5371#define gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
5373 Gfx *_g = (Gfx *)(pkt); \
5375 _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | \
5376 _SHIFTL(xh, 12, 12) | \
5377 _SHIFTL(yh, 0, 12)); \
5378 _g->words.w1 = (_SHIFTL(tile, 24, 3) | \
5379 _SHIFTL(xl, 12, 12) | \
5380 _SHIFTL(yl, 0, 12)); \
5381 gImmp1(pkt, G_RDPHALF_1, \
5382 (_SHIFTL(s, 16, 16) | \
5383 _SHIFTL(t, 0, 16))); \
5384 gImmp1(pkt, G_RDPHALF_2, \
5385 (_SHIFTL(dsdx, 16, 16) | \
5386 _SHIFTL(dtdy, 0, 16))); \
5390#define gSPScisTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
5392 Gfx *_g = (Gfx *)(pkt); \
5394 _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | \
5395 _SHIFTL(MAX((s16)(xh),0), 12, 12) | \
5396 _SHIFTL(MAX((s16)(yh),0), 0, 12)); \
5397 _g->words.w1 = (_SHIFTL((tile), 24, 3) | \
5398 _SHIFTL(MAX((s16)(xl),0), 12, 12) | \
5399 _SHIFTL(MAX((s16)(yl),0), 0, 12)); \
5400 gImmp1(pkt, G_RDPHALF_1, \
5402 (((s16)(xl) < 0) ? \
5403 (((s16)(dsdx) < 0) ? \
5404 (MAX((((s16)(xl) * (s16)(dsdx)) >> 7), 0)) : \
5405 (MIN((((s16)(xl) * (s16)(dsdx)) >> 7), 0))) : 0)), 16, 16) | \
5408 (((s16)(dtdy) < 0) ? \
5409 (MAX((((s16)(yl) * (s16)(dtdy)) >> 7), 0)) : \
5410 (MIN((((s16)(yl) * (s16)(dtdy)) >> 7), 0))) : 0)), 0, 16))); \
5411 gImmp1(pkt, G_RDPHALF_2, \
5412 (_SHIFTL((dsdx), 16, 16) | \
5413 _SHIFTL((dtdy), 0, 16))); \
5416#define gsSPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
5417 (_SHIFTL(G_TEXRECTFLIP, 24, 8) | \
5418 _SHIFTL(xh, 12, 12) | \
5419 _SHIFTL(yh, 0, 12)), \
5420 (_SHIFTL(tile, 24, 3) | \
5421 _SHIFTL(xl, 12, 12) | \
5422 _SHIFTL(yl, 0, 12)), \
5423 gsImmp1(G_RDPHALF_1, \
5424 (_SHIFTL(s, 16, 16) | \
5425 _SHIFTL(t, 0, 16))), \
5426 gsImmp1(G_RDPHALF_2, \
5427 (_SHIFTL(dsdx, 16, 16) | \
5428 _SHIFTL(dtdy, 0, 16)))
5430#define gSPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \
5432 Gfx *_g = (Gfx *)(pkt); \
5434 _g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24, 8) | \
5435 _SHIFTL(xh, 12, 12) | \
5436 _SHIFTL(yh, 0, 12)); \
5437 _g->words.w1 = (_SHIFTL(tile, 24, 3) | \
5438 _SHIFTL(xl, 12, 12) | \
5439 _SHIFTL(yl, 0, 12)); \
5440 gImmp1(pkt, G_RDPHALF_1, \
5441 (_SHIFTL(s, 16, 16) | \
5442 _SHIFTL(t, 0, 16))); \
5443 gImmp1(pkt, G_RDPHALF_2, \
5444 (_SHIFTL(dsdx, 16, 16) | \
5445 _SHIFTL(dtdy, 0, 16))); \
5448#define gsDPWord(wordhi, wordlo) \
5449 gsImmp1(G_RDPHALF_1, (unsigned int)(wordhi)), \
5450 gsImmp1(G_RDPHALF_2, (unsigned int)(wordlo))
5452#define gDPWord(pkt, wordhi, wordlo) \
5454 Gfx *_g = (Gfx *)(pkt); \
5455 gImmp1(pkt, G_RDPHALF_1, (unsigned int)(wordhi)); \
5456 gImmp1(pkt, G_RDPHALF_2, (unsigned int)(wordlo)); \
5459#ifdef RISKY_RDP_SYNCS
5466#define G_USEASPIPESYNC G_RDPTILESYNC
5468#define G_USEASPIPESYNC G_RDPPIPESYNC
5471#define gDPFullSync(pkt) gDPNoParam(pkt, G_RDPFULLSYNC)
5472#define gsDPFullSync() gsDPNoParam( G_RDPFULLSYNC)
5473#define gDPTileSync(pkt) gDPNoParam(pkt, G_RDPTILESYNC)
5474#define gsDPTileSync() gsDPNoParam( G_RDPTILESYNC)
5475#define gDPPipeSync(pkt) gDPNoParam(pkt, G_USEASPIPESYNC)
5476#define gsDPPipeSync() gsDPNoParam( G_USEASPIPESYNC)
5477#define gDPLoadSync(pkt) gDPNoParam(pkt, G_RDPLOADSYNC)
5478#define gsDPLoadSync() gsDPNoParam( G_RDPLOADSYNC)
5479#define gDPNoOp(pkt) gDPNoParam(pkt, G_NOOP)
5480#define gsDPNoOp() gsDPNoParam( G_NOOP)
5481#define gDPNoOpTag(pkt, tag) gDPParam(pkt, G_NOOP, tag)
5482#define gsDPNoOpTag(tag) gsDPParam( G_NOOP, tag)
5484#define gDPNoOpHere(pkt, file, line) gDma1p(pkt, G_NOOP, file, line, 1)
5485#define gDPNoOpString(pkt, data, n) gDma1p(pkt, G_NOOP, data, n, 2)
5486#define gDPNoOpWord(pkt, data, n) gDma1p(pkt, G_NOOP, data, n, 3)
5487#define gDPNoOpFloat(pkt, data, n) gDma1p(pkt, G_NOOP, data, n, 4)
5488#define gDPNoOpQuiet(pkt) gDma1p(pkt, G_NOOP, 0, 0, 5)
5489#define gDPNoOpVerbose(pkt, n) gDma1p(pkt, G_NOOP, 0, n, 5)
5490#define gDPNoOpCallBack(pkt, callback, arg) gDma1p(pkt, G_NOOP, callback, arg, 6)
5491#define gDPNoOpOpenDisp(pkt, file, line) gDma1p(pkt, G_NOOP, file, line, 7)
5492#define gDPNoOpCloseDisp(pkt, file, line) gDma1p(pkt, G_NOOP, file, line, 8)
5493#define gDPNoOpTag3(pkt, type, data, n) gDma1p(pkt, G_NOOP, data, n, type)
long int Mtx_t[4][4]
Definition gbi.h:1121
char pad1
Definition gbi.h:1240
char pad2
Definition gbi.h:1242
char pad3
Definition gbi.h:1214
unsigned char type
Definition gbi.h:1210
char pad2
Definition gbi.h:1212
unsigned char kq
Definition gbi.h:1231
unsigned char size
Definition gbi.h:1232
unsigned char kc
Definition gbi.h:1227
unsigned char kl
Definition gbi.h:1229
unsigned short flag
Definition gbi.h:1073
unsigned char a
Definition gbi.h:1086
unsigned short flag
Definition gbi.h:1083
long long int force_structure_alignment
Definition gbi.h:1095
Vtx_tn n
Definition gbi.h:1094