You've already forked Microtransactions64
mirror of
https://github.com/Print-and-Panic/Microtransactions64.git
synced 2026-01-21 10:17:19 -08:00
632 lines
19 KiB
C
632 lines
19 KiB
C
/*---------------------------------------------------------------------*
|
|
Copyright (C) 1997-1998, Nintendo.
|
|
|
|
File gzsort.h
|
|
Coded by Yoshitaka Yasumoto. Jun 16, 1997.
|
|
|
|
$Id: gzsort.h,v 1.11 1998/01/06 01:28:21 yasu Exp $
|
|
*---------------------------------------------------------------------*/
|
|
#ifndef _GZSORT_H_
|
|
#define _GZSORT_H_
|
|
|
|
#ifdef _LANGUAGE_C_PLUS_PLUS
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*===========================================================================*
|
|
* GBI Commands for ZSort microcode
|
|
*===========================================================================*/
|
|
/* GBI Header */
|
|
#define G_ZS_ZOBJ 0x80
|
|
#define G_ZS_RDPCMD 0x81
|
|
#define G_ZS_MOVEMEM 0xdc
|
|
#define G_ZS_SENDSIGNAL 0xda
|
|
#define G_ZS_WAITSIGNAL 0xd9
|
|
#define G_ZS_SETSUBDL 0xd8
|
|
#define G_ZS_LINKSUBDL 0xd7
|
|
#define G_ZS_MULT_MPMTX 0xd6
|
|
#define G_ZS_MTXCAT 0xd5
|
|
#define G_ZS_MTXTRNSP 0xd4
|
|
#define G_ZS_LIGHTING_L 0xd3 /* Not use */
|
|
#define G_ZS_LIGHTING 0xd2
|
|
#define G_ZS_XFMLIGHT 0xd1
|
|
#define G_ZS_INTERPOLATE 0xd0
|
|
|
|
/*------------------------------------------------------------------------*
|
|
* case_G_ZOBJ
|
|
* +--------+--------+--------+--------+
|
|
* | Pointr for zobj0:32 |
|
|
* +--------+--------+--------+--------+
|
|
* | Pointr for zobj1:32 |
|
|
* +--------+--------+--------+--------+
|
|
* Draw zobject links
|
|
*/
|
|
#define gSPZObject(pkt, objA, objB) \
|
|
{ \
|
|
Gfx *_g = (Gfx *)(pkt); \
|
|
_g->words.w0 = (unsigned int)(objA); \
|
|
_g->words.w1 = (unsigned int)(objB); \
|
|
}
|
|
|
|
#define gsSPZObject(objA, objB) \
|
|
{ \
|
|
(unsigned int)(objA), (unsigned int)(objB) \
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*
|
|
* case_G_RDPCMD
|
|
* +--------+--------+--------+--------+
|
|
* | RDPCMD | 0 |
|
|
* +--------+--------+--------+--------+
|
|
* | Pointr for rdpcmd:32 |
|
|
* +--------+--------+--------+--------+
|
|
* Submit rdp cmd
|
|
*/
|
|
#define gSPZRdpCmd(pkt, cmd) gImmp1((pkt), G_ZS_RDPCMD, (cmd))
|
|
#define gsSPZRdpCmd(cmd) gsImmp1(G_ZS_RDPCMD, (cmd))
|
|
|
|
/*------------------------------------------------------------------------*
|
|
* case_G_MOVEMEM
|
|
* +--------+--------++-------+-+----+-+
|
|
* |MOVEMEM | Len:9 | Ofs:9 |ID:5|F|
|
|
* +--------+--------++-------+-+----+-+
|
|
* | Pointr for RDRAM:32 |
|
|
* +--------+--------+--------+--------+
|
|
* Read/Write DMEM
|
|
*/
|
|
#define GZM_USER0 0
|
|
#define GZM_USER1 2
|
|
#define GZM_MMTX 4
|
|
#define GZM_PMTX 6
|
|
#define GZM_MPMTX 8
|
|
#define GZM_OTHERMODE 10
|
|
#define GZM_VIEWPORT 12
|
|
#define GZF_LOAD 0
|
|
#define GZF_SAVE 1
|
|
|
|
#define gSPZMoveMem(pkt, id, ofs, len, buffer, flag) \
|
|
{ \
|
|
Gfx *_g = (Gfx *)(pkt); \
|
|
_g->words.w0 = _SHIFTL(G_ZS_MOVEMEM, 24, 8)| \
|
|
_SHIFTL(((len)-1)>>3, 15, 9)| \
|
|
_SHIFTL((ofs)>>3, 6, 9)|(id)|(flag); \
|
|
_g->words.w1 = (unsigned int)(buffer); \
|
|
}
|
|
|
|
#define gsSPZMoveMem(id, ofs, len, buffer, flag) \
|
|
{ \
|
|
_SHIFTL(G_ZS_MOVEMEM, 24, 8)| \
|
|
_SHIFTL(((len)-1)>>3, 15, 9)| \
|
|
_SHIFTL((ofs)>>3, 6, 9)|(id)|(flag), \
|
|
(unsigned int)(buffer) \
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
#define gSPZSetUMem(pkt, umem, size, adrs) \
|
|
gSPZMoveMem((pkt),GZM_USER0,(umem),(size),(adrs),GZF_LOAD)
|
|
#define gsSPZSetUMem(umem, size, adrs) \
|
|
gsSPZMoveMem(GZM_USER0,(umem),(size),(adrs),GZF_LOAD)
|
|
|
|
#define gSPZGetUMem(pkt, umem, size, adrs) \
|
|
gSPZMoveMem((pkt),GZM_USER0,(umem),(size),(adrs),GZF_SAVE)
|
|
#define gsSPZGetUMem(umem, size, adrs) \
|
|
gsSPZMoveMem(GZM_USER0,(umem),(size),(adrs),GZF_SAVE)
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
#define gSPZSetMtx(pkt, mid, mp) \
|
|
gSPZMoveMem((pkt), (mid), 0, sizeof(Mtx), (mp), GZF_LOAD)
|
|
#define gsSPZSetMtx(mid, mp) \
|
|
gsSPZMoveMem((mid), 0, sizeof(Mtx), (mp), GZF_LOAD)
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
#define gSPZGetMtx(pkt, mid, mp) \
|
|
gSPZMoveMem((pkt), (mid), 0, sizeof(Mtx), (mp), GZF_SAVE)
|
|
#define gsSPZGetMtx(mid, mp) \
|
|
gsSPZMoveMem((mid), 0, sizeof(Mtx), (mp), GZF_SAVE)
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
#define gSPZSetAmbient(pkt, umem, lights) \
|
|
gSPZSetUMem((pkt),(umem),ZSIZE_AMBIENT,(lights))
|
|
#define gsSPZSetAmbient(umem, lights) \
|
|
gsSPZSetUMem((umem),ZSIZE_AMBIENT,(lights))
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
#define gSPZSetDefuse(pkt, umem, lid, lights) \
|
|
gSPZSetUMem((pkt),(umem)+ZSIZE_AMBIENT+(lid)*ZSIZE_LIGHT, \
|
|
ZSIZE_DEFUSE, (lights))
|
|
#define gsSPZSetDefuse(umem, lid, lights) \
|
|
gsSPZSetUMem((umem)+ZSIZE_AMBIENT+(lid)*ZSIZE_LIGHT, \
|
|
ZSIZE_DEFUSE, (lights))
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
#define gSPZSetLookAt(pkt, umem, lid, lookat) \
|
|
{ gSPZSetUMem((pkt), (umem)+ZSIZE_AMBIENT+((lid)+0)*ZSIZE_LIGHT, \
|
|
ZSIZE_DEFUSE, \
|
|
((u32)(lookat))+sizeof(Light)*0); \
|
|
gSPZSetUMem((pkt), (umem)+ZSIZE_AMBIENT+((lid)+1)*ZSIZE_LIGHT, \
|
|
ZSIZE_DEFUSE, \
|
|
((u32)(lookat))+sizeof(Light)*1); }
|
|
#define gsSPZSetLookAt(umem, lid, lookat) \
|
|
gsSPZSetUMem((umem)+ZSIZE_AMBIENT+((lid)+0)*ZSIZE_LIGHT, \
|
|
ZSIZE_DEFUSE, \
|
|
((u32)(lookat))+sizeof(Light)*0), \
|
|
gsSPZSetUMem((umem)+ZSIZE_AMBIENT+((lid)+1)*ZSIZE_LIGHT, \
|
|
ZSIZE_DEFUSE, \
|
|
((u32)(lookat))+sizeof(Light)*1)
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
#define gSPZViewport(pkt, v) \
|
|
gSPZMoveMem((pkt), GZM_VIEWPORT, 0, 16, (v), GZF_LOAD)
|
|
#define gsSPZViewport(v) \
|
|
gsSPZMoveMem(GZM_VIEWPORT, 0, 16, (v), GZF_LOAD)
|
|
|
|
#define GZ_VIEWPORT_FOG_S(in, out) (0x400000/((out)-(in)))
|
|
#define GZ_VIEWPORT_FOG_T(in, out) ((0x200*(out))/((in)-(out)))
|
|
|
|
/*------------------------------------------------------------------------*
|
|
* case_G_SENDSIGNAL
|
|
* +--------+--------+--------+--------+
|
|
* |Send SIG| Parameter1:24 |
|
|
* +--------+--------+--------+--------+
|
|
* | Parameter2:32 |
|
|
* +--------+--------+--------+--------+
|
|
* Send signal to CPU
|
|
*/
|
|
#define GZ_INTR_SPBRK1 SP_STATUS_RSPSIGNAL
|
|
#define GZ_INTR_SPBRK2 \
|
|
(SP_SET_RSPSIGNAL|SP_CLR_TASKDONE|SP_CLR_YIELDED|SP_SET_INTR)
|
|
|
|
#define gSPZSendMessage(pkt) \
|
|
gDma0p((pkt), G_ZS_SENDSIGNAL, GZ_INTR_SPBRK2, GZ_INTR_SPBRK1)
|
|
#define gsSPZSendMessage() \
|
|
gsDma0p(G_ZS_SENDSIGNAL, GZ_INTR_SPBRK2, GZ_INTR_SPBRK1)
|
|
|
|
/*------------------------------------------------------------------------*
|
|
* case_G_WAITSIGNAL
|
|
* +--------+--------+--------+--------+
|
|
* |Wait SIG| Phy Adrs of signal buf:24|
|
|
* +--------+--------+--------+--------+
|
|
* | Parameter:32 |
|
|
* +--------+--------+--------+--------+
|
|
* Wait signal from CPU
|
|
*/
|
|
#define gSPZWaitSignal(pkt, adrs, param) \
|
|
gDma0p((pkt), G_ZS_WAITSIGNAL, (param), (adrs))
|
|
|
|
#define gsSPZWaitSignal(adrs, param) \
|
|
{ \
|
|
(unsigned int)((char *)(adrs)+((G_ZS_WAITSIGNAL-0x80)<<24)), \
|
|
(unsigned int)(param) \
|
|
}
|
|
|
|
#define GZ_SENDSIGNAL(adrs,val) { \
|
|
IO_WRITE(&(((zSignal *)(adrs))->t.signal), (val)); \
|
|
IO_WRITE(SP_STATUS_REG, SP_SET_CPUSIGNAL); \
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*
|
|
* case_G_SETSUBDL
|
|
* +--------+--------+--------+--------+
|
|
* |SETSUBDL| 0 |
|
|
* +--------+--------+--------+--------+
|
|
* | DL:32 |
|
|
* +--------+--------+--------+--------+
|
|
*/
|
|
#define gSPZSetSubDL(pkt, dl) gImmp1((pkt), G_ZS_SETSUBDL, (u32)(dl))
|
|
#define gsSPZSetSubDL(dl) gsImmp1(G_ZS_SETSUBDL, (u32)(dl))
|
|
|
|
/*------------------------------------------------------------------------*
|
|
* case_G_LINKSUBDL
|
|
* +--------+--------+--------+--------+
|
|
* |LINKSUBD| 0 |
|
|
* +--------+--------+--------+--------+
|
|
* | 0 |
|
|
* +--------+--------+--------+--------+
|
|
*/
|
|
#define gSPZLinkSubDL(pkt) gImmp0((pkt), G_ZS_LINKSUBDL)
|
|
#define gsSPZLinkSubDL() gsImmp0(G_ZS_LINKSUBDL)
|
|
|
|
/*------------------------------------------------------------------------*
|
|
* case_G_MULT_MPMTX
|
|
* +--------+--------+--------+--------+
|
|
* |MULT_MPM| 0 | Mid:8 |
|
|
* +--------+--------+----+---+--------+
|
|
* | Num:8 | Src:12 | Dest:12 |
|
|
* +--------+-------------+------------+
|
|
*/
|
|
#define gSPZMultMPMtx(pkt, mid, src, num, dest) \
|
|
{ \
|
|
Gfx *_g = (Gfx *)(pkt); \
|
|
_g->words.w0 = _SHIFTL(G_ZS_MULT_MPMTX,24,8)|_SHIFTL((mid),0,8); \
|
|
_g->words.w1 = _SHIFTL(((num)-1), 24, 8)| \
|
|
_SHIFTL((src)+1024,12,12)|_SHIFTL((dest)+1024, 0,12); \
|
|
}
|
|
|
|
#define gsSPZMultMPMtx(mid, src, num, dest) \
|
|
{ \
|
|
_SHIFTL(G_ZS_MULT_MPMTX,24,8)|_SHIFTL((mid),0, 8), \
|
|
_SHIFTL(((num)-1), 24, 8)| \
|
|
_SHIFTL((src)+1024,12,12)|_SHIFTL((dest)+1024,0,12) \
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*
|
|
* case_G_MTXCAT
|
|
* +--------+--------+--------+--------+
|
|
* | MTXCAT | 0 | 0 | MidS:8 |
|
|
* +--------+--------+--------+--------+
|
|
* | 0 | MidT:8 | 0 | MidD:8 |
|
|
* +--------+--------+--------+--------+
|
|
*/
|
|
#define gSPZMtxCat(pkt, midS, midT, midD) \
|
|
{ \
|
|
Gfx *_g = (Gfx *)(pkt); \
|
|
_g->words.w0 = _SHIFTL(G_ZS_MTXCAT,24,8)|_SHIFTL((midS), 0,8); \
|
|
_g->words.w1 = _SHIFTL((midT), 16,8)|_SHIFTL((midD), 0,8); \
|
|
}
|
|
|
|
#define gsSPZMtxCat(midS, midT, midD) \
|
|
{ \
|
|
_SHIFTL(G_ZS_MTXCAT,24,8)|_SHIFTL((midS), 0,8), \
|
|
_SHIFTL((midT), 16,8)|_SHIFTL((midD), 0,8) \
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*
|
|
* case_G_MTXTRNSP
|
|
* +--------+--------+--------+--------+
|
|
* |MTXTRNSP| 0 | 0 | 0 |
|
|
* +--------+--------+--------+--------+
|
|
* | 0 | 0 | 0 | Mid:8 |
|
|
* +--------+--------+--------+--------+
|
|
*/
|
|
#define gSPZMtxTrnsp3x3(pkt, mid) gImmp1((pkt), G_ZS_MTXTRNSP, (mid))
|
|
#define gsSPZMtxTrnsp3x3(mid) gsImmp1(G_ZS_MTXTRNSP, (mid))
|
|
|
|
/*------------------------------------------------------------------------*
|
|
* case_G_XFMLIGHT
|
|
* +--------+--------+--------+--------+
|
|
* |XFMLIGHT| 0 | Mid:8 |
|
|
* +--------+----+---+----+---+--------+
|
|
* | 0 | Lnum:8 | Lptr:12 |
|
|
* +--------+----+---+----+---+--------+
|
|
*/
|
|
#define gSPZXfmLights(pkt, mid, umem, lnum) \
|
|
{ \
|
|
Gfx *_g = (Gfx *)(pkt); \
|
|
_g->words.w0 = _SHIFTL(G_ZS_XFMLIGHT,24,8)|(mid); \
|
|
_g->words.w1 = _SHIFTL((lnum)-1,12,8)|_SHIFTL((umem)+1024, 0,12); \
|
|
}
|
|
|
|
#define gsSPZXfmLights(mid, umem, lnum) \
|
|
{ \
|
|
_SHIFTL(G_ZS_XFMLIGHT,24,8)|(mid), \
|
|
_SHIFTL((lnum)-1,12,8)|_SHIFTL((umem)+1024, 0,12) \
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*
|
|
* case_G_LIGHTING
|
|
* +--------+-------------+------------+
|
|
* |LIGHTING| Color:12 | Norm:12 |
|
|
* +--------+-------------+------------+
|
|
* | Num:8 | DestColor:12| DestTxtr:12|
|
|
* +--------+-------------+------------+
|
|
* gSPZLight/gSPZLightMaterial
|
|
*/
|
|
#define gSPZLightMaterial(pkt, csrc, nsrc, num, cdest, tdest) \
|
|
{ \
|
|
Gfx *_g = (Gfx *)(pkt); \
|
|
_g->words.w0 = _SHIFTL(G_ZS_LIGHTING,24,8)| \
|
|
_SHIFTL((csrc)+1024, 12,12)|_SHIFTL((nsrc) +1024,0,12);\
|
|
_g->words.w1 = _SHIFTL((num)-1, 24, 8)| \
|
|
_SHIFTL((cdest)+1024,12,12)|_SHIFTL((tdest)+1024,0,12);\
|
|
}
|
|
|
|
#define gsSPZLightMaterial(csrc, nsrc, num, cdest, tdest) \
|
|
{ \
|
|
_SHIFTL(G_ZS_LIGHTING,24,8)| \
|
|
_SHIFTL((csrc)+1024, 12,12)|_SHIFTL((nsrc) +1024,0,12), \
|
|
_SHIFTL((num)-1, 24, 8)| \
|
|
_SHIFTL((cdest)+1024,12,12)|_SHIFTL((tdest)+1024,0,12) \
|
|
}
|
|
|
|
#define gSPZLight(pkt, nsrc, num, cdest, tdest) \
|
|
gSPZLightMaterial((pkt),-16,(nsrc),(num),(cdest),(tdest))
|
|
#define gsSPZLight(nsrc, num, cdest, tdest) \
|
|
gsSPZLightMaterial(-16,(nsrc),(num),(cdest),(tdest))
|
|
|
|
/*------------------------------------------------------------------------*
|
|
* case_G_INTERPOLATE
|
|
* +--------+--------+-----------------+
|
|
* |INTERPLT| Type:8 | Factor:16 |
|
|
* +--------+--------+----+------------+
|
|
* | Num:8 | Src1/Dest:12| Src2:12 |
|
|
* +--------+-------------+------------+
|
|
*/
|
|
#define GZ_INTRP_S16 0
|
|
#define GZ_INTRP_S8 2
|
|
#define GZ_INTRP_U8 4
|
|
|
|
#define gSPZMix(pkt, src1, src2, num, factor, type) \
|
|
{ \
|
|
Gfx *_g = (Gfx *)(pkt); \
|
|
_g->words.w0 = _SHIFTL(G_ZS_INTERPOLATE,24,8)| \
|
|
_SHIFTL((type),16, 8)|_SHIFTL((factor),0,16); \
|
|
_g->words.w1 = _SHIFTL((num)/8-1,24,8)| \
|
|
_SHIFTL((src1),12,12)|_SHIFTL((src2), 0,12); \
|
|
}
|
|
|
|
#define gsSPZMix(src1, src2, num, factor, type) \
|
|
{ \
|
|
_SHIFTL(G_ZS_INTERPOLATE,24,8)| \
|
|
_SHIFTL((type),16, 8)|_SHIFTL((factor),0,16), \
|
|
_SHIFTL(((num)-1)/8,24,8)| \
|
|
_SHIFTL((src1),12,12)|_SHIFTL((src2), 0,12) \
|
|
}
|
|
|
|
#define gSPZMixS16(pkt, src1, src2, num, factor) \
|
|
gSPZMix((pkt), (src1), (src2), (num), (factor), GZ_INTRP_S16)
|
|
#define gSPZMixS8(pkt, src1, src2, num, factor) \
|
|
gSPZMix((pkt), (src1), (src2), (num), (factor), GZ_INTRP_S8)
|
|
#define gSPZMixU8(pkt, src1, src2, num, factor) \
|
|
gSPZMix((pkt), (src1), (src2), (num), (factor), GZ_INTRP_U8)
|
|
|
|
#define gsSPZMixS16(src1, src2, num, factor) \
|
|
gsSPZMix((src1), (src2), (num), (factor), GZ_INTRP_S16)
|
|
#define gsSPZMixS8(src1, src2, num, factor) \
|
|
gsSPZMix((src1), (src2), (num), (factor), GZ_INTRP_S8)
|
|
#define gsSPZMixU8(src1, src2, num, factor) \
|
|
gsSPZMix((src1), (src2), (num), (factor), GZ_INTRP_U8)
|
|
|
|
/*------------------------------------------------------------------------*
|
|
* Compatible GBIs
|
|
*------------------------------------------------------------------------*/
|
|
#define gSPZSegment(pkt, segment, base) gSPSegment((pkt), (segment), (base))
|
|
#define gsSPZSegment(segment, base) gsSPSegment((segment), (base))
|
|
#define gSPZPerspNormalize(pkt, s) gSPPerspNormalize((pkt), (s))
|
|
#define gsSPZPerspNormalize(s) gsSPPerspNormalize(s)
|
|
#define gSPZDisplayList(pkt, dl) gSPDisplayList((pkt), (dl))
|
|
#define gsSPZDisplayList(dl) gsSPDisplayList(dl)
|
|
#define gSPZEndDisplayList(pkt) gSPEndDisplayList(pkt)
|
|
#define gsSPZEndDisplayList() gsSPEndDisplayList()
|
|
|
|
/*===========================================================================*
|
|
* Data structures for ZSort microcode
|
|
*===========================================================================*/
|
|
|
|
#define G_ZOBJ_NONE 0x80000000
|
|
|
|
/* ZObject IDs */
|
|
#define ZH_NULL 0
|
|
#define ZH_SHTRI 1
|
|
#define ZH_TXTRI 2
|
|
#define ZH_SHQUAD 3
|
|
#define ZH_TXQUAD 4
|
|
#define ZHDR(pointer, type) ((type)+((u32)(pointer)))
|
|
|
|
/*===========================================================================*
|
|
* Useful MACRO
|
|
*===========================================================================*/
|
|
#define guZFixLookAt(lp) \
|
|
{ (lp)->l[1].l.col[1] = (lp)->l[1].l.colc[1] = 0x00; }
|
|
|
|
#if (defined(_LANGUAGE_C)||defined(_LANGUAGE_C_PLUS_PLUS))
|
|
/*------------------------------------------------------------------------*/
|
|
/* ZMath: Vertex structure format */
|
|
|
|
/*-----------------------------------------------------*/
|
|
#define ZSIZE_VSRC 6
|
|
|
|
typedef struct { s16 x,y,z; } zVtxSrc;
|
|
|
|
/*-----------------------------------------------------*/
|
|
#define ZSIZE_VDEST 16
|
|
|
|
typedef struct {
|
|
s16 sx, sy;
|
|
s32 invw;
|
|
s16 xi, yi;
|
|
u8 cc;
|
|
u8 fog;
|
|
s16 wi;
|
|
} zVtxDest;
|
|
|
|
#define GZ_CC_RIGHT 0x01
|
|
#define GZ_CC_TOP 0x02
|
|
#define GZ_CC_NEAR 0x04
|
|
#define GZ_CC_LEFT 0x10
|
|
#define GZ_CC_BOTTOM 0x20
|
|
#define GZ_CC_FAR 0x40
|
|
|
|
/*-----------------------------------------------------*/
|
|
#define ZSIZE_NSRC 3
|
|
|
|
typedef struct { s8 nx,ny,nz; } zNorm;
|
|
|
|
/*-----------------------------------------------------*/
|
|
#define ZSIZE_CSRC 4
|
|
#define ZSIZE_CDEST 4
|
|
|
|
typedef struct { u8 r, g, b, a; } zColor_t;
|
|
typedef union {
|
|
zColor_t n;
|
|
u32 w;
|
|
} zColor;
|
|
|
|
/*-----------------------------------------------------*/
|
|
#define ZSIZE_TDEST 4
|
|
|
|
typedef struct { s16 s, t; } zTxtr_t;
|
|
typedef union {
|
|
zTxtr_t n;
|
|
u32 w;
|
|
} zTxtr;
|
|
|
|
/*-----------------------------------------------------*/
|
|
#define ZSIZE_LIGHT 24
|
|
#define ZSIZE_DEFUSE 16
|
|
#define ZSIZE_AMBIENT 8
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
/* ZObject: Common header */
|
|
typedef struct {
|
|
u32 header;
|
|
Gfx *rdpcmd1;
|
|
} zHeader_t;
|
|
|
|
typedef union {
|
|
zHeader_t t;
|
|
u64 force_structure_alignment;
|
|
} zHeader;
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
/* ZObject: Null Node */
|
|
typedef struct {
|
|
zHeader *header;
|
|
Gfx *rdpcmd1;
|
|
Gfx *rdpcmd2;
|
|
Gfx *rdpcmd3;
|
|
} zNull_t;
|
|
|
|
typedef union {
|
|
zNull_t t;
|
|
u64 force_structure_alignment;
|
|
} zNull;
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
/* ZObject: Smooth Shaded Triangle */
|
|
typedef struct {
|
|
s16 x, y;
|
|
u8 r, g, b, a;
|
|
} zShVtx;
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
typedef struct {
|
|
zHeader *header;
|
|
Gfx *rdpcmd1;
|
|
zShVtx v[3];
|
|
} zShTri_t;
|
|
|
|
typedef struct {
|
|
zHeader *header;
|
|
Gfx *rdpcmd1;
|
|
u32 xy0, clr0;
|
|
u32 xy1, clr1;
|
|
u32 xy2, clr2;
|
|
} zShTri_w;
|
|
|
|
typedef union {
|
|
zShTri_t t;
|
|
zShTri_w w;
|
|
u64 force_structure_alignment;
|
|
} zShTri;
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
/* ZObject: Smooth Shaded Quadrangle */
|
|
typedef struct {
|
|
zHeader *header;
|
|
Gfx *rdpcmd1;
|
|
zShVtx v[4];
|
|
} zShQuad_t;
|
|
|
|
typedef struct {
|
|
zHeader *header;
|
|
Gfx *rdpcmd1;
|
|
u32 xy0, clr0;
|
|
u32 xy1, clr1;
|
|
u32 xy2, clr2;
|
|
u32 xy3, clr3;
|
|
} zShQuad_w;
|
|
|
|
typedef union {
|
|
zShQuad_t t;
|
|
zShQuad_w w;
|
|
u64 force_structure_alignment;
|
|
} zShQuad;
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
/* ZObject: Smooth Shaded and Texture Mapped Triangle */
|
|
typedef struct {
|
|
s16 x, y;
|
|
u8 r, g, b, a;
|
|
s16 s, t;
|
|
s32 invw;
|
|
} zTxVtx;
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
typedef struct {
|
|
zHeader *header;
|
|
Gfx *rdpcmd1;
|
|
Gfx *rdpcmd2;
|
|
Gfx *rdpcmd3;
|
|
zTxVtx v[3];
|
|
} zTxTri_t;
|
|
|
|
typedef struct {
|
|
zHeader *header;
|
|
Gfx *rdpcmd1;
|
|
Gfx *rdpcmd2;
|
|
Gfx *rdpcmd3;
|
|
u32 xy0, clr0, st0, invw0;
|
|
u32 xy1, clr1, st1, invw1;
|
|
u32 xy2, clr2, st2, invw2;
|
|
} zTxTri_w;
|
|
|
|
typedef union {
|
|
zTxTri_t t;
|
|
zTxTri_w w;
|
|
u64 force_structure_alignment;
|
|
} zTxTri;
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
/* ZObject: Smooth Shaded and Texture Mapped Quadrangle */
|
|
typedef struct {
|
|
zHeader *header;
|
|
Gfx *rdpcmd1;
|
|
Gfx *rdpcmd2;
|
|
Gfx *rdpcmd3;
|
|
zTxVtx v[4];
|
|
} zTxQuad_t;
|
|
|
|
typedef struct {
|
|
zHeader *header;
|
|
Gfx *rdpcmd1;
|
|
Gfx *rdpcmd2;
|
|
Gfx *rdpcmd3;
|
|
u32 xy0, clr0, st0, invw0;
|
|
u32 xy1, clr1, st1, invw1;
|
|
u32 xy2, clr2, st2, invw2;
|
|
u32 xy3, clr3, st3, invw3;
|
|
} zTxQuad_w;
|
|
|
|
typedef union {
|
|
zTxQuad_t t;
|
|
zTxQuad_w w;
|
|
u64 force_structure_alignment;
|
|
} zTxQuad;
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
typedef struct {
|
|
u32 signal;
|
|
u32 padding;
|
|
} zSignal_t;
|
|
|
|
typedef union {
|
|
zSignal_t t;
|
|
u64 force_structure_alignment;
|
|
} zSignal;
|
|
|
|
/*===========================================================================*
|
|
* External functions
|
|
*===========================================================================*/
|
|
extern u64 gspZSort_fifoTextStart[], gspZSort_fifoTextEnd[];
|
|
extern u64 gspZSort_fifoDataStart[], gspZSort_fifoDataEnd[];
|
|
extern u64 gspZSort_pl_fifoTextStart[], gspZSort_pl_fifoTextEnd[];
|
|
extern u64 gspZSort_pl_fifoDataStart[], gspZSort_pl_fifoDataEnd[];
|
|
#endif
|
|
|
|
#ifdef _LANGUAGE_C_PLUS_PLUS
|
|
}
|
|
#endif
|
|
#endif /* _GZSORT_H_ */
|
|
|
|
/*======== End of gzsort.h ========*/
|