// // Generated By: dol2asm // Translation Unit: J3DPacket // #include "JSystem/J3DGraphBase/J3DPacket.h" #include "JSystem/J3DGraphAnimator/J3DModel.h" #include "JSystem/J3DGraphBase/J3DMaterial.h" #include "JSystem/J3DGraphBase/J3DShape.h" #include "JSystem/J3DGraphBase/J3DShapeMtx.h" #include "JSystem/J3DGraphBase/J3DSys.h" #include "JSystem/J3DGraphBase/J3DVertex.h" #include "JSystem/JKernel/JKRHeap.h" #include "MSL_C.PPCEABI.bare.H/MSL_Common/src/string.h" #include "dol2asm.h" #include "dolphin/gx/GX.h" #include "dolphin/os/OSCache.h" #include "dolphin/types.h" #include "global.h" // // Types: // struct J3DDrawBuffer { static u8 sortFuncTable[72]; }; // // Forward References: // extern "C" void newDisplayList__17J3DDisplayListObjFUl(); extern "C" void newSingleDisplayList__17J3DDisplayListObjFUl(); extern "C" void single_To_Double__17J3DDisplayListObjFv(); extern "C" void setSingleDisplayList__17J3DDisplayListObjFPvUl(); extern "C" void swapBuffer__17J3DDisplayListObjFv(); extern "C" void callDL__17J3DDisplayListObjCFv(); extern "C" void beginDL__17J3DDisplayListObjFv(); extern "C" void endDL__17J3DDisplayListObjFv(); extern "C" void beginPatch__17J3DDisplayListObjFv(); extern "C" void endPatch__17J3DDisplayListObjFv(); extern "C" bool entry__9J3DPacketFP13J3DDrawBuffer(); extern "C" void addChildPacket__9J3DPacketFP9J3DPacket(); extern "C" void __ct__13J3DDrawPacketFv(); extern "C" void __dt__13J3DDrawPacketFv(); extern "C" void newDisplayList__13J3DDrawPacketFUl(); extern "C" void newSingleDisplayList__13J3DDrawPacketFUl(); extern "C" void draw__13J3DDrawPacketFv(); extern "C" void __ct__12J3DMatPacketFv(); extern "C" void __dt__12J3DMatPacketFv(); extern "C" void addShapePacket__12J3DMatPacketFP14J3DShapePacket(); extern "C" void beginDiff__12J3DMatPacketFv(); extern "C" void endDiff__12J3DMatPacketFv(); extern "C" void isSame__12J3DMatPacketCFP12J3DMatPacket(); extern "C" void draw__12J3DMatPacketFv(); extern "C" void __ct__14J3DShapePacketFv(); extern "C" void __dt__14J3DShapePacketFv(); extern "C" void calcDifferedBufferSize__14J3DShapePacketFUl(); extern "C" void newDifferedDisplayList__14J3DShapePacketFUl(); extern "C" void prepareDraw__14J3DShapePacketCFv(); extern "C" void draw__14J3DShapePacketFv(); extern "C" void drawFast__14J3DShapePacketFv(); extern "C" void draw__9J3DPacketFv(); extern "C" void entry__12J3DMatPacketFP13J3DDrawBuffer(); extern "C" u8 sGDLObj__17J3DDisplayListObj[16]; extern "C" u8 sInterruptFlag__17J3DDisplayListObj[4 + 4 /* padding */]; // // External References: // extern "C" void __dt__9J3DPacketFv(); extern "C" void* __nw__FUl(); extern "C" void* __nwa__FUli(); extern "C" void __dl__FPv(); extern "C" void setArray__15J3DVertexBufferCFv(); extern "C" void loadPreDrawSetting__8J3DShapeCFv(); extern "C" void syncJ3DSysFlags__12J3DModelDataCFv(); extern "C" void GDFlushCurrToMem(); extern "C" void GDPadCurr32(); extern "C" void __ptmf_scall(); extern "C" void _savegpr_28(); extern "C" void _restgpr_28(); extern "C" u8 sortFuncTable__13J3DDrawBuffer[72]; extern "C" extern u8 struct_804515B0[4]; extern "C" u8 sTexGenBlock__17J3DDifferedTexMtx[4]; extern "C" u8 sTexMtxObj__17J3DDifferedTexMtx[4]; extern "C" u8 sOldVcdVatCmd__8J3DShape[4]; // // Declarations: // J3DError J3DDisplayListObj::newDisplayList(u32 capacity) { mCapacity = ALIGN_NEXT(capacity, 0x20); mpData[0] = new (0x20) char[mCapacity]; mpData[1] = new (0x20) char[mCapacity]; mSize = 0; if (mpData[0] == NULL || mpData[1] == NULL) return kJ3DError_Alloc; return kJ3DError_Success; } J3DError J3DDisplayListObj::newSingleDisplayList(u32 capacity) { mCapacity = ALIGN_NEXT(capacity, 0x20); mpData[0] = new (0x20) char[mCapacity]; mpData[1] = mpData[0]; mSize = 0; if (mpData[0] == NULL) return kJ3DError_Alloc; return kJ3DError_Success; } /* 8031256C-803125E4 30CEAC 0078+00 0/0 1/1 0/0 .text single_To_Double__17J3DDisplayListObjFv */ J3DError J3DDisplayListObj::single_To_Double() { if (mpData[0] == mpData[1]) { mpData[1] = new (0x20) char[mCapacity]; if (mpData[1] == NULL) return kJ3DError_Alloc; memcpy(mpData[1], mpData[0], mCapacity); DCStoreRange(mpData[1], mCapacity); } return kJ3DError_Success; } void J3DDisplayListObj::setSingleDisplayList(void* pDLData, u32 size) { mCapacity = ALIGN_NEXT(size, 0x20); mpData[0] = pDLData; mpData[1] = mpData[0]; mSize = size; } void J3DDisplayListObj::swapBuffer() { void* pTmp = mpData[0]; mpData[0] = mpData[1]; mpData[1] = pTmp; } void J3DDisplayListObj::callDL() const { GXCallDisplayList(mpData[0], mSize); } /* ############################################################################################## */ /* 80434C70-80434C80 061990 0010+00 2/2 3/3 0/0 .bss sGDLObj__17J3DDisplayListObj */ GDLObj J3DDisplayListObj::sGDLObj; /* 804515A0-804515A8 000AA0 0004+04 3/3 0/0 0/0 .sbss sInterruptFlag__17J3DDisplayListObj */ s32 J3DDisplayListObj::sInterruptFlag; /* 80312644-80312698 30CF84 0054+00 2/2 1/1 0/0 .text beginDL__17J3DDisplayListObjFv */ void J3DDisplayListObj::beginDL() { swapBuffer(); sInterruptFlag = OSDisableInterrupts(); GDInitGDLObj(&sGDLObj, (u8*)mpData[0], mCapacity); GDSetCurrent(&sGDLObj); } /* 80312698-803126F4 30CFD8 005C+00 1/1 1/1 0/0 .text endDL__17J3DDisplayListObjFv */ u32 J3DDisplayListObj::endDL() { GDPadCurr32(); OSRestoreInterrupts(sInterruptFlag); mSize = GDGetGDLObjOffset(&sGDLObj); GDFlushCurrToMem(); GDSetCurrent(NULL); return mSize; } /* 803126F4-80312714 30D034 0020+00 0/0 1/1 0/0 .text beginPatch__17J3DDisplayListObjFv */ void J3DDisplayListObj::beginPatch() { beginDL(); } /* 80312714-80312750 30D054 003C+00 0/0 1/1 0/0 .text endPatch__17J3DDisplayListObjFv */ u32 J3DDisplayListObj::endPatch() { OSRestoreInterrupts(sInterruptFlag); GDSetCurrent(NULL); return mSize; } /* 80312750-80312758 30D090 0008+00 3/0 16/0 10/0 .text entry__9J3DPacketFP13J3DDrawBuffer */ bool J3DPacket::entry(J3DDrawBuffer* param_0) { return true; } void J3DPacket::addChildPacket(J3DPacket* pPacket) { if (mpFirstChild == NULL) { mpFirstChild = pPacket; } else { pPacket->mpNextSibling = mpFirstChild; mpFirstChild = pPacket; } } /* ############################################################################################## */ /* 803CD900-803CD920 02AA20 0020+00 1/1 0/0 0/0 .data sDifferedRegister */ SECTION_DATA static u32 sDifferedRegister[8] = {0x00000004, 0x00000001, 0x00000002, 0x01000000, 0x10000000, 0x20000000, 0x02000000, 0x08000000}; /* 803CD920-803CD940 02AA40 0020+00 1/1 0/0 0/0 .data sSizeOfDiffered */ SECTION_DATA static s32 sSizeOfDiffered[8] = {13, 13, 21, 120, 55, 15, 19, 45}; /* 803CD940-803CD954 02AA60 0014+00 2/2 0/0 0/0 .data __vt__14J3DShapePacket */ SECTION_DATA extern void* __vt__14J3DShapePacket[5] = { (void*)NULL /* RTTI */, (void*)NULL, (void*)entry__9J3DPacketFP13J3DDrawBuffer, (void*)draw__14J3DShapePacketFv, (void*)__dt__14J3DShapePacketFv, }; /* 803CD954-803CD968 02AA74 0014+00 2/2 0/0 0/0 .data __vt__12J3DMatPacket */ SECTION_DATA extern void* __vt__12J3DMatPacket[5] = { (void*)NULL /* RTTI */, (void*)NULL, (void*)entry__12J3DMatPacketFP13J3DDrawBuffer, (void*)draw__12J3DMatPacketFv, (void*)__dt__12J3DMatPacketFv, }; /* 803CD968-803CD97C 02AA88 0014+00 2/2 0/0 0/0 .data __vt__13J3DDrawPacket */ SECTION_DATA extern void* __vt__13J3DDrawPacket[5] = { (void*)NULL /* RTTI */, (void*)NULL, (void*)entry__9J3DPacketFP13J3DDrawBuffer, (void*)draw__13J3DDrawPacketFv, (void*)__dt__13J3DDrawPacketFv, }; /* 803CD97C-803CD990 02AA9C 0014+00 2/2 34/34 23/23 .data __vt__9J3DPacket */ SECTION_DATA extern void* __vt__9J3DPacket[5] = { (void*)NULL /* RTTI */, (void*)NULL, (void*)entry__9J3DPacketFP13J3DDrawBuffer, (void*)draw__9J3DPacketFv, (void*)__dt__9J3DPacketFv, }; /* 80312778-803127B0 30D0B8 0038+00 2/2 0/0 0/0 .text __ct__13J3DDrawPacketFv */ J3DDrawPacket::J3DDrawPacket() { mFlags = 0; mpDisplayListObj = NULL; mpTexMtx = NULL; } /* 803127B0-8031280C 30D0F0 005C+00 3/2 0/0 0/0 .text __dt__13J3DDrawPacketFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm J3DDrawPacket::~J3DDrawPacket() { nofralloc #include "asm/JSystem/J3DGraphBase/J3DPacket/__dt__13J3DDrawPacketFv.s" } #pragma pop /* 8031280C-80312898 30D14C 008C+00 1/1 1/1 0/0 .text newDisplayList__13J3DDrawPacketFUl */ #ifdef NONMATCHING J3DError J3DDrawPacket::newDisplayList(u32 param_0) { mpDisplayListObj = new J3DDisplayListObj(); if (mpDisplayListObj == NULL) { return kJ3DError_Alloc; } else if (mpDisplayListObj->newDisplayList(param_0)) { return kJ3DError_Success; } return 0; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm J3DError J3DDrawPacket::newDisplayList(u32 param_0) { nofralloc #include "asm/JSystem/J3DGraphBase/J3DPacket/newDisplayList__13J3DDrawPacketFUl.s" } #pragma pop #endif /* 80312898-80312924 30D1D8 008C+00 0/0 1/1 0/0 .text newSingleDisplayList__13J3DDrawPacketFUl */ #ifdef NONMATCHING J3DError J3DDrawPacket::newSingleDisplayList(u32 param_0) { mpDisplayListObj = new J3DDisplayListObj(); if (mpDisplayListObj == NULL) { return kJ3DError_Alloc; } else if (mpDisplayListObj->newSingleDisplayList(param_0)) { return kJ3DError_Success; } return 0; } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm J3DError J3DDrawPacket::newSingleDisplayList(u32 param_0) { nofralloc #include "asm/JSystem/J3DGraphBase/J3DPacket/newSingleDisplayList__13J3DDrawPacketFUl.s" } #pragma pop #endif void J3DDrawPacket::draw() { mpDisplayListObj->callDL(); } /* 80312948-803129A4 30D288 005C+00 0/0 1/1 0/0 .text __ct__12J3DMatPacketFv */ J3DMatPacket::J3DMatPacket() { mpInitShapePacket = NULL; mpShapePacket = NULL; mpMaterial = NULL; mSortFlags = -1; mpTexture = NULL; mpMaterialAnm = NULL; } /* 803129A4-80312A04 30D2E4 0060+00 1/0 1/1 0/0 .text __dt__12J3DMatPacketFv */ J3DMatPacket::~J3DMatPacket() {} void J3DMatPacket::addShapePacket(J3DShapePacket* pShape) { if (mpShapePacket == NULL) { mpShapePacket = pShape; } else { pShape->mpNextSibling = mpShapePacket; mpShapePacket = pShape; } } void J3DMatPacket::beginDiff() { mpInitShapePacket->mpDisplayListObj->beginDL(); } void J3DMatPacket::endDiff() { mpInitShapePacket->mpDisplayListObj->endDL(); } /* 80312A74-80312A9C 30D3B4 0028+00 0/0 1/1 0/0 .text isSame__12J3DMatPacketCFP12J3DMatPacket */ bool J3DMatPacket::isSame(J3DMatPacket* pOther) const { bool isSame = false; if (mSortFlags == pOther->mSortFlags && !(mSortFlags >> 0x1F)) { isSame = true; } return isSame; } /* 80312A9C-80312B20 30D3DC 0084+00 1/0 0/0 0/0 .text draw__12J3DMatPacketFv */ void J3DMatPacket::draw() { mpMaterial->load(); callDL(); J3DShapePacket* packet = getShapePacket(); J3DShape* shape = packet->getShape(); shape->loadPreDrawSetting(); while (packet != NULL) { if (packet->getDisplayListObj() != NULL) { packet->getDisplayListObj()->callDL(); } packet->drawFast(); packet = (J3DShapePacket*)packet->getNextPacket(); } shape->resetVcdVatCache(); } /* 80312B20-80312B74 30D460 0054+00 0/0 1/1 0/0 .text __ct__14J3DShapePacketFv */ J3DShapePacket::J3DShapePacket() { mpShape = NULL; mpMtxBuffer = NULL; mpBaseMtxPtr = NULL; mDiffFlag = 0; mpModel = NULL; } /* 80312B74-80312BD4 30D4B4 0060+00 1/0 1/1 0/0 .text __dt__14J3DShapePacketFv */ J3DShapePacket::~J3DShapePacket() {} /* 80312BD4-80312DBC 30D514 01E8+00 1/1 0/0 0/0 .text calcDifferedBufferSize__14J3DShapePacketFUl */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm u32 J3DShapePacket::calcDifferedBufferSize(u32 param_0) { nofralloc #include "asm/JSystem/J3DGraphBase/J3DPacket/calcDifferedBufferSize__14J3DShapePacketFUl.s" } #pragma pop /* 80312DBC-80312E08 30D6FC 004C+00 0/0 1/1 0/0 .text newDifferedDisplayList__14J3DShapePacketFUl */ J3DError J3DShapePacket::newDifferedDisplayList(u32 flag) { mDiffFlag = flag; u32 bufSize = calcDifferedBufferSize(flag); J3DError error = newDisplayList(bufSize); if (error != kJ3DError_Success) { return error; } setDisplayListObj(getDisplayListObj()); return kJ3DError_Success; } /* 80312E08-80312F24 30D748 011C+00 2/2 0/0 0/0 .text prepareDraw__14J3DShapePacketCFv */ #ifdef NONMATCHING void J3DShapePacket::prepareDraw() const { mpModel->getVertexBuffer()->setArray(); j3dSys.setModel(mpModel); j3dSys.setShapePacket((J3DShapePacket*)this); // the way that the LOD flag is set seems to be wrong... J3DShapeMtx::setLODFlag(mpModel->checkFlag(0x10)); if (mpModel->checkFlag(J3DMdlFlag_SkinPosCpu)) { mpShape->onFlag(J3DShpFlag_SkinPosCpu); } else { mpShape->offFlag(J3DShpFlag_SkinPosCpu); } if (mpModel->checkFlag(J3DMdlFlag_SkinNrmCpu) && !mpShape->checkFlag(J3DShpFlag_EnableLod)) { mpShape->onFlag(J3DShpFlag_SkinNrmCpu); } else { mpShape->offFlag(J3DShpFlag_SkinNrmCpu); } mpShape->setCurrentViewNoPtr(mpMtxBuffer->getCurrentViewNoPtr()); mpShape->setScaleFlagArray(mpMtxBuffer->getScaleFlagArray()); mpShape->setDrawMtx(mpMtxBuffer->getDrawMtxPtrPtr()); if (!mpShape->getNBTFlag()) { mpShape->setNrmMtx(mpMtxBuffer->getNrmMtxPtrPtr()); } else { mpShape->setNrmMtx(mpMtxBuffer->getBumpMtxPtrPtr() + mpShape->getBumpMtxOffset()); } mpModel->getModelData()->syncJ3DSysFlags(); } #else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm void J3DShapePacket::prepareDraw() const { nofralloc #include "asm/JSystem/J3DGraphBase/J3DPacket/prepareDraw__14J3DShapePacketCFv.s" } #pragma pop #endif /* 80312F24-80312FBC 30D864 0098+00 1/0 0/0 0/0 .text draw__14J3DShapePacketFv */ void J3DShapePacket::draw() { if (!checkFlag(J3DShpFlag_Hidden) && mpShape != NULL) { prepareDraw(); if (mpTexMtx != NULL) { J3DMaterial* material = mpShape->getMaterial(); J3DDifferedTexMtx::sTexGenBlock = material->getTexGenBlock(); J3DDifferedTexMtx::sTexMtxObj = getTexMtxObj(); } else { J3DDifferedTexMtx::sTexGenBlock = NULL; } if (mpDisplayListObj != NULL) { mpDisplayListObj->callDL(); } mpShape->draw(); } } /* 80312FBC-80313044 30D8FC 0088+00 1/1 2/2 1/1 .text drawFast__14J3DShapePacketFv */ void J3DShapePacket::drawFast() { if (!checkFlag(J3DShpFlag_Hidden) && mpShape != NULL) { prepareDraw(); if (mpTexMtx != NULL) { J3DMaterial* material = mpShape->getMaterial(); J3DDifferedTexMtx::sTexGenBlock = material->getTexGenBlock(); J3DDifferedTexMtx::sTexMtxObj = getTexMtxObj(); } else { J3DDifferedTexMtx::sTexGenBlock = NULL; } mpShape->drawFast(); } } /* 80313044-80313048 30D984 0004+00 1/0 0/0 0/0 .text draw__9J3DPacketFv */ void J3DPacket::draw() { /* empty function */ } /* 80313048-803130A8 30D988 0060+00 1/0 0/0 0/0 .text entry__12J3DMatPacketFP13J3DDrawBuffer */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off asm bool J3DMatPacket::entry(J3DDrawBuffer* param_0) { nofralloc #include "asm/JSystem/J3DGraphBase/J3DPacket/entry__12J3DMatPacketFP13J3DDrawBuffer.s" } #pragma pop