summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDerek Hensley <hensley.derek58@gmail.com>2023-08-04 08:51:09 -0700
committerGitHub <noreply@github.com>2023-08-04 11:51:09 -0400
commitc51da0ee0f9c5616bb3fb212f8b6943f727e37d3 (patch)
tree2eee4ec46952ef272f1c4f8e469369d35feb8eab /lib
parent8dcc17e89ac8bdbe1dc4eab8389514e535016c93 (diff)
Bring over MM's gbi.h (#30)
* Smaller changes * ; * Pointlight spaces
Diffstat (limited to 'lib')
-rw-r--r--lib/ultralib/include/PR/gbi.h191
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) | \