14#include "ultra64/mbi.h" 
   28#include "ultra64/sptask.h" 
   29#if OS_YIELD_DATA_SIZE != 0xC00 
   30#error "F3DEX3 requires OS_YIELD_DATA_SIZE == 0xC00" 
   33#ifdef REQUIRE_SEMICOLONS_AFTER_GBI_COMMANDS 
   36#define _DW(macro) do {macro} while (0) 
   40#define _DW(macro) macro 
   48#define G_TRI_FILL              0xC8     
   49#define G_TRI_SHADE             0xCC     
   50#define G_TRI_TXTR              0xCA     
   51#define G_TRI_SHADE_TXTR        0xCE     
   52#define G_TRI_FILL_ZBUFF        0xC9     
   53#define G_TRI_SHADE_ZBUFF       0xCD     
   54#define G_TRI_TXTR_ZBUFF        0xCB     
   55#define G_TRI_SHADE_TXTR_ZBUFF  0xCF     
   58#define G_RDP_TRI_FILL_MASK     0x08 
   59#define G_RDP_TRI_SHADE_MASK    0x04 
   60#define G_RDP_TRI_TXTR_MASK     0x02 
   61#define G_RDP_TRI_ZBUFF_MASK    0x01 
   74#define G_GEOMETRYMODE      0xD9 
   76#define G_MOVEWORD          0xDB 
   78#define G_LOAD_UCODE        0xDD 
   82#define G_RDPHALF_1         0xE1 
   83#define G_SETOTHERMODE_L    0xE2 
   84#define G_SETOTHERMODE_H    0xE3 
   86#define G_TEXRECTFLIP       0xE5 
   87#define G_RDPLOADSYNC       0xE6 
   88#define G_RDPPIPESYNC       0xE7 
   89#define G_RDPTILESYNC       0xE8 
   90#define G_RDPFULLSYNC       0xE9 
   91#define G_SETKEYGB          0xEA 
   93#define G_SETCONVERT        0xEC 
   94#define G_SETSCISSOR        0xED 
   95#define G_SETPRIMDEPTH      0xEE 
   96#define G_RDPSETOTHERMODE   0xEF 
   97#define G_LOADTLUT          0xF0 
   98#define G_RDPHALF_2         0xF1 
   99#define G_SETTILESIZE       0xF2 
  100#define G_LOADBLOCK         0xF3 
  101#define G_LOADTILE          0xF4 
  102#define G_SETTILE           0xF5 
  103#define G_FILLRECT          0xF6 
  104#define G_SETFILLCOLOR      0xF7 
  105#define G_SETFOGCOLOR       0xF8 
  106#define G_SETBLENDCOLOR     0xF9 
  107#define G_SETPRIMCOLOR      0xFA 
  108#define G_SETENVCOLOR       0xFB 
  109#define G_SETCOMBINE        0xFC 
  110#define G_SETTIMG           0xFD 
  111#define G_SETZIMG           0xFE 
  112#define G_SETCIMG           0xFF 
  115#define G_MODIFYVTX         0x02 
  117#define G_BRANCH_WZ         0x04 
  122#define G_TRISNAKE          0x08   
  124#define G_LIGHTTORDP        0x0A 
  125#define G_RELSEGMENT        0x0B 
  128#define G_BRANCH_Z G_BRANCH_WZ 
  129#define G_BRANCH_W G_BRANCH_WZ 
  136#define G_MAX_VERTS 56 
  139#define G_MAX_LIGHTS 9 
  142#define G_INPUT_BUFFER_CMDS 21 
  152#define G_ZBUFFER               0x00000001 
  153#define G_TEXTURE_ENABLE        0x00000000   
  154#define G_SHADE                 0x00000004 
  155#define G_ATTROFFSET_ST_ENABLE  0x00000080 
  156#define G_AMBOCCLUSION          0x00000100 
  157#define G_CULL_NEITHER          0x00000000 
  158#define G_CULL_FRONT            0x00000200 
  159#define G_CULL_BACK             0x00000400 
  160#define G_CULL_BOTH             0x00000600   
  161#define G_PACKED_NORMALS        0x00000800 
  162#define G_LIGHTTOALPHA          0x00001000 
  163#define G_LIGHTING_SPECULAR     0x00002000 
  164#define G_FRESNEL_COLOR         0x00004000 
  165#define G_FRESNEL_ALPHA         0x00008000 
  166#define G_FOG                   0x00010000 
  167#define G_LIGHTING              0x00020000 
  168#define G_TEXTURE_GEN           0x00040000 
  169#define G_TEXTURE_GEN_LINEAR    0x00080000 
  170#define G_LOD                   0x00100000   
  171#define G_SHADING_SMOOTH        0x00200000 
  172#define G_LIGHTING_POSITIONAL   0x00400000   
  173#define G_CLIPPING              0x00800000   
  184#define G_MTX_MODEL           0x00 
  191#define G_MTX_MODELVIEW       G_MTX_MODEL 
  195#define G_MTX_VIEWPROJECTION  0x04 
  199#define G_MTX_PROJECTION      G_MTX_VIEWPROJECTION 
  205#define G_MTX_MUL             0x00 
  211#define G_MTX_LOAD            0x02 
  218#define G_MTX_NOPUSH          0x00 
  225#define G_MTX_PUSH            0x01 
  228#define G_ALPHA_COMPARE_CULL_DISABLE  0 
  229#define G_ALPHA_COMPARE_CULL_BELOW    1 
  230#define G_ALPHA_COMPARE_CULL_ABOVE   -1 
  238#define G_MV_TEMPMTX0  2   
  240#define G_MV_TEMPMTX1  6   
  241#define G_MV_VIEWPORT  8 
  246#define G_MV_PMTX G_MV_VPMTX  
  254#define G_MW_NUMLIGHT       0x02 
  256#define G_MW_SEGMENT        0x06 
  258#define G_MW_LIGHTCOL       0x0A 
  262#define G_MW_HALFWORD_FLAG 0x8000  
  267#define G_MWO_NUMLIGHT           0x00 
  268#define G_MWO_FOG                0x00 
  270#define G_MWO_SEGMENT_0          0x00 
  271#define G_MWO_SEGMENT_1          0x01 
  272#define G_MWO_SEGMENT_2          0x02 
  273#define G_MWO_SEGMENT_3          0x03 
  274#define G_MWO_SEGMENT_4          0x04 
  275#define G_MWO_SEGMENT_5          0x05 
  276#define G_MWO_SEGMENT_6          0x06 
  277#define G_MWO_SEGMENT_7          0x07 
  278#define G_MWO_SEGMENT_8          0x08 
  279#define G_MWO_SEGMENT_9          0x09 
  280#define G_MWO_SEGMENT_A          0x0A 
  281#define G_MWO_SEGMENT_B          0x0B 
  282#define G_MWO_SEGMENT_C          0x0C 
  283#define G_MWO_SEGMENT_D          0x0D 
  284#define G_MWO_SEGMENT_E          0x0E 
  285#define G_MWO_SEGMENT_F          0x0F 
  288#define G_MWO_aLIGHT_1           0x00 
  289#define G_MWO_bLIGHT_1           0x04 
  290#define G_MWO_aLIGHT_2           0x10 
  291#define G_MWO_bLIGHT_2           0x14 
  292#define G_MWO_aLIGHT_3           0x20 
  293#define G_MWO_bLIGHT_3           0x24 
  294#define G_MWO_aLIGHT_4           0x30 
  295#define G_MWO_bLIGHT_4           0x34 
  296#define G_MWO_aLIGHT_5           0x40 
  297#define G_MWO_bLIGHT_5           0x44 
  298#define G_MWO_aLIGHT_6           0x50 
  299#define G_MWO_bLIGHT_6           0x54 
  300#define G_MWO_aLIGHT_7           0x60 
  301#define G_MWO_bLIGHT_7           0x64 
  302#define G_MWO_aLIGHT_8           0x70 
  303#define G_MWO_bLIGHT_8           0x74 
  304#define G_MWO_aLIGHT_9           0x80 
  305#define G_MWO_bLIGHT_9           0x84 
  306#define G_MWO_aLIGHT_10          0x90 
  307#define G_MWO_bLIGHT_10          0x94 
  313#define G_MWO_POINT_RGBA         0x10 
  318#define G_MWO_POINT_ST           0x14 
  324#define G_MWO_POINT_XYSCREEN     0x18 
  330#define G_MWO_POINT_ZSCREEN      0x1C 
  332#define G_MWO_AO_AMBIENT         0x00 
  333#define G_MWO_AO_DIRECTIONAL     0x02 
  334#define G_MWO_AO_POINT           0x04 
  335#define G_MWO_PERSPNORM          0x06 
  336#define G_MWO_FRESNEL_SCALE      0x0C 
  337#define G_MWO_FRESNEL_OFFSET     0x0E 
  338#define G_MWO_ATTR_OFFSET_S      0x10 
  339#define G_MWO_ATTR_OFFSET_T      0x12 
  340#define G_MWO_ALPHA_COMPARE_CULL 0x14 
  341#define G_MWO_LAST_MAT_DL_ADDR   0x16 
  350#define G_TEXTURE_IMAGE_FRAC    2 
  351#define G_TEXTURE_SCALE_FRAC    16 
  352#define G_SCALE_FRAC            8 
  353#define G_ROTATE_FRAC           16 
  360#define G_MAXFBZ    0x3FFF   
  362#define GPACK_RGBA5551(r, g, b, a) \ 
  363        ((((r) << 8) & 0xF800) |   \ 
  364         (((g) << 3) & 0x07C0) |   \ 
  365         (((b) >> 2) & 0x003E) |   \ 
  368#define GPACK_IA16(i, a)    (((i) << 8) | (a)) 
  370#define GPACK_ZDZ(z, dz)    (((z) << 2) | (dz)) 
  375#define G_IM_FMT_RGBA   0 
  376#define G_IM_FMT_YUV    1 
  386#define G_IM_SIZ_16b    2 
  387#define G_IM_SIZ_32b    3 
  390#define G_IM_SIZ_4b_BYTES       0 
  391#define G_IM_SIZ_4b_TILE_BYTES  G_IM_SIZ_4b_BYTES 
  392#define G_IM_SIZ_4b_LINE_BYTES  G_IM_SIZ_4b_BYTES 
  394#define G_IM_SIZ_8b_BYTES       1 
  395#define G_IM_SIZ_8b_TILE_BYTES  G_IM_SIZ_8b_BYTES 
  396#define G_IM_SIZ_8b_LINE_BYTES  G_IM_SIZ_8b_BYTES 
  398#define G_IM_SIZ_16b_BYTES      2 
  399#define G_IM_SIZ_16b_TILE_BYTES G_IM_SIZ_16b_BYTES 
  400#define G_IM_SIZ_16b_LINE_BYTES G_IM_SIZ_16b_BYTES 
  402#define G_IM_SIZ_32b_BYTES      4 
  403#define G_IM_SIZ_32b_TILE_BYTES 2 
  404#define G_IM_SIZ_32b_LINE_BYTES 2 
  406#define G_IM_SIZ_4b_LOAD_BLOCK  G_IM_SIZ_16b 
  407#define G_IM_SIZ_8b_LOAD_BLOCK  G_IM_SIZ_16b 
  408#define G_IM_SIZ_16b_LOAD_BLOCK G_IM_SIZ_16b 
  409#define G_IM_SIZ_32b_LOAD_BLOCK G_IM_SIZ_32b 
  411#define G_IM_SIZ_4b_SHIFT  2 
  412#define G_IM_SIZ_8b_SHIFT  1 
  413#define G_IM_SIZ_16b_SHIFT 0 
  414#define G_IM_SIZ_32b_SHIFT 0 
  416#define G_IM_SIZ_4b_INCR  3 
  417#define G_IM_SIZ_8b_INCR  1 
  418#define G_IM_SIZ_16b_INCR 0 
  419#define G_IM_SIZ_32b_INCR 0 
  425#define G_CCMUX_COMBINED        0 
  426#define G_CCMUX_TEXEL0          1 
  427#define G_CCMUX_TEXEL1          2 
  428#define G_CCMUX_PRIMITIVE       3 
  429#define G_CCMUX_SHADE           4 
  430#define G_CCMUX_ENVIRONMENT     5 
  431#define G_CCMUX_CENTER          6 
  432#define G_CCMUX_SCALE           6 
  433#define G_CCMUX_COMBINED_ALPHA  7 
  434#define G_CCMUX_TEXEL0_ALPHA    8 
  435#define G_CCMUX_TEXEL1_ALPHA    9 
  436#define G_CCMUX_PRIMITIVE_ALPHA 10 
  437#define G_CCMUX_SHADE_ALPHA     11 
  438#define G_CCMUX_ENV_ALPHA       12 
  439#define G_CCMUX_LOD_FRACTION    13 
  440#define G_CCMUX_PRIM_LOD_FRAC   14 
  441#define G_CCMUX_NOISE           7 
  448#define G_ACMUX_COMBINED        0 
  449#define G_ACMUX_TEXEL0          1 
  450#define G_ACMUX_TEXEL1          2 
  451#define G_ACMUX_PRIMITIVE       3 
  452#define G_ACMUX_SHADE           4 
  453#define G_ACMUX_ENVIRONMENT     5 
  454#define G_ACMUX_LOD_FRACTION    0 
  455#define G_ACMUX_PRIM_LOD_FRAC   6 
  462#define G_CC_PRIMITIVE              0, 0, 0, PRIMITIVE, 0, 0, 0, PRIMITIVE 
  463#define G_CC_SHADE                  0, 0, 0, SHADE, 0, 0, 0, SHADE 
  465#define G_CC_MODULATEI              TEXEL0, 0, SHADE, 0, 0, 0, 0, SHADE 
  466#define G_CC_MODULATEIDECALA        TEXEL0, 0, SHADE, 0, 0, 0, 0, TEXEL0 
  467#define G_CC_MODULATEIFADE          TEXEL0, 0, SHADE, 0, 0, 0, 0, ENVIRONMENT 
  469#define G_CC_MODULATERGB            G_CC_MODULATEI 
  470#define G_CC_MODULATERGBDECALA      G_CC_MODULATEIDECALA 
  471#define G_CC_MODULATERGBFADE        G_CC_MODULATEIFADE 
  473#define G_CC_MODULATEIA             TEXEL0, 0, SHADE, 0, TEXEL0, 0, SHADE, 0 
  474#define G_CC_MODULATEIFADEA         TEXEL0, 0, SHADE, 0, TEXEL0, 0, ENVIRONMENT, 0 
  476#define G_CC_MODULATEFADE           TEXEL0, 0, SHADE, 0, ENVIRONMENT, 0, TEXEL0, 0 
  478#define G_CC_MODULATERGBA           G_CC_MODULATEIA 
  479#define G_CC_MODULATERGBFADEA       G_CC_MODULATEIFADEA 
  481#define G_CC_MODULATEI_PRIM         TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE 
  482#define G_CC_MODULATEIA_PRIM        TEXEL0, 0, PRIMITIVE, 0, TEXEL0, 0, PRIMITIVE, 0 
  483#define G_CC_MODULATEIDECALA_PRIM   TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, TEXEL0 
  485#define G_CC_MODULATERGB_PRIM       G_CC_MODULATEI_PRIM 
  486#define G_CC_MODULATERGBA_PRIM      G_CC_MODULATEIA_PRIM 
  487#define G_CC_MODULATERGBDECALA_PRIM G_CC_MODULATEIDECALA_PRIM 
  489#define G_CC_FADE                   SHADE, 0, ENVIRONMENT, 0, SHADE, 0, ENVIRONMENT, 0 
  490#define G_CC_FADEA                  TEXEL0, 0, ENVIRONMENT, 0, TEXEL0, 0, ENVIRONMENT, 0 
  492#define G_CC_DECALRGB               0, 0, 0, TEXEL0, 0, 0, 0, SHADE 
  493#define G_CC_DECALRGBA              0, 0, 0, TEXEL0, 0, 0, 0, TEXEL0 
  494#define G_CC_DECALFADE              0, 0, 0, TEXEL0, 0, 0, 0, ENVIRONMENT 
  496#define G_CC_DECALFADEA             0, 0, 0, TEXEL0, TEXEL0, 0, ENVIRONMENT, 0 
  498#define G_CC_BLENDI                 ENVIRONMENT, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE 
  499#define G_CC_BLENDIA                ENVIRONMENT, SHADE, TEXEL0, SHADE, TEXEL0, 0, SHADE, 0 
  500#define G_CC_BLENDIDECALA           ENVIRONMENT, SHADE, TEXEL0, SHADE, 0, 0, 0, TEXEL0 
  502#define G_CC_BLENDRGBA              TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, SHADE 
  503#define G_CC_BLENDRGBDECALA         TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, TEXEL0 
  504#define G_CC_BLENDRGBFADEA          TEXEL0, SHADE, TEXEL0_ALPHA, SHADE, 0, 0, 0, ENVIRONMENT 
  506#define G_CC_ADDRGB                 TEXEL0, 0, TEXEL0, SHADE, 0, 0, 0, SHADE 
  507#define G_CC_ADDRGBDECALA           TEXEL0, 0, TEXEL0, SHADE, 0, 0, 0, TEXEL0 
  508#define G_CC_ADDRGBFADE             TEXEL0, 0, TEXEL0, SHADE, 0, 0, 0, ENVIRONMENT 
  510#define G_CC_REFLECTRGB             ENVIRONMENT, 0, TEXEL0, SHADE, 0, 0, 0, SHADE 
  511#define G_CC_REFLECTRGBDECALA       ENVIRONMENT, 0, TEXEL0, SHADE, 0, 0, 0, TEXEL0 
  513#define G_CC_HILITERGB              PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE 
  514#define G_CC_HILITERGBA             PRIMITIVE, SHADE, TEXEL0, SHADE, PRIMITIVE, SHADE, TEXEL0, SHADE 
  515#define G_CC_HILITERGBDECALA        PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, TEXEL0 
  517#define G_CC_SHADEDECALA            0, 0, 0, SHADE, 0, 0, 0, TEXEL0 
  518#define G_CC_SHADEFADEA             0, 0, 0, SHADE, 0, 0, 0, ENVIRONMENT 
  520#define G_CC_BLENDPE                PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, SHADE, 0 
  521#define G_CC_BLENDPEDECALA          PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, TEXEL0 
  524#define _G_CC_BLENDPE               ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, TEXEL0, 0, SHADE, 0 
  525#define _G_CC_BLENDPEDECALA         ENVIRONMENT, PRIMITIVE, TEXEL0, PRIMITIVE, 0, 0, 0, TEXEL0 
  526#define _G_CC_TWOCOLORTEX           PRIMITIVE, SHADE, TEXEL0, SHADE, 0, 0, 0, SHADE 
  528#define _G_CC_SPARSEST              PRIMITIVE, TEXEL0, LOD_FRACTION, TEXEL0, PRIMITIVE, TEXEL0, LOD_FRACTION, TEXEL0 
  529#define G_CC_TEMPLERP               TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0, TEXEL1, TEXEL0, PRIM_LOD_FRAC, TEXEL0 
  532#define G_CC_TRILERP                TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0, TEXEL1, TEXEL0, LOD_FRACTION, TEXEL0 
  533#define G_CC_INTERFERENCE           TEXEL0, 0, TEXEL1, 0, TEXEL0, 0, TEXEL1, 0 
  539#define G_CC_1CYUV2RGB              TEXEL0, K4, K5, TEXEL0, 0, 0, 0, SHADE 
  545#define G_CC_YUV2RGB                TEXEL1, K4, K5, TEXEL1, 0, 0, 0, 0 
  548#define G_CC_PASS2                  0, 0, 0, COMBINED, 0, 0, 0, COMBINED 
  549#define G_CC_MODULATEI2             COMBINED, 0, SHADE, 0, 0, 0, 0, SHADE 
  550#define G_CC_MODULATEIA2            COMBINED, 0, SHADE, 0, COMBINED, 0, SHADE, 0 
  551#define G_CC_MODULATERGB2           G_CC_MODULATEI2 
  552#define G_CC_MODULATERGBA2          G_CC_MODULATEIA2 
  553#define G_CC_MODULATEI_PRIM2        COMBINED, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE 
  554#define G_CC_MODULATEIA_PRIM2       COMBINED, 0, PRIMITIVE, 0, COMBINED, 0, PRIMITIVE, 0 
  555#define G_CC_MODULATERGB_PRIM2      G_CC_MODULATEI_PRIM2 
  556#define G_CC_MODULATERGBA_PRIM2     G_CC_MODULATEIA_PRIM2 
  557#define G_CC_DECALRGB2              0, 0, 0, COMBINED, 0, 0, 0, SHADE 
  562#define G_CC_BLENDI2                ENVIRONMENT, SHADE, COMBINED, SHADE, 0, 0, 0, SHADE 
  563#define G_CC_BLENDIA2               ENVIRONMENT, SHADE, COMBINED, SHADE, COMBINED, 0, SHADE, 0 
  564#define G_CC_CHROMA_KEY2            TEXEL0, CENTER, SCALE, 0, 0, 0, 0, 0 
  565#define G_CC_HILITERGB2             ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, SHADE 
  566#define G_CC_HILITERGBA2            ENVIRONMENT, COMBINED, TEXEL0, COMBINED, ENVIRONMENT, COMBINED, TEXEL0, COMBINED 
  567#define G_CC_HILITERGBDECALA2       ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, TEXEL0 
  568#define G_CC_HILITERGBPASSA2        ENVIRONMENT, COMBINED, TEXEL0, COMBINED, 0, 0, 0, COMBINED 
  573#define G_MDSFT_ALPHACOMPARE    0 
  574#define G_MDSFT_ZSRCSEL         2 
  575#define G_MDSFT_RENDERMODE      3 
  576#define G_MDSFT_BLENDER         16 
  581#define G_MDSFT_ALPHADITHER     4 
  582#define G_MDSFT_RGBDITHER       6 
  583#define G_MDSFT_COMBKEY         8 
  584#define G_MDSFT_TEXTCONV        9 
  585#define G_MDSFT_TEXTFILT        12 
  586#define G_MDSFT_TEXTLUT         14 
  587#define G_MDSFT_TEXTLOD         16 
  588#define G_MDSFT_TEXTDETAIL      17 
  589#define G_MDSFT_TEXTPERSP       19 
  590#define G_MDSFT_CYCLETYPE       20 
  591#define G_MDSFT_COLORDITHER     22   
  592#define G_MDSFT_PIPELINE        23 
  595#define G_PM_NPRIMITIVE     (0 << G_MDSFT_PIPELINE) 
  597#define G_PM_1PRIMITIVE     G_PM_NPRIMITIVE 
  599#define G_PM_1PRIMITIVE     (1 << G_MDSFT_PIPELINE) 
  603#define G_CYC_1CYCLE        (0 << G_MDSFT_CYCLETYPE) 
  604#define G_CYC_2CYCLE        (1 << G_MDSFT_CYCLETYPE) 
  605#define G_CYC_COPY          (2 << G_MDSFT_CYCLETYPE) 
  606#define G_CYC_FILL          (3 << G_MDSFT_CYCLETYPE) 
  609#define G_TP_NONE           (0 << G_MDSFT_TEXTPERSP) 
  610#define G_TP_PERSP          (1 << G_MDSFT_TEXTPERSP) 
  613#define G_TD_CLAMP          (0 << G_MDSFT_TEXTDETAIL) 
  614#define G_TD_SHARPEN        (1 << G_MDSFT_TEXTDETAIL) 
  615#define G_TD_DETAIL         (2 << G_MDSFT_TEXTDETAIL) 
  618#define G_TL_TILE           (0 << G_MDSFT_TEXTLOD) 
  619#define G_TL_LOD            (1 << G_MDSFT_TEXTLOD) 
  622#define G_TT_NONE           (0 << G_MDSFT_TEXTLUT) 
  623#define G_TT_RGBA16         (2 << G_MDSFT_TEXTLUT) 
  624#define G_TT_IA16           (3 << G_MDSFT_TEXTLUT) 
  627#define G_TF_POINT          (0 << G_MDSFT_TEXTFILT) 
  628#define G_TF_AVERAGE        (3 << G_MDSFT_TEXTFILT) 
  629#define G_TF_BILERP         (2 << G_MDSFT_TEXTFILT) 
  632#define G_TC_CONV           (0 << G_MDSFT_TEXTCONV) 
  633#define G_TC_FILTCONV       (5 << G_MDSFT_TEXTCONV) 
  634#define G_TC_FILT           (6 << G_MDSFT_TEXTCONV) 
  637#define G_CK_NONE           (0 << G_MDSFT_COMBKEY) 
  638#define G_CK_KEY            (1 << G_MDSFT_COMBKEY) 
  641#define G_CD_MAGICSQ        (0 << G_MDSFT_RGBDITHER) 
  642#define G_CD_BAYER          (1 << G_MDSFT_RGBDITHER) 
  643#define G_CD_NOISE          (2 << G_MDSFT_RGBDITHER) 
  644#define G_CD_DISABLE        (3 << G_MDSFT_RGBDITHER) 
  647#define G_AD_PATTERN        (0 << G_MDSFT_ALPHADITHER) 
  648#define G_AD_NOTPATTERN     (1 << G_MDSFT_ALPHADITHER) 
  649#define G_AD_NOISE          (2 << G_MDSFT_ALPHADITHER) 
  650#define G_AD_DISABLE        (3 << G_MDSFT_ALPHADITHER) 
  653#define G_AC_NONE           (0 << G_MDSFT_ALPHACOMPARE) 
  654#define G_AC_THRESHOLD      (1 << G_MDSFT_ALPHACOMPARE) 
  655#define G_AC_DITHER         (3 << G_MDSFT_ALPHACOMPARE) 
  658#define G_ZS_PIXEL          (0 << G_MDSFT_ZSRCSEL) 
  659#define G_ZS_PRIM           (1 << G_MDSFT_ZSRCSEL) 
  680#define CLR_ON_CVG      0x0080 
  681#define CVG_DST_CLAMP   0x0000 
  682#define CVG_DST_WRAP    0x0100 
  683#define CVG_DST_FULL    0x0200 
  684#define CVG_DST_SAVE    0x0300 
  685#define ZMODE_OPA       0x0000 
  686#define ZMODE_INTER     0x0400 
  687#define ZMODE_XLU       0x0800 
  688#define ZMODE_DEC       0x0C00 
  689#define CVG_X_ALPHA     0x1000 
  690#define ALPHA_CVG_SEL   0x2000 
  691#define FORCE_BL        0x4000 
  692#define TEX_EDGE        0x0000   
  695#define G_BL_CLR_MEM    1 
  697#define G_BL_CLR_FOG    3 
  702#define G_BL_A_SHADE    2 
  706#define GBL_c1(m1a, m1b, m2a, m2b)  \ 
  707    (m1a) << 30 | (m1b) << 26 | (m2a) << 22 | (m2b) << 18 
  708#define GBL_c2(m1a, m1b, m2a, m2b)  \ 
  709    (m1a) << 28 | (m1b) << 24 | (m2a) << 20 | (m2b) << 16 
  711#define RM_AA_ZB_OPA_SURF(clk)                                  \ 
  712    AA_DEF | Z_CMP | Z_UPD | RD_DEF | CVG_DST_CLAMP |           \ 
  713    ZMODE_OPA | ALPHA_CVG_SEL |                                 \ 
  714    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 
  716#define RM_RA_ZB_OPA_SURF(clk)                                  \ 
  717    AA_DEF | Z_CMP | Z_UPD | CVG_DST_CLAMP |                    \ 
  718    ZMODE_OPA | ALPHA_CVG_SEL |                                 \ 
  719    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 
  721#define RM_AA_ZB_XLU_SURF(clk)                                  \ 
  722    AA_DEF | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG |        \ 
  723    FORCE_BL | ZMODE_XLU |                                      \ 
  724    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 
  726#define RM_AA_ZB_OPA_DECAL(clk)                                 \ 
  727    AA_DEF | Z_CMP | RD_DEF | CVG_DST_WRAP | 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_RA_ZB_OPA_DECAL(clk)                                 \ 
  732    AA_DEF | Z_CMP | CVG_DST_WRAP | ALPHA_CVG_SEL |             \ 
  734    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 
  736#define RM_AA_ZB_XLU_DECAL(clk)                                 \ 
  737    AA_DEF | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG |        \ 
  738    FORCE_BL | ZMODE_DEC |                                      \ 
  739    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 
  741#define RM_AA_ZB_OPA_INTER(clk)                                 \ 
  742    AA_DEF | Z_CMP | Z_UPD | RD_DEF | CVG_DST_CLAMP |           \ 
  743    ALPHA_CVG_SEL | ZMODE_INTER |                               \ 
  744    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 
  746#define RM_RA_ZB_OPA_INTER(clk)                                 \ 
  747    AA_DEF | Z_CMP | Z_UPD | CVG_DST_CLAMP |                    \ 
  748    ALPHA_CVG_SEL | ZMODE_INTER |                               \ 
  749    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 
  751#define RM_AA_ZB_XLU_INTER(clk)                                 \ 
  752    AA_DEF | Z_CMP | IM_RD | CVG_DST_WRAP | CLR_ON_CVG |        \ 
  753    FORCE_BL | ZMODE_INTER |                                    \ 
  754    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 
  756#define RM_AA_ZB_XLU_LINE(clk)                                  \ 
  757    AA_DEF | Z_CMP | IM_RD | CVG_DST_CLAMP | CVG_X_ALPHA |      \ 
  758    ALPHA_CVG_SEL | FORCE_BL | ZMODE_XLU |                      \ 
  759    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 
  761#define RM_AA_ZB_DEC_LINE(clk)                                  \ 
  762    AA_DEF | Z_CMP | IM_RD | CVG_DST_SAVE | CVG_X_ALPHA |       \ 
  763    ALPHA_CVG_SEL | FORCE_BL | ZMODE_DEC |                      \ 
  764    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 
  767#define RM_AA_ZB_TEX_EDGE(clk)                                  \ 
  768    AA_EN | Z_CMP | Z_UPD | RD_DEF | CVG_DST_CLAMP |            \ 
  769    CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE |        \ 
  770    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 
  772#define RM_AA_ZB_TEX_INTER(clk)                                 \ 
  773    AA_DEF | Z_CMP | Z_UPD | RD_DEF | CVG_DST_CLAMP |           \ 
  774    CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_INTER | TEX_EDGE |      \ 
  775    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 
  777#define RM_AA_ZB_SUB_SURF(clk)                                  \ 
  778    AA_DEF | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL |             \ 
  779    ZMODE_OPA | ALPHA_CVG_SEL |                                 \ 
  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_PCL_SURF(clk)                                  \ 
  783    AA_DEF | Z_CMP | Z_UPD | IM_RD | CVG_DST_CLAMP |            \ 
  784    ZMODE_OPA | G_AC_DITHER |                                   \ 
  785    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 
  787#define RM_AA_ZB_OPA_TERR(clk)                                  \ 
  788    AA_DEF | Z_CMP | Z_UPD | RD_DEF | CVG_DST_CLAMP |           \ 
  789    ZMODE_OPA | ALPHA_CVG_SEL |                                 \ 
  790    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 
  792#define RM_AA_ZB_TEX_TERR(clk)                                  \ 
  793    AA_DEF | Z_CMP | Z_UPD | RD_DEF | CVG_DST_CLAMP |           \ 
  794    CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE |        \ 
  795    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 
  797#define RM_AA_ZB_SUB_TERR(clk)                                  \ 
  798    AA_DEF | Z_CMP | Z_UPD | IM_RD | CVG_DST_FULL |             \ 
  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) 
  803#define RM_AA_OPA_SURF(clk)                                     \ 
  804    AA_DEF | RD_DEF | CVG_DST_CLAMP |                           \ 
  805    ZMODE_OPA | ALPHA_CVG_SEL |                                 \ 
  806    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 
  808#define RM_RA_OPA_SURF(clk)                                     \ 
  809    AA_DEF | CVG_DST_CLAMP |                                    \ 
  810    ZMODE_OPA | ALPHA_CVG_SEL |                                 \ 
  811    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 
  813#define RM_AA_XLU_SURF(clk)                                     \ 
  814    AA_DEF | IM_RD | CVG_DST_WRAP | CLR_ON_CVG | FORCE_BL |     \ 
  816    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 
  818#define RM_AA_XLU_LINE(clk)                                     \ 
  819    AA_DEF | IM_RD | CVG_DST_CLAMP | CVG_X_ALPHA |              \ 
  820    ALPHA_CVG_SEL | FORCE_BL | ZMODE_OPA |                      \ 
  821    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 
  823#define RM_AA_DEC_LINE(clk)                                     \ 
  824    AA_DEF | IM_RD | CVG_DST_FULL | CVG_X_ALPHA |               \ 
  825    ALPHA_CVG_SEL | FORCE_BL | ZMODE_OPA |                      \ 
  826    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 
  829#define RM_AA_TEX_EDGE(clk)                                     \ 
  830    AA_EN | RD_DEF | CVG_DST_CLAMP |                            \ 
  831    CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE |        \ 
  832    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 
  834#define RM_AA_SUB_SURF(clk)                                     \ 
  835    AA_DEF | IM_RD | CVG_DST_FULL |                             \ 
  836    ZMODE_OPA | ALPHA_CVG_SEL |                                 \ 
  837    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 
  839#define RM_AA_PCL_SURF(clk)                                     \ 
  840    AA_DEF | IM_RD | CVG_DST_CLAMP |                            \ 
  841    ZMODE_OPA | G_AC_DITHER |                                   \ 
  842    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 
  844#define RM_AA_OPA_TERR(clk)                                     \ 
  845    AA_DEF | RD_DEF | CVG_DST_CLAMP |                           \ 
  846    ZMODE_OPA | ALPHA_CVG_SEL |                                 \ 
  847    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 
  849#define RM_AA_TEX_TERR(clk)                                     \ 
  850    AA_DEF | RD_DEF | CVG_DST_CLAMP |                           \ 
  851    CVG_X_ALPHA | ALPHA_CVG_SEL | ZMODE_OPA | TEX_EDGE |        \ 
  852    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 
  854#define RM_AA_SUB_TERR(clk)                                     \ 
  855    AA_DEF | IM_RD | CVG_DST_FULL |                             \ 
  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) 
  860#define RM_ZB_OPA_SURF(clk)                                     \ 
  861    Z_CMP | Z_UPD | CVG_DST_FULL | ALPHA_CVG_SEL |              \ 
  863    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 
  865#define RM_ZB_XLU_SURF(clk)                                     \ 
  866    Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_XLU |       \ 
  867    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 
  869#define RM_ZB_OPA_DECAL(clk)                                    \ 
  870    Z_CMP | CVG_DST_FULL | ALPHA_CVG_SEL | ZMODE_DEC |          \ 
  871    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_A_MEM) 
  873#define RM_ZB_XLU_DECAL(clk)                                    \ 
  874    Z_CMP | IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_DEC |       \ 
  875    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 
  877#define RM_ZB_CLD_SURF(clk)                                     \ 
  878    Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_XLU |       \ 
  879    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 
  881#define RM_ZB_OVL_SURF(clk)                                     \ 
  882    Z_CMP | IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_DEC |       \ 
  883    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 
  885#define RM_ZB_PCL_SURF(clk)                                     \ 
  886    Z_CMP | Z_UPD | CVG_DST_FULL | ZMODE_OPA |                  \ 
  888    GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) 
  891#define RM_OPA_SURF(clk)                                        \ 
  892    CVG_DST_CLAMP | FORCE_BL | ZMODE_OPA |                      \ 
  893    GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) 
  895#define RM_XLU_SURF(clk)                                        \ 
  896    IM_RD | CVG_DST_FULL | FORCE_BL | ZMODE_OPA |               \ 
  897    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 
  899#define RM_TEX_EDGE(clk)                                        \ 
  900    CVG_DST_CLAMP | CVG_X_ALPHA | ALPHA_CVG_SEL | FORCE_BL |    \ 
  901    ZMODE_OPA | TEX_EDGE | AA_EN |                              \ 
  902    GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) 
  904#define RM_CLD_SURF(clk)                                        \ 
  905    IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_OPA |               \ 
  906    GBL_c##clk(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA) 
  908#define RM_PCL_SURF(clk)                                        \ 
  909    CVG_DST_FULL | FORCE_BL | ZMODE_OPA |                       \ 
  911    GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) 
  914    IM_RD | CVG_DST_SAVE | FORCE_BL | ZMODE_OPA |               \ 
  915    GBL_c##clk(G_BL_CLR_IN, G_BL_A_FOG, G_BL_CLR_MEM, G_BL_1) 
  917#define RM_NOOP(clk)    \ 
  918    GBL_c##clk(0, 0, 0, 0) 
  920#define RM_VISCVG(clk)                                          \ 
  922    GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_BL, G_BL_A_MEM) 
  925#define RM_OPA_CI(clk)                                          \ 
  926    CVG_DST_CLAMP | ZMODE_OPA |                                 \ 
  927    GBL_c##clk(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) 
  930#define RM_CUSTOM_AA_ZB_XLU_SURF(clk)               \ 
  931    RM_AA_ZB_XLU_SURF(clk) | Z_UPD 
  933#define G_RM_CUSTOM_AA_ZB_XLU_SURF  RM_CUSTOM_AA_ZB_XLU_SURF(1) 
  934#define G_RM_CUSTOM_AA_ZB_XLU_SURF2 RM_CUSTOM_AA_ZB_XLU_SURF(2) 
  936#define G_RM_AA_ZB_OPA_SURF     RM_AA_ZB_OPA_SURF(1) 
  937#define G_RM_AA_ZB_OPA_SURF2    RM_AA_ZB_OPA_SURF(2) 
  938#define G_RM_AA_ZB_XLU_SURF     RM_AA_ZB_XLU_SURF(1) 
  939#define G_RM_AA_ZB_XLU_SURF2    RM_AA_ZB_XLU_SURF(2) 
  940#define G_RM_AA_ZB_OPA_DECAL    RM_AA_ZB_OPA_DECAL(1) 
  941#define G_RM_AA_ZB_OPA_DECAL2   RM_AA_ZB_OPA_DECAL(2) 
  942#define G_RM_AA_ZB_XLU_DECAL    RM_AA_ZB_XLU_DECAL(1) 
  943#define G_RM_AA_ZB_XLU_DECAL2   RM_AA_ZB_XLU_DECAL(2) 
  944#define G_RM_AA_ZB_OPA_INTER    RM_AA_ZB_OPA_INTER(1) 
  945#define G_RM_AA_ZB_OPA_INTER2   RM_AA_ZB_OPA_INTER(2) 
  946#define G_RM_AA_ZB_XLU_INTER    RM_AA_ZB_XLU_INTER(1) 
  947#define G_RM_AA_ZB_XLU_INTER2   RM_AA_ZB_XLU_INTER(2) 
  948#define G_RM_AA_ZB_XLU_LINE     RM_AA_ZB_XLU_LINE(1) 
  949#define G_RM_AA_ZB_XLU_LINE2    RM_AA_ZB_XLU_LINE(2) 
  950#define G_RM_AA_ZB_DEC_LINE     RM_AA_ZB_DEC_LINE(1) 
  951#define G_RM_AA_ZB_DEC_LINE2    RM_AA_ZB_DEC_LINE(2) 
  952#define G_RM_AA_ZB_TEX_EDGE     RM_AA_ZB_TEX_EDGE(1) 
  953#define G_RM_AA_ZB_TEX_EDGE2    RM_AA_ZB_TEX_EDGE(2) 
  954#define G_RM_AA_ZB_TEX_INTER    RM_AA_ZB_TEX_INTER(1) 
  955#define G_RM_AA_ZB_TEX_INTER2   RM_AA_ZB_TEX_INTER(2) 
  956#define G_RM_AA_ZB_SUB_SURF     RM_AA_ZB_SUB_SURF(1) 
  957#define G_RM_AA_ZB_SUB_SURF2    RM_AA_ZB_SUB_SURF(2) 
  958#define G_RM_AA_ZB_PCL_SURF     RM_AA_ZB_PCL_SURF(1) 
  959#define G_RM_AA_ZB_PCL_SURF2    RM_AA_ZB_PCL_SURF(2) 
  960#define G_RM_AA_ZB_OPA_TERR     RM_AA_ZB_OPA_TERR(1) 
  961#define G_RM_AA_ZB_OPA_TERR2    RM_AA_ZB_OPA_TERR(2) 
  962#define G_RM_AA_ZB_TEX_TERR     RM_AA_ZB_TEX_TERR(1) 
  963#define G_RM_AA_ZB_TEX_TERR2    RM_AA_ZB_TEX_TERR(2) 
  964#define G_RM_AA_ZB_SUB_TERR     RM_AA_ZB_SUB_TERR(1) 
  965#define G_RM_AA_ZB_SUB_TERR2    RM_AA_ZB_SUB_TERR(2) 
  967#define G_RM_RA_ZB_OPA_SURF     RM_RA_ZB_OPA_SURF(1) 
  968#define G_RM_RA_ZB_OPA_SURF2    RM_RA_ZB_OPA_SURF(2) 
  969#define G_RM_RA_ZB_OPA_DECAL    RM_RA_ZB_OPA_DECAL(1) 
  970#define G_RM_RA_ZB_OPA_DECAL2   RM_RA_ZB_OPA_DECAL(2) 
  971#define G_RM_RA_ZB_OPA_INTER    RM_RA_ZB_OPA_INTER(1) 
  972#define G_RM_RA_ZB_OPA_INTER2   RM_RA_ZB_OPA_INTER(2) 
  974#define G_RM_AA_OPA_SURF    RM_AA_OPA_SURF(1) 
  975#define G_RM_AA_OPA_SURF2   RM_AA_OPA_SURF(2) 
  976#define G_RM_AA_XLU_SURF    RM_AA_XLU_SURF(1) 
  977#define G_RM_AA_XLU_SURF2   RM_AA_XLU_SURF(2) 
  978#define G_RM_AA_XLU_LINE    RM_AA_XLU_LINE(1) 
  979#define G_RM_AA_XLU_LINE2   RM_AA_XLU_LINE(2) 
  980#define G_RM_AA_DEC_LINE    RM_AA_DEC_LINE(1) 
  981#define G_RM_AA_DEC_LINE2   RM_AA_DEC_LINE(2) 
  982#define G_RM_AA_TEX_EDGE    RM_AA_TEX_EDGE(1) 
  983#define G_RM_AA_TEX_EDGE2   RM_AA_TEX_EDGE(2) 
  984#define G_RM_AA_SUB_SURF    RM_AA_SUB_SURF(1) 
  985#define G_RM_AA_SUB_SURF2   RM_AA_SUB_SURF(2) 
  986#define G_RM_AA_PCL_SURF    RM_AA_PCL_SURF(1) 
  987#define G_RM_AA_PCL_SURF2   RM_AA_PCL_SURF(2) 
  988#define G_RM_AA_OPA_TERR    RM_AA_OPA_TERR(1) 
  989#define G_RM_AA_OPA_TERR2   RM_AA_OPA_TERR(2) 
  990#define G_RM_AA_TEX_TERR    RM_AA_TEX_TERR(1) 
  991#define G_RM_AA_TEX_TERR2   RM_AA_TEX_TERR(2) 
  992#define G_RM_AA_SUB_TERR    RM_AA_SUB_TERR(1) 
  993#define G_RM_AA_SUB_TERR2   RM_AA_SUB_TERR(2) 
  995#define G_RM_RA_OPA_SURF    RM_RA_OPA_SURF(1) 
  996#define G_RM_RA_OPA_SURF2   RM_RA_OPA_SURF(2) 
  998#define G_RM_ZB_OPA_SURF    RM_ZB_OPA_SURF(1) 
  999#define G_RM_ZB_OPA_SURF2   RM_ZB_OPA_SURF(2) 
 1000#define G_RM_ZB_XLU_SURF    RM_ZB_XLU_SURF(1) 
 1001#define G_RM_ZB_XLU_SURF2   RM_ZB_XLU_SURF(2) 
 1002#define G_RM_ZB_OPA_DECAL   RM_ZB_OPA_DECAL(1) 
 1003#define G_RM_ZB_OPA_DECAL2  RM_ZB_OPA_DECAL(2) 
 1004#define G_RM_ZB_XLU_DECAL   RM_ZB_XLU_DECAL(1) 
 1005#define G_RM_ZB_XLU_DECAL2  RM_ZB_XLU_DECAL(2) 
 1006#define G_RM_ZB_CLD_SURF    RM_ZB_CLD_SURF(1) 
 1007#define G_RM_ZB_CLD_SURF2   RM_ZB_CLD_SURF(2) 
 1008#define G_RM_ZB_OVL_SURF    RM_ZB_OVL_SURF(1) 
 1009#define G_RM_ZB_OVL_SURF2   RM_ZB_OVL_SURF(2) 
 1010#define G_RM_ZB_PCL_SURF    RM_ZB_PCL_SURF(1) 
 1011#define G_RM_ZB_PCL_SURF2   RM_ZB_PCL_SURF(2) 
 1013#define G_RM_OPA_SURF       RM_OPA_SURF(1) 
 1014#define G_RM_OPA_SURF2      RM_OPA_SURF(2) 
 1015#define G_RM_XLU_SURF       RM_XLU_SURF(1) 
 1016#define G_RM_XLU_SURF2      RM_XLU_SURF(2) 
 1017#define G_RM_CLD_SURF       RM_CLD_SURF(1) 
 1018#define G_RM_CLD_SURF2      RM_CLD_SURF(2) 
 1019#define G_RM_TEX_EDGE       RM_TEX_EDGE(1) 
 1020#define G_RM_TEX_EDGE2      RM_TEX_EDGE(2) 
 1021#define G_RM_PCL_SURF       RM_PCL_SURF(1) 
 1022#define G_RM_PCL_SURF2      RM_PCL_SURF(2) 
 1023#define G_RM_ADD            RM_ADD(1) 
 1024#define G_RM_ADD2           RM_ADD(2) 
 1025#define G_RM_NOOP           RM_NOOP(1) 
 1026#define G_RM_NOOP2          RM_NOOP(2) 
 1027#define G_RM_VISCVG         RM_VISCVG(1) 
 1028#define G_RM_VISCVG2        RM_VISCVG(2) 
 1029#define G_RM_OPA_CI         RM_OPA_CI(1) 
 1030#define G_RM_OPA_CI2        RM_OPA_CI(2) 
 1033#define G_RM_FOG_SHADE_A    GBL_c1(G_BL_CLR_FOG, G_BL_A_SHADE, G_BL_CLR_IN, G_BL_1MA) 
 1034#define G_RM_FOG_PRIM_A     GBL_c1(G_BL_CLR_FOG, G_BL_A_FOG, G_BL_CLR_IN, G_BL_1MA) 
 1035#define G_RM_PASS           GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1) 
 1050#define G_SC_NON_INTERLACE  0 
 1051#define G_SC_ODD_INTERLACE  3 
 1052#define G_SC_EVEN_INTERLACE 2 
 1065    unsigned char  cn[4];   
 
 
 1095    long long int force_structure_alignment;
 
 1118    long long int force_structure_alignment;
 
 1121#define IPART(x) (((s32)((x) * 0x10000) >> 16) & 0xFFFF) 
 1122#define FPART(x)  ((s32)((x) * 0x10000) & 0xFFFF) 
 1124#define gdSPDefMtx( \ 
 1130        (IPART(xx) << 16) | IPART(yx), \ 
 1131        (IPART(zx) << 16) | IPART(wx), \ 
 1132        (IPART(xy) << 16) | IPART(yy), \ 
 1133        (IPART(zy) << 16) | IPART(wy), \ 
 1134        (IPART(xz) << 16) | IPART(yz), \ 
 1135        (IPART(zz) << 16) | IPART(wz), \ 
 1136        (IPART(xw) << 16) | IPART(yw), \ 
 1137        (IPART(zw) << 16) | IPART(ww), \ 
 1138        (FPART(xx) << 16) | FPART(yx), \ 
 1139        (FPART(zx) << 16) | FPART(wx), \ 
 1140        (FPART(xy) << 16) | FPART(yy), \ 
 1141        (FPART(zy) << 16) | FPART(wy), \ 
 1142        (FPART(xz) << 16) | FPART(yz), \ 
 1143        (FPART(zz) << 16) | FPART(wz), \ 
 1144        (FPART(xw) << 16) | FPART(yw), \ 
 1145        (FPART(zw) << 16) | FPART(ww), \ 
 1186#define G_MAXZ Error_please_update_viewport_Z_and_Y_see_GBI 
 1191#define G_NEW_MAXZ 0x7FFF 
 1212    long long int force_structure_alignment[2];
 
 1221#define LIGHT_TYPE_DIR 0 
 1225#define LIGHT_TYPE_POINT(kc) kc 
 1234    unsigned char col[3];   
 
 1236    unsigned char colc[3];  
 
 
 1251    unsigned char col[3];   
 
 1253    unsigned char colc[3];  
 
 
 1264    unsigned char col[3];   
 
 1266    unsigned char colc[3];  
 
 
 1309} OcclusionPlaneCandidate;
 
 1314    long long int force_structure_alignment[2];
 
 1319    long long int force_structure_alignment[1];
 
 1324    long long int force_structure_alignment[1];
 
 1329    long int force_structure_alignment;
 
 1335    long long int force_structure_alignment[3];
 
 1394#define gDefAmbient(r, g, b)    \ 
 1396        { (r), (g), (b) }, 0,   \ 
 1397        { (r), (g), (b) }, 0,   \ 
 1400#define gDefLight(r, g, b, x, y, z) \ 
 1402        { (r), (g), (b) }, 0,       \ 
 1403        { (r), (g), (b) }, 0,       \ 
 1404        { (x), (y), (z) }, 0,       \ 
 1408#define gdSPDefLights0(ar, ag, ab)                  \ 
 1410            gDefAmbient(ar, ag, ab),                \ 
 1413#define gdSPDefLights1(ar, ag, ab,                  \ 
 1414                       r1, g1, b1, x1, y1, z1)      \ 
 1417                gDefLight(r1, g1, b1, x1, y1, z1),  \ 
 1419            gDefAmbient(ar, ag, ab),                \ 
 1422#define gdSPDefLights2(ar, ag, ab,                  \ 
 1423                       r1, g1, b1, x1, y1, z1,      \ 
 1424                       r2, g2, b2, x2, y2, z2)      \ 
 1427                gDefLight(r1, g1, b1, x1, y1, z1),  \ 
 1428                gDefLight(r2, g2, b2, x2, y2, z2),  \ 
 1430            gDefAmbient(ar, ag, ab),                \ 
 1433#define gdSPDefLights3(ar, ag, ab,                  \ 
 1434                       r1, g1, b1, x1, y1, z1,      \ 
 1435                       r2, g2, b2, x2, y2, z2)      \ 
 1436                       r3, g3, b3, x3, y3, z3)      \ 
 1439                gDefLight(r1, g1, b1, x1, y1, z1),  \ 
 1440                gDefLight(r2, g2, b2, x2, y2, z2),  \ 
 1441                gDefLight(r3, g3, b3, x3, y3, z3),  \ 
 1443            gDefAmbient(ar, ag, ab),                \ 
 1446#define gdSPDefLights4(ar, ag, ab,                  \ 
 1447                       r1, g1, b1, x1, y1, z1,      \ 
 1448                       r2, g2, b2, x2, y2, z2,      \ 
 1449                       r3, g3, b3, x3, y3, z3,      \ 
 1450                       r4, g4, b4, x4, y4, z4)      \ 
 1453                gDefLight(r1, g1, b1, x1, y1, z1),  \ 
 1454                gDefLight(r2, g2, b2, x2, y2, z2),  \ 
 1455                gDefLight(r3, g3, b3, x3, y3, z3),  \ 
 1456                gDefLight(r4, g4, b4, x4, y4, z4),  \ 
 1458            gDefAmbient(ar, ag, ab),                \ 
 1461#define gdSPDefLights5(ar, ag, ab,                  \ 
 1462                       r1, g1, b1, x1, y1, z1,      \ 
 1463                       r2, g2, b2, x2, y2, z2,      \ 
 1464                       r3, g3, b3, x3, y3, z3,      \ 
 1465                       r4, g4, b4, x4, y4, z4,      \ 
 1466                       r5, g5, b5, x5, y5, z5)      \ 
 1469                gDefLight(r1, g1, b1, x1, y1, z1),  \ 
 1470                gDefLight(r2, g2, b2, x2, y2, z2),  \ 
 1471                gDefLight(r3, g3, b3, x3, y3, z3),  \ 
 1472                gDefLight(r4, g4, b4, x4, y4, z4),  \ 
 1473                gDefLight(r5, g5, b5, x5, y5, z5),  \ 
 1475            gDefAmbient(ar, ag, ab),                \ 
 1478#define gdSPDefLights6(ar, ag, ab,                  \ 
 1479                       r1, g1, b1, x1, y1, z1,      \ 
 1480                       r2, g2, b2, x2, y2, z2,      \ 
 1481                       r3, g3, b3, x3, y3, z3,      \ 
 1482                       r4, g4, b4, x4, y4, z4,      \ 
 1483                       r5, g5, b5, x5, y5, z5,      \ 
 1484                       r6, g6, b6, x6, y6, z6)      \ 
 1487                gDefLight(r1, g1, b1, x1, y1, z1),  \ 
 1488                gDefLight(r2, g2, b2, x2, y2, z2),  \ 
 1489                gDefLight(r3, g3, b3, x3, y3, z3),  \ 
 1490                gDefLight(r4, g4, b4, x4, y4, z4),  \ 
 1491                gDefLight(r5, g5, b5, x5, y5, z5),  \ 
 1492                gDefLight(r6, g6, b6, x6, y6, z6),  \ 
 1494            gDefAmbient(ar, ag, ab),                \ 
 1497#define gdSPDefLights7(ar, ag, ab,                  \ 
 1498                       r1, g1, b1, x1, y1, z1,      \ 
 1499                       r2, g2, b2, x2, y2, z2,      \ 
 1500                       r3, g3, b3, x3, y3, z3,      \ 
 1501                       r4, g4, b4, x4, y4, z4,      \ 
 1502                       r5, g5, b5, x5, y5, z5,      \ 
 1503                       r6, g6, b6, x6, y6, z6,      \ 
 1504                       r7, g7, b7, x7, y7, z7)      \ 
 1507                gDefLight(r1, g1, b1, x1, y1, z1),  \ 
 1508                gDefLight(r2, g2, b2, x2, y2, z2),  \ 
 1509                gDefLight(r3, g3, b3, x3, y3, z3),  \ 
 1510                gDefLight(r4, g4, b4, x4, y4, z4),  \ 
 1511                gDefLight(r5, g5, b5, x5, y5, z5),  \ 
 1512                gDefLight(r6, g6, b6, x6, y6, z6),  \ 
 1513                gDefLight(r7, g7, b7, x7, y7, z7),  \ 
 1515            gDefAmbient(ar, ag, ab),                \ 
 1518#define gdSPDefLights8(ar, ag, ab,                  \ 
 1519                       r1, g1, b1, x1, y1, z1,      \ 
 1520                       r2, g2, b2, x2, y2, z2,      \ 
 1521                       r3, g3, b3, x3, y3, z3,      \ 
 1522                       r4, g4, b4, x4, y4, z4,      \ 
 1523                       r5, g5, b5, x5, y5, z5,      \ 
 1524                       r6, g6, b6, x6, y6, z6,      \ 
 1525                       r7, g7, b7, x7, y7, z7,      \ 
 1526                       r8, g8, b8, x8, y8, z8)      \ 
 1529                gDefLight(r1, g1, b1, x1, y1, z1),  \ 
 1530                gDefLight(r2, g2, b2, x2, y2, z2),  \ 
 1531                gDefLight(r3, g3, b3, x3, y3, z3),  \ 
 1532                gDefLight(r4, g4, b4, x4, y4, z4),  \ 
 1533                gDefLight(r5, g5, b5, x5, y5, z5),  \ 
 1534                gDefLight(r6, g6, b6, x6, y6, z6),  \ 
 1535                gDefLight(r7, g7, b7, x7, y7, z7),  \ 
 1536                gDefLight(r8, g8, b8, x8, y8, z8),  \ 
 1538            gDefAmbient(ar, ag, ab),                \ 
 1541#define gdSPDefLights9(ar, ag, ab,                  \ 
 1542                       r1, g1, b1, x1, y1, z1,      \ 
 1543                       r2, g2, b2, x2, y2, z2,      \ 
 1544                       r3, g3, b3, x3, y3, z3,      \ 
 1545                       r4, g4, b4, x4, y4, z4,      \ 
 1546                       r5, g5, b5, x5, y5, z5,      \ 
 1547                       r6, g6, b6, x6, y6, z6,      \ 
 1548                       r7, g7, b7, x7, y7, z7,      \ 
 1549                       r8, g8, b8, x8, y8, z8,      \ 
 1550                       r9, g9, b9, x9, y9, z9)      \ 
 1553                gDefLight(r1, g1, b1, x1, y1, z1),  \ 
 1554                gDefLight(r2, g2, b2, x2, y2, z2),  \ 
 1555                gDefLight(r3, g3, b3, x3, y3, z3),  \ 
 1556                gDefLight(r4, g4, b4, x4, y4, z4),  \ 
 1557                gDefLight(r5, g5, b5, x5, y5, z5),  \ 
 1558                gDefLight(r6, g6, b6, x6, y6, z6),  \ 
 1559                gDefLight(r7, g7, b7, x7, y7, z7),  \ 
 1560                gDefLight(r8, g8, b8, x8, y8, z8),  \ 
 1561                gDefLight(r9, g9, b9, x9, y9, z9),  \ 
 1563            gDefAmbient(ar, ag, ab),                \ 
 1566#define gDefPointLight(r, g, b, x, y, z, kc, kl, kq)    \ 
 1568        { (r1), (g1), (b1) }, (kc),                     \ 
 1569        { (r1), (g1), (b1) }, (kl),                     \ 
 1570        { (x1), (y1), (z1) }, (kq),                     \ 
 1574#define gdSPDefPointLights0(ar, ag, ab)                     \ 
 1576            gDefAmbient(ar, ag, ab),                        \ 
 1579#define gdSPDefPointLights1(ar, ag, ab,                             \ 
 1580                            r1, g1, b1, x1, y1, z1, c1, l1, q1)     \ 
 1583                gDefPointLight(r1, g1, b1, x1, y1, z1, c1, l1, q1), \ 
 1585            gDefAmbient(ar, ag, ab),                                \ 
 1588#define gdSPDefPointLights2(ar, ag, ab,                             \ 
 1589                            r1, g1, b1, x1, y1, z1, c1, l1, q1,     \ 
 1590                            r2, g2, b2, x2, y2, z2, c2, l2, q2)     \ 
 1593                gDefPointLight(r1, g1, b1, x1, y1, z1, c1, l1, q1), \ 
 1594                gDefPointLight(r2, g2, b2, x2, y2, z2, c2, l2, q2), \ 
 1596            gDefAmbient(ar, ag, ab),                                \ 
 1599#define gdSPDefPointLights3(ar, ag, ab,                             \ 
 1600                            r1, g1, b1, x1, y1, z1, c1, l1, q1,     \ 
 1601                            r2, g2, b2, x2, y2, z2, c2, l2, q2,     \ 
 1602                            r3, g3, b3, x3, y3, z3, c3, l3, q3)     \ 
 1605                gDefPointLight(r1, g1, b1, x1, y1, z1, c1, l1, q1), \ 
 1606                gDefPointLight(r2, g2, b2, x2, y2, z2, c2, l2, q2), \ 
 1607                gDefPointLight(r3, g3, b3, x3, y3, z3, c3, l3, q3), \ 
 1609            gDefAmbient(ar, ag, ab),                                \ 
 1612#define gdSPDefPointLights4(ar, ag, ab,                             \ 
 1613                            r1, g1, b1, x1, y1, z1, c1, l1, q1,     \ 
 1614                            r2, g2, b2, x2, y2, z2, c2, l2, q2,     \ 
 1615                            r3, g3, b3, x3, y3, z3, c3, l3, q3,     \ 
 1616                            r4, g4, b4, x4, y4, z4, c4, l4, q4)     \ 
 1619                gDefPointLight(r1, g1, b1, x1, y1, z1, c1, l1, q1), \ 
 1620                gDefPointLight(r2, g2, b2, x2, y2, z2, c2, l2, q2), \ 
 1621                gDefPointLight(r3, g3, b3, x3, y3, z3, c3, l3, q3), \ 
 1622                gDefPointLight(r4, g4, b4, x4, y4, z4, c4, l4, q4), \ 
 1624            gDefAmbient(ar, ag, ab),                                \ 
 1627#define gdSPDefPointLights5(ar, ag, ab,                             \ 
 1628                            r1, g1, b1, x1, y1, z1, c1, l1, q1,     \ 
 1629                            r2, g2, b2, x2, y2, z2, c2, l2, q2,     \ 
 1630                            r3, g3, b3, x3, y3, z3, c3, l3, q3,     \ 
 1631                            r4, g4, b4, x4, y4, z4, c4, l4, q4,     \ 
 1632                            r5, g5, b5, x5, y5, z5, c5, l5, q5)     \ 
 1635                gDefPointLight(r1, g1, b1, x1, y1, z1, c1, l1, q1), \ 
 1636                gDefPointLight(r2, g2, b2, x2, y2, z2, c2, l2, q2), \ 
 1637                gDefPointLight(r3, g3, b3, x3, y3, z3, c3, l3, q3), \ 
 1638                gDefPointLight(r4, g4, b4, x4, y4, z4, c4, l4, q4), \ 
 1639                gDefPointLight(r5, g5, b5, x5, y5, z5, c5, l5, q5), \ 
 1641            gDefAmbient(ar, ag, ab),                                \ 
 1644#define gdSPDefPointLights6(ar, ag, ab,                             \ 
 1645                            r1, g1, b1, x1, y1, z1, c1, l1, q1,     \ 
 1646                            r2, g2, b2, x2, y2, z2, c2, l2, q2,     \ 
 1647                            r3, g3, b3, x3, y3, z3, c3, l3, q3,     \ 
 1648                            r4, g4, b4, x4, y4, z4, c4, l4, q4,     \ 
 1649                            r5, g5, b5, x5, y5, z5, c5, l5, q5,     \ 
 1650                            r6, g6, b6, x6, y6, z6, c6, l6, q6)     \ 
 1653                gDefPointLight(r1, g1, b1, x1, y1, z1, c1, l1, q1), \ 
 1654                gDefPointLight(r2, g2, b2, x2, y2, z2, c2, l2, q2), \ 
 1655                gDefPointLight(r3, g3, b3, x3, y3, z3, c3, l3, q3), \ 
 1656                gDefPointLight(r4, g4, b4, x4, y4, z4, c4, l4, q4), \ 
 1657                gDefPointLight(r5, g5, b5, x5, y5, z5, c5, l5, q5), \ 
 1658                gDefPointLight(r6, g6, b6, x6, y6, z6, c6, l6, q6), \ 
 1660            gDefAmbient(ar, ag, ab),                                \ 
 1663#define gdSPDefPointLights7(ar, ag, ab,                             \ 
 1664                            r1, g1, b1, x1, y1, z1, c1, l1, q1,     \ 
 1665                            r2, g2, b2, x2, y2, z2, c2, l2, q2,     \ 
 1666                            r3, g3, b3, x3, y3, z3, c3, l3, q3,     \ 
 1667                            r4, g4, b4, x4, y4, z4, c4, l4, q4,     \ 
 1668                            r5, g5, b5, x5, y5, z5, c5, l5, q5,     \ 
 1669                            r6, g6, b6, x6, y6, z6, c6, l6, q6,     \ 
 1670                            r7, g7, b7, x7, y7, z7, c7, l7, q7)     \ 
 1673                gDefPointLight(r1, g1, b1, x1, y1, z1, c1, l1, q1), \ 
 1674                gDefPointLight(r2, g2, b2, x2, y2, z2, c2, l2, q2), \ 
 1675                gDefPointLight(r3, g3, b3, x3, y3, z3, c3, l3, q3), \ 
 1676                gDefPointLight(r4, g4, b4, x4, y4, z4, c4, l4, q4), \ 
 1677                gDefPointLight(r5, g5, b5, x5, y5, z5, c5, l5, q5), \ 
 1678                gDefPointLight(r6, g6, b6, x6, y6, z6, c6, l6, q6), \ 
 1679                gDefPointLight(r7, g7, b7, x7, y7, z7, c7, l7, q7), \ 
 1681            gDefAmbient(ar, ag, ab),                                \ 
 1684#define gdSPDefPointLights8(ar, ag, ab,                             \ 
 1685                            r1, g1, b1, x1, y1, z1, c1, l1, q1,     \ 
 1686                            r2, g2, b2, x2, y2, z2, c2, l2, q2,     \ 
 1687                            r3, g3, b3, x3, y3, z3, c3, l3, q3,     \ 
 1688                            r4, g4, b4, x4, y4, z4, c4, l4, q4,     \ 
 1689                            r5, g5, b5, x5, y5, z5, c5, l5, q5,     \ 
 1690                            r6, g6, b6, x6, y6, z6, c6, l6, q6,     \ 
 1691                            r7, g7, b7, x7, y7, z7, c7, l7, q7,     \ 
 1692                            r8, g8, b8, x8, y8, z8, c8, l8, q8)     \ 
 1695                gDefPointLight(r1, g1, b1, x1, y1, z1, c1, l1, q1), \ 
 1696                gDefPointLight(r2, g2, b2, x2, y2, z2, c2, l2, q2), \ 
 1697                gDefPointLight(r3, g3, b3, x3, y3, z3, c3, l3, q3), \ 
 1698                gDefPointLight(r4, g4, b4, x4, y4, z4, c4, l4, q4), \ 
 1699                gDefPointLight(r5, g5, b5, x5, y5, z5, c5, l5, q5), \ 
 1700                gDefPointLight(r6, g6, b6, x6, y6, z6, c6, l6, q6), \ 
 1701                gDefPointLight(r7, g7, b7, x7, y7, z7, c7, l7, q7), \ 
 1702                gDefPointLight(r8, g8, b8, x8, y8, z8, c8, l8, q8), \ 
 1704            gDefAmbient(ar, ag, ab),                                \ 
 1707#define gdSPDefPointLights9(ar, ag, ab,                             \ 
 1708                            r1, g1, b1, x1, y1, z1, c1, l1, q1,     \ 
 1709                            r2, g2, b2, x2, y2, z2, c2, l2, q2,     \ 
 1710                            r3, g3, b3, x3, y3, z3, c3, l3, q3,     \ 
 1711                            r4, g4, b4, x4, y4, z4, c4, l4, q4,     \ 
 1712                            r5, g5, b5, x5, y5, z5, c5, l5, q5,     \ 
 1713                            r6, g6, b6, x6, y6, z6, c6, l6, q6,     \ 
 1714                            r7, g7, b7, x7, y7, z7, c7, l7, q7,     \ 
 1715                            r8, g8, b8, x8, y8, z8, c8, l8, q8,     \ 
 1716                            r9, g9, b9, x9, y9, z9, c9, l9, q9)     \ 
 1719                gDefPointLight(r1, g1, b1, x1, y1, z1, c1, l1, q1), \ 
 1720                gDefPointLight(r2, g2, b2, x2, y2, z2, c2, l2, q2), \ 
 1721                gDefPointLight(r3, g3, b3, x3, y3, z3, c3, l3, q3), \ 
 1722                gDefPointLight(r4, g4, b4, x4, y4, z4, c4, l4, q4), \ 
 1723                gDefPointLight(r5, g5, b5, x5, y5, z5, c5, l5, q5), \ 
 1724                gDefPointLight(r6, g6, b6, x6, y6, z6, c6, l6, q6), \ 
 1725                gDefPointLight(r7, g7, b7, x7, y7, z7, c7, l7, q7), \ 
 1726                gDefPointLight(r8, g8, b8, x8, y8, z8, c8, l8, q8), \ 
 1727                gDefPointLight(r9, g9, b9, x9, y9, z9, c9, l9, q9), \ 
 1729            gDefAmbient(ar, ag, ab),                                \ 
 1732#define gdSPDefLookAt(rightx, righty, rightz, upx, upy, upz)    \ 
 1734        {{{ rightx, righty, rightz }, 0 }},                     \ 
 1735        {{{ upx, upy, upz }, 0 }},                              \ 
 1740    unsigned int type : 8;
 
 1741    unsigned int len  : 16;
 
 1758    unsigned int par : 8;
 
 1759    unsigned int len : 16;
 
 
 1768    unsigned int len : 8;
 
 1769    unsigned int ofs : 8;
 
 1770    unsigned int par : 8;
 
 
 1779    unsigned int index  : 8;
 
 1780    unsigned int offset : 16;
 
 
 1789    unsigned int size   : 8;
 
 1790    unsigned int offset : 8;
 
 1791    unsigned int index  : 8;
 
 
 1816    unsigned int   pad : 8;
 
 1817    unsigned short vstart_x2;
 
 1818    unsigned short pad2;
 
 1819    unsigned short vend_x2;
 
 1824    unsigned int   pad : 24;
 
 1847    unsigned int sft  : 8;
 
 1848    unsigned int len  : 8;
 
 1849    unsigned int data : 32;
 
 1855    unsigned int sft  : 8;
 
 1856    unsigned int len  : 8;
 
 1857    unsigned int data : 32;
 
 1862    unsigned char  lodscale;
 
 1863    unsigned char  pad   : 2;
 
 1864    unsigned char  level : 3;
 
 1865    unsigned char  tile  : 3;
 
 1884    unsigned int fmt : 3;
 
 1885    unsigned int siz : 2;
 
 1886    unsigned int pad : 7;
 
 1887    unsigned int wd  : 12;  
 
 
 1894    unsigned int a0  : 4;
 
 1895    unsigned int c0  : 5;
 
 1896    unsigned int Aa0 : 3;
 
 1897    unsigned int Ac0 : 3;
 
 1898    unsigned int a1  : 4;
 
 1899    unsigned int c1  : 5;
 
 1901    unsigned int b0  : 4;
 
 1902    unsigned int b1  : 4;
 
 1903    unsigned int Aa1 : 3;
 
 1904    unsigned int Ac1 : 3;
 
 1905    unsigned int d0  : 3;
 
 1906    unsigned int Ab0 : 3;
 
 1907    unsigned int Ad0 : 3;
 
 1908    unsigned int d1  : 3;
 
 1909    unsigned int Ab1 : 3;
 
 1910    unsigned int Ad1 : 3;
 
 1916    unsigned char prim_min_level;
 
 1917    unsigned char prim_level;
 
 1919        unsigned long color;
 
 1935    unsigned int pad    : 8;
 
 1944    unsigned int fmt     : 3;
 
 1945    unsigned int siz     : 2;
 
 1946    unsigned int pad0    : 1;
 
 1947    unsigned int line    : 9;
 
 1948    unsigned int tmem    : 9;
 
 1949    unsigned int pad1    : 5;
 
 1950    unsigned int tile    : 3;
 
 1951    unsigned int palette : 4;
 
 1952    unsigned int ct      : 1;
 
 1953    unsigned int mt      : 1;
 
 1954    unsigned int maskt   : 4;
 
 1955    unsigned int shiftt  : 4;
 
 1956    unsigned int cs      : 1;
 
 1957    unsigned int ms      : 1;
 
 1958    unsigned int masks   : 4;
 
 1959    unsigned int shifts  : 4;
 
 1964    unsigned int sl   : 12;
 
 1965    unsigned int tl   : 12;
 
 1967    unsigned int tile : 3;
 
 1968    unsigned int sh   : 12;
 
 1969    unsigned int th   : 12;
 
 1972typedef Gloadtile Gloadblock;
 
 1974typedef Gloadtile Gsettilesize;
 
 1976typedef Gloadtile Gloadtlut;
 
 1979    unsigned int cmd  : 8;  
 
 1980    unsigned int xl   : 12; 
 
 1981    unsigned int yl   : 12; 
 
 1982    unsigned int pad1 : 5;  
 
 1983    unsigned int tile : 3;  
 
 1984    unsigned int xh   : 12; 
 
 1985    unsigned int yh   : 12; 
 
 1986    unsigned int s    : 16; 
 
 1987    unsigned int t    : 16; 
 
 1988    unsigned int dsdx : 16; 
 
 1989    unsigned int dtdy : 16; 
 
 1992#define MakeTexRect(xh,yh,flip,tile,xl,yl,s,t,dsdx,dtdy)        \ 
 1993    G_TEXRECT, xh, yh, 0, flip, 0, tile, xl, yl, s, t, dsdx, dtdy 
 2007    unsigned int  pad  : 4;
 
 2008    unsigned int  len  : 8; 
 
 2009    unsigned int  pad2 : 4;
 
 2040    GsetothermodeH  setothermodeH;
 
 2041    GsetothermodeL  setothermodeL;
 
 2043    Gperspnorm      perspnorm;
 
 2045    Gsetcombine     setcombine;
 
 2050    Gsettilesize    settilesize;
 
 2052    Gsetprimdepth   setprimdepth;
 
 2053    long long int force_structure_alignment;
 
 
 2064#define g1Word(pkt, c, l)                   \ 
 2066    Gfx *_g = (Gfx *)(pkt);                 \ 
 2067    _g->words.w0 = (_SHIFTL((c), 24,  8) |  \ 
 2068                    _SHIFTL((l),  0, 24));  \ 
 2073#define gs1Word(c, l)       \ 
 2075   (_SHIFTL((c), 24,  8) |  \ 
 2076    _SHIFTL((l),  0, 24)),  \ 
 2083#define gDma0p(pkt, c, s, l)                \ 
 2085    Gfx *_g = (Gfx *)(pkt);                 \ 
 2087    _g->words.w0 = (_SHIFTL((c), 24,  8) |  \ 
 2088                    _SHIFTL((l),  0, 24));  \ 
 2089    _g->words.w1 = (unsigned int)(s);       \ 
 2092#define gsDma0p(c, s, l)    \ 
 2094   (_SHIFTL((c), 24,  8) |  \ 
 2095    _SHIFTL((l),  0, 24)),  \ 
 2099#define gDma1p(pkt, c, s, l, p)             \ 
 2101    Gfx *_g = (Gfx *)(pkt);                 \ 
 2103    _g->words.w0 = (_SHIFTL((c), 24,  8) |  \ 
 2104                    _SHIFTL((p), 16,  8) |  \ 
 2105                    _SHIFTL((l),  0, 16));  \ 
 2106    _g->words.w1 = (unsigned int)(s);       \ 
 2109#define gsDma1p(c, s, l, p) \ 
 2111   (_SHIFTL((c), 24,  8) |  \ 
 2112    _SHIFTL((p), 16,  8) |  \ 
 2113    _SHIFTL((l),  0, 16)),  \ 
 2117#define gDma2p(pkt, c, adrs, len, idx, ofs)             \ 
 2119    Gfx *_g = (Gfx *)(pkt);                             \ 
 2121    _g->words.w0 = (_SHIFTL((c),             24, 8) |   \ 
 2122                    _SHIFTL(((len) - 1) / 8, 19, 5) |   \ 
 2123                    _SHIFTL((ofs) / 8,        8, 8) |   \ 
 2124                    _SHIFTL((idx),            0, 8));   \ 
 2125    _g->words.w1 = (unsigned int)(adrs);                \ 
 2128#define gsDma2p(c, adrs, len, idx, ofs) \ 
 2130   (_SHIFTL((c),             24, 8) |   \ 
 2131    _SHIFTL(((len) - 1) / 8, 19, 5) |   \ 
 2132    _SHIFTL((ofs) / 8,        8, 8) |   \ 
 2133    _SHIFTL((idx),            0, 8)),   \ 
 2134    (unsigned int)(adrs)                \ 
 2137#define gSPNoOp(pkt)    g1Word(pkt, G_SPNOOP, 0) 
 2138#define gsSPNoOp()      gs1Word(    G_SPNOOP, 0) 
 2259#define gSPMatrix(pkt, m, p) \ 
 2260        gDma2p((pkt),G_MTX, (m), sizeof(Mtx), (p) ^ G_MTX_PUSH ^ G_MTX_LOAD, 0) 
 
 2266#define gsSPMatrix(m, p) \ 
 2267        gsDma2p(     G_MTX, (m), sizeof(Mtx), (p) ^ G_MTX_PUSH ^ G_MTX_LOAD, 0) 
 
 2288#define gSPPopMatrixN(pkt, mtx, num) \ 
 2289    gDma2p((pkt), G_POPMTX, (num) * 64, 64, (mtx) + G_MV_MMTX, 0) 
 
 2295#define gsSPPopMatrixN(mtx, num) \ 
 2296    gsDma2p(      G_POPMTX, (num) * 64, 64, (mtx) + G_MV_MMTX, 0) 
 
 2304#define gSPPopMatrix(pkt, mtx)       gSPPopMatrixN((pkt), (mtx), 1) 
 2310#define gsSPPopMatrix(mtx)           gsSPPopMatrixN(      (mtx), 1) 
 2334#define gSPVertex(pkt, v, n, v0)                    \ 
 2336    Gfx *_g = (Gfx *)(pkt);                         \ 
 2338    _g->words.w0 = (_SHIFTL(G_VTX,      24, 8) |    \ 
 2339                    _SHIFTL((n),        12, 8) |    \ 
 2340                    _SHIFTL((v0) + (n),  1, 7));    \ 
 2341    _g->words.w1 = (unsigned int)(v);               \ 
 
 2349#define gsSPVertex(v, n, v0)        \ 
 2351   (_SHIFTL(G_VTX,      24, 8) |    \ 
 2352    _SHIFTL((n),        12, 8) |    \ 
 2353    _SHIFTL((v0) + (n),  1, 7)),    \ 
 
 2357#define gSPViewport(pkt, v) \ 
 2358        gDma2p((pkt), G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT, 0) 
 2359#define gsSPViewport(v) \ 
 2360        gsDma2p(      G_MOVEMEM, (v), sizeof(Vp), G_MV_VIEWPORT, 0) 
 2366#define _gSPDisplayListRaw(pkt,dl,hint)  gDma1p(pkt, G_DL, dl, hint, G_DL_PUSH) 
 2367#define _gsSPDisplayListRaw(   dl,hint)  gsDma1p(    G_DL, dl, hint, G_DL_PUSH) 
 2369#define _gSPBranchListRaw(pkt,dl,hint)   gDma1p(pkt, G_DL, dl, hint, G_DL_NOPUSH) 
 2370#define _gsSPBranchListRaw(   dl,hint)   gsDma1p(    G_DL, dl, hint, G_DL_NOPUSH) 
 2372#define _gSPEndDisplayListRaw(pkt,hint)  g1Word(pkt, G_ENDDL, hint) 
 2373#define _gsSPEndDisplayListRaw(hint)     gs1Word(    G_ENDDL, hint) 
 2379#define _DLHINTVALUE(count) \ 
 2380    (((count) > 0 && ((count) % G_INPUT_BUFFER_CMDS) > 0) ? \ 
 2381    ((G_INPUT_BUFFER_CMDS - ((count) % G_INPUT_BUFFER_CMDS)) << 3) : 0) 
 2394#define gSPDisplayListHint(pkt, dl, count) _gSPDisplayListRaw(pkt, dl, _DLHINTVALUE(count)) 
 2398#define gsSPDisplayListHint(    dl, count) _gsSPDisplayListRaw(    dl, _DLHINTVALUE(count)) 
 2403#define gSPBranchListHint(pkt, dl, count) _gSPBranchListRaw( pkt, dl, _DLHINTVALUE(count)) 
 2408#define gsSPBranchListHint(    dl, count) _gsSPBranchListRaw(     dl, _DLHINTVALUE(count)) 
 2413#define gSPEndDisplayListHint(pkt, count) _gSPEndDisplayListRaw( pkt, _DLHINTVALUE(count)) 
 2418#define gsSPEndDisplayListHint(    count) _gsSPEndDisplayListRaw(     _DLHINTVALUE(count)) 
 2423#define gSPDisplayList(pkt, dl) _gSPDisplayListRaw(pkt, dl, 0) 
 2427#define gsSPDisplayList(    dl) _gsSPDisplayListRaw(    dl, 0) 
 2432#define gSPBranchList(pkt, dl)  _gSPBranchListRaw( pkt, dl, 0) 
 2436#define gsSPBranchList(    dl)  _gsSPBranchListRaw(     dl, 0) 
 2441#define gSPEndDisplayList(pkt)  _gSPEndDisplayListRaw( pkt, 0) 
 2445#define gsSPEndDisplayList(  )  _gsSPEndDisplayListRaw(     0) 
 2454#define gSPLoadUcodeEx(pkt, uc_start, uc_dstart, uc_dsize)  \ 
 2456    Gfx *_g = (Gfx *)(pkt);                                 \ 
 2458    _g->words.w0 = _SHIFTL(G_RDPHALF_1, 24, 8);             \ 
 2459    _g->words.w1 = (unsigned int)(uc_dstart);               \ 
 2461    _g = (Gfx *)(pkt);                                      \ 
 2463    _g->words.w0 = (_SHIFTL(G_LOAD_UCODE,        24,  8) |  \ 
 2464                    _SHIFTL((int)(uc_dsize) - 1,  0, 16));  \ 
 2465    _g->words.w1 = (unsigned int)(uc_start);                \ 
 
 2471#define gsSPLoadUcodeEx(uc_start, uc_dstart, uc_dsize)  \ 
 2473    _SHIFTL(G_RDPHALF_1, 24, 8),                        \ 
 2474    (unsigned int)(uc_dstart),                          \ 
 2477   (_SHIFTL(G_LOAD_UCODE,        24,  8) |              \ 
 2478    _SHIFTL((int)(uc_dsize) - 1,  0, 16)),              \ 
 2479    (unsigned int)(uc_start),                           \ 
 
 2482#define gSPLoadUcode(pkt, uc_start, uc_dstart)  \ 
 2483        gSPLoadUcodeEx((pkt), (uc_start), (uc_dstart), SP_UCODE_DATA_SIZE) 
 2484#define gsSPLoadUcode(uc_start, uc_dstart)      \ 
 2485        gsSPLoadUcodeEx((uc_start), (uc_dstart), SP_UCODE_DATA_SIZE) 
 2487#define gSPLoadUcodeL(pkt, ucode)                                   \ 
 2488        gSPLoadUcode((pkt), OS_K0_TO_PHYSICAL(& ucode##TextStart),  \ 
 2489                            OS_K0_TO_PHYSICAL(& ucode##DataStart)) 
 2490#define gsSPLoadUcodeL(ucode)                                       \ 
 2491        gsSPLoadUcode(      OS_K0_TO_PHYSICAL(& ucode##TextStart),  \ 
 2492                            OS_K0_TO_PHYSICAL(& ucode##DataStart)) 
 2497#define gSPDma_io(pkt, flag, dmem, dram, size)      \ 
 2499    Gfx *_g = (Gfx *)(pkt);                         \ 
 2501    _g->words.w0 = (_SHIFTL(G_DMA_IO, 24, 8) |      \ 
 2502                    _SHIFTL((flag), 23, 1) |        \ 
 2503                    _SHIFTL((dmem) / 8, 13, 10) |   \ 
 2504                    _SHIFTL((size) - 1, 0, 12));    \ 
 2505    _g->words.w1 = (unsigned int)(dram);            \ 
 
 2511#define gsSPDma_io(flag, dmem, dram, size)  \ 
 2513   (_SHIFTL(G_DMA_IO,   24,  8) |           \ 
 2514    _SHIFTL((flag),     23,  1) |           \ 
 2515    _SHIFTL((dmem) / 8, 13, 10) |           \ 
 2516    _SHIFTL((size) - 1,  0, 12)),           \ 
 2517    (unsigned int)(dram)                    \ 
 
 2520#define gSPDmaRead(pkt,dmem,dram,size)  gSPDma_io((pkt),0,(dmem),(dram),(size)) 
 2521#define gsSPDmaRead(dmem,dram,size)     gsSPDma_io(     0,(dmem),(dram),(size)) 
 2522#define gSPDmaWrite(pkt,dmem,dram,size) gSPDma_io((pkt),1,(dmem),(dram),(size)) 
 2523#define gsSPDmaWrite(dmem,dram,size)    gsSPDma_io(     1,(dmem),(dram),(size)) 
 2535#define gSPMemset(pkt, dram, value, size)               \ 
 2537    gImmp1(pkt, G_RDPHALF_1, ((value) & 0xFFFF));       \ 
 2538    gDma0p(pkt, G_MEMSET, (dram), ((size) & 0xFFFFF0)); \ 
 
 2544#define gsSPMemset(dram, value, size)    \ 
 2545    gsImmp1(G_RDPHALF_1, ((value) & 0xFFFF)), \ 
 2546    gsDma0p(G_MEMSET, (dram), ((size) & 0xFFFFF0)) 
 
 2564#define gSPFlush(pkt)   g1Word(pkt, G_FLUSH, 0) 
 2569#define gsSPFlush()    gs1Word(     G_FLUSH, 0) 
 2575#define gImmp1(pkt, c, p0)              \ 
 2577    Gfx *_g = (Gfx *)(pkt);             \ 
 2579    _g->words.w0 = _SHIFTL((c), 24, 8); \ 
 2580    _g->words.w1 = (unsigned int)(p0);  \ 
 2583#define gsImmp1(c, p0)      \ 
 2585    _SHIFTL((c), 24, 8),    \ 
 2586    (unsigned int)(p0)      \ 
 2589#define gMoveWd(pkt, index, offset, data) \ 
 2590    gDma1p((pkt), G_MOVEWORD, data, (offset & 0xFFF), index) 
 2591#define gsMoveWd(    index, offset, data) \ 
 2592    gsDma1p(      G_MOVEWORD, data, (offset & 0xFFF), index) 
 2594#define gMoveHalfwd(pkt, index, offset, data) \ 
 2595    gDma1p((pkt), G_MOVEWORD, data, (offset & 0xFFF) | G_MW_HALFWORD_FLAG, index) 
 2596#define gsMoveHalfwd(    index, offset, data) \ 
 2597    gsDma1p(      G_MOVEWORD, data, (offset & 0xFFF) | G_MW_HALFWORD_FLAG, index) 
 2604#define __gsSP1Triangle_w1(v0, v1, v2)    \ 
 2605   (_SHIFTL((v0) * 2, 16, 8) |              \ 
 2606    _SHIFTL((v1) * 2,  8, 8) |              \ 
 2607    _SHIFTL((v2) * 2,  0, 8)) 
 2609#define __gsSP1Triangle_w1f(v0, v1, v2, flag)         \ 
 2610   (((flag) == 0) ? __gsSP1Triangle_w1(v0, v1, v2) :    \ 
 2611    ((flag) == 1) ? __gsSP1Triangle_w1(v1, v2, v0) :    \ 
 2612                    __gsSP1Triangle_w1(v2, v0, v1)) 
 2614#define __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)   \ 
 2615   (((flag) == 0) ? __gsSP1Triangle_w1(v0, v1, v2) :    \ 
 2616    ((flag) == 1) ? __gsSP1Triangle_w1(v1, v2, v3) :    \ 
 2617    ((flag) == 2) ? __gsSP1Triangle_w1(v2, v3, v0) :    \ 
 2618                    __gsSP1Triangle_w1(v3, v0, v1)) 
 2620#define __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag)   \ 
 2621   (((flag) == 0) ? __gsSP1Triangle_w1(v0, v2, v3) :    \ 
 2622    ((flag) == 1) ? __gsSP1Triangle_w1(v1, v3, v0) :    \ 
 2623    ((flag) == 2) ? __gsSP1Triangle_w1(v2, v0, v1) :    \ 
 2624                    __gsSP1Triangle_w1(v3, v1, v2)) 
 2630#define gSP1Triangle(pkt, v0, v1, v2, flag) \ 
 2631    g1Word(pkt, G_TRI1, __gsSP1Triangle_w1f(v0, v1, v2, flag)) 
 
 2635#define gsSP1Triangle(v0, v1, v2, flag)     \ 
 2636    gs1Word(G_TRI1, __gsSP1Triangle_w1f(v0, v1, v2, flag)) 
 
 2641#define gSP1Quadrangle(pkt, v0, v1, v2, v3, flag)                   \ 
 2643    Gfx *_g = (Gfx *)(pkt);                                         \ 
 2644    _g->words.w0 = (_SHIFTL(G_QUAD, 24, 8) |                        \ 
 2645                    __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag));   \ 
 2646    _g->words.w1 = (__gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag));   \ 
 
 2652#define gsSP1Quadrangle(v0, v1, v2, v3, flag)       \ 
 2654   (_SHIFTL(G_QUAD, 24, 8) |                        \ 
 2655    __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)),   \ 
 2656    __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag)     \ 
 
 2662#define gSP2Triangles(pkt, v00, v01, v02, flag0, v10, v11, v12, flag1)  \ 
 2664    Gfx *_g = (Gfx *)(pkt);                                             \ 
 2665    _g->words.w0 = (_SHIFTL(G_TRI2, 24, 8) |                            \ 
 2666                    __gsSP1Triangle_w1f(v00, v01, v02, flag0));         \ 
 2667    _g->words.w1 =  __gsSP1Triangle_w1f(v10, v11, v12, flag1);          \ 
 
 2673#define gsSP2Triangles(v00, v01, v02, flag0, v10, v11, v12, flag1)  \ 
 2675   (_SHIFTL(G_TRI2, 24, 8) |                                        \ 
 2676    __gsSP1Triangle_w1f(v00, v01, v02, flag0)),                     \ 
 2677    __gsSP1Triangle_w1f(v10, v11, v12, flag1)                       \ 
 
 2686#define G_SNAKE_RIGHT  0 
 2693#define G_SNAKE_LEFT 1 
 2704#define G_SNAKE_LAST  0x40 
 2706#define _gSPTriSnakeW0(i1, i2, i3)        \ 
 2707    (_SHIFTL(G_TRISNAKE,         24, 8) | \ 
 2708     _SHIFTL((i2)*2,             16, 8) | \ 
 2709     _SHIFTL((i1)*2,              8, 8) | \ 
 2710     _SHIFTL((i3)*2|G_SNAKE_LEFT, 0, 8)) 
 2711#define _gSPTriSnakeW1(i4, i4d, i5, i5d, i6, i6d, i7, i7d) \ 
 2712    (_SHIFTL((i4)*2|(i4d),       24, 8) |                  \ 
 2713     _SHIFTL((i5)*2|(i5d),       16, 8) |                  \ 
 2714     _SHIFTL((i6)*2|(i6d),        8, 8) |                  \ 
 2715     _SHIFTL((i7)*2|(i7d),        0, 8)) 
 2769#define gSPTriSnake(pkt, i1, i2, i3, i4, i4d, i5, i5d, i6, i6d, i7, i7d) \ 
 2771    Gfx *_g = (Gfx *)(pkt);                                              \ 
 2772    _g->words.w0 = _gSPTriSnakeW0(i1, i2, i3);                           \ 
 2773    _g->words.w1 = _gSPTriSnakeW1(i4, i4d, i5, i5d, i6, i6d, i7, i7d);   \ 
 
 2778#define gsSPTriSnake(i1, i2, i3, i4, i4d, i5, i5d, i6, i6d, i7, i7d) \ 
 2780    _gSPTriSnakeW0(i1, i2, i3),                                      \ 
 2781    _gSPTriSnakeW1(i4, i4d, i5, i5d, i6, i6d, i7, i7d)               \ 
 
 2794#define gSPContinueSnake(pkt, i0, i0d, i1, i1d, i2, i2d, i3, i3d,      \ 
 2795                              i4, i4d, i5, i5d, i6, i6d, i7, i7d)      \ 
 2797    Gfx *_g = (Gfx *)(pkt);                                            \ 
 2798    _g->words.w0 = _gSPTriSnakeW1(i0, i0d, i1, i1d, i2, i2d, i3, i3d); \ 
 2799    _g->words.w1 = _gSPTriSnakeW1(i4, i4d, i5, i5d, i6, i6d, i7, i7d); \ 
 2804#define gsSPContinueSnake(i0, i0d, i1, i1d, i2, i2d, i3, i3d, \ 
 2805                          i4, i4d, i5, i5d, i6, i6d, i7, i7d) \ 
 2807    _gSPTriSnakeW1(i0, i0d, i1, i1d, i2, i2d, i3, i3d),       \ 
 2808    _gSPTriSnakeW1(i4, i4d, i5, i5d, i6, i6d, i7, i7d)        \ 
 2830#define gSPTriStrip(pkt, v1, v2, v3, v4, v5, v6, v7)              \ 
 2831    gSPTriSnake(pkt, v1, v2,                                      \ 
 2832        (v3) | (((v4) & 0x80) ? G_SNAKE_LAST : 0),                \ 
 2833        (v4) | (((v5) & 0x80) ? G_SNAKE_LAST : 0), G_SNAKE_RIGHT, \ 
 2834        (v5) | (((v6) & 0x80) ? G_SNAKE_LAST : 0), G_SNAKE_LEFT,  \ 
 2835        (v6) | (((v7) & 0x80) ? G_SNAKE_LAST : 0), G_SNAKE_RIGHT, \ 
 2836        (v7) | G_SNAKE_LAST, G_SNAKE_LEFT) 
 
 2840#define gsSPTriStrip(v1, v2, v3, v4, v5, v6, v7)                  \ 
 2841    gsSPTriSnake(v1, v2,                                          \ 
 2842        (v3) | (((v4) & 0x80) ? G_SNAKE_LAST : 0),                \ 
 2843        (v4) | (((v5) & 0x80) ? G_SNAKE_LAST : 0), G_SNAKE_RIGHT, \ 
 2844        (v5) | (((v6) & 0x80) ? G_SNAKE_LAST : 0), G_SNAKE_LEFT,  \ 
 2845        (v6) | (((v7) & 0x80) ? G_SNAKE_LAST : 0), G_SNAKE_RIGHT, \ 
 2846        (v7) | G_SNAKE_LAST, G_SNAKE_LEFT) 
 
 2854#define gSPTriFan(pkt, v1, v2, v3, v4, v5, v6, v7)               \ 
 2855    gSPTriSnake(pkt, v1, v2,                                     \ 
 2856        (v3) | (((v4) & 0x80) ? G_SNAKE_LAST : 0),               \ 
 2857        (v4) | (((v5) & 0x80) ? G_SNAKE_LAST : 0), G_SNAKE_LEFT, \ 
 2858        (v5) | (((v6) & 0x80) ? G_SNAKE_LAST : 0), G_SNAKE_LEFT, \ 
 2859        (v6) | (((v7) & 0x80) ? G_SNAKE_LAST : 0), G_SNAKE_LEFT, \ 
 2860        (v7) | G_SNAKE_LAST, G_SNAKE_LEFT) 
 
 2864#define gsSPTriFan(v1, v2, v3, v4, v5, v6, v7)                   \ 
 2865    gsSPTriSnake(v1, v2,                                         \ 
 2866        (v3) | (((v4) & 0x80) ? G_SNAKE_LAST : 0),               \ 
 2867        (v4) | (((v5) & 0x80) ? G_SNAKE_LAST : 0), G_SNAKE_LEFT, \ 
 2868        (v5) | (((v6) & 0x80) ? G_SNAKE_LAST : 0), G_SNAKE_LEFT, \ 
 2869        (v6) | (((v7) & 0x80) ? G_SNAKE_LAST : 0), G_SNAKE_LEFT, \ 
 2870        (v7) | G_SNAKE_LAST, G_SNAKE_LEFT) 
 
 2876#ifdef F3DEX2_SEGMENTS 
 2880#define gSPSegment(pkt, segment, base)              \ 
 2881    gMoveWd(pkt, G_MW_SEGMENT, (segment) * 4, (base)) 
 2882#define gsSPSegment(segment, base)                  \ 
 2883    gsMoveWd(    G_MW_SEGMENT, (segment) * 4, (base)) 
 2887#define gSPSegment(pkt, segment, base)              \ 
 2888    gDma1p((pkt), G_RELSEGMENT, (base), ((segment) * 4) & 0xFFF, G_MW_SEGMENT) 
 2889#define gsSPSegment(segment, base)                  \ 
 2890    gsDma1p(      G_RELSEGMENT, (base), ((segment) * 4) & 0xFFF, G_MW_SEGMENT) 
 2893#define gSPPerspNormalize(pkt, s)   gMoveHalfwd(pkt, G_MW_FX, G_MWO_PERSPNORM, (s)) 
 2894#define gsSPPerspNormalize(s)       gsMoveHalfwd(    G_MW_FX, G_MWO_PERSPNORM, (s)) 
 2901#define gSPClipRatio(pkt, r) gSPNoOp(pkt) 
 2907#define gsSPClipRatio(r) gsSPNoOp() 
 2915#define gSPForceMatrix(pkt, mptr) gSPNoOp(pkt) 
 2921#define gsSPForceMatrix(mptr)    gsSPNoOp() 
 2958#define gSPAmbOcclusionAmb(pkt, amb)     gMoveHalfwd(pkt, G_MW_FX, G_MWO_AO_AMBIENT, amb) 
 2962#define gsSPAmbOcclusionAmb(amb)        gsMoveHalfwd(     G_MW_FX, G_MWO_AO_AMBIENT, amb) 
 2966#define gSPAmbOcclusionDir(pkt, dir)     gMoveHalfwd(pkt, G_MW_FX, G_MWO_AO_DIRECTIONAL, dir) 
 2970#define gsSPAmbOcclusionDir(dir)        gsMoveHalfwd(     G_MW_FX, G_MWO_AO_DIRECTIONAL, dir) 
 2974#define gSPAmbOcclusionPoint(pkt, point) gMoveHalfwd(pkt, G_MW_FX, G_MWO_AO_POINT, point) 
 2978#define gsSPAmbOcclusionPoint(point)    gsMoveHalfwd(     G_MW_FX, G_MWO_AO_POINT, point) 
 2980#define gSPAmbOcclusionAmbDir(pkt, amb, dir) \ 
 2981    gMoveWd(pkt, G_MW_FX, G_MWO_AO_AMBIENT,  \ 
 2982        (_SHIFTL((amb), 16, 16) | _SHIFTL((dir), 0, 16))) 
 2983#define gsSPAmbOcclusionAmbDir(amb, dir)     \ 
 2984    gsMoveWd(G_MW_FX, G_MWO_AO_AMBIENT,      \ 
 2985        (_SHIFTL((amb), 16, 16) | _SHIFTL((dir), 0, 16))) 
 2986#define gSPAmbOcclusionDirPoint(pkt, dir, point) \ 
 2987    gMoveWd(pkt, G_MW_FX, G_MWO_AO_DIRECTIONAL,  \ 
 2988        (_SHIFTL((dir), 16, 16) | _SHIFTL((point), 0, 16))) 
 2989#define gsSPAmbOcclusionDirPoint(dir, point)     \ 
 2990    gsMoveWd(G_MW_FX, G_MWO_AO_DIRECTIONAL,      \ 
 2991        (_SHIFTL((dir), 16, 16) | _SHIFTL((point), 0, 16))) 
 2993#define gSPAmbOcclusion(pkt, amb, dir, point) \ 
 2995    gSPAmbOcclusionAmbDir(pkt, amb, dir);     \ 
 2996    gSPAmbOcclusionPoint(pkt, point);         \ 
 2998#define gsSPAmbOcclusion(amb, dir, point)     \ 
 2999    gsSPAmbOcclusionAmbDir(amb, dir),         \ 
 3000    gsSPAmbOcclusionPoint(point) 
 3035#define gSPFresnelScale(pkt, scale) \ 
 3036    gMoveHalfwd(pkt, G_MW_FX, G_MWO_FRESNEL_SCALE, scale) 
 
 3040#define gsSPFresnelScale(scale) \ 
 3041    gsMoveHalfwd(G_MW_FX, G_MWO_FRESNEL_SCALE, scale) 
 
 3045#define gSPFresnelOffset(pkt, offset) \ 
 3046    gMoveHalfwd(pkt, G_MW_FX, G_MWO_FRESNEL_OFFSET, offset) 
 
 3050#define gsSPFresnelOffset(offset) \ 
 3051    gsMoveHalfwd(G_MW_FX, G_MWO_FRESNEL_OFFSET, offset) 
 
 3055#define gSPFresnel(pkt, scale, offset) \ 
 3056    gMoveWd(pkt, G_MW_FX, G_MWO_FRESNEL_SCALE, \ 
 3057        (_SHIFTL((scale), 16, 16) | _SHIFTL((offset), 0, 16))) 
 
 3061#define gsSPFresnel(scale, offset) \ 
 3062    gsMoveWd(G_MW_FX, G_MWO_FRESNEL_SCALE, \ 
 3063        (_SHIFTL((scale), 16, 16) | _SHIFTL((offset), 0, 16))) 
 
 3073#define gSPAttrOffsetST(pkt, s, t) \ 
 3074    gMoveWd(pkt, G_MW_FX, G_MWO_ATTR_OFFSET_S, \ 
 3075        (_SHIFTL((s), 16, 16) | _SHIFTL((t), 0, 16))) 
 
 3079#define gsSPAttrOffsetST(s, t) \ 
 3080    gsMoveWd(G_MW_FX, G_MWO_ATTR_OFFSET_S, \ 
 3081        (_SHIFTL((s), 16, 16) | _SHIFTL((t), 0, 16))) 
 
 3126#define gSPAlphaCompareCull(pkt, mode, thresh) \ 
 3127    gMoveHalfwd(pkt, G_MW_FX, G_MWO_ALPHA_COMPARE_CULL, \ 
 3128        (_SHIFTL((mode), 8, 8) | _SHIFTL((thresh), 0, 8))) 
 
 3132#define gsSPAlphaCompareCull(mode, thresh) \ 
 3133    gsMoveHalfwd(G_MW_FX, G_MWO_ALPHA_COMPARE_CULL, \ 
 3134        (_SHIFTL((mode), 8, 8) | _SHIFTL((thresh), 0, 8))) 
 
 3164#define gSPDontSkipTexLoadsAcross(pkt) \ 
 3165    gMoveWd(pkt, G_MW_FX, G_MWO_LAST_MAT_DL_ADDR, 0xFFFFFFFF) 
 
 3169#define gsSPDontSkipTexLoadsAcross() \ 
 3170    gsMoveWd(G_MW_FX, G_MWO_LAST_MAT_DL_ADDR, 0xFFFFFFFF) 
 
 3222# define gSPModifyVertex(pkt, vtx, where, val)      \ 
 3224    Gfx *_g = (Gfx *)(pkt);                         \ 
 3226    _g->words.w0 = (_SHIFTL(G_MODIFYVTX, 24,  8) |  \ 
 3227                    _SHIFTL((where),     16,  8) |  \ 
 3228                    _SHIFTL((vtx) * 2,    0, 16));  \ 
 3229    _g->words.w1 = (unsigned int)(val);             \ 
 
 3236# define gsSPModifyVertex(vtx, where, val)  \ 
 3238   (_SHIFTL(G_MODIFYVTX, 24,  8) |          \ 
 3239    _SHIFTL((where),     16,  8) |          \ 
 3240    _SHIFTL((vtx) * 2,    0, 16)),          \ 
 3241    (unsigned int)(val)                     \ 
 
 3253#define gSPCullDisplayList(pkt,vstart,vend)             \ 
 3255    Gfx *_g = (Gfx *)(pkt);                             \ 
 3257    _g->words.w0 = (_SHIFTL(G_CULLDL,     24, 8) |      \ 
 3258                    _SHIFTL((vstart) * 2,  0, 16));     \ 
 3259    _g->words.w1 = _SHIFTL((vend) * 2, 0, 16);          \ 
 
 3264#define gsSPCullDisplayList(vstart,vend)    \ 
 3266   (_SHIFTL(G_CULLDL,     24, 8) |          \ 
 3267    _SHIFTL((vstart) * 2,  0, 16)),         \ 
 3268    _SHIFTL((vend) * 2, 0, 16)              \ 
 
 3286# define FTOFIX32(x) (long)((x) * (float)0x00010000) 
 3292#define G_DEPTOZSrg(zval, near, far, flag, zmin, zmax)          \ 
 3293    (((unsigned int)FTOFIX32(((flag) == G_BZ_PERSP ?            \ 
 3294                  (1.0f - (float)(near) / (float)(zval)) /      \ 
 3295                  (1.0f - (float)(near) / (float)(far )) :      \ 
 3296                  ((float)(zval) - (float)(near)) /             \ 
 3297                  ((float)(far ) - (float)(near))))) *          \ 
 3298     (((int)((zmax) - (zmin))) & ~1) + (int)FTOFIX32(zmin)) 
 3300#define G_DEPTOZS(zval, near, far, flag) \ 
 3301    G_DEPTOZSrg(zval, near, far, flag, 0, G_MAXZ) 
 3303#define gSPBranchLessZrg(pkt, dl, vtx, zval, near, far, flag, zmin, zmax)   \ 
 3305    Gfx *_g = (Gfx *)(pkt);                                                 \ 
 3307    _g->words.w0 = _SHIFTL(G_RDPHALF_1, 24, 8);                             \ 
 3308    _g->words.w1 = (unsigned int)(dl);                                      \ 
 3310    _g = (Gfx *)(pkt);                                                      \ 
 3312    _g->words.w0 = (_SHIFTL(G_BRANCH_Z, 24,  8) |                           \ 
 3313                    _SHIFTL((vtx) * 5,  12, 12) |                           \ 
 3314                    _SHIFTL((vtx) * 2,   0, 12));                           \ 
 3315    _g->words.w1 = G_DEPTOZSrg(zval, near, far, flag, zmin, zmax);          \ 
 3318#define gsSPBranchLessZrg(dl, vtx, zval, near, far, flag, zmin, zmax)   \ 
 3320    _SHIFTL(G_RDPHALF_1, 24, 8),                                        \ 
 3321    (unsigned int)(dl),                                                 \ 
 3324   (_SHIFTL(G_BRANCH_Z, 24, 8) |                                        \ 
 3325    _SHIFTL((vtx) * 5, 12, 12) |                                        \ 
 3326    _SHIFTL((vtx) * 2, 0, 12)),                                         \ 
 3327    G_DEPTOZSrg(zval, near, far, flag, zmin, zmax),                     \ 
 3330#define gSPBranchLessZ(pkt, dl, vtx, zval, near, far, flag)         \ 
 3331    gSPBranchLessZrg(pkt, dl, vtx, zval, near, far, flag, 0, G_MAXZ) 
 3332#define gsSPBranchLessZ(dl, vtx, zval, near, far, flag)             \ 
 3333    gsSPBranchLessZrg(dl, vtx, zval, near, far, flag, 0, G_MAXZ) 
 3342#define gSPBranchLessZraw(pkt, dl, vtx, zval)       \ 
 3344    Gfx *_g = (Gfx *)(pkt);                         \ 
 3346    _g->words.w0 = _SHIFTL(G_RDPHALF_1, 24, 8);     \ 
 3347    _g->words.w1 = (unsigned int)(dl);              \ 
 3349    _g = (Gfx *)(pkt);                              \ 
 3351    _g->words.w0 = (_SHIFTL(G_BRANCH_Z, 24,  8) |   \ 
 3352                    _SHIFTL((vtx) * 5,  12, 12) |   \ 
 3353                    _SHIFTL((vtx) * 2,   0, 12));   \ 
 3354    _g->words.w1 = (unsigned int)(zval);            \ 
 
 3360#define gsSPBranchLessZraw(dl, vtx, zval)   \ 
 3362    _SHIFTL(G_RDPHALF_1, 24, 8),            \ 
 3363    (unsigned int)(dl),                     \ 
 3366   (_SHIFTL(G_BRANCH_Z, 24,  8) |           \ 
 3367    _SHIFTL((vtx) * 5,  12, 12) |           \ 
 3368    _SHIFTL((vtx) * 2,   0, 12)),           \ 
 3369    (unsigned int)(zval),                   \ 
 
 3382#define ENABLE_POINT_LIGHTS (0x8000 >> 4) 
 3384#define NUML(n)    ((n) * 0x10) 
 3389#define NUMLIGHTS_0 0 
 3390#define NUMLIGHTS_1 1 
 3391#define NUMLIGHTS_2 2 
 3392#define NUMLIGHTS_3 3 
 3393#define NUMLIGHTS_4 4 
 3394#define NUMLIGHTS_5 5 
 3395#define NUMLIGHTS_6 6 
 3396#define NUMLIGHTS_7 7 
 3397#define NUMLIGHTS_8 8 
 3398#define NUMLIGHTS_9 9 
 3404#define gSPNumLights(pkt, n)                            \ 
 3405    gMoveWd(pkt, G_MW_NUMLIGHT, G_MWO_NUMLIGHT, NUML(n)) 
 
 3409#define gsSPNumLights(n)                                \ 
 3410    gsMoveWd(    G_MW_NUMLIGHT, G_MWO_NUMLIGHT, NUML(n)) 
 
 3424#define _LIGHT_TO_OFFSET(n) (((n) - 1) * 0x10 + 0x10)  
 3437#define gSPLight(pkt, l, n) \ 
 3438    gDma2p((pkt), G_MOVEMEM, (l), sizeof(Light), G_MV_LIGHT, _LIGHT_TO_OFFSET(n)) 
 
 3442#define gsSPLight(l, n) \ 
 3443    gsDma2p(      G_MOVEMEM, (l), sizeof(Light), G_MV_LIGHT, _LIGHT_TO_OFFSET(n)) 
 
 3449#define gSPAmbient(pkt, l, n) \ 
 3450    gDma2p((pkt), G_MOVEMEM, (l), sizeof(Ambient), G_MV_LIGHT, _LIGHT_TO_OFFSET(n)) 
 
 3454#define gsSPAmbient(l, n) \ 
 3455    gsDma2p(      G_MOVEMEM, (l), sizeof(Ambient), G_MV_LIGHT, _LIGHT_TO_OFFSET(n)) 
 
 3465#define gSPLightColor(pkt, n, col)                  \ 
 3467    gMoveWd(pkt, G_MW_LIGHTCOL, ((((n) - 1) * 0x10) + 0), ((col) & 0xFFFFFF00));   \ 
 3468    gMoveWd(pkt, G_MW_LIGHTCOL, ((((n) - 1) * 0x10) + 4), ((col) & 0xFFFFFF00));   \ 
 
 3473#define gsSPLightColor(n, col)                      \ 
 3474    gsMoveWd(G_MW_LIGHTCOL, ((((n) - 1) * 0x10) + 0), ((col) & 0xFFFFFF00)),       \ 
 3475    gsMoveWd(G_MW_LIGHTCOL, ((((n) - 1) * 0x10) + 4), ((col) & 0xFFFFFF00)) 
 
 3482#define _gSPLightColor2(pkt, n, col1, col2) \ 
 3484  gMoveWd(pkt, G_MW_LIGHTCOL, ((((n) - 1) * 0x10) + 0), col1); \ 
 3485  gMoveWd(pkt, G_MW_LIGHTCOL, ((((n) - 1) * 0x10) + 4), col2); \ 
 3487#define _gsSPLightColor2(n, col1, col2) \ 
 3488  gsMoveWd(G_MW_LIGHTCOL, ((((n) - 1) * 0x10) + 0), col1), \ 
 3489  gsMoveWd(G_MW_LIGHTCOL, ((((n) - 1) * 0x10) + 4), col2) 
 3518#define gSPSetLights(pkt, n, name) \ 
 3520    gSPNumLights(pkt, n); \ 
 3521    gDma2p((pkt),  G_MOVEMEM, &(name), (n) * 0x10 + 8, G_MV_LIGHT, 0x10); \ 
 
 3526#define gsSPSetLights(n, name) \ 
 3528    gsDma2p(G_MOVEMEM, &(name), (n) * 0x10 + 8, G_MV_LIGHT, 0x10) 
 
 3530#define  gSPSetLights0(pkt, name)  gSPSetLights(pkt, 0, name) 
 3531#define gsSPSetLights0(name)      gsSPSetLights(     0, name) 
 3532#define  gSPSetLights1(pkt, name)  gSPSetLights(pkt, 1, name) 
 3533#ifdef KAZE_GBI_HACKS 
 3534#define gsSPSetLights1(name)      gsSPNoOp() 
 3536#define gsSPSetLights1(name)      gsSPSetLights(     1, name) 
 3538#define  gSPSetLights2(pkt, name)  gSPSetLights(pkt, 2, name) 
 3539#define gsSPSetLights2(name)      gsSPSetLights(     2, name) 
 3540#define  gSPSetLights3(pkt, name)  gSPSetLights(pkt, 3, name) 
 3541#define gsSPSetLights3(name)      gsSPSetLights(     3, name) 
 3542#define  gSPSetLights4(pkt, name)  gSPSetLights(pkt, 4, name) 
 3543#define gsSPSetLights4(name)      gsSPSetLights(     4, name) 
 3544#define  gSPSetLights5(pkt, name)  gSPSetLights(pkt, 5, name) 
 3545#define gsSPSetLights5(name)      gsSPSetLights(     5, name) 
 3546#define  gSPSetLights6(pkt, name)  gSPSetLights(pkt, 6, name) 
 3547#define gsSPSetLights6(name)      gsSPSetLights(     6, name) 
 3548#define  gSPSetLights7(pkt, name)  gSPSetLights(pkt, 7, name) 
 3549#define gsSPSetLights7(name)      gsSPSetLights(     7, name) 
 3550#define  gSPSetLights8(pkt, name)  gSPSetLights(pkt, 8, name) 
 3551#define gsSPSetLights8(name)      gsSPSetLights(     8, name) 
 3552#define  gSPSetLights9(pkt, name)  gSPSetLights(pkt, 9, name) 
 3553#define gsSPSetLights9(name)      gsSPSetLights(     9, name) 
 3560#define gSPCameraWorld(pkt, cam) \ 
 3561    gDma2p((pkt), G_MOVEMEM, (cam), sizeof(PlainVtx), G_MV_LIGHT, 0) 
 
 3565#define gsSPCameraWorld(cam) \ 
 3566    gsDma2p(      G_MOVEMEM, (cam), sizeof(PlainVtx), G_MV_LIGHT, 0) 
 
 3573#define gSPLookAt(pkt, la) \ 
 3574    gDma2p((pkt), G_MOVEMEM, (la), sizeof(LookAt), G_MV_LIGHT, 8) 
 
 3578#define gsSPLookAt(la) \ 
 3579    gsDma2p(      G_MOVEMEM, (la), sizeof(LookAt), G_MV_LIGHT, 8) 
 
 3590#define gSPLookAtX(pkt, l) gSPLookAt(pkt, l) 
 3594#define gsSPLookAtX(l)     gsSPLookAt(l) 
 3598#define gSPLookAtY(pkt, l) gSPNoOp(pkt) 
 3602#define gsSPLookAtY(l)     gsSPNoOp() 
 3605#define gDPSetHilite1Tile(pkt, tile, hilite, width, height) \ 
 3606    gDPSetTileSize(pkt, tile,                               \ 
 3607        (hilite)->h.x1 & 0xFFF,                             \ 
 3608        (hilite)->h.y1 & 0xFFF,                             \ 
 3609        ((((width)  - 1) * 4) + (hilite)->h.x1) & 0xFFF,    \ 
 3610        ((((height) - 1) * 4) + (hilite)->h.y1) & 0xFFF) 
 3611#define gsDPSetHilite1Tile(tile, hilite, width, height)     \ 
 3612    gsDPSetTileSize(tile,                                   \ 
 3613        (hilite)->h.x1 & 0xFFF,                             \ 
 3614        (hilite)->h.y1 & 0xFFF,                             \ 
 3615        ((((width)  - 1) * 4) + (hilite)->h.x1) & 0xFFF,    \ 
 3616        ((((height) - 1) * 4) + (hilite)->h.y1) & 0xFFF) 
 3618#define gDPSetHilite2Tile(pkt, tile, hilite, width, height) \ 
 3619    gDPSetTileSize(pkt, tile,                               \ 
 3620        (hilite)->h.x2 & 0xFFF,                             \ 
 3621        (hilite)->h.y2 & 0xFFF,                             \ 
 3622        ((((width)  - 1) * 4) + (hilite)->h.x2) & 0xFFF,    \ 
 3623        ((((height) - 1) * 4) + (hilite)->h.y2) & 0xFFF) 
 3624#define gsDPSetHilite2Tile(tile, hilite, width, height)     \ 
 3625    gsDPSetTileSize(tile,                                   \ 
 3626        (hilite)->h.x2 & 0xFFF,                             \ 
 3627        (hilite)->h.y2 & 0xFFF,                             \ 
 3628        ((((width)  - 1) * 4) + (hilite)->h.x2) & 0xFFF,    \ 
 3629        ((((height) - 1) * 4) + (hilite)->h.y2) & 0xFFF) 
 3644#define gSPOcclusionPlane(pkt, o) \ 
 3645    gDma2p((pkt), G_MOVEMEM, (o), sizeof(OcclusionPlane), G_MV_LIGHT, \ 
 3646        (G_MAX_LIGHTS * 0x10) + 0x18) 
 
 3650#define gsSPOcclusionPlane(o) \ 
 3651    gsDma2p(      G_MOVEMEM, (o), sizeof(OcclusionPlane), G_MV_LIGHT, \ 
 3652        (G_MAX_LIGHTS * 0x10) + 0x18) 
 
 3668#define gSPFogFactor(pkt, fm, fo)                   \ 
 3669    gMoveWd(pkt, G_MW_FOG, G_MWO_FOG,               \ 
 3670       (_SHIFTL(fm, 16, 16) | _SHIFTL(fo, 0, 16))) 
 
 3675#define gsSPFogFactor(fm, fo)                       \ 
 3676    gsMoveWd(G_MW_FOG, G_MWO_FOG,                   \ 
 3677       (_SHIFTL(fm, 16, 16) | _SHIFTL(fo, 0, 16))) 
 
 3679#define gSPFogPosition(pkt, min, max)                               \ 
 3680    gMoveWd(pkt, G_MW_FOG, G_MWO_FOG,                               \ 
 3681       (_SHIFTL((128000 / ((max) - (min))), 16, 16) |               \ 
 3682        _SHIFTL(((500 - (min)) * 256 / ((max) - (min))), 0, 16))) 
 3684#define gsSPFogPosition(min, max)                                   \ 
 3685    gsMoveWd(G_MW_FOG, G_MWO_FOG,                                   \ 
 3686       (_SHIFTL((128000 / ((max) - (min))), 16, 16) |               \ 
 3687        _SHIFTL(((500 - (min)) * 256 / ((max) - (min))), 0, 16))) 
 3693#define gSPTexture(pkt, s, t, level, tile, on)                 \ 
 3695    Gfx *_g = (Gfx *)(pkt);                                     \ 
 3697    _g->words.w0 = (_SHIFTL(G_TEXTURE,  24, 8) |                \ 
 3698                    _SHIFTL((level),    11, 3) |                \ 
 3699                    _SHIFTL((tile),      8, 3) |                \ 
 3700                    _SHIFTL((on),        1, 7));                \ 
 3701    _g->words.w1 = (_SHIFTL((s), 16, 16) |                      \ 
 3702                    _SHIFTL((t),  0, 16));                      \ 
 
 3707#define gsSPTexture(s, t, level, tile, on) \ 
 3709   (_SHIFTL(G_TEXTURE,  24, 8) |            \ 
 3710    _SHIFTL((level),    11, 3) |            \ 
 3711    _SHIFTL((tile),      8, 3) |            \ 
 3712    _SHIFTL((on),        1, 7)),            \ 
 3713   (_SHIFTL((s), 16, 16) |                  \ 
 3714    _SHIFTL((t),  0, 16))                   \ 
 
 3721#define gSPTextureL(pkt, s, t, level, bowtie, tile, on) \ 
 3722    gSPTexture(pkt, s, t, level, tile, on) 
 
 3726#define gsSPTextureL(s, t, level, bowtie, tile, on) \ 
 3727    gsSPTexture(s, t, level, tile, on) 
 
 3737#define gSPGeometryMode(pkt, c, s)                      \ 
 3739    Gfx *_g = (Gfx *)(pkt);                             \ 
 3741    _g->words.w0 = (_SHIFTL(G_GEOMETRYMODE, 24,  8) |   \ 
 3742                    _SHIFTL(~(u32)(c),       0, 24));   \ 
 3743    _g->words.w1 = (u32)(s);                            \ 
 
 3749#define gsSPGeometryMode(c, s)          \ 
 3751   (_SHIFTL(G_GEOMETRYMODE, 24,  8) |   \ 
 3752    _SHIFTL(~(u32)(c),       0, 24)),   \ 
 
 3756#define gSPSetGeometryMode(pkt, word)   gSPGeometryMode((pkt), 0, (word)) 
 3757#define gsSPSetGeometryMode(word)       gsSPGeometryMode(      0, (word)) 
 3758#define gSPClearGeometryMode(pkt, word) gSPGeometryMode((pkt), (word), 0) 
 3759#define gsSPClearGeometryMode(word)     gsSPGeometryMode(      (word), 0) 
 3760#define gSPLoadGeometryMode(pkt, word)  gSPGeometryMode((pkt), -1, (word)) 
 3761#define gsSPLoadGeometryMode(word)      gsSPGeometryMode(      -1, (word)) 
 3763#define gsSPGeometryModeSetFirst(c, s)  gsSPGeometryMode(c, s) 
 3765#define gSPSetOtherMode(pkt, cmd, sft, len, data)           \ 
 3767    Gfx *_g = (Gfx *)(pkt);                                 \ 
 3769    _g->words.w0 = (_SHIFTL(cmd,                24, 8) |    \ 
 3770                    _SHIFTL(32 - (sft) - (len),  8, 8) |    \ 
 3771                    _SHIFTL((len) - 1,           0, 8));    \ 
 3772    _g->words.w1 = (unsigned int)(data);                    \ 
 3775#define gsSPSetOtherMode(cmd, sft, len, data)   \ 
 3777   (_SHIFTL(cmd,                24, 8) |        \ 
 3778    _SHIFTL(32 - (sft) - (len),  8, 8) |        \ 
 3779    _SHIFTL((len) - 1,           0, 8)),        \ 
 3780    (unsigned int)(data)                        \ 
 3786#define gDPPipelineMode(pkt, mode)  \ 
 3787    gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_PIPELINE, 1, mode) 
 
 3791#define gsDPPipelineMode(mode)      \ 
 3792    gsSPSetOtherMode(    G_SETOTHERMODE_H, G_MDSFT_PIPELINE, 1, mode) 
 
 3794#define gDPSetCycleType(pkt, type)  \ 
 3795    gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_CYCLETYPE, 2, type) 
 3796#define gsDPSetCycleType(type)      \ 
 3797    gsSPSetOtherMode(    G_SETOTHERMODE_H, G_MDSFT_CYCLETYPE, 2, type) 
 3799#define gDPSetTexturePersp(pkt, type)   \ 
 3800    gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTPERSP, 1, type) 
 3801#define gsDPSetTexturePersp(type)       \ 
 3802    gsSPSetOtherMode(    G_SETOTHERMODE_H, G_MDSFT_TEXTPERSP, 1, type) 
 3804#define gDPSetTextureDetail(pkt, type)  \ 
 3805    gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTDETAIL, 2, type) 
 3806#define gsDPSetTextureDetail(type)      \ 
 3807    gsSPSetOtherMode(    G_SETOTHERMODE_H, G_MDSFT_TEXTDETAIL, 2, type) 
 3809#define gDPSetTextureLOD(pkt, type) \ 
 3810    gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTLOD, 1, type) 
 3811#define gsDPSetTextureLOD(type)     \ 
 3812    gsSPSetOtherMode(    G_SETOTHERMODE_H, G_MDSFT_TEXTLOD, 1, type) 
 3814#define gDPSetTextureLUT(pkt, type) \ 
 3815    gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTLUT, 2, type) 
 3816#define gsDPSetTextureLUT(type)     \ 
 3817    gsSPSetOtherMode(    G_SETOTHERMODE_H, G_MDSFT_TEXTLUT, 2, type) 
 3819#define gDPSetTextureFilter(pkt, type)  \ 
 3820    gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTFILT, 2, type) 
 3821#define gsDPSetTextureFilter(type)      \ 
 3822    gsSPSetOtherMode(    G_SETOTHERMODE_H, G_MDSFT_TEXTFILT, 2, type) 
 3824#define gDPSetTextureConvert(pkt, type) \ 
 3825    gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_TEXTCONV, 3, type) 
 3826#define gsDPSetTextureConvert(type)     \ 
 3827    gsSPSetOtherMode(    G_SETOTHERMODE_H, G_MDSFT_TEXTCONV, 3, type) 
 3829#define gDPSetCombineKey(pkt, type) \ 
 3830    gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_COMBKEY, 1, type) 
 3831#define gsDPSetCombineKey(type)     \ 
 3832    gsSPSetOtherMode(    G_SETOTHERMODE_H, G_MDSFT_COMBKEY, 1, type) 
 3834#define gDPSetColorDither(pkt, mode)    \ 
 3835    gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_RGBDITHER, 2, mode) 
 3836#define gsDPSetColorDither(mode)        \ 
 3837    gsSPSetOtherMode(    G_SETOTHERMODE_H, G_MDSFT_RGBDITHER, 2, mode) 
 3839#define gDPSetAlphaDither(pkt, mode)    \ 
 3840    gSPSetOtherMode(pkt, G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 2, mode) 
 3841#define gsDPSetAlphaDither(mode)        \ 
 3842    gsSPSetOtherMode(    G_SETOTHERMODE_H, G_MDSFT_ALPHADITHER, 2, mode) 
 3850#define gDPSetBlendMask(pkt, mask)  gSPNoOp(pkt) 
 3854#define gsDPSetBlendMask(mask)      gsSPNoOp() 
 3856#define gDPSetAlphaCompare(pkt, type)   \ 
 3857    gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 2, type) 
 3858#define gsDPSetAlphaCompare(type)       \ 
 3859    gsSPSetOtherMode(    G_SETOTHERMODE_L, G_MDSFT_ALPHACOMPARE, 2, type) 
 3861#define gDPSetDepthSource(pkt, src) \ 
 3862    gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_ZSRCSEL, 1, src) 
 3863#define gsDPSetDepthSource(src) \ 
 3864    gsSPSetOtherMode(    G_SETOTHERMODE_L, G_MDSFT_ZSRCSEL, 1, src) 
 3866#define gDPSetRenderMode(pkt, c0, c1)   \ 
 3867    gSPSetOtherMode(pkt, G_SETOTHERMODE_L, G_MDSFT_RENDERMODE, 29, (c0) | (c1)) 
 3868#define gsDPSetRenderMode(c0, c1)   \ 
 3869    gsSPSetOtherMode(    G_SETOTHERMODE_L, G_MDSFT_RENDERMODE, 29, (c0) | (c1)) 
 3871#define gSetImage(pkt, cmd, fmt, siz, width, i)     \ 
 3873    Gfx *_g = (Gfx *)(pkt);                         \ 
 3875    _g->words.w0 = (_SHIFTL(cmd,         24,  8) |  \ 
 3876                    _SHIFTL(fmt,         21,  3) |  \ 
 3877                    _SHIFTL(siz,         19,  2) |  \ 
 3878                    _SHIFTL((width) - 1,  0, 12));  \ 
 3879    _g->words.w1 = (unsigned int)(i);               \ 
 3882#define gsSetImage(cmd, fmt, siz, width, i) \ 
 3884   (_SHIFTL(cmd,         24,  8) |          \ 
 3885    _SHIFTL(fmt,         21,  3) |          \ 
 3886    _SHIFTL(siz,         19,  2) |          \ 
 3887    _SHIFTL((width) - 1,  0, 12)),          \ 
 3891#define gDPSetColorImage(pkt, f, s, w, i)   gSetImage(pkt, G_SETCIMG, f, s, w, i) 
 3892#define gsDPSetColorImage(f, s, w, i)       gsSetImage(    G_SETCIMG, f, s, w, i) 
 3896#define gDPSetDepthImage(pkt, i)    gSetImage(pkt, G_SETZIMG, 0, 0, 1, i) 
 3897#define gsDPSetDepthImage(i)        gsSetImage(    G_SETZIMG, 0, 0, 1, i) 
 3899#define gDPSetMaskImage(pkt, i)     gDPSetDepthImage(pkt, i) 
 3900#define gsDPSetMaskImage(i)         gsDPSetDepthImage(    i) 
 3902#define gDPSetTextureImage(pkt, f, s, w, i) gSetImage(pkt, G_SETTIMG, f, s, w, i) 
 3903#define gsDPSetTextureImage(f, s, w, i)     gsSetImage(    G_SETTIMG, f, s, w, i) 
 3909#define gDPSetCombine(pkt, muxs0, muxs1)            \ 
 3911    Gfx *_g = (Gfx *)(pkt);                         \ 
 3913    _g->words.w0 = (_SHIFTL(G_SETCOMBINE, 24,  8) | \ 
 3914                    _SHIFTL(muxs0,         0, 24)); \ 
 3915    _g->words.w1 = (unsigned int)(muxs1);           \ 
 3918#define gsDPSetCombine(muxs0, muxs1)    \ 
 3920   (_SHIFTL(G_SETCOMBINE, 24,  8) |     \ 
 3921    _SHIFTL(muxs0,         0, 24)),     \ 
 3922    (unsigned int)(muxs1)               \ 
 3925#define GCCc0w0(saRGB0, mRGB0, saA0, mA0)   \ 
 3926   (_SHIFTL((saRGB0), 20, 4) |              \ 
 3927    _SHIFTL((mRGB0),  15, 5) |              \ 
 3928    _SHIFTL((saA0),   12, 3) |              \ 
 3929    _SHIFTL((mA0),     9, 3)) 
 3931#define GCCc1w0(saRGB1, mRGB1)  \ 
 3932   (_SHIFTL((saRGB1), 5, 4) |   \ 
 3933    _SHIFTL((mRGB1),  0, 5)) 
 3935#define GCCc0w1(sbRGB0, aRGB0, sbA0, aA0)   \ 
 3936   (_SHIFTL((sbRGB0), 28, 4) |              \ 
 3937    _SHIFTL((aRGB0),  15, 3) |              \ 
 3938    _SHIFTL((sbA0),   12, 3) |              \ 
 3939    _SHIFTL((aA0),     9, 3)) 
 3941#define GCCc1w1(sbRGB1, saA1, mA1, aRGB1, sbA1, aA1)    \ 
 3942   (_SHIFTL((sbRGB1), 24, 4) |                          \ 
 3943    _SHIFTL((saA1),   21, 3) |                          \ 
 3944    _SHIFTL((mA1),    18, 3) |                          \ 
 3945    _SHIFTL((aRGB1),   6, 3) |                          \ 
 3946    _SHIFTL((sbA1),    3, 3) |                          \ 
 3947    _SHIFTL((aA1),     0, 3)) 
 3949#define gDPSetCombineLERP(pkt, a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0,          \ 
 3950                               a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1)          \ 
 3952    Gfx *_g = (Gfx *)(pkt);                                                 \ 
 3954    _g->words.w0 = (_SHIFTL(G_SETCOMBINE, 24, 8) |                          \ 
 3955                    _SHIFTL(GCCc0w0(G_CCMUX_##a0,  G_CCMUX_##c0,            \ 
 3956                                    G_ACMUX_##Aa0, G_ACMUX_##Ac0) |         \ 
 3957                            GCCc1w0(G_CCMUX_##a1,  G_CCMUX_##c1),           \ 
 3959    _g->words.w1 =  (unsigned int)(GCCc0w1(G_CCMUX_##b0,  G_CCMUX_##d0,     \ 
 3960                                           G_ACMUX_##Ab0, G_ACMUX_##Ad0) |  \ 
 3961                                   GCCc1w1(G_CCMUX_##b1,  G_ACMUX_##Aa1,    \ 
 3962                                           G_ACMUX_##Ac1, G_CCMUX_##d1,     \ 
 3963                                           G_ACMUX_##Ab1, G_ACMUX_##Ad1));  \ 
 3966#define gsDPSetCombineLERP(a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0,  \ 
 3967                           a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1)  \ 
 3969   (_SHIFTL(G_SETCOMBINE, 24, 8) |                              \ 
 3970    _SHIFTL(GCCc0w0(G_CCMUX_##a0,  G_CCMUX_##c0,                \ 
 3971                    G_ACMUX_##Aa0, G_ACMUX_##Ac0) |             \ 
 3972            GCCc1w0(G_CCMUX_##a1,  G_CCMUX_##c1),               \ 
 3974    (unsigned int)(GCCc0w1(G_CCMUX_##b0,  G_CCMUX_##d0,         \ 
 3975                           G_ACMUX_##Ab0, G_ACMUX_##Ad0) |      \ 
 3976                   GCCc1w1(G_CCMUX_##b1,  G_ACMUX_##Aa1,        \ 
 3977                           G_ACMUX_##Ac1, G_CCMUX_##d1,         \ 
 3978                           G_ACMUX_##Ab1, G_ACMUX_##Ad1))       \ 
 3990#define gDPSetCombineMode(pkt, a, b)    gDPSetCombineLERP(pkt, a, b) 
 3994#define gsDPSetCombineMode(a, b)        gsDPSetCombineLERP(    a, b) 
 3996#define gDPSetColor(pkt, c, d)          \ 
 3998    Gfx *_g = (Gfx *)(pkt);             \ 
 4000    _g->words.w0 = _SHIFTL(c, 24, 8);   \ 
 4001    _g->words.w1 = (unsigned int)(d);   \ 
 4004#define gsDPSetColor(c, d)  \ 
 4006    _SHIFTL(c, 24, 8),      \ 
 4010#define DPRGBColor(pkt, cmd, r, g, b, a)    \ 
 4011    gDPSetColor(pkt, cmd,                   \ 
 4012           (_SHIFTL(r, 24, 8) |             \ 
 4013            _SHIFTL(g, 16, 8) |             \ 
 4014            _SHIFTL(b,  8, 8) |             \ 
 4017#define sDPRGBColor(cmd, r, g, b, a)    \ 
 4019           (_SHIFTL(r, 24, 8) |         \ 
 4020            _SHIFTL(g, 16, 8) |         \ 
 4021            _SHIFTL(b,  8, 8) |         \ 
 4024#define gDPSetEnvColor(pkt, r, g, b, a) \ 
 4025            DPRGBColor(pkt, G_SETENVCOLOR,   r, g, b, a) 
 4027#ifdef KAZE_GBI_HACKS 
 4028#define gsDPSetEnvColor(r, g, b, a) \ 
 4031#define gsDPSetEnvColor(r, g, b, a) \ 
 4032            sDPRGBColor(    G_SETENVCOLOR,   r, g, b, a) 
 4035#define gDPSetBlendColor(pkt, r, g, b, a) \ 
 4036            DPRGBColor(pkt, G_SETBLENDCOLOR, r, g, b, a) 
 4038#define gsDPSetBlendColor(r, g, b, a) \ 
 4039            sDPRGBColor(    G_SETBLENDCOLOR, r, g, b, a) 
 4041#define gDPSetFogColor(pkt, r, g, b, a) \ 
 4042            DPRGBColor(pkt, G_SETFOGCOLOR,   r, g, b, a) 
 4044#define gsDPSetFogColor(r, g, b, a) \ 
 4045            sDPRGBColor(    G_SETFOGCOLOR,   r, g, b, a) 
 4047#define gDPSetFillColor(pkt, d) \ 
 4048            gDPSetColor(pkt, G_SETFILLCOLOR, (d)) 
 4050#define gsDPSetFillColor(d) \ 
 4051            gsDPSetColor(    G_SETFILLCOLOR, (d)) 
 4053#define gDPSetPrimDepth(pkt, z, dz)                         \ 
 4054        gDPSetColor(pkt, G_SETPRIMDEPTH,                    \ 
 4055                    _SHIFTL(z, 16, 16) | _SHIFTL(dz, 0, 16)) 
 4057#define gsDPSetPrimDepth(z, dz)                             \ 
 4058        gsDPSetColor(G_SETPRIMDEPTH,                        \ 
 4059                    _SHIFTL(z, 16, 16) | _SHIFTL(dz, 0, 16)) 
 4061#define gDPSetPrimColor(pkt, m, l, r, g, b, a)          \ 
 4063    Gfx *_g = (Gfx *)(pkt);                             \ 
 4065    _g->words.w0 = (_SHIFTL(G_SETPRIMCOLOR, 24, 8) |    \ 
 4066                    _SHIFTL(m,               8, 8) |    \ 
 4067                    _SHIFTL(l,               0, 8));    \ 
 4068    _g->words.w1 = (_SHIFTL(r, 24, 8) |                 \ 
 4069                    _SHIFTL(g, 16, 8) |                 \ 
 4070                    _SHIFTL(b,  8, 8) |                 \ 
 4071                    _SHIFTL(a,  0, 8));                 \ 
 4074#define gsDPSetPrimColor(m, l, r, g, b, a)  \ 
 4076   (_SHIFTL(G_SETPRIMCOLOR, 24, 8) |        \ 
 4077    _SHIFTL(m,               8, 8) |        \ 
 4078    _SHIFTL(l,               0, 8)),        \ 
 4079   (_SHIFTL(r, 24, 8) |                     \ 
 4080    _SHIFTL(g, 16, 8) |                     \ 
 4081    _SHIFTL(b,  8, 8) |                     \ 
 4095#define gSPLightToRDP(pkt, light, alpha, word0)    \ 
 4097    Gfx *_g = (Gfx *)(pkt);                        \ 
 4098    _g->words.w0 = (_SHIFTL(G_LIGHTTORDP, 24, 8) | \ 
 4099                    _SHIFTL(light * 0x10,  8, 8) | \ 
 4100                    _SHIFTL(alpha,         0, 8)); \ 
 4101    _g->words.w1 = (word0);                        \ 
 
 4106#define gsSPLightToRDP(light, alpha, word0) \ 
 4108   (_SHIFTL(G_LIGHTTORDP, 24, 8) |          \ 
 4109    _SHIFTL(light * 0x10,  8, 8) |          \ 
 4110    _SHIFTL(alpha,         0, 8)),          \ 
 
 4113#define gSPLightToPrimColor(pkt, light, alpha, m, l) \ 
 4114    gSPLightToRDP(pkt, light, alpha,                 \ 
 4115        (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | _SHIFTL(m, 8, 8) | _SHIFTL(l, 0, 8))) 
 4116#define gsSPLightToPrimColor(light, alpha, m, l) \ 
 4117    gsSPLightToRDP(light, alpha,                 \ 
 4118        (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | _SHIFTL(m, 8, 8) | _SHIFTL(l, 0, 8))) 
 4119#define gSPLightToFogColor(pkt, light, alpha) \ 
 4120    gSPLightToRDP(pkt, light, alpha, _SHIFTL(G_SETFOGCOLOR, 24, 8)) 
 4121#define gsSPLightToFogColor(light, alpha) \ 
 4122    gsSPLightToRDP(light, alpha, _SHIFTL(G_SETFOGCOLOR, 24, 8)) 
 4152#define gDPSetOtherMode(pkt, mode0, mode1)              \ 
 4154    Gfx *_g = (Gfx *)(pkt);                             \ 
 4156    _g->words.w0 = (_SHIFTL(G_RDPSETOTHERMODE, 24, 8) | \ 
 4157                    _SHIFTL(mode0, 0, 24));             \ 
 4158    _g->words.w1 = (unsigned int)(mode1);               \ 
 
 4164#define gsDPSetOtherMode(mode0, mode1)      \ 
 4166   (_SHIFTL(G_RDPSETOTHERMODE, 24,  8) |    \ 
 4167    _SHIFTL(mode0,              0, 24)),    \ 
 4168    (unsigned int)(mode1)                   \ 
 
 4175#define G_TX_LOADTILE   7 
 4176#define G_TX_RENDERTILE 0 
 4256#ifdef NO_SYNCS_IN_TEXTURE_LOADS 
 4257#define gDPLoadSyncInTexLoad(pkt) (void)0 
 4258#define gDPTileSyncInTexLoad(pkt) (void)0 
 4259#define gDPPipeSyncInTexLoad(pkt) (void)0 
 4260#define gsDPLoadSyncInTexLoad 
 4261#define gsDPTileSyncInTexLoad 
 4262#define gsDPPipeSyncInTexLoad 
 4263#define gsDPPipeSyncEndOfTexLoad 
 4264#define _G_TEXLOADTILE(rtile) (G_TX_LOADTILE - (rtile)) 
 4265#define _G_PALLOADTILE(rtile) (G_TX_LOADTILE - 2 - (rtile)) 
 4267#define gDPLoadSyncInTexLoad(pkt) gDPLoadSync(pkt) 
 4268#define gDPTileSyncInTexLoad(pkt) gDPTileSync(pkt) 
 4269#define gDPPipeSyncInTexLoad(pkt) gDPPipeSync(pkt) 
 4270#define gsDPLoadSyncInTexLoad gsDPLoadSync(), 
 4271#define gsDPTileSyncInTexLoad gsDPTileSync(), 
 4272#define gsDPPipeSyncInTexLoad gsDPPipeSync(), 
 4273#define gsDPPipeSyncEndOfTexLoad , gsDPPipeSync() 
 4274#define _G_TEXLOADTILE(rtile) G_TX_LOADTILE 
 4275#define _G_PALLOADTILE(rtile) G_TX_LOADTILE 
 4279#define G_TX_NOMIRROR   (0 << 0) 
 4280#define G_TX_WRAP       (0 << 1) 
 4281#define G_TX_MIRROR     (1 << 0) 
 4282#define G_TX_CLAMP      (1 << 1) 
 4283#define G_TX_NOMASK     0 
 4287#define MAX(a, b) ((a) > (b) ? (a) : (b)) 
 4291#define MIN(a, b) ((a) < (b) ? (a) : (b)) 
 4302#define G_TX_DXT_FRAC   11 
 4314#define G_TX_LDBLK_MAX_TXL  2047 
 4316#define TXL2WORDS(txls, b_txl)  \ 
 4317    MAX(1, ((txls) * (b_txl) / 8)) 
 4319#define CALC_DXT(width, b_txl)  \ 
 4320    (((1 << G_TX_DXT_FRAC) + TXL2WORDS(width, b_txl) - 1) / TXL2WORDS(width, b_txl)) 
 4322#define TXL2WORDS_4b(txls)  \ 
 4323    MAX(1, ((txls) / 16)) 
 4325#define CALC_DXT_4b(width)  \ 
 4326    (((1 << G_TX_DXT_FRAC) + TXL2WORDS_4b(width) - 1) / TXL2WORDS_4b(width)) 
 4328#define gDPLoadTileGeneric(pkt, c, tile, uls, ult, lrs, lrt)    \ 
 4330    Gfx *_g = (Gfx *)(pkt);                                     \ 
 4332    _g->words.w0 = (_SHIFTL(c,   24,  8) |                      \ 
 4333                    _SHIFTL(uls, 12, 12) |                      \ 
 4334                    _SHIFTL(ult,  0, 12));                      \ 
 4335    _g->words.w1 = (_SHIFTL(tile, 24, 3) |                      \ 
 4336                    _SHIFTL(lrs, 12, 12) |                      \ 
 4337                    _SHIFTL(lrt, 0, 12));                       \ 
 4340#define gsDPLoadTileGeneric(c, tile, uls, ult, lrs, lrt)    \ 
 4342   (_SHIFTL(c,   24,  8) |                                  \ 
 4343    _SHIFTL(uls, 12, 12) |                                  \ 
 4344    _SHIFTL(ult,  0, 12)),                                  \ 
 4345   (_SHIFTL(tile, 24,  3) |                                 \ 
 4346    _SHIFTL(lrs,  12, 12) |                                 \ 
 4347    _SHIFTL(lrt,   0, 12))                                  \ 
 4350#define gDPSetTileSize(pkt, t, uls, ult, lrs, lrt)                  \ 
 4351        gDPLoadTileGeneric(pkt, G_SETTILESIZE, t, uls, ult, lrs, lrt) 
 4352#define gsDPSetTileSize(t, uls, ult, lrs, lrt)                      \ 
 4353        gsDPLoadTileGeneric(    G_SETTILESIZE, t, uls, ult, lrs, lrt) 
 4354#define gDPLoadTile(pkt, t, uls, ult, lrs, lrt)                     \ 
 4355        gDPLoadTileGeneric(pkt, G_LOADTILE, t, uls, ult, lrs, lrt) 
 4356#define gsDPLoadTile(t, uls, ult, lrs, lrt)                         \ 
 4357        gsDPLoadTileGeneric(    G_LOADTILE, t, uls, ult, lrs, lrt) 
 4359#define gDPSetTile(pkt, fmt, siz, line, tmem, tile, palette, cmt,   \ 
 4360                        maskt, shiftt, cms, masks, shifts)          \ 
 4362    Gfx *_g = (Gfx *)(pkt);                                         \ 
 4364    _g->words.w0 = (_SHIFTL(G_SETTILE, 24, 8) |                     \ 
 4365                    _SHIFTL(fmt,       21, 3) |                     \ 
 4366                    _SHIFTL(siz,       19, 2) |                     \ 
 4367                    _SHIFTL(line,       9, 9) |                     \ 
 4368                    _SHIFTL(tmem,       0, 9));                     \ 
 4369    _g->words.w1 = (_SHIFTL(tile,    24, 3) |                       \ 
 4370                    _SHIFTL(palette, 20, 4) |                       \ 
 4371                    _SHIFTL(cmt,     18, 2) |                       \ 
 4372                    _SHIFTL(maskt,   14, 4) |                       \ 
 4373                    _SHIFTL(shiftt,  10, 4) |                       \ 
 4374                    _SHIFTL(cms,      8, 2) |                       \ 
 4375                    _SHIFTL(masks,    4, 4) |                       \ 
 4376                    _SHIFTL(shifts,   0, 4));                       \ 
 4379#define gsDPSetTile(fmt, siz, line, tmem, tile, palette, cmt,   \ 
 4380                    maskt, shiftt, cms, masks, shifts)          \ 
 4382   (_SHIFTL(G_SETTILE, 24, 8) |                                 \ 
 4383    _SHIFTL(fmt,       21, 3) |                                 \ 
 4384    _SHIFTL(siz,       19, 2) |                                 \ 
 4385    _SHIFTL(line,       9, 9) |                                 \ 
 4386    _SHIFTL(tmem,       0, 9)),                                 \ 
 4387   (_SHIFTL(tile,    24, 3) |                                   \ 
 4388    _SHIFTL(palette, 20, 4) |                                   \ 
 4389    _SHIFTL(cmt,     18, 2) |                                   \ 
 4390    _SHIFTL(maskt,   14, 4) |                                   \ 
 4391    _SHIFTL(shiftt,  10, 4) |                                   \ 
 4392    _SHIFTL(cms,      8, 2) |                                   \ 
 4393    _SHIFTL(masks,    4, 4) |                                   \ 
 4394    _SHIFTL(shifts,   0, 4))                                    \ 
 4397#define gDPLoadBlock(pkt, tile, uls, ult, lrs, dxt)         \ 
 4399    Gfx *_g = (Gfx *)(pkt);                                         \ 
 4400    _g->words.w0 = (_SHIFTL(G_LOADBLOCK, 24,  8) |                  \ 
 4401                    _SHIFTL(uls,         12, 12) |                  \ 
 4402                    _SHIFTL(ult,          0, 12));                  \ 
 4403    _g->words.w1 = (_SHIFTL(tile,                         24,  3) | \ 
 4404                    _SHIFTL(MIN(lrs, G_TX_LDBLK_MAX_TXL), 12, 12) | \ 
 4405                    _SHIFTL(dxt,                           0, 12)); \ 
 4408#define gsDPLoadBlock(tile, uls, ult, lrs, dxt) \ 
 4410   (_SHIFTL(G_LOADBLOCK, 24,  8) |                      \ 
 4411    _SHIFTL(uls,         12, 12) |                      \ 
 4412    _SHIFTL(ult,          0, 12)),                      \ 
 4413   (_SHIFTL(tile,                           24,  3) |   \ 
 4414    _SHIFTL((MIN(lrs, G_TX_LDBLK_MAX_TXL)), 12, 12) |   \ 
 4415    _SHIFTL(dxt,                             0, 12))    \ 
 4418#define gDPLoadTLUTCmd(pkt, tile, count)        \ 
 4420    Gfx *_g = (Gfx *)pkt;                       \ 
 4422    _g->words.w0 = _SHIFTL(G_LOADTLUT, 24, 8);  \ 
 4423    _g->words.w1 = (_SHIFTL((tile),  24,  3) |  \ 
 4424                    _SHIFTL((count), 14, 10));  \ 
 4427#define gsDPLoadTLUTCmd(tile, count)    \ 
 4429    _SHIFTL(G_LOADTLUT, 24, 8),         \ 
 4430   (_SHIFTL((tile),  24,  3) |          \ 
 4431    _SHIFTL((count), 14, 10))           \ 
 4434#define gDPLoadTextureBlock(pkt, timg, fmt, siz, width, height, pal,        \ 
 4435                                 cms, cmt, masks, maskt, shifts, shiftt)    \ 
 4437    gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg);                \ 
 4438    gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE,             \ 
 4439        0, cmt, maskt, shiftt, cms, masks, shifts);                         \ 
 4440    gDPLoadSyncInTexLoad(pkt);                                              \ 
 4441    gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0,                                  \ 
 4442        (((width) * (height) + siz##_INCR) >> siz##_SHIFT) -1,              \ 
 4443        CALC_DXT(width, siz##_BYTES));                                      \ 
 4444    gDPPipeSyncInTexLoad(pkt);                                              \ 
 4445    gDPSetTile(pkt, fmt, siz,                                               \ 
 4446        (((width) * siz##_LINE_BYTES) + 7) >> 3, 0,                         \ 
 4447        G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts);      \ 
 4448    gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0,                              \ 
 4449        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                             \ 
 4450        ((height) - 1) << G_TEXTURE_IMAGE_FRAC);                            \ 
 4453#define gDPLoadTextureBlockYuv(pkt, timg, fmt, siz, width, height, pal,     \ 
 4454                                    cms, cmt, masks, maskt, shifts, shiftt) \ 
 4456    gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg);                \ 
 4457    gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE,             \ 
 4458        0, cmt, maskt, shiftt, cms, masks, shifts);                         \ 
 4459    gDPLoadSyncInTexLoad(pkt);                                              \ 
 4460    gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0,                                  \ 
 4461        (((width) * (height) + siz##_INCR) >> siz##_SHIFT) -1,              \ 
 4462        CALC_DXT(width, siz##_BYTES));                                      \ 
 4463    gDPPipeSyncInTexLoad(pkt);                                              \ 
 4464    gDPSetTile(pkt, fmt, siz,                                               \ 
 4465        (((width) * 1) + 7) >> 3, 0,                                        \ 
 4466        G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts);      \ 
 4467    gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0,                              \ 
 4468        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                             \ 
 4469        ((height) - 1) << G_TEXTURE_IMAGE_FRAC);                            \ 
 4475#define gDPLoadTextureBlockS(pkt, timg, fmt, siz, width, height, pal,       \ 
 4476                                  cms, cmt, masks, maskt, shifts, shiftt)   \ 
 4478    gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg);                \ 
 4479    gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE,             \ 
 4480        0, cmt, maskt, shiftt, cms, masks, shifts);                         \ 
 4481    gDPLoadSyncInTexLoad(pkt);                                              \ 
 4482    gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0,                                  \ 
 4483        (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, 0);         \ 
 4484    gDPPipeSyncInTexLoad(pkt);                                              \ 
 4485    gDPSetTile(pkt, fmt, siz,                                               \ 
 4486        (((width) * siz##_LINE_BYTES) + 7) >> 3, 0,                         \ 
 4487        G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts);      \ 
 4488    gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0,                              \ 
 4489        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                             \ 
 4490        ((height) - 1) << G_TEXTURE_IMAGE_FRAC);                            \ 
 4497#define gDPLoadMultiBlockS(pkt, timg, tmem, rtile, fmt, siz, width, height, pal,    \ 
 4498                                cms, cmt, masks, maskt, shifts, shiftt)             \ 
 4500    gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg);                        \ 
 4501    gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, _G_TEXLOADTILE(rtile),          \ 
 4502        0, cmt, maskt, shiftt, cms, masks, shifts);                                 \ 
 4503    gDPLoadSyncInTexLoad(pkt);                                                      \ 
 4504    gDPLoadBlock(pkt, _G_TEXLOADTILE(rtile), 0, 0,                                  \ 
 4505        (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1,0);                  \ 
 4506    gDPPipeSyncInTexLoad(pkt);                                                      \ 
 4507    gDPSetTile(pkt, fmt, siz,                                                       \ 
 4508        (((width) * siz##_LINE_BYTES) + 7) >> 3, tmem,                              \ 
 4509        rtile, pal, cmt, maskt, shiftt, cms, masks,                                 \ 
 4511    gDPSetTileSize(pkt, rtile, 0, 0,                                                \ 
 4512        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                                     \ 
 4513        ((height) - 1) << G_TEXTURE_IMAGE_FRAC);                                    \ 
 4517#define gDPLoadTextureBlockYuvS(pkt, timg, fmt, siz, width, height, pal,        \ 
 4518                                     cms, cmt, masks, maskt, shifts, shiftt)    \ 
 4520    gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg);                    \ 
 4521    gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE,                 \ 
 4522        0, cmt, maskt, shiftt, cms, masks, shifts);                             \ 
 4523    gDPLoadSyncInTexLoad(pkt);                                                  \ 
 4524    gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0,                                      \ 
 4525        (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1,0);              \ 
 4526    gDPPipeSyncInTexLoad(pkt);                                                  \ 
 4527    gDPSetTile(pkt, fmt, siz,                                                   \ 
 4528        (((width) * 1) + 7) >> 3, 0,                                            \ 
 4529        G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts);          \ 
 4530    gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0,                                  \ 
 4531        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                                 \ 
 4532        ((height) - 1) << G_TEXTURE_IMAGE_FRAC);                                \ 
 4538#define _gDPLoadTextureBlock(pkt, timg, tmem, fmt, siz, width, height, pal, \ 
 4539                                  cms, cmt, masks, maskt, shifts, shiftt)   \ 
 4541    gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg);                \ 
 4542    gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE,          \ 
 4543        0, cmt, maskt, shiftt, cms, masks, shifts);                         \ 
 4544    gDPLoadSyncInTexLoad(pkt);                                              \ 
 4545    gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0,                                  \ 
 4546        (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1,             \ 
 4547        CALC_DXT(width, siz##_BYTES));                                      \ 
 4548    gDPPipeSyncInTexLoad(pkt);                                              \ 
 4549    gDPSetTile(pkt, fmt, siz,                                               \ 
 4550        (((width) * siz##_LINE_BYTES) + 7) >> 3, tmem,                      \ 
 4551        G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts);      \ 
 4552    gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0,                              \ 
 4553        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                             \ 
 4554        ((height) - 1) << G_TEXTURE_IMAGE_FRAC);                            \ 
 4560#define _gDPLoadTextureBlockTile(pkt, timg, tmem, rtile, fmt, siz, width, height, pal,  \ 
 4561                                      cms, cmt, masks, maskt, shifts, shiftt)           \ 
 4563    gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg);                            \ 
 4564    gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, _G_TEXLOADTILE(rtile),              \ 
 4565        0, cmt, maskt, shiftt, cms, masks, shifts);                                     \ 
 4566    gDPLoadSyncInTexLoad(pkt);                                                          \ 
 4567    gDPLoadBlock(pkt, _G_TEXLOADTILE(rtile), 0, 0,                                      \ 
 4568        (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1,                         \ 
 4569        CALC_DXT(width, siz##_BYTES));                                                  \ 
 4570    gDPPipeSyncInTexLoad(pkt);                                                          \ 
 4571    gDPSetTile(pkt, fmt, siz,                                                           \ 
 4572        (((width) * siz##_LINE_BYTES) + 7) >> 3, tmem,                                  \ 
 4573        rtile, pal, cmt, maskt, shiftt, cms, masks, shifts);                            \ 
 4574    gDPSetTileSize(pkt, rtile, 0, 0,                                                    \ 
 4575        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                                         \ 
 4576        ((height) - 1) << G_TEXTURE_IMAGE_FRAC);                                        \ 
 4582#define gDPLoadMultiBlock(pkt, timg, tmem, rtile, fmt, siz, width, height, pal, \ 
 4583                               cms, cmt, masks, maskt, shifts, shiftt)          \ 
 4585    gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg);                    \ 
 4586    gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, tmem, _G_TEXLOADTILE(rtile),      \ 
 4587        0, cmt, maskt, shiftt, cms, masks, shifts);                             \ 
 4588    gDPLoadSyncInTexLoad(pkt);                                                  \ 
 4589    gDPLoadBlock(pkt, _G_TEXLOADTILE(rtile), 0, 0,                              \ 
 4590        (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1,                 \ 
 4591        CALC_DXT(width, siz##_BYTES));                                          \ 
 4592    gDPPipeSyncInTexLoad(pkt);                                                  \ 
 4593    gDPSetTile(pkt, fmt, siz,                                                   \ 
 4594        (((width) * siz##_LINE_BYTES) + 7) >> 3, tmem,                          \ 
 4595        rtile, pal, cmt, maskt, shiftt, cms, masks, shifts);                    \ 
 4596    gDPSetTileSize(pkt, rtile, 0, 0,                                            \ 
 4597        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                                 \ 
 4598        ((height) - 1) << G_TEXTURE_IMAGE_FRAC);                                \ 
 4601#define gsDPLoadTextureBlock(timg, fmt, siz, width, height, pal,        \ 
 4602                             cms, cmt, masks, maskt, shifts, shiftt)    \ 
 4603    gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg),                \ 
 4604    gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE,             \ 
 4605        0, cmt, maskt, shiftt, cms, masks, shifts),                     \ 
 4606    gsDPLoadSyncInTexLoad                                               \ 
 4607    gsDPLoadBlock(G_TX_LOADTILE, 0, 0,                                  \ 
 4608        (((width)*(height) + siz##_INCR) >> siz##_SHIFT) - 1,           \ 
 4609        CALC_DXT(width, siz##_BYTES)),                                  \ 
 4610    gsDPPipeSyncInTexLoad                                               \ 
 4611    gsDPSetTile(fmt, siz,                                               \ 
 4612        ((((width) * siz##_LINE_BYTES) + 7) >> 3), 0,                   \ 
 4613        G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts),  \ 
 4614    gsDPSetTileSize(G_TX_RENDERTILE, 0, 0,                              \ 
 4615        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                         \ 
 4616        ((height) - 1) << G_TEXTURE_IMAGE_FRAC) 
 4622#define gsDPLoadTextureBlockS(timg, fmt, siz, width, height, pal,       \ 
 4623                              cms, cmt, masks, maskt, shifts, shiftt)   \ 
 4624    gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg),                \ 
 4625    gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE,             \ 
 4626        0, cmt, maskt,shiftt, cms, masks, shifts),                      \ 
 4627    gsDPLoadSyncInTexLoad                                               \ 
 4628    gsDPLoadBlock(G_TX_LOADTILE, 0, 0,                                  \ 
 4629        (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, 0),     \ 
 4630    gsDPPipeSyncInTexLoad                                               \ 
 4631    gsDPSetTile(fmt, siz,                                               \ 
 4632        ((((width) * siz##_LINE_BYTES) + 7) >> 3), 0,                   \ 
 4633        G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks,           \ 
 4635    gsDPSetTileSize(G_TX_RENDERTILE, 0, 0,                              \ 
 4636        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                         \ 
 4637        ((height) - 1) << G_TEXTURE_IMAGE_FRAC) 
 4642#define _gsDPLoadTextureBlock(timg, tmem, fmt, siz, width, height, pal, \ 
 4643                              cms, cmt, masks, maskt, shifts, shiftt)   \ 
 4644    gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg),                \ 
 4645    gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, G_TX_LOADTILE,          \ 
 4646        0, cmt, maskt, shiftt, cms, masks, shifts),                     \ 
 4647    gsDPLoadSyncInTexLoad                                               \ 
 4648    gsDPLoadBlock(G_TX_LOADTILE, 0, 0,                                  \ 
 4649        (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1,         \ 
 4650        CALC_DXT(width, siz##_BYTES)),                                  \ 
 4651    gsDPPipeSyncInTexLoad                                               \ 
 4652    gsDPSetTile(fmt, siz,                                               \ 
 4653        ((((width) * siz##_LINE_BYTES) + 7) >> 3), tmem,                \ 
 4654        G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks,           \ 
 4656    gsDPSetTileSize(G_TX_RENDERTILE, 0, 0,                              \ 
 4657        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                         \ 
 4658        ((height) - 1) << G_TEXTURE_IMAGE_FRAC) 
 4664#define _gsDPLoadTextureBlockTile(timg, tmem, rtile, fmt, siz, width, height, pal,  \ 
 4665                                  cms, cmt, masks, maskt, shifts, shiftt)           \ 
 4666    gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg),                            \ 
 4667    gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, _G_TEXLOADTILE(rtile),              \ 
 4668        0, cmt, maskt, shiftt, cms, masks, shifts),                                 \ 
 4669    gsDPLoadSyncInTexLoad                                                           \ 
 4670    gsDPLoadBlock(_G_TEXLOADTILE(rtile), 0, 0,                                      \ 
 4671        (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1,                     \ 
 4672        CALC_DXT(width, siz##_BYTES)),                                              \ 
 4673    gsDPPipeSyncInTexLoad                                                           \ 
 4674    gsDPSetTile(fmt, siz,                                                           \ 
 4675        ((((width) * siz##_LINE_BYTES) + 7) >> 3), tmem,                            \ 
 4676        rtile, pal, cmt, maskt, shiftt, cms, masks,                                 \ 
 4678    gsDPSetTileSize(rtile, 0, 0,                                                    \ 
 4679        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                                     \ 
 4680        ((height) - 1) << G_TEXTURE_IMAGE_FRAC) 
 4687#define gsDPLoadMultiBlock(timg, tmem, rtile, fmt, siz, width, height, pal, \ 
 4688                           cms, cmt, masks, maskt, shifts, shiftt)          \ 
 4689    gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg),                    \ 
 4690    gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, _G_TEXLOADTILE(rtile),      \ 
 4691        0, cmt, maskt, shiftt, cms, masks, shifts),                         \ 
 4692    gsDPLoadSyncInTexLoad                                                   \ 
 4693    gsDPLoadBlock(_G_TEXLOADTILE(rtile), 0, 0,                              \ 
 4694        (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1,             \ 
 4695        CALC_DXT(width, siz##_BYTES)),                                      \ 
 4696    gsDPPipeSyncInTexLoad                                                   \ 
 4697    gsDPSetTile(fmt, siz,                                                   \ 
 4698        ((((width) * siz##_LINE_BYTES) + 7) >> 3), tmem,                    \ 
 4699        rtile, pal, cmt, maskt, shiftt, cms, masks, shifts),                \ 
 4700    gsDPSetTileSize(rtile, 0, 0,                                            \ 
 4701        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                             \ 
 4702        ((height) - 1) << G_TEXTURE_IMAGE_FRAC) 
 4712#define gsDPLoadMultiBlockS(timg, tmem, rtile, fmt, siz, width, height, pal,    \ 
 4713                            cms, cmt, masks, maskt, shifts, shiftt)             \ 
 4714    gsDPSetTextureImage(fmt, siz##_LOAD_BLOCK, 1, timg),                        \ 
 4715    gsDPSetTile(fmt, siz##_LOAD_BLOCK, 0, tmem, _G_TEXLOADTILE(rtile),          \ 
 4716        0, cmt, maskt,shiftt, cms, masks, shifts),                              \ 
 4717    gsDPLoadSyncInTexLoad                                                       \ 
 4718    gsDPLoadBlock(_G_TEXLOADTILE(rtile), 0, 0,                                  \ 
 4719        (((width) * (height) + siz##_INCR) >> siz##_SHIFT) - 1, 0),             \ 
 4720    gsDPPipeSyncInTexLoad                                                       \ 
 4721    gsDPSetTile(fmt, siz,                                                       \ 
 4722        ((((width) * siz##_LINE_BYTES) + 7) >> 3), tmem,                        \ 
 4723        rtile, pal, cmt, maskt, shiftt, cms, masks, shifts),                    \ 
 4724    gsDPSetTileSize(rtile, 0, 0,                                                \ 
 4725        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                                 \ 
 4726        ((height) - 1) << G_TEXTURE_IMAGE_FRAC) 
 4729#define gDPLoadTextureBlock_4b(pkt, timg, fmt, width, height, pal,          \ 
 4730                                    cms, cmt, masks, maskt, shifts, shiftt) \ 
 4732    gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg);                    \ 
 4733    gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE,                 \ 
 4734        0, cmt, maskt, shiftt, cms, masks, shifts);                         \ 
 4735    gDPLoadSyncInTexLoad(pkt);                                              \ 
 4736    gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0,                                  \ 
 4737        (((width) * (height) + 3) >> 2) - 1,                                \ 
 4738        CALC_DXT_4b(width));                                                \ 
 4739    gDPPipeSyncInTexLoad(pkt);                                              \ 
 4740    gDPSetTile(pkt, fmt, G_IM_SIZ_4b,                                       \ 
 4741        ((((width) >> 1) + 7) >> 3), 0,                                     \ 
 4742        G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts);      \ 
 4743    gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0,                              \ 
 4744        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                             \ 
 4745        ((height) - 1) << G_TEXTURE_IMAGE_FRAC);                            \ 
 4751#define gDPLoadTextureBlock_4bS(pkt, timg, fmt, width, height, pal,             \ 
 4752                                     cms, cmt, masks, maskt, shifts, shiftt)    \ 
 4754    gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg);                        \ 
 4755    gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE,                     \ 
 4756        0, cmt, maskt, shiftt, cms, masks, shifts);                             \ 
 4757    gDPLoadSyncInTexLoad(pkt);                                                  \ 
 4758    gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0,                                      \ 
 4759        (((width) * (height) + 3) >> 2) - 1,                                    \ 
 4761    gDPPipeSyncInTexLoad(pkt);                                                  \ 
 4762    gDPSetTile(pkt, fmt, G_IM_SIZ_4b,                                           \ 
 4763        ((((width) >> 1) + 7) >> 3), 0,                                         \ 
 4764        G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts);          \ 
 4765    gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0,                                  \ 
 4766        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                                 \ 
 4767        ((height) - 1) << G_TEXTURE_IMAGE_FRAC);                                \ 
 4773#define gDPLoadMultiBlock_4b(pkt, timg, tmem, rtile, fmt, width, height, pal,   \ 
 4774                                  cms, cmt, masks, maskt, shifts, shiftt)       \ 
 4776    gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg);                        \ 
 4777    gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, _G_TEXLOADTILE(rtile),          \ 
 4778        0, cmt, maskt, shiftt, cms, masks, shifts);                             \ 
 4779    gDPLoadSyncInTexLoad(pkt);                                                  \ 
 4780    gDPLoadBlock(pkt, _G_TEXLOADTILE(rtile), 0, 0,                              \ 
 4781        (((width) * (height) + 3) >> 2) - 1,                                    \ 
 4782        CALC_DXT_4b(width));                                                    \ 
 4783    gDPPipeSyncInTexLoad(pkt);                                                  \ 
 4784    gDPSetTile(pkt, fmt, G_IM_SIZ_4b,                                           \ 
 4785        ((((width) >> 1) + 7) >> 3), tmem,                                      \ 
 4786        rtile, pal, cmt, maskt, shiftt, cms, masks, shifts);                    \ 
 4787    gDPSetTileSize(pkt, rtile, 0, 0,                                            \ 
 4788        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                                 \ 
 4789        ((height) - 1) << G_TEXTURE_IMAGE_FRAC);                                \ 
 4796#define gDPLoadMultiBlock_4bS(pkt, timg, tmem, rtile, fmt, width, height, pal,  \ 
 4797                                   cms, cmt, masks, maskt, shifts, shiftt)      \ 
 4799    gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg);                        \ 
 4800    gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, _G_TEXLOADTILE(rtile),          \ 
 4801        0, cmt, maskt, shiftt, cms, masks, shifts);                             \ 
 4802    gDPLoadSyncInTexLoad(pkt);                                                  \ 
 4803    gDPLoadBlock(pkt, _G_TEXLOADTILE(rtile), 0, 0,                              \ 
 4804        (((width) * (height) + 3) >> 2) - 1,                                    \ 
 4806    gDPPipeSyncInTexLoad(pkt);                                                  \ 
 4807    gDPSetTile(pkt, fmt, G_IM_SIZ_4b,                                           \ 
 4808        ((((width) >> 1) + 7) >> 3), tmem,                                      \ 
 4809        rtile, pal, cmt, maskt, shiftt, cms, masks, shifts);                    \ 
 4810    gDPSetTileSize(pkt, rtile, 0, 0,                                            \ 
 4811        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                                 \ 
 4812        ((height) - 1) << G_TEXTURE_IMAGE_FRAC);                                \ 
 4816#define _gDPLoadTextureBlock_4b(pkt, timg, tmem, fmt, width, height, pal,       \ 
 4817                                     cms, cmt, masks, maskt, shifts, shiftt)    \ 
 4819    gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg);                        \ 
 4820    gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE,                  \ 
 4821        0, cmt, maskt, shiftt, cms, masks, shifts);                             \ 
 4822    gDPLoadSyncInTexLoad(pkt);                                                  \ 
 4823    gDPLoadBlock(pkt, G_TX_LOADTILE, 0, 0,                                      \ 
 4824        (((width) * (height) + 3) >> 2) - 1,                                    \ 
 4825        CALC_DXT_4b(width));                                                    \ 
 4826    gDPPipeSyncInTexLoad(pkt);                                                  \ 
 4827    gDPSetTile(pkt, fmt, G_IM_SIZ_4b,                                           \ 
 4828        ((((width) >> 1) + 7) >> 3), tmem,                                      \ 
 4829        G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts);          \ 
 4830    gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0,                                  \ 
 4831        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                                 \ 
 4832        ((height) - 1) << G_TEXTURE_IMAGE_FRAC);                                \ 
 4835#define gsDPLoadTextureBlock_4b(timg, fmt, width, height, pal,          \ 
 4836                                cms, cmt, masks, maskt, shifts, shiftt) \ 
 4837    gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg),                    \ 
 4838    gsDPSetTile(fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE,                 \ 
 4839        0, cmt, maskt, shiftt, cms, masks, shifts),                     \ 
 4840    gsDPLoadSyncInTexLoad                                               \ 
 4841    gsDPLoadBlock(G_TX_LOADTILE, 0, 0,                                  \ 
 4842        (((width) * (height) + 3) >> 2) - 1,                            \ 
 4843        CALC_DXT_4b(width)),                                            \ 
 4844    gsDPPipeSyncInTexLoad                                               \ 
 4845    gsDPSetTile(fmt, G_IM_SIZ_4b,                                       \ 
 4846        ((((width) >> 1) + 7) >> 3), 0,                                 \ 
 4847        G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts),  \ 
 4848    gsDPSetTileSize(G_TX_RENDERTILE, 0, 0,                              \ 
 4849        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                         \ 
 4850        ((height) - 1) << G_TEXTURE_IMAGE_FRAC) 
 4852#define gsDPLoadTextureBlock_4bS(timg, fmt, width, height, pal,             \ 
 4853                                 cms, cmt, masks, maskt, shifts, shiftt)    \ 
 4854    gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg),                        \ 
 4855    gsDPSetTile(fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE,                     \ 
 4856        0, cmt, maskt, shiftt, cms, masks, shifts),                         \ 
 4857    gsDPLoadSyncInTexLoad                                                   \ 
 4858    gsDPLoadBlock(G_TX_LOADTILE, 0, 0,                                      \ 
 4859        (((width) * (height) + 3) >> 2) - 1,                                \ 
 4861    gsDPPipeSyncInTexLoad                                                   \ 
 4862    gsDPSetTile(fmt, G_IM_SIZ_4b,                                           \ 
 4863        ((((width) >> 1) + 7) >> 3), 0,                                     \ 
 4864        G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts),      \ 
 4865    gsDPSetTileSize(G_TX_RENDERTILE, 0, 0,                                  \ 
 4866        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                             \ 
 4867        ((height) - 1) << G_TEXTURE_IMAGE_FRAC) 
 4873#define gsDPLoadMultiBlock_4b(timg, tmem, rtile, fmt, width, height, pal,   \ 
 4874                              cms, cmt, masks, maskt, shifts, shiftt)       \ 
 4875    gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg),                        \ 
 4876    gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, _G_TEXLOADTILE(rtile),          \ 
 4877        0, cmt, maskt, shiftt, cms, masks, shifts),                         \ 
 4878    gsDPLoadSyncInTexLoad                                                   \ 
 4879    gsDPLoadBlock(_G_TEXLOADTILE(rtile), 0, 0,                              \ 
 4880        (((width) * (height) + 3) >> 2) - 1,                                \ 
 4881        CALC_DXT_4b(width)),                                                \ 
 4882    gsDPPipeSyncInTexLoad                                                   \ 
 4883    gsDPSetTile(fmt, G_IM_SIZ_4b,                                           \ 
 4884        ((((width) >> 1) + 7) >> 3), tmem,                                  \ 
 4885        rtile, pal, cmt, maskt, shiftt, cms, masks, shifts),                \ 
 4886    gsDPSetTileSize(rtile, 0, 0,                                            \ 
 4887        ((width)-1) << G_TEXTURE_IMAGE_FRAC,                                \ 
 4888        ((height)-1) << G_TEXTURE_IMAGE_FRAC) 
 4895#define gsDPLoadMultiBlock_4bS(timg, tmem, rtile, fmt, width, height, pal,  \ 
 4896                               cms, cmt, masks, maskt, shifts, shiftt)      \ 
 4897    gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg),                        \ 
 4898    gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, _G_TEXLOADTILE(rtile),          \ 
 4899        0, cmt, maskt, shiftt, cms, masks, shifts),                         \ 
 4900    gsDPLoadSyncInTexLoad                                                   \ 
 4901    gsDPLoadBlock(_G_TEXLOADTILE(rtile), 0, 0,                              \ 
 4902        (((width) * (height) + 3) >> 2) - 1,                                \ 
 4904    gsDPPipeSyncInTexLoad                                                   \ 
 4905    gsDPSetTile(fmt, G_IM_SIZ_4b,                                           \ 
 4906        ((((width) >> 1) + 7) >> 3), tmem,                                  \ 
 4907        rtile, pal, cmt, maskt, shiftt, cms, masks, shifts),                \ 
 4908    gsDPSetTileSize(rtile, 0, 0,                                            \ 
 4909        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                             \ 
 4910        ((height) - 1) << G_TEXTURE_IMAGE_FRAC) 
 4916#define _gsDPLoadTextureBlock_4b(timg, tmem, fmt, width, height, pal,       \ 
 4917                                 cms, cmt, masks, maskt, shifts, shiftt)    \ 
 4918    gsDPSetTextureImage(fmt, G_IM_SIZ_16b, 1, timg),                        \ 
 4919    gsDPSetTile(fmt, G_IM_SIZ_16b, 0, tmem, G_TX_LOADTILE,                  \ 
 4920        0, cmt, maskt, shiftt, cms, masks, shifts),                         \ 
 4921    gsDPLoadSyncInTexLoad                                                   \ 
 4922    gsDPLoadBlock(G_TX_LOADTILE, 0, 0,                                      \ 
 4923        (((width) * (height) + 3) >> 2) - 1,                                \ 
 4924        CALC_DXT_4b(width)),                                                \ 
 4925    gsDPPipeSyncInTexLoad                                                   \ 
 4926    gsDPSetTile(fmt, G_IM_SIZ_4b,                                           \ 
 4927        ((((width) >> 1) + 7) >> 3), tmem,                                  \ 
 4928        G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts),      \ 
 4929    gsDPSetTileSize(G_TX_RENDERTILE, 0, 0,                                  \ 
 4930        ((width)  - 1) << G_TEXTURE_IMAGE_FRAC,                             \ 
 4931        ((height) - 1) << G_TEXTURE_IMAGE_FRAC) 
 4933#define gDPLoadTextureTile(pkt, timg, fmt, siz, width, height,          \ 
 4934                                uls, ult, lrs, lrt, pal,                \ 
 4935                                cms, cmt, masks, maskt, shifts, shiftt) \ 
 4937    gDPSetTextureImage(pkt, fmt, siz, width, timg);                     \ 
 4938    gDPSetTile(pkt, fmt, siz,                                           \ 
 4939        (((((lrs) - (uls) + 1) * siz##_TILE_BYTES) + 7) >> 3), 0,       \ 
 4940        G_TX_LOADTILE, 0, cmt, maskt, shiftt, cms, masks,               \ 
 4942    gDPLoadSyncInTexLoad(pkt);                                          \ 
 4943    gDPLoadTile(pkt, G_TX_LOADTILE,                                     \ 
 4944        (uls) << G_TEXTURE_IMAGE_FRAC,                                  \ 
 4945        (ult) << G_TEXTURE_IMAGE_FRAC,                                  \ 
 4946        (lrs) << G_TEXTURE_IMAGE_FRAC,                                  \ 
 4947        (lrt) << G_TEXTURE_IMAGE_FRAC);                                 \ 
 4948    gDPPipeSyncInTexLoad(pkt);                                          \ 
 4949    gDPSetTile(pkt, fmt, siz,                                           \ 
 4950        (((((lrs) - (uls) + 1) * siz##_LINE_BYTES) + 7) >> 3), 0,       \ 
 4951        G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts);  \ 
 4952    gDPSetTileSize(pkt, G_TX_RENDERTILE,                                \ 
 4953        (uls) << G_TEXTURE_IMAGE_FRAC,                                  \ 
 4954        (ult) << G_TEXTURE_IMAGE_FRAC,                                  \ 
 4955        (lrs) << G_TEXTURE_IMAGE_FRAC,                                  \ 
 4956        (lrt) << G_TEXTURE_IMAGE_FRAC);                                 \ 
 4963#define gDPLoadMultiTile(pkt, timg, tmem, rtile, fmt, siz, width, height,   \ 
 4964                              uls, ult, lrs, lrt, pal,                      \ 
 4965                              cms, cmt, masks, maskt, shifts, shiftt)       \ 
 4967    gDPSetTextureImage(pkt, fmt, siz, width, timg);                         \ 
 4968    gDPSetTile(pkt, fmt, siz,                                               \ 
 4969        (((((lrs) - (uls) + 1) * siz##_TILE_BYTES) + 7) >> 3), tmem,        \ 
 4970        _G_TEXLOADTILE(rtile), 0, cmt, maskt, shiftt, cms, masks, shifts);  \ 
 4971    gDPLoadSyncInTexLoad(pkt);                                              \ 
 4972    gDPLoadTile(pkt, _G_TEXLOADTILE(rtile),                                 \ 
 4973        (uls) << G_TEXTURE_IMAGE_FRAC,                                      \ 
 4974        (ult) << G_TEXTURE_IMAGE_FRAC,                                      \ 
 4975        (lrs) << G_TEXTURE_IMAGE_FRAC,                                      \ 
 4976        (lrt) << G_TEXTURE_IMAGE_FRAC);                                     \ 
 4977    gDPPipeSyncInTexLoad(pkt);                                              \ 
 4978    gDPSetTile(pkt, fmt, siz,                                               \ 
 4979        (((((lrs) - (uls) + 1) * siz##_LINE_BYTES) + 7) >> 3), tmem,        \ 
 4980        rtile, pal, cmt, maskt, shiftt, cms, masks, shifts);                \ 
 4981    gDPSetTileSize(pkt, rtile,                                              \ 
 4982        (uls) << G_TEXTURE_IMAGE_FRAC,                                      \ 
 4983        (ult) << G_TEXTURE_IMAGE_FRAC,                                      \ 
 4984        (lrs) << G_TEXTURE_IMAGE_FRAC,                                      \ 
 4985        (lrt) << G_TEXTURE_IMAGE_FRAC);                                     \ 
 4989#define gsDPLoadTextureTile(timg, fmt, siz, width, height,              \ 
 4990                            uls, ult, lrs, lrt, pal,                    \ 
 4991                            cms, cmt, masks, maskt, shifts, shiftt)     \ 
 4992    gsDPSetTextureImage(fmt, siz, width, timg),                         \ 
 4993    gsDPSetTile(fmt, siz,                                               \ 
 4994        (((((lrs) - (uls) + 1) * siz##_TILE_BYTES) + 7) >> 3), 0,       \ 
 4995        G_TX_LOADTILE, 0, cmt, maskt, shiftt, cms, masks, shifts),      \ 
 4996    gsDPLoadSyncInTexLoad                                               \ 
 4997    gsDPLoadTile(G_TX_LOADTILE,                                         \ 
 4998        (uls) << G_TEXTURE_IMAGE_FRAC,                                  \ 
 4999        (ult) << G_TEXTURE_IMAGE_FRAC,                                  \ 
 5000        (lrs) << G_TEXTURE_IMAGE_FRAC,                                  \ 
 5001        (lrt) << G_TEXTURE_IMAGE_FRAC),                                 \ 
 5002    gsDPPipeSyncInTexLoad                                               \ 
 5003    gsDPSetTile(fmt, siz,                                               \ 
 5004        (((((lrs) - (uls) + 1) * siz##_LINE_BYTES) + 7) >> 3), 0,       \ 
 5005        G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts),  \ 
 5006    gsDPSetTileSize(G_TX_RENDERTILE,                                    \ 
 5007        (uls) << G_TEXTURE_IMAGE_FRAC,                                  \ 
 5008        (ult) << G_TEXTURE_IMAGE_FRAC,                                  \ 
 5009        (lrs) << G_TEXTURE_IMAGE_FRAC,                                  \ 
 5010        (lrt) << G_TEXTURE_IMAGE_FRAC) 
 5016#define gsDPLoadMultiTile(timg, tmem, rtile, fmt, siz, width, height,      \ 
 5017                          uls, ult, lrs, lrt, pal,                         \ 
 5018                          cms, cmt, masks, maskt, shifts, shiftt)          \ 
 5019    gsDPSetTextureImage(fmt, siz, width, timg),                            \ 
 5020    gsDPSetTile(fmt, siz,                                                  \ 
 5021        (((((lrs) - (uls) + 1) * siz##_TILE_BYTES) + 7) >> 3), tmem,       \ 
 5022        _G_TEXLOADTILE(rtile), 0, cmt, maskt, shiftt, cms, masks, shifts), \ 
 5023    gsDPLoadSyncInTexLoad                                                  \ 
 5024    gsDPLoadTile(_G_TEXLOADTILE(rtile),                                    \ 
 5025        (uls) << G_TEXTURE_IMAGE_FRAC,                                     \ 
 5026        (ult) << G_TEXTURE_IMAGE_FRAC,                                     \ 
 5027        (lrs) << G_TEXTURE_IMAGE_FRAC,                                     \ 
 5028        (lrt) << G_TEXTURE_IMAGE_FRAC),                                    \ 
 5029    gsDPPipeSyncInTexLoad                                                  \ 
 5030    gsDPSetTile(fmt, siz,                                                  \ 
 5031        (((((lrs) - (uls) + 1) * siz##_LINE_BYTES) + 7) >> 3),             \ 
 5032        tmem, rtile, pal, cmt, maskt, shiftt, cms, masks, shifts),         \ 
 5033    gsDPSetTileSize(rtile,                                                 \ 
 5034        (uls) << G_TEXTURE_IMAGE_FRAC,                                     \ 
 5035        (ult) << G_TEXTURE_IMAGE_FRAC,                                     \ 
 5036        (lrs) << G_TEXTURE_IMAGE_FRAC,                                     \ 
 5037        (lrt) << G_TEXTURE_IMAGE_FRAC) 
 5039#define gDPLoadTextureTile_4b(pkt, timg, fmt, width, height,                \ 
 5040                                   uls, ult, lrs, lrt, pal,                 \ 
 5041                                   cms, cmt, masks, maskt, shifts, shiftt)  \ 
 5043    gDPSetTextureImage(pkt, fmt, G_IM_SIZ_8b, ((width) >> 1), timg);        \ 
 5044    gDPSetTile(pkt, fmt, G_IM_SIZ_8b,                                       \ 
 5045        (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), 0,                         \ 
 5046        G_TX_LOADTILE, 0, cmt, maskt, shiftt, cms, masks, shifts);          \ 
 5047    gDPLoadSyncInTexLoad(pkt);                                              \ 
 5048    gDPLoadTile(pkt, G_TX_LOADTILE,                                         \ 
 5049        (uls) << (G_TEXTURE_IMAGE_FRAC - 1),                                \ 
 5050        (ult) << (G_TEXTURE_IMAGE_FRAC),                                    \ 
 5051        (lrs) << (G_TEXTURE_IMAGE_FRAC - 1),                                \ 
 5052        (lrt) << (G_TEXTURE_IMAGE_FRAC));                                   \ 
 5053    gDPPipeSyncInTexLoad(pkt);                                              \ 
 5054    gDPSetTile(pkt, fmt, G_IM_SIZ_4b,                                       \ 
 5055        (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), 0,                         \ 
 5056        G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts);      \ 
 5057    gDPSetTileSize(pkt, G_TX_RENDERTILE,                                    \ 
 5058        (uls) << G_TEXTURE_IMAGE_FRAC,                                      \ 
 5059        (ult) << G_TEXTURE_IMAGE_FRAC,                                      \ 
 5060        (lrs) << G_TEXTURE_IMAGE_FRAC,                                      \ 
 5061        (lrt) << G_TEXTURE_IMAGE_FRAC);                                     \ 
 5068#define gDPLoadMultiTile_4b(pkt, timg, tmem, rtile, fmt, width, height,     \ 
 5069                                 uls, ult, lrs, lrt, pal,                   \ 
 5070                                 cms, cmt, masks, maskt, shifts, shiftt)    \ 
 5072    gDPSetTextureImage(pkt, fmt, G_IM_SIZ_8b, ((width) >> 1), timg);        \ 
 5073    gDPSetTile(pkt, fmt, G_IM_SIZ_8b,                                       \ 
 5074        (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), tmem,                      \ 
 5075        _G_TEXLOADTILE(rtile), 0, cmt, maskt, shiftt, cms, masks, shifts);  \ 
 5076    gDPLoadSyncInTexLoad(pkt);                                              \ 
 5077    gDPLoadTile(pkt, _G_TEXLOADTILE(rtile),                                 \ 
 5078        (uls) << (G_TEXTURE_IMAGE_FRAC - 1),                                \ 
 5079        (ult) << (G_TEXTURE_IMAGE_FRAC),                                    \ 
 5080        (lrs) << (G_TEXTURE_IMAGE_FRAC - 1),                                \ 
 5081        (lrt) << (G_TEXTURE_IMAGE_FRAC));                                   \ 
 5082    gDPPipeSyncInTexLoad(pkt);                                              \ 
 5083    gDPSetTile(pkt, fmt, G_IM_SIZ_4b,                                       \ 
 5084        (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), tmem,                      \ 
 5085        rtile, pal, cmt, maskt, shiftt, cms, masks, shifts);                \ 
 5086    gDPSetTileSize(pkt, rtile,                                              \ 
 5087        (uls) << G_TEXTURE_IMAGE_FRAC,                                      \ 
 5088        (ult) << G_TEXTURE_IMAGE_FRAC,                                      \ 
 5089        (lrs) << G_TEXTURE_IMAGE_FRAC,                                      \ 
 5090        (lrt) << G_TEXTURE_IMAGE_FRAC);                                     \ 
 5093#define gsDPLoadTextureTile_4b(timg, fmt, width, height,                \ 
 5094                               uls, ult, lrs, lrt, pal,                 \ 
 5095                               cms, cmt, masks, maskt, shifts, shiftt)  \ 
 5096    gsDPSetTextureImage(fmt, G_IM_SIZ_8b, ((width) >> 1), timg),        \ 
 5097    gsDPSetTile(fmt, G_IM_SIZ_8b,                                       \ 
 5098        (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), 0,                     \ 
 5099        G_TX_LOADTILE, 0, cmt, maskt, shiftt, cms, masks, shifts),      \ 
 5100    gsDPLoadSyncInTexLoad                                               \ 
 5101    gsDPLoadTile(G_TX_LOADTILE,                                         \ 
 5102        (uls) << (G_TEXTURE_IMAGE_FRAC - 1),                            \ 
 5103        (ult) << (G_TEXTURE_IMAGE_FRAC),                                \ 
 5104        (lrs) << (G_TEXTURE_IMAGE_FRAC - 1),                            \ 
 5105        (lrt) << (G_TEXTURE_IMAGE_FRAC)),                               \ 
 5106    gsDPPipeSyncInTexLoad                                               \ 
 5107    gsDPSetTile(fmt, G_IM_SIZ_4b,                                       \ 
 5108        (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), 0,                     \ 
 5109        G_TX_RENDERTILE, pal, cmt, maskt, shiftt, cms, masks, shifts),  \ 
 5110    gsDPSetTileSize(G_TX_RENDERTILE,                                    \ 
 5111        (uls) << G_TEXTURE_IMAGE_FRAC,                                  \ 
 5112        (ult) << G_TEXTURE_IMAGE_FRAC,                                  \ 
 5113        (lrs) << G_TEXTURE_IMAGE_FRAC,                                  \ 
 5114        (lrt) << G_TEXTURE_IMAGE_FRAC) 
 5119#define gsDPLoadMultiTile_4b(timg, tmem, rtile, fmt, width, height,        \ 
 5120                             uls, ult, lrs, lrt, pal,                      \ 
 5121                             cms, cmt, masks, maskt, shifts, shiftt)       \ 
 5123    gsDPSetTextureImage(fmt, G_IM_SIZ_8b, ((width) >> 1), timg),           \ 
 5124    gsDPSetTile(fmt, G_IM_SIZ_8b,                                          \ 
 5125        (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), tmem,                     \ 
 5126        _G_TEXLOADTILE(rtile), 0, cmt, maskt, shiftt, cms, masks, shifts), \ 
 5127    gsDPLoadSyncInTexLoad                                                  \ 
 5128    gsDPLoadTile(_G_TEXLOADTILE(rtile),                                    \ 
 5129        (uls) << (G_TEXTURE_IMAGE_FRAC - 1),                               \ 
 5130        (ult) << (G_TEXTURE_IMAGE_FRAC),                                   \ 
 5131        (lrs) << (G_TEXTURE_IMAGE_FRAC - 1),                               \ 
 5132        (lrt) << (G_TEXTURE_IMAGE_FRAC)),                                  \ 
 5133    gsDPPipeSyncInTexLoad                                                  \ 
 5134    gsDPSetTile(fmt, G_IM_SIZ_4b,                                          \ 
 5135        (((((lrs) - (uls) + 1) >> 1) + 7) >> 3), tmem,                     \ 
 5136        rtile, pal, cmt, maskt, shiftt, cms, masks, shifts),               \ 
 5137    gsDPSetTileSize(rtile,                                                 \ 
 5138        (uls) << G_TEXTURE_IMAGE_FRAC,                                     \ 
 5139        (ult) << G_TEXTURE_IMAGE_FRAC,                                     \ 
 5140        (lrs) << G_TEXTURE_IMAGE_FRAC,                                     \ 
 5141        (lrt) << G_TEXTURE_IMAGE_FRAC) 
 5149#define gDPLoadTLUT_pal16(pkt, pal, dram)                            \ 
 5151    gDPSetTextureImage(pkt, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram);   \ 
 5152    gDPTileSyncInTexLoad(pkt);                                       \ 
 5153    gDPSetTile(pkt, 0, 0, 0, (256 + (((pal) & 0xF) * 16)),           \ 
 5154                    _G_PALLOADTILE((pal) & 1), 0, 0, 0, 0, 0, 0, 0); \ 
 5155    gDPLoadSyncInTexLoad(pkt);                                       \ 
 5156    gDPLoadTLUTCmd(pkt, _G_PALLOADTILE((pal) & 1), 15);              \ 
 5157    gDPPipeSyncInTexLoad(pkt);                                       \ 
 
 5162#define gsDPLoadTLUT_pal16(pal, dram)                            \ 
 5163    gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram),   \ 
 5164    gsDPTileSyncInTexLoad                                        \ 
 5165    gsDPSetTile(0, 0, 0, (256 + (((pal) & 0xF) * 16)),           \ 
 5166                _G_PALLOADTILE((pal) & 1), 0, 0, 0, 0, 0, 0, 0), \ 
 5167    gsDPLoadSyncInTexLoad                                        \ 
 5168    gsDPLoadTLUTCmd(_G_PALLOADTILE((pal) & 1), 15)               \ 
 5169    gsDPPipeSyncEndOfTexLoad 
 
 5175#define gDPLoadTLUT_pal256(pkt, dram)                                   \ 
 5177    gDPSetTextureImage(pkt, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram);      \ 
 5178    gDPTileSyncInTexLoad(pkt);                                          \ 
 5179    gDPSetTile(pkt, 0, 0, 0, 256,                                       \ 
 5180                    _G_PALLOADTILE(0), 0, 0, 0, 0, 0, 0, 0);            \ 
 5181    gDPLoadSyncInTexLoad(pkt);                                          \ 
 5182    gDPLoadTLUTCmd(pkt, _G_PALLOADTILE(0), 255);                        \ 
 5183    gDPPipeSyncInTexLoad(pkt);                                          \ 
 
 5189#define gsDPLoadTLUT_pal256(dram)                               \ 
 5190    gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram),  \ 
 5191    gsDPTileSyncInTexLoad                                       \ 
 5192    gsDPSetTile(0, 0, 0, 256,                                   \ 
 5193                _G_PALLOADTILE(0), 0, 0, 0, 0, 0, 0, 0),        \ 
 5194    gsDPLoadSyncInTexLoad                                       \ 
 5195    gsDPLoadTLUTCmd(_G_PALLOADTILE(0), 255)                     \ 
 5196    gsDPPipeSyncEndOfTexLoad 
 
 5203#define _G_PALTMEMTOTILE(tmemaddr) _G_PALLOADTILE(((tmemaddr) >> 4) & 1) 
 5205#define gDPLoadTLUT(pkt, count, tmemaddr, dram)                       \ 
 5207    gDPSetTextureImage(pkt, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram);    \ 
 5208    gDPTileSyncInTexLoad(pkt);                                        \ 
 5209    gDPSetTile(pkt, 0, 0, 0, tmemaddr,                                \ 
 5210                    _G_PALTMEMTOTILE(tmemaddr), 0, 0, 0, 0, 0, 0, 0); \ 
 5211    gDPLoadSyncInTexLoad(pkt);                                        \ 
 5212    gDPLoadTLUTCmd(pkt, _G_PALTMEMTOTILE(tmemaddr), ((count) - 1));   \ 
 5213    gDPPipeSyncInTexLoad(pkt);                                        \ 
 5216#define gsDPLoadTLUT(count, tmemaddr, dram)                       \ 
 5217    gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram),    \ 
 5218    gsDPTileSyncInTexLoad                                         \ 
 5219    gsDPSetTile(0, 0, 0, tmemaddr,                                \ 
 5220                _G_PALTMEMTOTILE(tmemaddr), 0, 0, 0, 0, 0, 0, 0), \ 
 5221    gsDPLoadSyncInTexLoad                                         \ 
 5222    gsDPLoadTLUTCmd(_G_PALTMEMTOTILE(tmemaddr), ((count) - 1))    \ 
 5223    gsDPPipeSyncEndOfTexLoad 
 5227#define gDPSetScissor(pkt, mode, ulx, uly, lrx, lry)                \ 
 5229    Gfx *_g = (Gfx *)pkt;                                           \ 
 5231    _g->words.w0 = (_SHIFTL(G_SETSCISSOR,               24,  8) |   \ 
 5232                    _SHIFTL((int)((float)(ulx) * 4.0f), 12, 12) |   \ 
 5233                    _SHIFTL((int)((float)(uly) * 4.0f),  0, 12));   \ 
 5234    _g->words.w1 = (_SHIFTL(mode,                       24,  2) |   \ 
 5235                    _SHIFTL((int)((float)(lrx) * 4.0f), 12, 12) |   \ 
 5236                    _SHIFTL((int)((float)(lry) * 4.0f),  0, 12));   \ 
 5240#define gDPSetScissorFrac(pkt, mode, ulx, uly, lrx, lry)    \ 
 5242    Gfx *_g = (Gfx *)pkt;                                   \ 
 5244    _g->words.w0 = (_SHIFTL(G_SETSCISSOR, 24,  8) |         \ 
 5245                    _SHIFTL((int)((ulx)), 12, 12) |         \ 
 5246                    _SHIFTL((int)((uly)),  0, 12));         \ 
 5247    _g->words.w1 = (_SHIFTL(mode,         24,  2) |         \ 
 5248                    _SHIFTL((int)((lrx)), 12, 12) |         \ 
 5249                    _SHIFTL((int)((lry)),  0, 12));         \ 
 5252#define gsDPSetScissor(mode, ulx, uly, lrx, lry)    \ 
 5254   (_SHIFTL(G_SETSCISSOR,               24,  8) |   \ 
 5255    _SHIFTL((int)((float)(ulx) * 4.0f), 12, 12) |   \ 
 5256    _SHIFTL((int)((float)(uly) * 4.0f),  0, 12)),   \ 
 5257   (_SHIFTL(mode,                       24,  2) |   \ 
 5258    _SHIFTL((int)((float)(lrx) * 4.0f), 12, 12) |   \ 
 5259    _SHIFTL((int)((float)(lry) * 4.0f),  0, 12))    \ 
 5262#define gsDPSetScissorFrac(mode, ulx, uly, lrx, lry)    \ 
 5264   (_SHIFTL(G_SETSCISSOR, 24,  8) |                     \ 
 5265    _SHIFTL((int)((ulx)), 12, 12) |                     \ 
 5266    _SHIFTL((int)((uly)),  0, 12)),                     \ 
 5267   (_SHIFTL(mode,       24,  2) |                       \ 
 5268    _SHIFTL((int)(lrx), 12, 12) |                       \ 
 5269    _SHIFTL((int)(lry),  0, 12))                        \ 
 5273#define gDPFillRectangle(pkt, ulx, uly, lrx, lry)   \ 
 5275    Gfx *_g = (Gfx *)(pkt);                         \ 
 5277    _g->words.w0 = (_SHIFTL(G_FILLRECT, 24,  8) |   \ 
 5278                    _SHIFTL((lrx),      14, 10) |   \ 
 5279                    _SHIFTL((lry),       2, 10));   \ 
 5280    _g->words.w1 = (_SHIFTL((ulx), 14, 10) |        \ 
 5281                    _SHIFTL((uly), 2, 10));         \ 
 5284#define gsDPFillRectangle(ulx, uly, lrx, lry)   \ 
 5286   (_SHIFTL(G_FILLRECT, 24,  8) |               \ 
 5287    _SHIFTL((lrx),      14, 10) |               \ 
 5288    _SHIFTL((lry),       2, 10)),               \ 
 5289   (_SHIFTL((ulx), 14, 10) |                    \ 
 5290    _SHIFTL((uly),  2, 10))                     \ 
 5294#define gDPScisFillRectangle(pkt, ulx, uly, lrx, lry)   \ 
 5296    Gfx *_g = (Gfx *)(pkt);                             \ 
 5298    _g->words.w0 = (_SHIFTL(G_FILLRECT,    24,  8) |    \ 
 5299                    _SHIFTL(MAX((lrx), 0), 14, 10) |    \ 
 5300                    _SHIFTL(MAX((lry), 0),  2, 10));    \ 
 5301    _g->words.w1 = (_SHIFTL(MAX((ulx), 0), 14, 10) |    \ 
 5302                    _SHIFTL(MAX((uly), 0),  2, 10));    \ 
 5305#define gDPSetConvert(pkt, k0, k1, k2, k3, k4, k5)  \ 
 5307    Gfx *_g = (Gfx *)(pkt);                         \ 
 5309    _g->words.w0 = (_SHIFTL(G_SETCONVERT, 24, 8) |  \ 
 5310                    _SHIFTL(k0,           13, 9) |  \ 
 5311                    _SHIFTL(k1,            4, 9) |  \ 
 5312                    _SHIFTR(k2,            5, 4));  \ 
 5313    _g->words.w1 = (_SHIFTL(k2, 27, 5) |            \ 
 5314                    _SHIFTL(k3, 18, 9) |            \ 
 5315                    _SHIFTL(k4,  9, 9) |            \ 
 5316                    _SHIFTL(k5,  0, 9));            \ 
 5319#define gsDPSetConvert(k0, k1, k2, k3, k4, k5)  \ 
 5321   (_SHIFTL(G_SETCONVERT, 24, 8) |              \ 
 5322    _SHIFTL(k0,           13, 9) |              \ 
 5323    _SHIFTL(k1,            4, 9) |              \ 
 5324    _SHIFTL(k2,            5, 4)),              \ 
 5325   (_SHIFTL(k2, 27, 5) |                        \ 
 5326    _SHIFTL(k3, 18, 9) |                        \ 
 5327    _SHIFTL(k4,  9, 9) |                        \ 
 5328    _SHIFTL(k5,  0, 9))                         \ 
 5331#define gDPSetKeyR(pkt, cR, sR, wR)             \ 
 5333    Gfx *_g = (Gfx *)(pkt);                     \ 
 5335    _g->words.w0 = _SHIFTL(G_SETKEYR, 24, 8);   \ 
 5336    _g->words.w1 = (_SHIFTL(wR, 16, 12) |       \ 
 5337                    _SHIFTL(cR,  8,  8) |       \ 
 5338                    _SHIFTL(sR,  0,  8));       \ 
 5341#define gsDPSetKeyR(cR, sR, wR) \ 
 5343    _SHIFTL(G_SETKEYR, 24, 8),  \ 
 5344   (_SHIFTL(wR, 16, 12) |       \ 
 5345    _SHIFTL(cR,  8,  8) |       \ 
 5346    _SHIFTL(sR,  0,  8))        \ 
 5349#define gDPSetKeyGB(pkt, cG, sG, wG, cB, sB, wB)    \ 
 5351    Gfx *_g = (Gfx *)(pkt);                         \ 
 5353    _g->words.w0 = (_SHIFTL(G_SETKEYGB, 24,  8) |   \ 
 5354                    _SHIFTL(wG,         12, 12) |   \ 
 5355                    _SHIFTL(wB,          0, 12));   \ 
 5356    _g->words.w1 = (_SHIFTL(cG, 24, 8) |            \ 
 5357                    _SHIFTL(sG, 16, 8) |            \ 
 5358                    _SHIFTL(cB,  8, 8) |            \ 
 5359                    _SHIFTL(sB,  0, 8));            \ 
 5362#define gsDPSetKeyGB(cG, sG, wG, cB, sB, wB)    \ 
 5364   (_SHIFTL(G_SETKEYGB, 24,  8) |               \ 
 5365    _SHIFTL(wG,         12, 12) |               \ 
 5366    _SHIFTL(wB,          0, 12)),               \ 
 5367   (_SHIFTL(cG, 24,  8) |                       \ 
 5368    _SHIFTL(sG, 16,  8) |                       \ 
 5369    _SHIFTL(cB,  8,  8) |                       \ 
 5370    _SHIFTL(sB,  0,  8))                        \ 
 5373#define gDPNoParam(pkt, cmd)   g1Word(pkt, cmd, 0) 
 5374#define gsDPNoParam(cmd)      gs1Word(     cmd, 0) 
 5376#define gDPParam(pkt, cmd, param)       \ 
 5378    Gfx *_g = (Gfx *)(pkt);             \ 
 5380    _g->words.w0 = _SHIFTL(cmd, 24, 8); \ 
 5381    _g->words.w1 = (param);             \ 
 5384#define gsDPParam(cmd, param)   \ 
 5386    _SHIFTL(cmd, 24, 8),        \ 
 5396#define gsDPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy)    \ 
 5398   (_SHIFTL(G_TEXRECT, 24,  8) |                                        \ 
 5399    _SHIFTL(xh,        12, 12) |                                        \ 
 5400    _SHIFTL(yh,         0, 12)),                                        \ 
 5401   (_SHIFTL(tile, 24,  3) |                                             \ 
 5402    _SHIFTL(xl,   12, 12) |                                             \ 
 5403    _SHIFTL(yl,    0, 12)),                                             \ 
 5406   (_SHIFTL(s, 16, 16) |                                                \ 
 5407    _SHIFTL(t,  0, 16)),                                                \ 
 5408   (_SHIFTL(dsdx, 16, 16) |                                             \ 
 5409    _SHIFTL(dtdy,  0, 16))                                              \ 
 
 5415#define gDPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)    \ 
 5417    Gfx *_g = (Gfx *)(pkt);                                                 \ 
 5419    _g->words.w0 = (_SHIFTL(G_TEXRECT, 24,  8) |                            \ 
 5420                    _SHIFTL(xh,        12, 12) |                            \ 
 5421                    _SHIFTL(yh,         0, 12));                            \ 
 5422    _g->words.w1 = (_SHIFTL(tile, 24,  3) |                                 \ 
 5423                    _SHIFTL(xl,   12, 12) |                                 \ 
 5424                    _SHIFTL(yl,    0, 12));                                 \ 
 5426    _g->words.w0 = (_SHIFTL(s, 16, 16) |                                    \ 
 5427                    _SHIFTL(t,  0, 16));                                    \ 
 5428    _g->words.w1 = (_SHIFTL(dsdx, 16, 16) |                                 \ 
 5429                    _SHIFTL(dtdy,  0, 16));                                 \ 
 
 5432#define gsDPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy)    \ 
 5434   (_SHIFTL(G_TEXRECTFLIP, 24,  8) |                                        \ 
 5435    _SHIFTL(xh,            12, 12) |                                        \ 
 5436    _SHIFTL(yh,             0, 12)),                                        \ 
 5437   (_SHIFTL(tile, 24,  3) |                                                 \ 
 5438    _SHIFTL(xl,   12, 12) |                                                 \ 
 5439    _SHIFTL(yl,    0, 12)),                                                 \ 
 5442   (_SHIFTL(s, 16, 16) |                                                    \ 
 5443    _SHIFTL(t,  0, 16)),                                                    \ 
 5444   (_SHIFTL(dsdx, 16, 16) |                                                 \ 
 5445    _SHIFTL(dtdy,  0, 16))                                                  \ 
 5448#define gDPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)    \ 
 5450    Gfx *_g = (Gfx *)(pkt);                                                     \ 
 5452    _g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24,  8) |                            \ 
 5453                    _SHIFTL(xh,            12, 12) |                            \ 
 5454                    _SHIFTL(yh,             0, 12));                            \ 
 5455    _g->words.w1 = (_SHIFTL(tile, 24,  3) |                                     \ 
 5456                    _SHIFTL(xl,   12, 12) |                                     \ 
 5457                    _SHIFTL(yl,    0, 12));                                     \ 
 5459    _g->words.w0 = (_SHIFTL(s, 16, 16) |                                        \ 
 5460                    _SHIFTL(t,  0, 16));                                        \ 
 5461    _g->words.w1 = (_SHIFTL(dsdx, 16, 16) |                                     \ 
 5462                    _SHIFTL(dtdy,  0, 16));                                     \ 
 5465#define gsSPTextureRectangle(xl, yl, xh, yh, tile, s, t, dsdx, dtdy)    \ 
 5466   (_SHIFTL(G_TEXRECT, 24,  8) |                                        \ 
 5467    _SHIFTL(xh,        12, 12) |                                        \ 
 5468    _SHIFTL(yh,         0, 12)),                                        \ 
 5469   (_SHIFTL(tile, 24,  3) |                                             \ 
 5470    _SHIFTL(xl,   12, 12) |                                             \ 
 5471    _SHIFTL(yl,    0, 12)),                                             \ 
 5472   gsImmp1(G_RDPHALF_1,                                                 \ 
 5473       (_SHIFTL(s, 16, 16) |                                            \ 
 5474        _SHIFTL(t,  0, 16))),                                           \ 
 5475   gsImmp1(G_RDPHALF_2,                                                 \ 
 5476       (_SHIFTL(dsdx, 16, 16) |                                         \ 
 5477        _SHIFTL(dtdy,  0, 16))) 
 5479#define gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)    \ 
 5481    Gfx *_g = (Gfx *)(pkt);                                                 \ 
 5483    _g->words.w0 = (_SHIFTL(G_TEXRECT, 24,  8) |                            \ 
 5484                    _SHIFTL(xh,        12, 12) |                            \ 
 5485                    _SHIFTL(yh,         0, 12));                            \ 
 5486    _g->words.w1 = (_SHIFTL(tile, 24,  3) |                                 \ 
 5487                    _SHIFTL(xl,   12, 12) |                                 \ 
 5488                    _SHIFTL(yl,    0, 12));                                 \ 
 5489   gImmp1(pkt, G_RDPHALF_1,                                                 \ 
 5490       (_SHIFTL(s, 16, 16) |                                                \ 
 5491        _SHIFTL(t,  0, 16)));                                               \ 
 5492   gImmp1(pkt, G_RDPHALF_2,                                                 \ 
 5493       (_SHIFTL(dsdx, 16, 16) |                                             \ 
 5494        _SHIFTL(dtdy,  0, 16)));                                            \ 
 5498#define gSPScisTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)        \ 
 5500    Gfx *_g = (Gfx *)(pkt);                                                         \ 
 5502    _g->words.w0 = (_SHIFTL(G_TEXRECT,        24,  8) |                             \ 
 5503                    _SHIFTL(MAX((s16)(xh),0), 12, 12) |                             \ 
 5504                    _SHIFTL(MAX((s16)(yh),0),  0, 12));                             \ 
 5505    _g->words.w1 = (_SHIFTL((tile),           24,  3) |                             \ 
 5506                    _SHIFTL(MAX((s16)(xl),0), 12, 12) |                             \ 
 5507                    _SHIFTL(MAX((s16)(yl),0),  0, 12));                             \ 
 5508   gImmp1(pkt, G_RDPHALF_1,                                                         \ 
 5510                   (((s16)(xl)   < 0) ?                                             \ 
 5511                   (((s16)(dsdx) < 0) ?                                             \ 
 5512                    (MAX((((s16)(xl) * (s16)(dsdx)) >> 7), 0))  :                   \ 
 5513                    (MIN((((s16)(xl) * (s16)(dsdx)) >> 7), 0))) : 0)), 16, 16) |    \ 
 5516                   (((s16)(dtdy) < 0) ?                                             \ 
 5517                    (MAX((((s16)(yl) * (s16)(dtdy)) >> 7), 0))  :                   \ 
 5518                    (MIN((((s16)(yl) * (s16)(dtdy)) >> 7), 0))) : 0)),  0, 16)));   \ 
 5519   gImmp1(pkt, G_RDPHALF_2,                                                         \ 
 5520       (_SHIFTL((dsdx), 16, 16) |                                                   \ 
 5521        _SHIFTL((dtdy),  0, 16)));                                                  \ 
 5524#define gsSPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy)    \ 
 5525   (_SHIFTL(G_TEXRECTFLIP, 24,  8) |                                        \ 
 5526    _SHIFTL(xh,            12, 12) |                                        \ 
 5527    _SHIFTL(yh,             0, 12)),                                        \ 
 5528   (_SHIFTL(tile, 24,  3) |                                                 \ 
 5529    _SHIFTL(xl,   12, 12) |                                                 \ 
 5530    _SHIFTL(yl,    0, 12)),                                                 \ 
 5531   gsImmp1(G_RDPHALF_1,                                                     \ 
 5532       (_SHIFTL(s, 16, 16) |                                                \ 
 5533        _SHIFTL(t,  0, 16))),                                               \ 
 5534   gsImmp1(G_RDPHALF_2,                                                     \ 
 5535       (_SHIFTL(dsdx, 16, 16) |                                             \ 
 5536        _SHIFTL(dtdy,  0, 16))) 
 5538#define gSPTextureRectangleFlip(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)    \ 
 5540    Gfx *_g = (Gfx *)(pkt);                                                     \ 
 5542    _g->words.w0 = (_SHIFTL(G_TEXRECTFLIP, 24,  8) |                            \ 
 5543                    _SHIFTL(xh,            12, 12) |                            \ 
 5544                    _SHIFTL(yh,             0, 12));                            \ 
 5545    _g->words.w1 = (_SHIFTL(tile, 24,  3) |                                     \ 
 5546                    _SHIFTL(xl,   12, 12) |                                     \ 
 5547                    _SHIFTL(yl,    0, 12));                                     \ 
 5548   gImmp1(pkt, G_RDPHALF_1,                                                     \ 
 5549       (_SHIFTL(s, 16, 16) |                                                    \ 
 5550        _SHIFTL(t,  0, 16)));                                                   \ 
 5551   gImmp1(pkt, G_RDPHALF_2,                                                     \ 
 5552       (_SHIFTL(dsdx, 16, 16) |                                                 \ 
 5553        _SHIFTL(dtdy,  0, 16)));                                                \ 
 5556#define gsDPWord(wordhi, wordlo)                    \ 
 5557    gsImmp1(G_RDPHALF_1, (unsigned int)(wordhi)),   \ 
 5558    gsImmp1(G_RDPHALF_2, (unsigned int)(wordlo)) 
 5560#define gDPWord(pkt, wordhi, wordlo)                    \ 
 5562    Gfx *_g = (Gfx *)(pkt);                             \ 
 5563    gImmp1(pkt, G_RDPHALF_1, (unsigned int)(wordhi));   \ 
 5564    gImmp1(pkt, G_RDPHALF_2, (unsigned int)(wordlo));   \ 
 5567#ifdef RISKY_RDP_SYNCS 
 5574#define G_USEASPIPESYNC G_RDPTILESYNC 
 5576#define G_USEASPIPESYNC G_RDPPIPESYNC 
 5579#define gDPFullSync(pkt)        gDPNoParam(pkt, G_RDPFULLSYNC) 
 5580#define gsDPFullSync()          gsDPNoParam(    G_RDPFULLSYNC) 
 5581#define gDPTileSync(pkt)        gDPNoParam(pkt, G_RDPTILESYNC) 
 5582#define gsDPTileSync()          gsDPNoParam(    G_RDPTILESYNC) 
 5583#define gDPPipeSync(pkt)        gDPNoParam(pkt, G_USEASPIPESYNC) 
 5584#define gsDPPipeSync()          gsDPNoParam(    G_USEASPIPESYNC) 
 5585#define gDPLoadSync(pkt)        gDPNoParam(pkt, G_RDPLOADSYNC) 
 5586#define gsDPLoadSync()          gsDPNoParam(    G_RDPLOADSYNC) 
 5587#define gDPNoOp(pkt)            gDPNoParam(pkt, G_NOOP) 
 5588#define gsDPNoOp()              gsDPNoParam(    G_NOOP) 
 5589#define gDPNoOpTag(pkt, tag)    gDPParam(pkt,   G_NOOP, tag) 
 5590#define gsDPNoOpTag(tag)        gsDPParam(      G_NOOP, tag) 
 5592#define gDPNoOpHere(pkt, file, line)        gDma1p(pkt, G_NOOP, file, line, 1) 
 5593#define gDPNoOpString(pkt, data, n)         gDma1p(pkt, G_NOOP, data, n, 2) 
 5594#define gDPNoOpWord(pkt, data, n)           gDma1p(pkt, G_NOOP, data, n, 3) 
 5595#define gDPNoOpFloat(pkt, data, n)          gDma1p(pkt, G_NOOP, data, n, 4) 
 5596#define gDPNoOpQuiet(pkt)                   gDma1p(pkt, G_NOOP, 0, 0, 5) 
 5597#define gDPNoOpVerbose(pkt, n)              gDma1p(pkt, G_NOOP, 0, n, 5) 
 5598#define gDPNoOpCallBack(pkt, callback, arg) gDma1p(pkt, G_NOOP, callback, arg, 6) 
 5599#define gDPNoOpOpenDisp(pkt, file, line)    gDma1p(pkt, G_NOOP, file, line, 7) 
 5600#define gDPNoOpCloseDisp(pkt, file, line)   gDma1p(pkt, G_NOOP, file, line, 8) 
 5601#define gDPNoOpTag3(pkt, type, data, n)     gDma1p(pkt, G_NOOP, data, n, type) 
long int Mtx_t[4][4]
Definition gbi.h:1111
char pad1
Definition gbi.h:1265
char pad2
Definition gbi.h:1267
char pad3
Definition gbi.h:1239
unsigned char type
Definition gbi.h:1235
char pad2
Definition gbi.h:1237
unsigned char kq
Definition gbi.h:1256
unsigned char size
Definition gbi.h:1257
unsigned char kc
Definition gbi.h:1252
unsigned char kl
Definition gbi.h:1254
unsigned short flag
Definition gbi.h:1063
unsigned char a
Definition gbi.h:1076
unsigned short flag
Definition gbi.h:1073
long long int force_structure_alignment
Definition gbi.h:1085
Vtx_tn n
Definition gbi.h:1084