From e5df49a7f3735a19ff6549566338e31b27ee76d1 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sat, 23 Apr 2022 14:34:11 -0700 Subject: [PATCH] J3DShape: Some funcs --- include/dolphin/gx/GX.h | 33 +++++++++++++++++--------- libs/JSystem/J3DGraphBase/J3DShape.cpp | 21 ++++++---------- libs/JSystem/JParticle/JPAResource.cpp | 1 - src/d/map/d_map_path_dmap.cpp | 1 - 4 files changed, 29 insertions(+), 27 deletions(-) diff --git a/include/dolphin/gx/GX.h b/include/dolphin/gx/GX.h index 923acbf8f44..2835ec63efc 100644 --- a/include/dolphin/gx/GX.h +++ b/include/dolphin/gx/GX.h @@ -171,16 +171,16 @@ typedef enum _GXColorSrc { } GXColorSrc; typedef enum _GXLightID { - /* 0x000 */ GX_LIGHT_NULL, - /* 0x001 */ GX_LIGHT0, - /* 0x002 */ GX_LIGHT1, - /* 0x004 */ GX_LIGHT2 = 0x4, - /* 0x008 */ GX_LIGHT3 = 0x8, - /* 0x010 */ GX_LIGHT4 = 0x10, - /* 0x020 */ GX_LIGHT5 = 0x20, - /* 0x040 */ GX_LIGHT6 = 0x40, - /* 0x080 */ GX_LIGHT7 = 0x80, - /* 0x100 */ GX_MAX_LIGHT = 0x100, + /* 0x000 */ GX_LIGHT_NULL = 0, + /* 0x001 */ GX_LIGHT0 = 1 << 0, + /* 0x002 */ GX_LIGHT1 = 1 << 1, + /* 0x004 */ GX_LIGHT2 = 1 << 2, + /* 0x008 */ GX_LIGHT3 = 1 << 3, + /* 0x010 */ GX_LIGHT4 = 1 << 4, + /* 0x020 */ GX_LIGHT5 = 1 << 5, + /* 0x040 */ GX_LIGHT6 = 1 << 6, + /* 0x080 */ GX_LIGHT7 = 1 << 7, + /* 0x100 */ GX_MAX_LIGHT = 1 << 8, } GXLightID; typedef enum _GXDiffuseFn { @@ -860,7 +860,7 @@ void GXSetNumChans(u8); void GXSetNumTevStages(u8); void GXSetNumTexGens(u8); void GXSetTevOrder(GXTevStageID, GXTexCoordID, GXTexMapID, GXChannelID); -void GXSetChanCtrl(GXChannelID, GXBool, GXColorSrc, GXColorSrc, GXLightID, GXDiffuseFn, GXAttnFn); +void GXSetChanCtrl(GXChannelID, GXBool, GXColorSrc, GXColorSrc, u32, GXDiffuseFn, GXAttnFn); void GXSetTevOp(GXTevStageID, GXTevMode); void GXSetTevColor(GXTevRegID, GXColor); void GXSetTevColorIn(GXTevStageID, GXTevColorArg, GXTevColorArg, GXTevColorArg, GXTevColorArg); @@ -955,6 +955,17 @@ void GXReadXfRasMetric(u32*, u32*, u32*, u32*); void GXInitFifoBase(GXFifoObj*, void*, u32); void GXInitFifoPtrs(GXFifoObj*, void*, void*); void GXSaveCPUFifo(GXFifoObj*); +void GXSetMisc(u32 opt, u32 val); + +typedef enum _GXCommand +{ + GX_CMD_LOAD_INDX_A = 0x20, + GX_CMD_LOAD_INDX_B = 0x28, + GX_CMD_LOAD_INDX_C = 0x30, + GX_CMD_LOAD_INDX_D = 0x38, + + GX_CMD_LOAD_CP_CMD = 0x08, +} GXCommand; #define GFX_FIFO(T) (*(volatile T*)0xCC008000) diff --git a/libs/JSystem/J3DGraphBase/J3DShape.cpp b/libs/JSystem/J3DGraphBase/J3DShape.cpp index 8af7bd8334a..a4a725e972d 100644 --- a/libs/JSystem/J3DGraphBase/J3DShape.cpp +++ b/libs/JSystem/J3DGraphBase/J3DShape.cpp @@ -143,24 +143,17 @@ asm void J3DShape::countBumpMtxNum() const { #pragma pop /* 80314E98-80314EB0 30F7D8 0018+00 1/1 0/0 0/0 .text J3DLoadCPCmd__FUcUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void J3DLoadCPCmd(u8 param_0, u32 param_1) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DShape/J3DLoadCPCmd__FUcUl.s" +void J3DLoadCPCmd(u8 cmd, u32 param) { + GFX_FIFO(u8) = GX_CMD_LOAD_CP_CMD; + GFX_FIFO(u8) = cmd; + GFX_FIFO(u32) = param; } -#pragma pop /* 80314EB0-80314EEC 30F7F0 003C+00 1/1 0/0 0/0 .text J3DLoadArrayBasePtr__F7_GXAttrPv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void J3DLoadArrayBasePtr(_GXAttr param_0, void* param_1) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DShape/J3DLoadArrayBasePtr__F7_GXAttrPv.s" +static void J3DLoadArrayBasePtr(_GXAttr attr, void* data) { + u32 idx = (attr == GX_VA_NBT) ? 1 : (attr - GX_VA_POS); + J3DLoadCPCmd(0xA0 + idx, ((u32)data & 0x7FFFFFFF)); } -#pragma pop /* 80314EEC-80314F5C 30F82C 0070+00 3/3 0/0 0/0 .text loadVtxArray__8J3DShapeCFv */ void J3DShape::loadVtxArray() const { diff --git a/libs/JSystem/JParticle/JPAResource.cpp b/libs/JSystem/JParticle/JPAResource.cpp index ab95ac473c8..3195955b8fb 100644 --- a/libs/JSystem/JParticle/JPAResource.cpp +++ b/libs/JSystem/JParticle/JPAResource.cpp @@ -134,7 +134,6 @@ extern "C" void func_80280588(); extern "C" void JPAGetXYZRotateMtx__FsssPA4_f(); extern "C" void alloc__7JKRHeapFUliP7JKRHeap(); extern "C" void load__10JUTTextureF11_GXTexMapID(); -extern "C" void GXSetMisc(); extern "C" void __save_gpr(); extern "C" void _savegpr_25(); extern "C" void _savegpr_27(); diff --git a/src/d/map/d_map_path_dmap.cpp b/src/d/map/d_map_path_dmap.cpp index b9025f1b1c7..5a6f4b25d86 100644 --- a/src/d/map/d_map_path_dmap.cpp +++ b/src/d/map/d_map_path_dmap.cpp @@ -160,7 +160,6 @@ extern "C" void getNextData__7dTres_cFPQ27dTres_c15typeGroupData_c(); extern "C" void getNextData__7dTres_cFPCQ27dTres_c15typeGroupData_c(); extern "C" void* __nw__FUl(); extern "C" void GXClearVtxDesc(); -extern "C" void GXSetMisc(); extern "C" void GXInvalidateTexAll(); extern "C" void _savegpr_20(); extern "C" void _savegpr_24();