mirror of
https://github.com/zeldaret/tww.git
synced 2026-07-10 06:16:52 -04:00
Copy dolphin/gx progress from TP
This commit is contained in:
+63
-13
@@ -22,27 +22,77 @@ extern "C" {
|
||||
|
||||
// Pack value into bitfield
|
||||
#define GX_BITFIELD_SET(field, pos, size, value) (field) = __rlwimi((field), (value), 31 - (pos) - (size) + 1, (pos), (pos) + (size)-1)
|
||||
#define GX_BITFIELD_TRUNC(field, pos, size, value) (__rlwimi((field), (value), 0, (pos), (pos) + (size)-1))
|
||||
|
||||
#define GX_BITGET(field, pos, size) ((field) >> (31 - (pos) - (size) + 1) & ((1 << (size)) - 1))
|
||||
#define GX_GET_REG(reg, st, end) GX_BITGET(reg, st, (end - st + 1))
|
||||
#define GX_SET_REG(reg, x, st, end) GX_BITFIELD_SET(reg, st, (end - st + 1), x)
|
||||
#define GX_SET_TRUNC(reg, x, st, end) GX_BITFIELD_TRUNC((reg), (st), ((end) - (st) + 1), (x))
|
||||
|
||||
#define GXCOLOR_AS_U32(color) (*((u32*)&(color)))
|
||||
|
||||
#define INSERT_FIELD(reg, value, nbits, shift) \
|
||||
(reg) = ((u32) (reg) & ~(((1 << (nbits)) - 1) << (shift))) | \
|
||||
((u32) (value) << (shift));
|
||||
|
||||
#define FAST_FLAG_SET(regOrg, newFlag, shift, size) \
|
||||
do { \
|
||||
(regOrg) = (u32)__rlwimi((int)(regOrg), (int)(newFlag), (shift), (32 - (shift) - (size)), (31 - (shift))); \
|
||||
} while (0);
|
||||
|
||||
#define GX_LOAD_BP_REG 0x61
|
||||
#define GX_NOP 0
|
||||
|
||||
typedef union {
|
||||
u8 u8;
|
||||
u16 u16;
|
||||
u32 u32;
|
||||
u64 u64;
|
||||
s8 s8;
|
||||
s16 s16;
|
||||
s32 s32;
|
||||
s64 s64;
|
||||
f32 f32;
|
||||
f64 f64;
|
||||
u8 u8;
|
||||
u16 u16;
|
||||
u32 u32;
|
||||
u64 u64;
|
||||
s8 s8;
|
||||
s16 s16;
|
||||
s32 s32;
|
||||
s64 s64;
|
||||
f32 f32;
|
||||
f64 f64;
|
||||
} PPCWGPipe;
|
||||
|
||||
volatile PPCWGPipe GXFIFO AT_ADDRESS(0xCC008000);
|
||||
#define GXFIFO_ADDR 0xCC008000
|
||||
volatile PPCWGPipe GXFIFO AT_ADDRESS(GXFIFO_ADDR);
|
||||
|
||||
#define GX_CP_LOAD_REG(addr, data) \
|
||||
GXFIFO.s8 = GX_FIFO_CMD_LOAD_CP_REG; \
|
||||
GXFIFO.s8 = (addr); \
|
||||
GXFIFO.s32 = (data);
|
||||
|
||||
/**
|
||||
* Header for an XF register load
|
||||
*/
|
||||
#define GX_XF_LOAD_REG_HDR(addr) \
|
||||
GXFIFO.s8 = GX_FIFO_CMD_LOAD_XF_REG; \
|
||||
GXFIFO.s32 = (addr);
|
||||
|
||||
/**
|
||||
* Load immediate value into XF register
|
||||
*/
|
||||
#define GX_XF_LOAD_REG(addr, data) \
|
||||
GX_XF_LOAD_REG_HDR(addr); \
|
||||
GXFIFO.s32 = (data);
|
||||
|
||||
/**
|
||||
* Load immediate value into BP register
|
||||
*/
|
||||
#define GX_BP_LOAD_REG(data) \
|
||||
GXFIFO.s8 = GX_FIFO_CMD_LOAD_BP_REG; \
|
||||
GXFIFO.s32 = (data);
|
||||
|
||||
/**
|
||||
* Load immediate values into multiple XF registers
|
||||
*/
|
||||
#define GX_XF_LOAD_REGS(size, addr) \
|
||||
{ \
|
||||
u32 cmd = (size) << 16 | addr; \
|
||||
GX_XF_LOAD_REG_HDR(cmd); \
|
||||
}
|
||||
|
||||
// Direct
|
||||
inline void GXPosition2f32(f32 x, f32 z) {
|
||||
@@ -118,8 +168,8 @@ inline void GXTexCoord2u16(u16 x, u16 y) {
|
||||
}
|
||||
|
||||
inline void GXTexCoord2s16(const s16 u, const s16 v) {
|
||||
GXFIFO.s16 = u;
|
||||
GXFIFO.s16 = v;
|
||||
GXFIFO.s16 = u;
|
||||
GXFIFO.s16 = v;
|
||||
}
|
||||
|
||||
// Indexed
|
||||
|
||||
@@ -24,7 +24,7 @@ void GXSetVtxDescv(GXVtxDescList* list);
|
||||
void __GXSetVCD(void);
|
||||
void __GXCalculateVLim(void);
|
||||
void GXClearVtxDesc(void);
|
||||
void GXSetVtxAttrFmt(GXVtxFmt fmt, GXAttr attr, GXCompCnt cnt, GXCompType type, u32);
|
||||
void GXSetVtxAttrFmt(GXVtxFmt fmt, GXAttr attr, GXCompCnt cnt, GXCompType type, u8 frac);
|
||||
void GXSetVtxAttrFmtv(GXVtxFmt fmt, GXVtxAttrFmtList* list);
|
||||
void __GXSetVAT(void);
|
||||
void GXSetArray(GXAttr attr, void* base, u8);
|
||||
|
||||
+1190
-42
File diff suppressed because it is too large
Load Diff
@@ -9,27 +9,29 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef void (*GXBreakPtCallback)(void);
|
||||
|
||||
void GXInitFifoBase(GXFifoObj* fifo, void* base, u32 size);
|
||||
void GXInitFifoPtrs(GXFifoObj* fifo, void* read_ptr, void* write_ptr);
|
||||
void GXSetCPUFifo(void);
|
||||
void GXSetGPFifo(void);
|
||||
void GXSetCPUFifo(GXFifoObj* fifo);
|
||||
void GXSetGPFifo(GXFifoObj* fifo);
|
||||
void GXSaveCPUFifo(GXFifoObj* fifo);
|
||||
void __GXSaveCPUFifoAux(GXFifoObj* fifo);
|
||||
void GXGetGPStatus(GXBool* overhi, GXBool* underlo, GXBool* read_idle, GXBool* cmd_idle, GXBool* breakpoint);
|
||||
void* GXGetFifoBase(GXFifoObj* fifo);
|
||||
u32 GXGetFifoSize(GXFifoObj* fifo);
|
||||
void GXSetBreakPtCallback(void);
|
||||
GXBreakPtCallback GXSetBreakPtCallback(GXBreakPtCallback cb);
|
||||
void __GXFifoInit(void);
|
||||
void __GXFifoReadEnable(void);
|
||||
void __GXFifoReadDisable(void);
|
||||
void __GXFifoLink(u8);
|
||||
void __GXWriteFifoIntEnable(u8, u8);
|
||||
void __GXWriteFifoIntReset(u8, u8);
|
||||
void __GXWriteFifoIntEnable(u32 p1, u32 p2);
|
||||
void __GXWriteFifoIntReset(u32 p1, u32 p2);
|
||||
void __GXCleanGPFifo(void);
|
||||
OSThread* GXSetCurrentGXThread(void);
|
||||
OSThread* GXGetCurrentGXThread(void);
|
||||
GXFifoObj* GXGetCPUFifo(void);
|
||||
u32 GXGetGPFifo(void);
|
||||
GXFifoObj* GXGetGPFifo(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
|
||||
@@ -17,7 +17,7 @@ extern GXRenderModeObj GXEurgb60Hz480IntDf;
|
||||
void GXSetDispCopySrc(u16 left, u16 top, u16 width, u16 height);
|
||||
void GXSetTexCopySrc(u16 left, u16 top, u16 width, u16 height);
|
||||
void GXSetDispCopyDst(u16 arg0, u16 arg1);
|
||||
void GXSetTexCopyDst(u16 width, u16 height, s32 fmt, GXBool mipmap);
|
||||
void GXSetTexCopyDst(u16 width, u16 height, GXTexFmt format, GXBool useMIPmap);
|
||||
void GXSetDispCopyFrame2Field(GXCopyMode mode);
|
||||
void GXSetCopyClamp(GXFBClamp clamp);
|
||||
u16 GXGetNumXfbLines(u16 efb_height, f32 y_scale);
|
||||
|
||||
+130
-83
@@ -5,112 +5,159 @@
|
||||
#include "dolphin/gx/GXStruct.h"
|
||||
#include "dolphin/mtx/mtx.h"
|
||||
|
||||
typedef GXTexRegion (*GXTexRegionCallback)(GXTexObj* obj);
|
||||
typedef GXTlutRegion* (*GXTlutRegionCallback)(u32 name);
|
||||
typedef GXTexRegion* (*GXTexRegionCallback)(const GXTexObj* t_obj, GXTexMapID id);
|
||||
typedef GXTlutRegion* (*GXTlutRegionCallback)(u32 idx);
|
||||
|
||||
typedef struct _GXData {
|
||||
/* 0x000 */ u16 field_0x0;
|
||||
/* 0x002 */ u16 field_0x2;
|
||||
/* 0x004 */ u16 field_0x4;
|
||||
/* 0x006 */ u16 field_0x6;
|
||||
/* 0x008 */ u32 field_0x8;
|
||||
/* 0x00C */ u32 field_0xc;
|
||||
/* 0x010 */ u32 field_0x10;
|
||||
/* 0x014 */ u32 field_0x14;
|
||||
/* 0x018 */ GXAttrType field_0x18;
|
||||
/* 0x01C */ GXCompCnt field_0x1c[8];
|
||||
/* 0x03C */ GXCompCnt field_0x3c[8];
|
||||
/* 0x05C */ u32 field_0x5c[8];
|
||||
/* 0x07C */ u32 field_0x7c;
|
||||
/* 0x080 */ u32 field_0x80;
|
||||
/* 0x084 */ u32 field_0x84;
|
||||
/* 0x088 */ u8 field_0x88[0xA8 - 0x88];
|
||||
/* 0x0A8 */ GXColor ambColors[2];
|
||||
/* 0x0B0 */ GXColor matColors[2];
|
||||
/* 0x0B8 */ u32 field_0xb8[8]; // GX_MAX_TEXCOORD
|
||||
/* 0x0D8 */ u32 field_0xd8[8]; // GX_MAX_TEXCOORD
|
||||
/* 0x0F8 */ u32 field_0xf8;
|
||||
/* 0x0FC */ u32 field_0xfc;
|
||||
/* 0x100 */ u32 field_0x100[GX_MAX_TEVSTAGE / 2];
|
||||
/* 0x120 */ u32 field_0x120;
|
||||
/* 0x124 */ u32 field_0x124;
|
||||
/* 0x128 */ u32 field_0x128;
|
||||
/* 0x12C */ u32 field_0x12c;
|
||||
/* 0x130 */ u32 field_0x130[GX_MAX_TEVSTAGE];
|
||||
/* 0x170 */ u32 field_0x170[GX_MAX_TEVSTAGE];
|
||||
/* 0x1B0 */ u32 field_0x1b0[GX_MAX_TEVSTAGE / 2];
|
||||
/* 0x1D0 */ u32 field_0x1d0;
|
||||
/* 0x1D4 */ u32 field_0x1d4;
|
||||
/* 0x1D8 */ u32 field_0x1d8;
|
||||
/* 0x1DC */ u32 field_0x1dc;
|
||||
/* 0x1E0 */ u32 field_0x1e0;
|
||||
/* 0x1E4 */ u32 field_0x1e4;
|
||||
/* 0x1E8 */ u32 field_0x1e8;
|
||||
/* 0x1EC */ u32 field_0x1ec;
|
||||
/* 0x1F0 */ u32 field_0x1f0;
|
||||
/* 0x1F4 */ u32 field_0x1f4;
|
||||
/* 0x1F8 */ u32 field_0x1f8;
|
||||
/* 0x1FC */ u32 field_0x1fc;
|
||||
/* 0x200 */ u8 field_0x200;
|
||||
/* 0x204 */ u32 field_0x204;
|
||||
/* 0x208 */ GXTexRegion field_0x208[8];
|
||||
/* 0x288 */ GXTexRegion field_0x288[8];
|
||||
/* 0x308 */ GXTexRegion field_0x308[8];
|
||||
/* 0x388 */ GXTlutRegion field_0x388[16];
|
||||
/* 0x488 */ GXTlutRegion field_0x488[4];
|
||||
/* 0x4C8 */ GXTexRegionCallback field_0x4c8;
|
||||
/* 0x4CC */ GXTlutRegionCallback field_0x4cc;
|
||||
/* 0x4D0 */ GXAttrType field_0x4d0;
|
||||
/* 0x4D4 */ u8 field_0x4d4;
|
||||
/* 0x4D5 */ u8 field_0x4d5;
|
||||
/* 0x4D8 */ GXProjectionType field_0x4d8;
|
||||
/* 0x4DC */ Mtx field_0x4dc;
|
||||
/* 0x50C */ f32 field_0x50c;
|
||||
/* 0x510 */ f32 field_0x510;
|
||||
/* 0x514 */ u32 field_0x514[8];
|
||||
/* 0x534 */ u32 field_0x534[8];
|
||||
/* 0x554 */ u32 field_0x554;
|
||||
/* 0x558 */ u32 field_0x558[8];
|
||||
/* 0x578 */ u8 field_0x578[0x594 - 0x578];
|
||||
/* 0x594 */ u32 field_0x594;
|
||||
/* 0x598 */ u32 field_0x598;
|
||||
/* 0x59C */ u32 field_0x59c;
|
||||
/* 0x5A0 */ u8 field_0x5a0[4];
|
||||
/* 0x5A4 */ u32 field_0x5a4;
|
||||
/* 0x5A8 */ u8 field_0x5a8;
|
||||
/* 0x5A9 */ u8 field_0x5a9;
|
||||
/* 0x5AA */ u8 field_0x5aa;
|
||||
/* 0x5AB */ u8 field_0x5ab;
|
||||
/* 0x5AC */ u32 field_0x5ac;
|
||||
// Bypass and vertex info
|
||||
/* 0x000 */ u16 vNumNot;
|
||||
/* 0x002 */ u16 bpSentNot;
|
||||
/* 0x004 */ u16 vNum;
|
||||
/* 0x006 */ u16 vLim;
|
||||
|
||||
// Command process (CP) regs
|
||||
/* 0x008 */ u32 cpEnable;
|
||||
/* 0x00C */ u32 cpStatus;
|
||||
/* 0x010 */ u32 cpClr;
|
||||
/* 0x014 */ u32 vcdLo;
|
||||
/* 0x018 */ u32 vcdHi;
|
||||
/* 0x01C */ u32 vatA[8];
|
||||
/* 0x03C */ u32 vatB[8];
|
||||
/* 0x05C */ u32 vatC[8];
|
||||
/* 0x07C */ u32 lpSize;
|
||||
/* 0x080 */ u32 matIdxA;
|
||||
/* 0x084 */ u32 matIdxB;
|
||||
|
||||
// Index loading base/stride regs (pos, nrm, tex, light)
|
||||
/* 0x088 */ u32 indexBase[4];
|
||||
/* 0x098 */ u32 indexStride[4];
|
||||
|
||||
// Transform and lighting regs
|
||||
/* 0x0A8 */ u32 ambColor[2];
|
||||
/* 0x0B0 */ u32 matColor[2];
|
||||
|
||||
// Setup regs
|
||||
/* 0x0B8 */ u32 suTs0[8];
|
||||
/* 0x0D8 */ u32 suTs1[8];
|
||||
/* 0x0F8 */ u32 suScis0;
|
||||
/* 0x0FC */ u32 suScis1;
|
||||
|
||||
// Raster regs
|
||||
/* 0x100 */ u32 tref[8];
|
||||
/* 0x120 */ u32 iref;
|
||||
|
||||
// Bump/Indirect texture regs
|
||||
/* 0x124 */ u32 bpMask;
|
||||
/* 0x128 */ u32 IndTexScale0;
|
||||
/* 0x12C */ u32 IndTexScale1;
|
||||
|
||||
// Tev regs
|
||||
/* 0x130 */ u32 tevc[16];
|
||||
/* 0x170 */ u32 teva[16];
|
||||
/* 0x1B0 */ u32 tevKsel[8];
|
||||
|
||||
// Performance regs
|
||||
/* 0x1D0 */ u32 cmode0;
|
||||
/* 0x1D4 */ u32 cmode1;
|
||||
/* 0x1D8 */ u32 zmode;
|
||||
/* 0x1DC */ u32 peCtrl;
|
||||
|
||||
// Display copy regs
|
||||
/* 0x1E0 */ u32 cpDispSrc;
|
||||
/* 0x1E4 */ u32 cpDispSize;
|
||||
/* 0x1E8 */ u32 cpDispStride;
|
||||
/* 0x1EC */ u32 cpDisp;
|
||||
|
||||
// Texture copy regs
|
||||
/* 0x1F0 */ u32 cpTexSrc;
|
||||
/* 0x1F4 */ u32 cpTexSize;
|
||||
/* 0x1F8 */ u32 cpTexStride;
|
||||
/* 0x1FC */ u32 cpTex;
|
||||
/* 0x200 */ GXBool cpTexZ;
|
||||
|
||||
// General raster mode
|
||||
/* 0x204 */ u32 genMode;
|
||||
|
||||
// Texture regions
|
||||
/* 0x208 */ GXTexRegion TexRegions0[GX_MAX_TEXMAP];
|
||||
/* 0x288 */ GXTexRegion TexRegions1[GX_MAX_TEXMAP];
|
||||
/* 0x308 */ GXTexRegion TexRegions2[GX_MAX_TEXMAP];
|
||||
|
||||
// Texture lookup table regions
|
||||
/* 0x388 */ GXTlutRegion TlutRegions[GX_MAX_TLUT_ALL];
|
||||
/* 0x4C8 */ GXTexRegionCallback texRegionCallback;
|
||||
/* 0x4CC */ GXTlutRegionCallback tlutRegionCallback;
|
||||
|
||||
// Command processor vars
|
||||
/* 0x4D0 */ GXAttrType nrmType;
|
||||
/* 0x4D4 */ GXBool hasNrms;
|
||||
/* 0x4D5 */ GXBool hasBiNrms;
|
||||
/* 0x4D8 */ u32 projType;
|
||||
/* 0x4DC */ f32 projMtx[6];
|
||||
|
||||
// Viewport parms
|
||||
/* 0x4F4 */ f32 vpLeft;
|
||||
/* 0x4F8 */ f32 vpTop;
|
||||
/* 0x4FC */ f32 vpWd;
|
||||
/* 0x500 */ f32 vpHt;
|
||||
/* 0x504 */ f32 vpNearz;
|
||||
/* 0x508 */ f32 vpFarz;
|
||||
/* 0x50C */ f32 zOffset;
|
||||
/* 0x510 */ f32 zScale;
|
||||
|
||||
// Texture regs
|
||||
/* 0x514 */ u32 tImage0[8];
|
||||
/* 0x534 */ u32 tMode0[8];
|
||||
/* 0x554 */ u32 texmapId[16];
|
||||
/* 0x594 */ u32 tcsManEnab;
|
||||
/* 0x598 */ u32 tevTcEnab;
|
||||
|
||||
// Performance metrics
|
||||
/* 0x59C */ GXPerf0 perf0;
|
||||
/* 0x5A0 */ GXPerf1 perf1;
|
||||
/* 0x5A4 */ u32 perfSel;
|
||||
|
||||
// Flags
|
||||
/* 0x5A8 */ GXBool inDispList;
|
||||
/* 0x5A9 */ GXBool dlSaveContext;
|
||||
/* 0x5AA */ GXBool abtWaitPECopy;
|
||||
/* 0x5AB */ u8 dirtyVAT;
|
||||
/* 0x5AC */ u32 dirtyState;
|
||||
} GXData; // Size: 0x5B0
|
||||
|
||||
STATIC_ASSERT(sizeof(GXData) == 0x5B0);
|
||||
|
||||
extern GXData* const __GXData;
|
||||
|
||||
// Define register addresses.
|
||||
#define GX_CP_ADDR (0x0C000000)
|
||||
#define GX_PE_ADDR (0x0C001000)
|
||||
#define GX_PI_ADDR (0x0C003000)
|
||||
#define GX_MEM_ADDR (0x0C004000)
|
||||
|
||||
extern u32* __piReg;
|
||||
extern u16* __cpReg;
|
||||
extern u8 __peReg[4];
|
||||
extern u8 __memReg[4];
|
||||
extern u16* __peReg;
|
||||
extern vu16* __memReg;
|
||||
|
||||
inline void GXSetWasteFlags() {
|
||||
GXData* data = __GXData;
|
||||
data->field_0x5ac |= 0x3;
|
||||
data->field_0x2 = 0;
|
||||
GXData* data = __GXData;
|
||||
data->dirtyState |= GX_DIRTY_SU_TEX | GX_DIRTY_BP_MASK;
|
||||
data->bpSentNot = 0;
|
||||
}
|
||||
|
||||
static inline void set_x2(u16 value)
|
||||
{
|
||||
__GXData->field_0x2 = value;
|
||||
__GXData->bpSentNot = value;
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
GXTexRegion* __GXDefaultTexRegionCallback(GXTexObj* obj, GXTexMapID mapID);
|
||||
GXTexRegion* __GXDefaultTexRegionCallback(const GXTexObj* obj, GXTexMapID id);
|
||||
GXTlutRegion* __GXDefaultTlutRegionCallback(u32 tlut);
|
||||
void __GXShutdown(s32);
|
||||
BOOL __GXShutdown(BOOL final);
|
||||
void __GXInitRevisionBits(void);
|
||||
GXFifoObj* GXInit(void* base, u32 size);
|
||||
void __GXInitGX(void);
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void GXSetMisc(u32 id, u32 value);
|
||||
void GXSetMisc(GXMiscToken token, u32 val);
|
||||
void GXFlush(void);
|
||||
void __GXAbort(void);
|
||||
void GXAbortFrame(void);
|
||||
@@ -21,7 +21,7 @@ void GXPokeBlendMode(GXBlendMode mode, GXBlendFactor src_factor, GXBlendFactor d
|
||||
void GXPokeColorUpdate(GXBool enable_update);
|
||||
void GXPokeDstAlpha(GXBool enable, u8 alpha);
|
||||
void GXPokeDither(GXBool enable);
|
||||
void GXPokeZMode(GXBool enable_compare, GXCompare comp);
|
||||
void GXPokeZMode(GXBool enable_compare, GXCompare comp, GXBool update_enable);
|
||||
void GXPeekARGB(u16 x, u16 y, u32* color);
|
||||
void GXPeekZ(u16 x, u16 y, u32* z);
|
||||
|
||||
@@ -30,7 +30,7 @@ GXDrawSyncCallback GXSetDrawSyncCallback(GXDrawSyncCallback callback);
|
||||
void GXSetDrawSync(GXBool enable);
|
||||
|
||||
typedef void (*GXDrawDoneCallback)(void);
|
||||
void GXSetDrawDoneCallback(GXDrawDoneCallback callback);
|
||||
GXDrawDoneCallback GXSetDrawDoneCallback(GXDrawDoneCallback callback);
|
||||
void __GXPEInit(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
#ifndef GXPERF_H
|
||||
#define GXPERF_H
|
||||
|
||||
#include "dolphin/types.h"
|
||||
#include "dolphin/gx/GXEnum.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void GXSetGPMetric(u32 perf0, u32 perf1);
|
||||
void GXSetGPMetric(GXPerf0 perf0, GXPerf1 perf1);
|
||||
void GXClearGPMetric(void);
|
||||
void GXReadXfRasMetric(u32*, u32*, u32*, u32*);
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
#define GXSTRUCT_H
|
||||
|
||||
#include "global.h"
|
||||
#include "dolphin/gx/GXEnum.h"
|
||||
#include "dolphin/vi/vi.h"
|
||||
|
||||
typedef struct _GXColor {
|
||||
/* 0x0 */ u8 r;
|
||||
@@ -72,18 +74,18 @@ typedef struct _GXLightObj {
|
||||
} GXLightObj;
|
||||
|
||||
typedef struct _GXFogAdjTable {
|
||||
/* 0x0 */ u16 r[10];
|
||||
/* 0x0 */ u16 fogVals[10];
|
||||
} GXFogAdjTable;
|
||||
|
||||
typedef struct _GXFifoObj {
|
||||
/* 0x00 */ void* base;
|
||||
/* 0x04 */ u32 end;
|
||||
/* 0x04 */ void* end;
|
||||
/* 0x08 */ u32 size;
|
||||
/* 0x0C */ u32 high_wtrmark;
|
||||
/* 0x10 */ u32 low_wtrmark;
|
||||
/* 0x14 */ void* read_ptr;
|
||||
/* 0x18 */ void* write_ptr;
|
||||
/* 0x1C */ void* rw_dst;
|
||||
/* 0x1C */ s32 rw_dst;
|
||||
/* 0x20 */ u8 fifo_wrap;
|
||||
/* 0x21 */ u8 cpu_fifo_ready;
|
||||
/* 0x22 */ u8 gp_fifo_ready;
|
||||
@@ -91,11 +93,16 @@ typedef struct _GXFifoObj {
|
||||
} GXFifoObj; // Size: 0x80
|
||||
|
||||
typedef struct _GXTexRegion {
|
||||
/* 0x00 */ u8 dummy[0x10];
|
||||
u32 unk0; // _00
|
||||
u32 unk4; // _04
|
||||
u32 unk8; // _08
|
||||
u8 unkC; // _0C
|
||||
u8 unkD; // _0D
|
||||
} GXTexRegion; // Size: 0x10
|
||||
|
||||
typedef struct _GXTlutRegion {
|
||||
/* 0x00 */ u8 dummy[0x10];
|
||||
/* 0x00 */ u32 unk0;
|
||||
/* 0x04 */ GXTlutObj tlutObj;
|
||||
} GXTlutRegion; // Size: 0x10
|
||||
|
||||
#endif /* GXSTRUCT_H */
|
||||
|
||||
@@ -8,7 +8,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
u32 GXGetTexBufferSize(u16 width, u16 height, u32 format, GXBool mipmap, u8 max_lod);
|
||||
void __GetImageTileCount(u32 arg0, s16 arg1, s16 arg2, s32* arg3, s32* arg4, s32* arg5);
|
||||
void __GetImageTileCount(GXTexFmt format, u16 width, u16 height, u32* a, u32* b, u32* c);
|
||||
void GXInitTexObj(GXTexObj* obj, void* image, u16 width, u16 height, GXTexFmt fmt,
|
||||
GXTexWrapMode wrapS, GXTexWrapMode wrapT, GXBool mipmap);
|
||||
void GXInitTexObjCI(GXTexObj* obj, void* image, u16 width, u16 height, GXCITexFmt format,
|
||||
@@ -19,10 +19,10 @@ void GXInitTexObjLOD(GXTexObj* obj, GXTexFilter min_filter, GXTexFilter max_filt
|
||||
void* GXGetTexObjData(GXTexObj* obj);
|
||||
u16 GXGetTexObjWidth(GXTexObj* obj);
|
||||
u16 GXGetTexObjHeight(GXTexObj* obj);
|
||||
GXTexFmt GXGetTexObjFmt(GXTexObj* obj);
|
||||
GXTexFmt GXGetTexObjFmt(const GXTexObj* obj);
|
||||
GXTexWrapMode GXGetTexObjWrapS(GXTexObj* obj);
|
||||
GXTexWrapMode GXGetTexObjWrapT(GXTexObj* obj);
|
||||
GXBool GXGetTexObjMipMap(GXTexObj* obj);
|
||||
GXBool GXGetTexObjMipMap(const GXTexObj* obj);
|
||||
u32 GXGetTexObjTlut(GXTexObj* obj);
|
||||
void GXLoadTexObj(GXTexObj* obj, GXTexMapID id);
|
||||
void GXInitTlutObj(GXTlutObj* obj, void* lut, GXTlutFmt fmt, u16 entry_num);
|
||||
|
||||
@@ -9,18 +9,18 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
void GXProject(f32 model_x, f32 model_y, f32 model_z, Mtx model_mtx, f32* proj, f32* viewpoint, f32* screen_x, f32* screen_y, f32* screen_z);
|
||||
void GXSetProjection(Mtx44 mtx, GXProjectionType type);
|
||||
void GXSetProjection(const Mtx44 proj, GXProjectionType type);
|
||||
void GXSetProjectionv(f32* p);
|
||||
void GXGetProjectionv(f32* p);
|
||||
void GXLoadPosMtxImm(Mtx mtx, u32 id);
|
||||
void GXLoadNrmMtxImm(Mtx mtx, u32 id);
|
||||
void GXSetCurrentMtx(u32 id);
|
||||
void GXLoadTexMtxImm(Mtx mtx, u32 id, GXTexMtxType type);
|
||||
void GXLoadTexMtxImm(const Mtx mtx, u32 id, GXTexMtxType type);
|
||||
void GXSetViewport(f32 x_orig, f32 y_orig, f32 width, f32 height, f32 near_z, f32 far_z);
|
||||
void GXGetViewportv(f32* p);
|
||||
void GXSetScissor(u32 left, u32 top, u32 width, u32 height);
|
||||
void GXGetScissor(u32* left, u32* top, u32* width, u32* height);
|
||||
void GXSetScissorBoxOffset(u32 x_offset, u32 y_offset);
|
||||
void GXSetScissorBoxOffset(s32 x, s32 y);
|
||||
void GXSetClipMode(GXClipMode mode);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -41,7 +41,7 @@ typedef enum {
|
||||
EXCEPTION_FLOATING_POINT,
|
||||
EXCEPTION_DECREMENTER,
|
||||
EXCEPTION_SYSTEM_CALL,
|
||||
EXCEPTION_TRACE ,
|
||||
EXCEPTION_TRACE,
|
||||
EXCEPTION_PERFORMANCE_MONITOR,
|
||||
EXCEPTION_BREAKPOINT,
|
||||
EXCEPTION_RESERVED,
|
||||
|
||||
@@ -23,7 +23,7 @@ typedef struct OSMessageQueue {
|
||||
#define OS_MESSAGE_BLOCK 1
|
||||
|
||||
typedef enum {
|
||||
OS_MSG_PERSISTENT = (1 << 0),
|
||||
OS_MSG_PERSISTENT = (1 << 0),
|
||||
} OSMessageFlags;
|
||||
|
||||
void OSInitMessageQueue(OSMessageQueue* queue, OSMessage* msgArray, s32 msgCount);
|
||||
|
||||
+105
-22
@@ -10,37 +10,120 @@ extern "C" {
|
||||
|
||||
typedef struct _GXRenderModeObj GXRenderModeObj;
|
||||
|
||||
#define VI_TVMODE(format, interlace) (((format) << 2) + (interlace))
|
||||
#define VI_INTERLACE (0)
|
||||
#define VI_NON_INTERLACE (1)
|
||||
#define VI_PROGRESSIVE (2)
|
||||
#define VI_3D (3)
|
||||
|
||||
#define VI_INTERLACE 0
|
||||
#define VI_NON_INTERLACE 1
|
||||
#define VI_PROGRESSIVE 2
|
||||
// Video output formats
|
||||
#define VI_NTSC (0)
|
||||
#define VI_PAL (1)
|
||||
#define VI_MPAL (2)
|
||||
#define VI_DEBUG (3)
|
||||
#define VI_DEBUG_PAL (4)
|
||||
#define VI_EURGB60 (5)
|
||||
#define VI_GCA (6)
|
||||
|
||||
#define VI_NTSC 0
|
||||
#define VI_PAL 1
|
||||
#define VI_MPAL 2
|
||||
#define VI_DEBUG 3
|
||||
#define VI_DEBUG_PAL 4
|
||||
#define VI_EURGB60 5
|
||||
// Conversion to TVMode used in enums
|
||||
#define VI_TVMODE(FMT, INT) (((FMT) << 2) + (INT))
|
||||
|
||||
// TV Modes
|
||||
typedef enum {
|
||||
VI_TVMODE_NTSC_INT = VI_TVMODE(VI_NTSC, VI_INTERLACE),
|
||||
VI_TVMODE_NTSC_DS = VI_TVMODE(VI_NTSC, VI_NON_INTERLACE),
|
||||
VI_TVMODE_NTSC_PROG = VI_TVMODE(VI_NTSC, VI_PROGRESSIVE),
|
||||
VI_TVMODE_PAL_INT = VI_TVMODE(VI_PAL, VI_INTERLACE),
|
||||
VI_TVMODE_PAL_DS = VI_TVMODE(VI_PAL, VI_NON_INTERLACE),
|
||||
VI_TVMODE_EURGB60_INT = VI_TVMODE(VI_EURGB60, VI_INTERLACE),
|
||||
VI_TVMODE_EURGB60_DS = VI_TVMODE(VI_EURGB60, VI_NON_INTERLACE),
|
||||
VI_TVMODE_MPAL_INT = VI_TVMODE(VI_MPAL, VI_INTERLACE),
|
||||
VI_TVMODE_MPAL_DS = VI_TVMODE(VI_MPAL, VI_NON_INTERLACE),
|
||||
VI_TVMODE_DEBUG_INT = VI_TVMODE(VI_DEBUG, VI_INTERLACE),
|
||||
VI_TVMODE_DEBUG_PAL_INT = VI_TVMODE(VI_DEBUG_PAL, VI_INTERLACE),
|
||||
VI_TVMODE_DEBUG_PAL_DS = VI_TVMODE(VI_DEBUG_PAL, VI_NON_INTERLACE)
|
||||
// NTSC
|
||||
VI_TVMODE_NTSC_INT = VI_TVMODE(VI_NTSC, VI_INTERLACE), // 0
|
||||
VI_TVMODE_NTSC_DS = VI_TVMODE(VI_NTSC, VI_NON_INTERLACE), // 1
|
||||
VI_TVMODE_NTSC_PROG = VI_TVMODE(VI_NTSC, VI_PROGRESSIVE), // 2
|
||||
VI_TVMODE_NTSC_3D = VI_TVMODE(VI_NTSC, VI_3D), // 3
|
||||
|
||||
// PAL
|
||||
VI_TVMODE_PAL_INT = VI_TVMODE(VI_PAL, VI_INTERLACE), // 4
|
||||
VI_TVMODE_PAL_DS = VI_TVMODE(VI_PAL, VI_NON_INTERLACE), // 5
|
||||
|
||||
// MPAL
|
||||
VI_TVMODE_MPAL_INT = VI_TVMODE(VI_MPAL, VI_INTERLACE), // 8
|
||||
VI_TVMODE_MPAL_DS = VI_TVMODE(VI_MPAL, VI_NON_INTERLACE), // 9
|
||||
|
||||
// Debug
|
||||
VI_TVMODE_DEBUG_INT = VI_TVMODE(VI_DEBUG, VI_INTERLACE), // 12
|
||||
|
||||
// Debug PAL
|
||||
VI_TVMODE_DEBUG_PAL_INT = VI_TVMODE(VI_DEBUG_PAL, VI_INTERLACE), // 16
|
||||
VI_TVMODE_DEBUG_PAL_DS = VI_TVMODE(VI_DEBUG_PAL, VI_NON_INTERLACE), // 17
|
||||
|
||||
// EU RGB60
|
||||
VI_TVMODE_EURGB60_INT = VI_TVMODE(VI_EURGB60, VI_INTERLACE), // 20
|
||||
VI_TVMODE_EURGB60_DS = VI_TVMODE(VI_EURGB60, VI_NON_INTERLACE), // 21
|
||||
|
||||
// GCA
|
||||
VI_TVMODE_GCA_INT = VI_TVMODE(VI_GCA, VI_INTERLACE), // 24
|
||||
VI_TVMODE_GCA_DS = VI_TVMODE(VI_GCA, VI_NON_INTERLACE), // 25
|
||||
VI_TVMODE_GCA_PROG = VI_TVMODE(VI_GCA, VI_PROGRESSIVE), // 26
|
||||
} VITVMode;
|
||||
|
||||
typedef enum { VI_XFBMODE_SF = 0, VI_XFBMODE_DF } VIXFBMode;
|
||||
|
||||
typedef void (*VIRetraceCallback)(u32);
|
||||
typedef void (*VIPositionCallback)(s16 x, s16 y);
|
||||
|
||||
typedef struct VITimingInfo {
|
||||
u8 equ; // _00
|
||||
u16 acv; // _02
|
||||
u16 prbOdd; // _04
|
||||
u16 prbEven; // _06
|
||||
u16 psbOdd; // _08
|
||||
u16 psbEven; // _0A
|
||||
u8 bs1; // _0C
|
||||
u8 bs2; // _0D
|
||||
u8 bs3; // _0E
|
||||
u8 bs4; // _0F
|
||||
u16 be1; // _10
|
||||
u16 be2; // _12
|
||||
u16 be3; // _14
|
||||
u16 be4; // _16
|
||||
u16 numHalfLines; // _18
|
||||
u16 hlw; // _1A
|
||||
u8 hsy; // _1C
|
||||
u8 hcs; // _1D
|
||||
u8 hce; // _1E
|
||||
u8 hbe640; // _1F
|
||||
u16 hbs640; // _20
|
||||
u8 hbeCCIR656; // _24
|
||||
u16 hbsCCIR656; // _26
|
||||
} VITimingInfo;
|
||||
|
||||
typedef struct VIPositionInfo {
|
||||
u16 dispPosX; // _00
|
||||
u16 dispPosY; // _02
|
||||
u16 dispSizeX; // _04
|
||||
u16 dispSizeY; // _06
|
||||
u16 adjDispPosX; // _08
|
||||
u16 adjDispPosY; // _0A
|
||||
u16 adjDispSizeY; // _0C
|
||||
u16 adjPanPosY; // _0E
|
||||
u16 adjPanSizeY; // _10
|
||||
u16 fbSizeX; // _12
|
||||
u16 fbSizeY; // _14
|
||||
u16 panPosX; // _16
|
||||
u16 panPosY; // _18
|
||||
u16 panSizeX; // _1A
|
||||
u16 panSizeY; // _1C
|
||||
VIXFBMode xfbMode; // _20
|
||||
u32 nonInter; // _24
|
||||
u32 tv; // _28
|
||||
u8 wordPerLine; // _2C
|
||||
u8 std; // _2D
|
||||
u8 wpl; // _2E
|
||||
u32 bufAddr; // _30
|
||||
u32 tfbb; // _34
|
||||
u32 bfbb; // _38
|
||||
u8 xof; // _3C
|
||||
BOOL isBlack; // _40
|
||||
BOOL is3D; // _44
|
||||
u32 rbufAddr; // _48
|
||||
u32 rtfbb; // _4C
|
||||
u32 rbfbb; // _50
|
||||
VITimingInfo* timing; // _54
|
||||
} VIPositionInfo;
|
||||
|
||||
void VIWaitForRetrace(void);
|
||||
void VISetNextFrameBuffer(void*);
|
||||
|
||||
Reference in New Issue
Block a user