Miscellaneous retail+debug fixes, link several new TUs (#2836)

This commit is contained in:
Max Roncace
2025-11-21 02:09:21 -05:00
committed by GitHub
parent f171287913
commit 81017cf22c
24 changed files with 1354 additions and 1082 deletions
+31 -12
View File
@@ -293,19 +293,38 @@ int J3DSkinDeform::initMtxIndexArray(J3DModelData* pModelData) {
int uVar13;
for (;
(int)pDListPos - (int)pDList < pModelData->getShapeNodePointer(i)->getShapeDraw(j)->getDisplayListSize();
pDListPos += r23 * uVar13)
pDListPos += r23 * uVar13
//TODO: This loop's logic has drastically different codegen between GCN and Shield
// in a way that so far can't be pinned down as just compiler differences. This
// may have been refactored in the J3D version used for Shield, but note that
// it's very possible that this is a fakematch and there's some other way of
// expressing it that matches for both versions.
#if PLATFORM_GCN
, pDListPos += 3
#endif
)
{
u8 command = *pDListPos;
#if !PLATFORM_GCN
pDListPos++;
#endif
if (command != GX_TRIANGLEFAN && command != GX_TRIANGLESTRIP) {
break;
}
#if PLATFORM_GCN
uVar13 = *(u16*)(pDListPos + 1);
#else
uVar13 = *(u16*)pDListPos;
pDListPos += 2;
#endif
for (int local_60 = 0; local_60 < uVar13; local_60++) {
u8* iVar5 = pDListPos + r23 * local_60;
u8 bVar3 = *(iVar5 + pnmtx_num) / 3U;
#if PLATFORM_GCN
u8* iVar5 = ((u8*)(pDListPos + 3) + r23 * local_60);
#else
u8* iVar5 = ((u8*)pDListPos + r23 * local_60);
#endif
u8 bVar3 = *(u8*)(iVar5 + pnmtx_num) / 3U;
u16 vtx_idx = *(u16*)(iVar5 + vtx_num);
u16 nrm_idx = *(u16*)(iVar5 + nrm_num);
u16 uVar3 = *(u16*)(iVar5 + tex_num);
@@ -563,8 +582,8 @@ void J3DSkinDeform::deformVtxPos_F32(J3DVertexBuffer* pVtxBuffer, J3DMtxBuffer*
J3DJointTree* jointTree = pMtxBuffer->getJointTree();
int vtxNum = pVtxBuffer->getVertexData()->getVtxNum();
int sp8 = jointTree->getDrawMtxNum();
void* currentVtxPos = pVtxBuffer->getCurrentVtxPos();
void* transformedVtxPos = pVtxBuffer->getTransformedVtxPos(0);
void* currentVtxPos = (void*)pVtxBuffer->getCurrentVtxPos();
void* transformedVtxPos = (void*)pVtxBuffer->getTransformedVtxPos(0);
for (int i = 0; i < vtxNum; i++) {
anmMtx = anmMtxs[jointTree->getDrawMtxFlag(mPosData[i])];
@@ -590,8 +609,8 @@ void J3DSkinDeform::deformVtxPos_S16(J3DVertexBuffer* pVtxBuffer, J3DMtxBuffer*
J3DJointTree* jointTree = pMtxBuffer->getJointTree();
int vtxNum = pVtxBuffer->getVertexData()->getVtxNum();
int sp8 = jointTree->getDrawMtxNum();
void* currentVtxPos = pVtxBuffer->getCurrentVtxPos();
void* transformedVtxPos = pVtxBuffer->getTransformedVtxPos(0);
void* currentVtxPos = (void*)pVtxBuffer->getCurrentVtxPos();
void* transformedVtxPos = (void*)pVtxBuffer->getTransformedVtxPos(0);
for (int i = 0; i < vtxNum; i++) {
anmMtx = anmMtxs[jointTree->getDrawMtxFlag(mPosData[i])];
@@ -608,8 +627,8 @@ void J3DSkinDeform::deformVtxPos_S16(J3DVertexBuffer* pVtxBuffer, J3DMtxBuffer*
void J3DSkinDeform::deformVtxNrm_F32(J3DVertexBuffer* pVtxBuffer) const {
pVtxBuffer->swapTransformedVtxNrm();
int nrmNum = pVtxBuffer->getVertexData()->getNrmNum();
void* currentVtxNrm = pVtxBuffer->getCurrentVtxNrm();
void* transformedVtxNrm = pVtxBuffer->getTransformedVtxNrm(0);
void* currentVtxNrm = (void*)pVtxBuffer->getCurrentVtxNrm();
void* transformedVtxNrm = (void*)pVtxBuffer->getTransformedVtxNrm(0);
for (int i = 0; i < nrmNum; i++) {
J3DPSMulMtxVec(mNrmMtx[mNrmData[i]], (Vec*)((u8*)currentVtxNrm + i * 3 * 4), (Vec*)((u8*)transformedVtxNrm + i * 3 * 4));
@@ -628,8 +647,8 @@ void J3DSkinDeform::deformVtxNrm_S16(J3DVertexBuffer* pVtxBuffer) const {
pVtxBuffer->swapTransformedVtxNrm();
int nrmNum = pVtxBuffer->getVertexData()->getNrmNum();
void* currentVtxNrm = pVtxBuffer->getCurrentVtxNrm();
void* transformedVtxNrm = pVtxBuffer->getTransformedVtxNrm(0);
void* currentVtxNrm = (void*)pVtxBuffer->getCurrentVtxNrm();
void* transformedVtxNrm = (void*)pVtxBuffer->getTransformedVtxNrm(0);
for (int i = 0; i < nrmNum; i++) {
J3DPSMulMtxVec(mNrmMtx[mNrmData[i]], (S16Vec*)(((s16*)currentVtxNrm) + (i * 3)), (S16Vec*)(((s16*)transformedVtxNrm) + (i * 3)));