some J3D/misc cleanup (#2628)

* some j3d cleanup

* begin using uintptr_t

* j3dgraphbase cleanup

* j3dgraphanimator cleanup
This commit is contained in:
TakaRikka
2025-09-04 07:56:59 -07:00
committed by GitHub
parent ee8b843996
commit b45a089e15
290 changed files with 4221 additions and 3605 deletions
+56 -58
View File
@@ -1,18 +1,13 @@
#include "JSystem/J3DGraphBase/J3DShape.h"
#include "JSystem/J3DGraphBase/J3DPacket.h"
#include "JSystem/J3DGraphBase/J3DVertex.h"
#include "dolphin/gd.h"
#include "dolphin/os.h"
#include "JSystem/J3DGraphBase/J3DFifo.h"
#include <dolphin/gd.h>
void J3DGDSetVtxAttrFmtv(_GXVtxFmt, GXVtxAttrFmtList const*, bool);
void J3DFifoLoadPosMtxImm(Mtx, u32);
void J3DFifoLoadNrmMtxImm(Mtx, u32);
enum {
kVcdVatDLSize = 0xC0,
};
void J3DShape::initialize() {
mMaterial = NULL;
mIndex = -1;
@@ -62,19 +57,24 @@ void J3DShape::addTexMtxIndexInDL(GXAttr attr, u32 valueBase) {
if (pnmtxidxOffs == -1)
return;
for (u16 i = 0; i < getMtxGroupNum(); i++)
for (u16 i = 0; i < (u16)getMtxGroupNum(); i++)
getShapeDraw(i)->addTexMtxIndexInDL(stride, attrOffs, (s32)valueBase);
}
/* 80314CBC-80314DA8 30F5FC 00EC+00 0/0 1/1 0/0 .text addTexMtxIndexInVcd__8J3DShapeF7_GXAttr */
void J3DShape::addTexMtxIndexInVcd(GXAttr attr) {
u32 kSize[] = {0, 1, 1, 2}; // stripped data
s32 attrIdx = -1;
GXVtxDescList* vtxDesc = mVtxDesc;
s32 attrOffs = -1;
s32 stride = 0;
GXVtxDescList* vtxDesc = getVtxDesc();
s32 attrCount = 0;
for (; vtxDesc->attr != GX_VA_NULL; attrCount++, vtxDesc++) {
if (vtxDesc->attr == GX_VA_PNMTXIDX)
attrIdx = 0;
attrIdx = stride;
}
if (attrIdx == -1)
@@ -83,17 +83,21 @@ void J3DShape::addTexMtxIndexInVcd(GXAttr attr) {
GXVtxDescList* newVtxDesc = new GXVtxDescList[attrCount + 2];
bool inserted = false;
vtxDesc = mVtxDesc;
vtxDesc = getVtxDesc();
GXVtxDescList* dst = newVtxDesc;
for (; vtxDesc->attr != GX_VA_NULL; dst++, vtxDesc++) {
if ((attr < vtxDesc->attr) && !inserted) {
dst->attr = attr;
dst->type = GX_DIRECT;
inserted = true;
attrOffs = stride;
dst++;
inserted = true;
}
*dst = *vtxDesc;
dst->attr = vtxDesc->attr;
dst->type = vtxDesc->type;
stride = stride + kSize[vtxDesc->type];
}
dst->attr = GX_VA_NULL;
@@ -104,7 +108,7 @@ void J3DShape::addTexMtxIndexInVcd(GXAttr attr) {
/* 80314DA8-80314E28 30F6E8 0080+00 0/0 1/1 0/0 .text
* calcNBTScale__8J3DShapeFRC3VecPA3_A3_fPA3_A3_f */
void J3DShape::calcNBTScale(Vec const& param_0, f32 (*param_1)[3][3], f32 (*param_2)[3][3]) {
void J3DShape::calcNBTScale(const Vec& param_0, f32 (*param_1)[3][3], f32 (*param_2)[3][3]) {
for (u16 i = 0; i < mMtxGroupNum; i++)
mShapeMtx[i]->calcNBTScale(param_0, param_1, param_2);
}
@@ -114,28 +118,31 @@ u16 J3DShape::countBumpMtxNum() const {
u16 num = 0;
for (u16 i = 0; i < mMtxGroupNum; i++)
num += mShapeMtx[i]->getUseMtxNum();
return num;
}
/* 80314E98-80314EB0 30F7D8 0018+00 1/1 0/0 0/0 .text J3DLoadCPCmd__FUcUl */
void J3DLoadCPCmd(u8 cmd, u32 param) {
GXWGFifo.u8 = GX_LOAD_CP_REG;
GXWGFifo.u8 = cmd;
GXWGFifo.u32 = param;
void J3DLoadCPCmd(u8 addr, u32 val) {
GXCmd1u8(GX_LOAD_CP_REG);
GXCmd1u8(addr);
GXCmd1u32(val);
}
/* 80314EB0-80314EEC 30F7F0 003C+00 1/1 0/0 0/0 .text J3DLoadArrayBasePtr__F7_GXAttrPv */
static void J3DLoadArrayBasePtr(_GXAttr attr, void* data) {
static void J3DLoadArrayBasePtr(GXAttr attr, void* data) {
u32 idx = (attr == GX_VA_NBT) ? 1 : (attr - GX_VA_POS);
J3DLoadCPCmd(0xA0 + idx, ((u32)data & 0x7FFFFFFF));
J3DLoadCPCmd(0xA0 + idx, ((uintptr_t)data & 0x7FFFFFFF));
}
/* 80314EEC-80314F5C 30F82C 0070+00 3/3 0/0 0/0 .text loadVtxArray__8J3DShapeCFv */
void J3DShape::loadVtxArray() const {
J3DLoadArrayBasePtr(GX_VA_POS, j3dSys.getVtxPos());
if (!mHasNBT) {
J3DLoadArrayBasePtr(GX_VA_NRM, j3dSys.getVtxNrm());
}
J3DLoadArrayBasePtr(GX_VA_CLR0, j3dSys.getVtxCol());
}
@@ -146,6 +153,7 @@ bool J3DShape::isSameVcdVatCmd(J3DShape* other) {
for (u32 i = 0; i < kVcdVatDLSize; i++)
if (a[i] != b[i])
return false;
return true;
}
@@ -153,9 +161,9 @@ bool J3DShape::isSameVcdVatCmd(J3DShape* other) {
void J3DShape::makeVtxArrayCmd() {
GXVtxAttrFmtList* vtxAttr = mVertexData->getVtxAttrFmtList();
u8 stride[0x0C];
void* array[0x0C];
for (u32 i = 0; i < 0x0C; i++) {
u8 stride[12];
void* array[12];
for (u32 i = 0; i < 12; i++) {
stride[i] = 0;
array[i] = 0;
}
@@ -164,27 +172,28 @@ void J3DShape::makeVtxArrayCmd() {
switch (vtxAttr->attr) {
case GX_VA_POS: {
if (vtxAttr->type == GX_F32)
stride[vtxAttr->attr - GX_VA_POS] = 0x0C;
stride[vtxAttr->attr - GX_VA_POS] = 12;
else
stride[vtxAttr->attr - GX_VA_POS] = 0x06;
stride[vtxAttr->attr - GX_VA_POS] = 6;
array[vtxAttr->attr - GX_VA_POS] = mVertexData->getVtxPosArray();
mVertexData->setVtxPosFrac(vtxAttr->frac);
mVertexData->setVtxPosFrac((u8)vtxAttr->frac);
mVertexData->setVtxPosType((GXCompType)vtxAttr->type);
} break;
case GX_VA_NRM: {
if (vtxAttr->type == GX_F32)
stride[vtxAttr->attr - GX_VA_POS] = 0x0C;
stride[vtxAttr->attr - GX_VA_POS] = 12;
else
stride[vtxAttr->attr - GX_VA_POS] = 0x06;
stride[vtxAttr->attr - GX_VA_POS] = 6;
array[vtxAttr->attr - GX_VA_POS] = mVertexData->getVtxNrmArray();
mVertexData->setVtxNrmFrac(vtxAttr->frac);
mVertexData->setVtxNrmFrac((u8)vtxAttr->frac);
mVertexData->setVtxNrmType((GXCompType)vtxAttr->type);
} break;
case GX_VA_CLR0:
case GX_VA_CLR1: {
stride[vtxAttr->attr - GX_VA_POS] = 0x04;
array[vtxAttr->attr - GX_VA_POS] =
mVertexData->getVtxColorArray(vtxAttr->attr - GX_VA_CLR0);
stride[vtxAttr->attr - GX_VA_POS] = 4;
array[vtxAttr->attr - GX_VA_POS] = mVertexData->getVtxColorArray(vtxAttr->attr - GX_VA_CLR0);
} break;
case GX_VA_TEX0:
case GX_VA_TEX1:
@@ -195,11 +204,11 @@ void J3DShape::makeVtxArrayCmd() {
case GX_VA_TEX6:
case GX_VA_TEX7: {
if (vtxAttr->type == GX_F32)
stride[vtxAttr->attr - GX_VA_POS] = 0x08;
stride[vtxAttr->attr - GX_VA_POS] = 8;
else
stride[vtxAttr->attr - GX_VA_POS] = 0x04;
array[vtxAttr->attr - GX_VA_POS] =
mVertexData->getVtxTexCoordArray(vtxAttr->attr - GX_VA_TEX0);
stride[vtxAttr->attr - GX_VA_POS] = 4;
array[vtxAttr->attr - GX_VA_POS] = mVertexData->getVtxTexCoordArray(vtxAttr->attr - GX_VA_TEX0);
} break;
default:
break;
@@ -218,7 +227,7 @@ void J3DShape::makeVtxArrayCmd() {
}
}
for (u32 i = 0; i < 0x0C; i++) {
for (u32 i = 0; i < 12; i++) {
if (array[i] != 0)
GDSetArray((GXAttr)(i + GX_VA_POS), array[i], stride[i]);
else
@@ -226,19 +235,9 @@ void J3DShape::makeVtxArrayCmd() {
}
}
/* ############################################################################################## */
/* 804515C8-804515CC 000AC8 0004+00 1/1 0/0 0/0 .sbss sInterruptFlag$903 */
static s32 sInterruptFlag;
/* 804515CC-804515D0 000ACC 0004+00 1/1 0/0 0/0 .sbss None */
static s8 sInitInterruptFlag;
/* 80315260-80315300 30FBA0 00A0+00 1/1 2/2 0/0 .text makeVcdVatCmd__8J3DShapeFv */
void J3DShape::makeVcdVatCmd() {
if (!sInitInterruptFlag) {
sInterruptFlag = OSDisableInterrupts();
sInitInterruptFlag = true;
}
static BOOL sInterruptFlag = OSDisableInterrupts();
OSDisableScheduler();
GDLObj gdl_obj;
@@ -254,10 +253,13 @@ void J3DShape::makeVcdVatCmd() {
OSRestoreInterrupts(sInterruptFlag);
}
/* ############################################################################################## */
/* 804515D0-804515D4 000AD0 0004+00 5/5 25/25 9/9 .sbss sOldVcdVatCmd__8J3DShape */
void* J3DShape::sOldVcdVatCmd;
void J3DShape::loadCurrentMtx() const {
mCurrentMtx.load();
}
/* 80315300-80315398 30FC40 0098+00 2/2 6/6 3/3 .text loadPreDrawSetting__8J3DShapeCFv */
void J3DShape::loadPreDrawSetting() const {
if (sOldVcdVatCmd != mVcdVatCmd) {
@@ -268,9 +270,8 @@ void J3DShape::loadPreDrawSetting() const {
mCurrentMtx.load();
}
/* ############################################################################################## */
/* 804515D4-804515D8 000AD4 0004+00 3/3 0/0 0/0 .sbss None */
static u8 data_804515D4[4];
bool J3DShape::sEnvelopeFlag;
/* 80315398-8031544C 30FCD8 00B4+00 1/1 0/0 0/0 .text setArrayAndBindPipeline__8J3DShapeCFv */
void J3DShape::setArrayAndBindPipeline() const {
@@ -279,10 +280,8 @@ void J3DShape::setArrayAndBindPipeline() const {
j3dSys.setModelDrawMtx(mDrawMtx[*mCurrentViewNo]);
j3dSys.setModelNrmMtx(mNrmMtx[*mCurrentViewNo]);
J3DShapeMtx::sCurrentScaleFlag = mScaleFlagArray;
// The below struct_804515B0 is actually a continuation of sCurrentScaleFlag, I believe?
// Also, there seems to be an extra entry in the array that's only there in DEBUG builds.
J3DShapeMtx::sNBTFlag = mHasNBT;
data_804515D4[0] = mHasPNMTXIdx;
sEnvelopeFlag = mHasPNMTXIdx;
J3DShapeMtx::sTexMtxLoadType = getTexMtxLoadType();
}
@@ -293,13 +292,12 @@ void J3DShape::drawFast() const {
sOldVcdVatCmd = mVcdVatCmd;
}
if (data_804515D4[0] != 0 && !mHasPNMTXIdx)
if (sEnvelopeFlag != 0 && !mHasPNMTXIdx)
mCurrentMtx.load();
setArrayAndBindPipeline();
if (!checkFlag(J3DShpFlag_NoMtx)) {
// LOD flag shenanigans
if (J3DShapeMtx::getLODFlag() != 0)
if (J3DShapeMtx::getLODFlag())
J3DShapeMtx::resetMtxLoadCache();
for (u16 n = mMtxGroupNum, i = 0; i < n; i++) {
@@ -344,7 +342,7 @@ void J3DShape::simpleDrawCache() const {
sOldVcdVatCmd = mVcdVatCmd;
}
if (data_804515D4[0] != 0 && !mHasPNMTXIdx)
if (sEnvelopeFlag && !mHasPNMTXIdx)
mCurrentMtx.load();
loadVtxArray();