diff options
| -rw-r--r-- | lib/ultralib/include/PR/gbi.h | 191 |
1 files changed, 102 insertions, 89 deletions
diff --git a/lib/ultralib/include/PR/gbi.h b/lib/ultralib/include/PR/gbi.h index 80ba602..206fe6c 100644 --- a/lib/ultralib/include/PR/gbi.h +++ b/lib/ultralib/include/PR/gbi.h @@ -87,6 +87,9 @@ * */ +/* Private macro to wrap other macros in do {...} while (0) */ +#define _DW(macro) do {macro} while (0) + #ifdef F3DEX_GBI_2 # ifndef F3DEX_GBI # define F3DEX_GBI @@ -1349,6 +1352,15 @@ typedef struct { } Light_t; typedef struct { + unsigned char col[3]; + unsigned char unk3; + unsigned char colc[3]; + unsigned char unk7; + short pos[3]; + unsigned char unkE; +} PointLight_t; + +typedef struct { unsigned char col[3]; /* ambient light value (rgba) */ char pad1; unsigned char colc[3]; /* copy of ambient light value (rgba) */ @@ -1361,6 +1373,7 @@ typedef struct { typedef union { Light_t l; + PointLight_t p; long long int force_structure_alignment[2]; } Light; @@ -1718,13 +1731,13 @@ typedef union { }} #define gDma1p(pkt, c, s, l, p) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = (_SHIFTL((c), 24, 8) | _SHIFTL((p), 16, 8) | \ _SHIFTL((l), 0, 16)); \ _g->words.w1 = (unsigned int)(s); \ -} +}) #define gsDma1p(c, s, l, p) \ {{ \ @@ -1734,12 +1747,12 @@ typedef union { }} #define gDma2p(pkt, c, adrs, len, idx, ofs) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ _g->words.w0 = (_SHIFTL((c),24,8)|_SHIFTL(((len)-1)/8,19,5)| \ _SHIFTL((ofs)/8,8,8)|_SHIFTL((idx),0,8)); \ _g->words.w1 = (unsigned int)(adrs); \ -} +}) #define gsDma2p(c, adrs, len, idx, ofs) \ {{ \ (_SHIFTL((c),24,8)|_SHIFTL(((len)-1)/8,19,5)| \ @@ -1771,12 +1784,12 @@ typedef union { * +-+---+-----------------------------+ */ # define gSPVertex(pkt, v, n, v0) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ _g->words.w0 = \ _SHIFTL(G_VTX,24,8)|_SHIFTL((n),12,8)|_SHIFTL((v0)+(n),1,7); \ _g->words.w1 = (unsigned int)(v); \ -} +}) # define gsSPVertex(v, n, v0) \ {{ \ (_SHIFTL(G_VTX,24,8)|_SHIFTL((n),12,8)|_SHIFTL((v0)+(n),1,7)), \ @@ -1841,12 +1854,12 @@ typedef union { }} #define gImmp1(pkt, c, p0) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = _SHIFTL((c), 24, 8); \ _g->words.w1 = (unsigned int)(p0); \ -} +}) #define gsImmp1(c, p0) \ {{ \ @@ -1882,13 +1895,13 @@ typedef union { }} #define gImmp21(pkt, c, p0, p1, dat) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = (_SHIFTL((c), 24, 8) | _SHIFTL((p0), 8, 16) | \ _SHIFTL((p1), 0, 8)); \ _g->words.w1 = (unsigned int) (dat); \ -} +}) #define gsImmp21(c, p0, p1, dat) \ {{ \ @@ -1987,13 +2000,13 @@ typedef union { *** 1 Triangle ***/ #define gSP1Triangle(pkt, v0, v1, v2, flag) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = _SHIFTL(G_TRI1, 24, 8)| \ __gsSP1Triangle_w1f(v0, v1, v2, flag); \ _g->words.w1 = 0; \ -} +}) #define gsSP1Triangle(v0, v1, v2, flag) \ {{ \ _SHIFTL(G_TRI1, 24, 8)|__gsSP1Triangle_w1f(v0, v1, v2, flag), \ @@ -2044,13 +2057,13 @@ typedef union { *** 1 Quadrangle ***/ #define gSP1Quadrangle(pkt, v0, v1, v2, v3, flag) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = (_SHIFTL(G_QUAD, 24, 8)| \ __gsSP1Quadrangle_w1f(v0, v1, v2, v3, flag)); \ _g->words.w1 = __gsSP1Quadrangle_w2f(v0, v1, v2, v3, flag); \ -} +}) #define gsSP1Quadrangle(v0, v1, v2, v3, flag) \ {{ \ @@ -2139,13 +2152,13 @@ typedef union { *** 2 Triangles ***/ #define gSP2Triangles(pkt, v00, v01, v02, flag0, v10, v11, v12, flag1) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = (_SHIFTL(G_TRI2, 24, 8)| \ __gsSP1Triangle_w1f(v00, v01, v02, flag0)); \ _g->words.w1 = __gsSP1Triangle_w1f(v10, v11, v12, flag1); \ -} +}) #define gsSP2Triangles(v00, v01, v02, flag0, v10, v11, v12, flag1) \ {{ \ @@ -2381,7 +2394,7 @@ typedef union { * uc_dstart = ucode data section start */ #define gSPLoadUcodeEx(pkt, uc_start, uc_dstart, uc_dsize) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ _g->words.w0 = _SHIFTL(G_RDPHALF_1,24,8); \ _g->words.w1 = (unsigned int)(uc_dstart); \ @@ -2389,7 +2402,7 @@ typedef union { _g->words.w0 = (_SHIFTL(G_LOAD_UCODE,24,8)| \ _SHIFTL((int)(uc_dsize)-1,0,16)); \ _g->words.w1 = (unsigned int)(uc_start); \ -} +}) #define gsSPLoadUcodeEx(uc_start, uc_dstart, uc_dsize) \ {{ _SHIFTL(G_RDPHALF_1,24,8), \ @@ -2663,10 +2676,10 @@ typedef union { #endif /* F3DEX_GBI_2 */ #define gSPLookAt(pkt, la) \ -{ \ +_DW({ \ gSPLookAtX(pkt,la) \ gSPLookAtY(pkt,(char *)(la)+16) \ -} +}) #define gsSPLookAt(la) \ gsSPLookAtX(la), \ gsSPLookAtY((char *)(la)+16) @@ -2716,7 +2729,7 @@ typedef union { * Macros to turn texture on/off */ # define gSPTexture(pkt, s, t, level, tile, on) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = (_SHIFTL(G_TEXTURE,24,8) | \ @@ -2724,7 +2737,7 @@ typedef union { _SHIFTL((level),11,3) | _SHIFTL((tile),8,3) | \ _SHIFTL((on),1,7)); \ _g->words.w1 = (_SHIFTL((s),16,16) | _SHIFTL((t),0,16)); \ -} +}) # define gsSPTexture(s, t, level, tile, on) \ {{ \ (_SHIFTL(G_TEXTURE,24,8) | _SHIFTL(BOWTIE_VAL,16,8) | \ @@ -2805,12 +2818,12 @@ typedef union { #endif /* F3DEX_GBI_2 */ #define gSPEndDisplayList(pkt) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = _SHIFTL(G_ENDDL, 24, 8); \ _g->words.w1 = 0; \ -} +}) #define gsSPEndDisplayList() \ {{ \ @@ -2827,11 +2840,11 @@ typedef union { * gSPLoadGeometryMode(pkt, word) sets GeometryMode directly. */ #define gSPGeometryMode(pkt, c, s) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ _g->words.w0 = _SHIFTL(G_GEOMETRYMODE,24,8)|_SHIFTL(~(u32)(c),0,24);\ _g->words.w1 = (u32)(s); \ -} +}) #define gsSPGeometryMode(c, s) \ {{ \ @@ -2874,12 +2887,12 @@ typedef union { #ifdef F3DEX_GBI_2 #define gSPSetOtherMode(pkt, cmd, sft, len, data) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ _g->words.w0 = (_SHIFTL(cmd,24,8)|_SHIFTL(32-(sft)-(len),8,8)| \ _SHIFTL((len)-1,0,8)); \ _g->words.w1 = (unsigned int)(data); \ -} +}) #define gsSPSetOtherMode(cmd, sft, len, data) \ {{ \ @@ -2995,13 +3008,13 @@ typedef union { (c0) | (c1)) #define gSetImage(pkt, cmd, fmt, siz, width, i) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = _SHIFTL(cmd, 24, 8) | _SHIFTL(fmt, 21, 3) | \ _SHIFTL(siz, 19, 2) | _SHIFTL((width)-1, 0, 12); \ _g->words.w1 = (unsigned int)(i); \ -} +}) #define gsSetImage(cmd, fmt, siz, width, i) \ {{ \ @@ -3060,7 +3073,7 @@ typedef union { #define gDPSetCombineLERP(pkt, a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0, \ a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = _SHIFTL(G_SETCOMBINE, 24, 8) | \ @@ -3078,7 +3091,7 @@ typedef union { G_CCMUX_##d1, \ G_ACMUX_##Ab1, \ G_ACMUX_##Ad1)); \ -} +}) #define gsDPSetCombineLERP(a0, b0, c0, d0, Aa0, Ab0, Ac0, Ad0, \ a1, b1, c1, d1, Aa1, Ab1, Ac1, Ad1) \ @@ -3108,12 +3121,12 @@ typedef union { #define gsDPSetCombineMode(a, b) gsDPSetCombineLERP(a, b) #define gDPSetColor(pkt, c, d) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = _SHIFTL(c, 24, 8); \ _g->words.w1 = (unsigned int)(d); \ -} +}) #define gsDPSetColor(c, d) \ {{ \ @@ -3154,14 +3167,14 @@ typedef union { _SHIFTL(dz, 0, 16)) #define gDPSetPrimColor(pkt, m, l, r, g, b, a) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = (_SHIFTL(G_SETPRIMCOLOR, 24, 8) | \ _SHIFTL(m, 8, 8) | _SHIFTL(l, 0, 8)); \ _g->words.w1 = (_SHIFTL(r, 24, 8) | _SHIFTL(g, 16, 8) | \ _SHIFTL(b, 8, 8) | _SHIFTL(a, 0, 8)); \ -} +}) #define gsDPSetPrimColor(m, l, r, g, b, a) \ {{ \ @@ -3200,12 +3213,12 @@ typedef union { * modeB = G_AC_* | G_ZS_* | G_RM_* | G_RM_*2; */ #define gDPSetOtherMode(pkt, mode0, mode1) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = _SHIFTL(G_RDPSETOTHERMODE,24,8)|_SHIFTL(mode0,0,24);\ _g->words.w1 = (unsigned int)(mode1); \ -} +}) #define gsDPSetOtherMode(mode0, mode1) \ {{ \ @@ -3274,14 +3287,14 @@ typedef union { TXL2WORDS_4b(width)) #define gDPLoadTileGeneric(pkt, c, tile, uls, ult, lrs, lrt) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = _SHIFTL(c, 24, 8) | _SHIFTL(uls, 12, 12) | \ _SHIFTL(ult, 0, 12); \ _g->words.w1 = _SHIFTL(tile, 24, 3) | _SHIFTL(lrs, 12, 12) | \ _SHIFTL(lrt, 0, 12); \ -} +}) #define gsDPLoadTileGeneric(c, tile, uls, ult, lrs, lrt) \ {{ \ @@ -3300,7 +3313,7 @@ typedef union { #define gDPSetTile(pkt, fmt, siz, line, tmem, tile, palette, cmt, \ maskt, shiftt, cms, masks, shifts) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = _SHIFTL(G_SETTILE, 24, 8) | _SHIFTL(fmt, 21, 3) |\ @@ -3310,7 +3323,7 @@ typedef union { _SHIFTL(cmt, 18, 2) | _SHIFTL(maskt, 14, 4) | \ _SHIFTL(shiftt, 10, 4) |_SHIFTL(cms, 8, 2) | \ _SHIFTL(masks, 4, 4) | _SHIFTL(shifts, 0, 4); \ -} +}) #define gsDPSetTile(fmt, siz, line, tmem, tile, palette, cmt, \ maskt, shiftt, cms, masks, shifts) \ @@ -3334,7 +3347,7 @@ typedef union { * tile manipulation yourself. RJM. */ #define gDPLoadBlock(pkt, tile, uls, ult, lrs, dxt) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = (_SHIFTL(G_LOADBLOCK, 24, 8) | \ @@ -3342,7 +3355,7 @@ typedef union { _g->words.w1 = (_SHIFTL(tile, 24, 3) | \ _SHIFTL((MIN(lrs,G_TX_LDBLK_MAX_TXL)), 12, 12) |\ _SHIFTL(dxt, 0, 12)); \ -} +}) #define gsDPLoadBlock(tile, uls, ult, lrs, dxt) \ {{ \ @@ -3354,12 +3367,12 @@ typedef union { }} #define gDPLoadTLUTCmd(pkt, tile, count) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)pkt; \ \ _g->words.w0 = _SHIFTL(G_LOADTLUT, 24, 8); \ _g->words.w1 = _SHIFTL((tile), 24, 3) | _SHIFTL((count), 14, 10);\ -} +}) #define gsDPLoadTLUTCmd(tile, count) \ {{ \ @@ -3369,7 +3382,7 @@ typedef union { #define gDPLoadTextureBlock(pkt, timg, fmt, siz, width, height, \ pal, cms, cmt, masks, maskt, shifts, shiftt) \ -{ \ +_DW({ \ gDPSetTextureImage(pkt, fmt, siz##_LOAD_BLOCK, 1, timg); \ gDPSetTile(pkt, fmt, siz##_LOAD_BLOCK, 0, 0, G_TX_LOADTILE, \ 0 , cmt, maskt, shiftt, cms, masks, shifts); \ @@ -3384,8 +3397,8 @@ typedef union { shifts); \ gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ -} + ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ +}) #define gDPLoadTextureBlockYuv(pkt, timg, fmt, siz, width, height, \ pal, cms, cmt, masks, maskt, shifts, shiftt) \ @@ -3404,7 +3417,7 @@ typedef union { shifts); \ gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ } /* Load fix rww 27jun95 */ @@ -3426,7 +3439,7 @@ typedef union { shifts); \ gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ } /* @@ -3449,7 +3462,7 @@ typedef union { shifts); \ gDPSetTileSize(pkt, rtile, 0, 0, \ ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ } @@ -3469,7 +3482,7 @@ typedef union { shifts); \ gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ } /* @@ -3491,7 +3504,7 @@ typedef union { maskt, shiftt, cms, masks, shifts); \ gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ } /* @@ -3513,7 +3526,7 @@ typedef union { maskt, shiftt, cms, masks, shifts); \ gDPSetTileSize(pkt, rtile, 0, 0, \ ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ } /* @@ -3535,7 +3548,7 @@ typedef union { maskt, shiftt, cms, masks, shifts); \ gDPSetTileSize(pkt, rtile, 0, 0, \ ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ } #define gsDPLoadTextureBlock(timg, fmt, siz, width, height, \ @@ -3676,7 +3689,7 @@ typedef union { #define gDPLoadTextureBlock_4b(pkt, timg, fmt, width, height, \ pal, cms, cmt, masks, maskt, shifts, shiftt) \ -{ \ +_DW({ \ gDPSetTextureImage(pkt, fmt, G_IM_SIZ_16b, 1, timg); \ gDPSetTile(pkt, fmt, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, \ cmt, maskt, shiftt, cms, masks, shifts); \ @@ -3690,8 +3703,8 @@ typedef union { shifts); \ gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ -} + ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ +}) /* Load fix rww 27jun95 */ /* The S at the end means odd lines are already word Swapped */ @@ -3711,7 +3724,7 @@ typedef union { shifts); \ gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ } /* @@ -3733,7 +3746,7 @@ typedef union { shifts); \ gDPSetTileSize(pkt, rtile, 0, 0, \ ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ } /* @@ -3755,7 +3768,7 @@ typedef union { shifts); \ gDPSetTileSize(pkt, rtile, 0, 0, \ ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ } @@ -3775,7 +3788,7 @@ typedef union { shifts); \ gDPSetTileSize(pkt, G_TX_RENDERTILE, 0, 0, \ ((width)-1) << G_TEXTURE_IMAGE_FRAC, \ - ((height)-1) << G_TEXTURE_IMAGE_FRAC) \ + ((height)-1) << G_TEXTURE_IMAGE_FRAC); \ } #define gsDPLoadTextureBlock_4b(timg, fmt, width, height, \ @@ -3879,7 +3892,7 @@ typedef union { #define gDPLoadTextureTile(pkt, timg, fmt, siz, width, height, \ uls, ult, lrs, lrt, pal, \ cms, cmt, masks, maskt, shifts, shiftt) \ -{ \ +_DW({ \ gDPSetTextureImage(pkt, fmt, siz, width, timg); \ gDPSetTile(pkt, fmt, siz, \ (((((lrs)-(uls)+1) * siz##_TILE_BYTES)+7)>>3), 0, \ @@ -3900,8 +3913,8 @@ typedef union { (uls)<<G_TEXTURE_IMAGE_FRAC, \ (ult)<<G_TEXTURE_IMAGE_FRAC, \ (lrs)<<G_TEXTURE_IMAGE_FRAC, \ - (lrt)<<G_TEXTURE_IMAGE_FRAC) \ -} + (lrt)<<G_TEXTURE_IMAGE_FRAC); \ +}) #else /******** WORKAROUND hw 1 load tile bug ********/ @@ -3909,7 +3922,7 @@ typedef union { uls, ult, lrs, lrt, pal, \ cms, cmt, masks, maskt, shifts, shiftt) \ \ -{ \ +_DW({ \ int _loadtile_i, _loadtile_nw; Gfx *_loadtile_temp = pkt; \ guDPLoadTextureTile(_loadtile_temp, timg, fmt, siz, \ width, height, \ @@ -3918,7 +3931,7 @@ typedef union { _loadtile_nw = guGetDPLoadTextureTileSz(ult, lrt) - 1; \ for(_loadtile_i = 0; _loadtile_i < _loadtile_nw; _loadtile_i++) \ pkt; \ -} +}) #endif /* HW_VERSION_1 */ @@ -3929,7 +3942,7 @@ typedef union { #define gDPLoadMultiTile(pkt, timg, tmem, rtile, fmt, siz, width, height,\ uls, ult, lrs, lrt, pal, \ cms, cmt, masks, maskt, shifts, shiftt) \ -{ \ +_DW({ \ gDPSetTextureImage(pkt, fmt, siz, width, timg); \ gDPSetTile(pkt, fmt, siz, \ (((((lrs)-(uls)+1) * siz##_TILE_BYTES)+7)>>3), tmem, \ @@ -3950,8 +3963,8 @@ typedef union { (uls)<<G_TEXTURE_IMAGE_FRAC, \ (ult)<<G_TEXTURE_IMAGE_FRAC, \ (lrs)<<G_TEXTURE_IMAGE_FRAC, \ - (lrt)<<G_TEXTURE_IMAGE_FRAC) \ -} + (lrt)<<G_TEXTURE_IMAGE_FRAC); \ +}) #define gsDPLoadTextureTile(timg, fmt, siz, width, height, \ @@ -4034,7 +4047,7 @@ typedef union { (uls)<<G_TEXTURE_IMAGE_FRAC, \ (ult)<<G_TEXTURE_IMAGE_FRAC, \ (lrs)<<G_TEXTURE_IMAGE_FRAC, \ - (lrt)<<G_TEXTURE_IMAGE_FRAC) \ + (lrt)<<G_TEXTURE_IMAGE_FRAC); \ } /* @@ -4044,7 +4057,7 @@ typedef union { #define gDPLoadMultiTile_4b(pkt, timg, tmem, rtile, fmt, width, height, \ uls, ult, lrs, lrt, pal, \ cms, cmt, masks, maskt, shifts, shiftt) \ -{ \ +_DW({ \ gDPSetTextureImage(pkt, fmt, G_IM_SIZ_8b, ((width)>>1), timg); \ gDPSetTile(pkt, fmt, G_IM_SIZ_8b, \ (((((lrs)-(uls)+1)>>1)+7)>>3), tmem, \ @@ -4065,8 +4078,8 @@ typedef union { (uls)<<G_TEXTURE_IMAGE_FRAC, \ (ult)<<G_TEXTURE_IMAGE_FRAC, \ (lrs)<<G_TEXTURE_IMAGE_FRAC, \ - (lrt)<<G_TEXTURE_IMAGE_FRAC) \ -} + (lrt)<<G_TEXTURE_IMAGE_FRAC); \ +}) #define gsDPLoadTextureTile_4b(timg, fmt, width, height, \ uls, ult, lrs, lrt, pal, \ @@ -4127,7 +4140,7 @@ typedef union { #ifndef _HW_VERSION_1 #define gDPLoadTLUT_pal16(pkt, pal, dram) \ -{ \ +_DW({ \ gDPSetTextureImage(pkt, G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, dram); \ gDPTileSync(pkt); \ gDPSetTile(pkt, 0, 0, 0, (256+(((pal)&0xf)*16)), \ @@ -4135,7 +4148,7 @@ typedef union { gDPLoadSync(pkt); \ gDPLoadTLUTCmd(pkt, G_TX_LOADTILE, 15); \ gDPPipeSync(pkt) \ -} +}) #else /* **** WORKAROUND hardware 1 load_tlut bug ****** */ @@ -4272,7 +4285,7 @@ typedef union { #endif /* _HW_VERSION_1 */ #define gDPSetScissor(pkt, mode, ulx, uly, lrx, lry) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)pkt; \ \ _g->words.w0 = _SHIFTL(G_SETSCISSOR, 24, 8) | \ @@ -4281,11 +4294,11 @@ typedef union { _g->words.w1 = _SHIFTL(mode, 24, 2) | \ _SHIFTL((int)((float)(lrx)*4.0F), 12, 12) | \ _SHIFTL((int)((float)(lry)*4.0F), 0, 12); \ -} +}) #define gDPSetScissorFrac(pkt, mode, ulx, uly, lrx, lry) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)pkt; \ \ _g->words.w0 = _SHIFTL(G_SETSCISSOR, 24, 8) | \ @@ -4294,7 +4307,7 @@ typedef union { _g->words.w1 = _SHIFTL(mode, 24, 2) | \ _SHIFTL((int)((lrx)), 12, 12) | \ _SHIFTL((int)((lry)), 0, 12); \ -} +}) #define gsDPSetScissor(mode, ulx, uly, lrx, lry) \ {{ \ @@ -4318,13 +4331,13 @@ typedef union { /* Fraction never used in fill */ #define gDPFillRectangle(pkt, ulx, uly, lrx, lry) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = (_SHIFTL(G_FILLRECT, 24, 8) | \ _SHIFTL((lrx), 14, 10) | _SHIFTL((lry), 2, 10));\ _g->words.w1 = (_SHIFTL((ulx), 14, 10) | _SHIFTL((uly), 2, 10));\ -} +}) #define gsDPFillRectangle(ulx, uly, lrx, lry) \ {{ \ @@ -4398,12 +4411,12 @@ typedef union { }} #define gDPNoParam(pkt, cmd) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = _SHIFTL(cmd, 24, 8); \ _g->words.w1 = 0; \ -} +}) #define gsDPNoParam(cmd) \ {{ \ @@ -4483,7 +4496,7 @@ typedef union { gsImmp1(G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16))) #define gSPTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy)\ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | _SHIFTL(xh, 12, 12) | \ @@ -4492,11 +4505,11 @@ typedef union { _SHIFTL(yl, 0, 12)); \ gImmp1(pkt, G_RDPHALF_1, (_SHIFTL(s, 16, 16) | _SHIFTL(t, 0, 16))); \ gImmp1(pkt, G_RDPHALF_2, (_SHIFTL(dsdx, 16, 16) | _SHIFTL(dtdy, 0, 16)));\ -} +}) /* like gSPTextureRectangle but accepts negative position arguments */ #define gSPScisTextureRectangle(pkt, xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ -{ \ +_DW({ \ Gfx *_g = (Gfx *)(pkt); \ \ _g->words.w0 = (_SHIFTL(G_TEXRECT, 24, 8) | \ @@ -4520,7 +4533,7 @@ typedef union { 0, 16))); \ gImmp1(pkt, G_RDPHALF_2, (_SHIFTL((dsdx), 16, 16) | \ _SHIFTL((dtdy), 0, 16))); \ -} +}) #define gsSPTextureRectangleFlip(xl, yl, xh, yh, tile, s, t, dsdx, dtdy) \ {{(_SHIFTL(G_TEXRECTFLIP, 24, 8) | _SHIFTL(xh, 12, 12) | \ |
