From 19325b3c0b7c6f02306c9f79164cf168161bbd62 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Mon, 15 Apr 2024 19:55:09 -0400 Subject: [PATCH] Fix GX inlines --- include/JSystem/J3DGraphBase/J3DGD.h | 16 ++++- include/JSystem/J3DGraphBase/J3DShape.h | 26 ++++----- include/dolphin/gx/GX.h | 50 ++++++++-------- src/JSystem/J3DGraphBase/J3DShape.cpp | 6 +- src/JSystem/J3DGraphBase/J3DSys.cpp | 78 +++++++++++-------------- 5 files changed, 86 insertions(+), 90 deletions(-) diff --git a/include/JSystem/J3DGraphBase/J3DGD.h b/include/JSystem/J3DGraphBase/J3DGD.h index 3587d5b6a..fce3a792a 100644 --- a/include/JSystem/J3DGraphBase/J3DGD.h +++ b/include/JSystem/J3DGraphBase/J3DGD.h @@ -49,6 +49,10 @@ inline void J3DGDWriteXFCmdHdr(u16 cmd, u8 len) { J3DGDWrite_u16(cmd); } +inline void J3DGXCmd1f32ptr(f32* value) { + GXFIFO.u32 = *(u32*)value; +} + void J3DGDSetGenMode(u8 texGenNum, u8 colorChanNum, u8 tevStageNum, u8 IndTexStageNum, _GXCullMode cullMode); void J3DGDSetGenMode_3Param(u8 texGenNum, u8 tevStageNum, u8 indTexStageNum); void J3DGDSetIndTexStageNum(u32); @@ -75,9 +79,15 @@ void J3DGDSetFog(GXFogType, f32, f32, f32, f32, GXColor); void J3DGDSetFogRangeAdj(u8, u16, GXFogAdjTable*); static inline void J3DFifoLoadIndx(u8 cmd, u16 indx, u16 addr) { - GFX_FIFO(u8) = cmd; - GFX_FIFO(u16) = indx; - GFX_FIFO(u16) = addr; + GXFIFO.u8 = cmd; + GXFIFO.u16 = indx; + GXFIFO.u16 = addr; +} + +inline void J3DFifoWriteXFCmdHdr(u16 addr, u8 len) { + GXFIFO.u8 = GX_CMD_LOAD_XF_REG; + GXFIFO.u16 = len - 1; + GXFIFO.u16 = addr; } inline void J3DGDSetNumChans(u8 numChans) { diff --git a/include/JSystem/J3DGraphBase/J3DShape.h b/include/JSystem/J3DGraphBase/J3DShape.h index 93dc181b5..390c1d86e 100644 --- a/include/JSystem/J3DGraphBase/J3DShape.h +++ b/include/JSystem/J3DGraphBase/J3DShape.h @@ -12,16 +12,16 @@ public: /* 0x04 */ u32 mMtxIdxRegB; }; -static inline void J3DFifoWriteCPCmd(u8 cmd, u32 param) { - GFX_FIFO(u8) = GX_CMD_LOAD_CP_REG; - GFX_FIFO(u8) = cmd; - GFX_FIFO(u32) = param; +static inline void JRNLoadCPCmd(u8 cmd, u32 param) { + GXFIFO.u8 = GX_CMD_LOAD_CP_REG; + GXFIFO.u8 = cmd; + GXFIFO.u32 = param; } -static inline void J3DFifoWriteXFCmd(u16 cmd, u16 len) { - GFX_FIFO(u8) = GX_CMD_LOAD_XF_REG; - GFX_FIFO(u16) = (len - 1); - GFX_FIFO(u16) = cmd; +inline void JRNLoadXFCmdHdr(u16 cmd, u8 len) { + GXFIFO.u8 = GX_CMD_LOAD_XF_REG; + GXFIFO.u16 = len - 1; + GXFIFO.u16 = cmd; } class J3DCurrentMtx : public J3DCurrentMtxInfo { @@ -40,11 +40,11 @@ public: u32 getMtxIdxRegB() const { return mMtxIdxRegB; } inline void load() const { - J3DFifoWriteCPCmd(0x30, getMtxIdxRegA()); // CP_MATINDEX_A - J3DFifoWriteCPCmd(0x40, getMtxIdxRegB()); // CP_MATINDEX_B - J3DFifoWriteXFCmd(0x1018, 2); - GFX_FIFO(u32) = getMtxIdxRegA(); - GFX_FIFO(u32) = getMtxIdxRegB(); + JRNLoadCPCmd(0x30, getMtxIdxRegA()); // CP_MATINDEX_A + JRNLoadCPCmd(0x40, getMtxIdxRegB()); // CP_MATINDEX_B + JRNLoadXFCmdHdr(0x1018, 2); + GXFIFO.u32 = getMtxIdxRegA(); + GXFIFO.u32 = getMtxIdxRegB(); } void setCurrentTexMtx(u8 t0, u8 t1, u8 t2, u8 t3, u8 t4, u8 t5, u8 t6, u8 t7) { diff --git a/include/dolphin/gx/GX.h b/include/dolphin/gx/GX.h index 9e4dc1bfc..8e15fe71d 100644 --- a/include/dolphin/gx/GX.h +++ b/include/dolphin/gx/GX.h @@ -44,8 +44,6 @@ typedef union { volatile PPCWGPipe GXFIFO : 0xCC008000; -#define GFX_FIFO(T) (*(volatile T*)0xCC008000) - inline void GXPosition3f32(f32 x, f32 y, f32 z) { GXFIFO.f32 = x; GXFIFO.f32 = y; @@ -64,66 +62,66 @@ inline void GXPosition2f32(f32 x, f32 z) { } inline void GXColor1u32(u32 c) { - GFX_FIFO(u32) = c; + GXFIFO.u32 = c; } inline void GXTexCoord2f32(f32 s, f32 t) { - GFX_FIFO(f32) = s; - GFX_FIFO(f32) = t; + GXFIFO.f32 = s; + GXFIFO.f32 = t; } inline void GXTexCoord2u8(u8 s, u8 t) { - GFX_FIFO(u8) = s; - GFX_FIFO(u8) = t; + GXFIFO.u8 = s; + GXFIFO.u8 = t; } inline void GXTexCoord1x8(u8 s) { - GFX_FIFO(u8) = s; + GXFIFO.u8 = s; } inline void GXPosition2u16(u16 x, u16 y) { - GFX_FIFO(u16) = x; - GFX_FIFO(u16) = y; + GXFIFO.u16 = x; + GXFIFO.u16 = y; } inline void GXPosition1x16(u16 x) { - GFX_FIFO(u16) = x; + GXFIFO.u16 = x; } inline void GXPosition1x8(u8 x) { - GFX_FIFO(u8) = x; + GXFIFO.u8 = x; } inline void GXPosition3s8(s8 x, s8 y, s8 z) { - GFX_FIFO(s8) = x; - GFX_FIFO(s8) = y; - GFX_FIFO(s8) = z; + GXFIFO.s8 = x; + GXFIFO.s8 = y; + GXFIFO.s8 = z; } inline void GXPosition2s8(s8 x, s8 y) { - GFX_FIFO(s8) = x; - GFX_FIFO(s8) = y; + GXFIFO.s8 = x; + GXFIFO.s8 = y; } inline void GXPosition3s16(s16 x, s16 y, s16 z) { - GFX_FIFO(s16) = x; - GFX_FIFO(s16) = y; - GFX_FIFO(s16) = z; + GXFIFO.s16 = x; + GXFIFO.s16 = y; + GXFIFO.s16 = z; } inline void GXTexCoord2s8(s8 x, s8 y) { - GFX_FIFO(s8) = x; - GFX_FIFO(s8) = y; + GXFIFO.s8 = x; + GXFIFO.s8 = y; } inline void GXTexCoord2u16(u16 x, u16 y) { - GFX_FIFO(u16) = x; - GFX_FIFO(u16) = y; + GXFIFO.u16 = x; + GXFIFO.u16 = y; } inline void GXTexCoord2s16(const s16 u, const s16 v) { - GFX_FIFO(s16) = u; - GFX_FIFO(s16) = v; + GXFIFO.s16 = u; + GXFIFO.s16 = v; } inline void GFWriteBPCmd(u32 param_1) { diff --git a/src/JSystem/J3DGraphBase/J3DShape.cpp b/src/JSystem/J3DGraphBase/J3DShape.cpp index 6a6151769..274d4ce42 100644 --- a/src/JSystem/J3DGraphBase/J3DShape.cpp +++ b/src/JSystem/J3DGraphBase/J3DShape.cpp @@ -58,9 +58,9 @@ u32 J3DShape::countBumpMtxNum() const { /* 802DD2F0-802DD308 .text J3DLoadCPCmd__FUcUl */ void J3DLoadCPCmd(u8 cmd, u32 param) { - GFX_FIFO(u8) = GX_CMD_LOAD_CP_REG; - GFX_FIFO(u8) = cmd; - GFX_FIFO(u32) = param; + GXFIFO.u8 = GX_CMD_LOAD_CP_REG; + GXFIFO.u8 = cmd; + GXFIFO.u32 = param; } /* 802DD308-802DD344 .text J3DLoadArrayBasePtr__F7_GXAttrPv */ diff --git a/src/JSystem/J3DGraphBase/J3DSys.cpp b/src/JSystem/J3DGraphBase/J3DSys.cpp index a23aa9b7d..3ef85963a 100644 --- a/src/JSystem/J3DGraphBase/J3DSys.cpp +++ b/src/JSystem/J3DGraphBase/J3DSys.cpp @@ -64,59 +64,47 @@ void J3DSys::loadNrmMtxIndx(int addr, u16 indx) const { /* 802D8BD8-802D8C58 .text J3DFifoLoadPosMtxImm__FPA4_fUl */ void J3DFifoLoadPosMtxImm(Mtx mtx, u32 idx) { - J3DFifoWriteXFCmd(idx << 2, 12); - u32 * mtx_u32 = (u32*)mtx; - - GFX_FIFO(u32) = mtx_u32[0]; - GFX_FIFO(u32) = mtx_u32[1]; - GFX_FIFO(u32) = mtx_u32[2]; - GFX_FIFO(u32) = mtx_u32[3]; - - GFX_FIFO(u32) = mtx_u32[4]; - GFX_FIFO(u32) = mtx_u32[5]; - GFX_FIFO(u32) = mtx_u32[6]; - GFX_FIFO(u32) = mtx_u32[7]; - - GFX_FIFO(u32) = mtx_u32[8]; - GFX_FIFO(u32) = mtx_u32[9]; - GFX_FIFO(u32) = mtx_u32[10]; - GFX_FIFO(u32) = mtx_u32[11]; + J3DFifoWriteXFCmdHdr(idx << 2, 12); + J3DGXCmd1f32ptr(&mtx[0][0]); + J3DGXCmd1f32ptr(&mtx[0][1]); + J3DGXCmd1f32ptr(&mtx[0][2]); + J3DGXCmd1f32ptr(&mtx[0][3]); + J3DGXCmd1f32ptr(&mtx[1][0]); + J3DGXCmd1f32ptr(&mtx[1][1]); + J3DGXCmd1f32ptr(&mtx[1][2]); + J3DGXCmd1f32ptr(&mtx[1][3]); + J3DGXCmd1f32ptr(&mtx[2][0]); + J3DGXCmd1f32ptr(&mtx[2][1]); + J3DGXCmd1f32ptr(&mtx[2][2]); + J3DGXCmd1f32ptr(&mtx[2][3]); } /* 802D8C58-802D8CC4 .text J3DFifoLoadNrmMtxImm__FPA4_fUl */ void J3DFifoLoadNrmMtxImm(Mtx mtx, u32 idx) { - J3DFifoWriteXFCmd(0x400 + (idx * 3), 9); - u32 * mtx_u32 = (u32*)mtx; - - GFX_FIFO(u32) = mtx_u32[0]; - GFX_FIFO(u32) = mtx_u32[1]; - GFX_FIFO(u32) = mtx_u32[2]; - - GFX_FIFO(u32) = mtx_u32[4]; - GFX_FIFO(u32) = mtx_u32[5]; - GFX_FIFO(u32) = mtx_u32[6]; - - GFX_FIFO(u32) = mtx_u32[8]; - GFX_FIFO(u32) = mtx_u32[9]; - GFX_FIFO(u32) = mtx_u32[10]; + J3DFifoWriteXFCmdHdr(0x400 + (idx * 3), 9); + J3DGXCmd1f32ptr(&mtx[0][0]); + J3DGXCmd1f32ptr(&mtx[0][1]); + J3DGXCmd1f32ptr(&mtx[0][2]); + J3DGXCmd1f32ptr(&mtx[1][0]); + J3DGXCmd1f32ptr(&mtx[1][1]); + J3DGXCmd1f32ptr(&mtx[1][2]); + J3DGXCmd1f32ptr(&mtx[2][0]); + J3DGXCmd1f32ptr(&mtx[2][1]); + J3DGXCmd1f32ptr(&mtx[2][2]); } /* 802D8CC4-802D8D30 .text J3DFifoLoadNrmMtxImm3x3__FPA3_fUl */ void J3DFifoLoadNrmMtxImm3x3(Mtx33 mtx, u32 idx) { - J3DFifoWriteXFCmd(0x400 + (idx * 3), 9); - u32 * mtx_u32 = (u32*)mtx; - - GFX_FIFO(u32) = mtx_u32[0]; - GFX_FIFO(u32) = mtx_u32[1]; - GFX_FIFO(u32) = mtx_u32[2]; - - GFX_FIFO(u32) = mtx_u32[3]; - GFX_FIFO(u32) = mtx_u32[4]; - GFX_FIFO(u32) = mtx_u32[5]; - - GFX_FIFO(u32) = mtx_u32[6]; - GFX_FIFO(u32) = mtx_u32[7]; - GFX_FIFO(u32) = mtx_u32[8]; + J3DFifoWriteXFCmdHdr(0x400 + (idx * 3), 9); + J3DGXCmd1f32ptr(&mtx[0][0]); + J3DGXCmd1f32ptr(&mtx[0][1]); + J3DGXCmd1f32ptr(&mtx[0][2]); + J3DGXCmd1f32ptr(&mtx[1][0]); + J3DGXCmd1f32ptr(&mtx[1][1]); + J3DGXCmd1f32ptr(&mtx[1][2]); + J3DGXCmd1f32ptr(&mtx[2][0]); + J3DGXCmd1f32ptr(&mtx[2][1]); + J3DGXCmd1f32ptr(&mtx[2][2]); } u8 NullTexData[16] ALIGN_DECL(32) = {