diff options
| author | Jasper St. Pierre <jstpierre@mecheye.net> | 2021-05-10 08:54:07 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-10 11:54:07 -0400 |
| commit | 462d71cbef02ef119fc2aa480b98cfeedde46441 (patch) | |
| tree | 923ed9f6f939c3e4b64dba0070e1539d05910089 /libs/JSystem/J3DGraphBase | |
| parent | 9799fadfe84344fa3ea78835365570d832a476c7 (diff) | |
Makefile fixes / JUTNameTab (#129)
* Makefile: Fix issues with iconv causing it to break under devkitPro / msys
The version of iconv included in devkitPro does not have a -o option,
so replace it with normal shell redirection. Also, SHIFT-JIS does not
have a mapping for ~, so output the Windows CP932 variant instead,
which does. See:
https://en.wikipedia.org/wiki/Tilde#Unicode_and_Shift_JIS_encoding_of_wave_dash
https://en.wikipedia.org/wiki/Code_page_932_(Microsoft_Windows)#Single-byte_character_differences
* Update diff configuration
-Bbinary doesn't seem to work with my copy of
bjdump (it says it can't decode unknown architecture)
Cheese things by using expected/ instead of having
the user place things manually.
* JUTNameTab
* J3DPacket / J3DDrawBuffer
* format
Co-authored-by: lepelog <lepelog@users.noreply.github.com>
Diffstat (limited to 'libs/JSystem/J3DGraphBase')
| -rw-r--r-- | libs/JSystem/J3DGraphBase/J3DDrawBuffer.cpp | 132 | ||||
| -rw-r--r-- | libs/JSystem/J3DGraphBase/J3DPacket.cpp | 216 | ||||
| -rw-r--r-- | libs/JSystem/J3DGraphBase/Makefile | 2 |
3 files changed, 122 insertions, 228 deletions
diff --git a/libs/JSystem/J3DGraphBase/J3DDrawBuffer.cpp b/libs/JSystem/J3DGraphBase/J3DDrawBuffer.cpp index e6077324eb..bd429fb830 100644 --- a/libs/JSystem/J3DGraphBase/J3DDrawBuffer.cpp +++ b/libs/JSystem/J3DGraphBase/J3DDrawBuffer.cpp @@ -4,44 +4,11 @@ // #include "JSystem/J3DGraphBase/J3DDrawBuffer.h" +#include "JSystem/JKernel/JKRHeap.h" #include "dol2asm.h" #include "dolphin/types.h" -// -// Types: -// - -struct J3DShapePacket {}; - -struct J3DPacket { - /* 80312758 */ void addChildPacket(J3DPacket*); -}; - -struct J3DMatPacket { - /* 80312A04 */ void addShapePacket(J3DShapePacket*); - /* 80312A74 */ void isSame(J3DMatPacket*) const; -}; - -struct J3DDrawBuffer { - /* 80324F08 */ void initialize(); - /* 80324F70 */ void allocBuffer(u32); - /* 80325008 */ ~J3DDrawBuffer(); - /* 80325068 */ void frameInit(); - /* 8032509C */ void entryMatSort(J3DMatPacket*); - /* 803251E4 */ void entryMatAnmSort(J3DMatPacket*); - /* 8032529C */ void entryZSort(J3DMatPacket*); - /* 803253B4 */ void entryModelSort(J3DMatPacket*); - /* 80325404 */ void entryInvalidSort(J3DMatPacket*); - /* 80325458 */ void entryNonSort(J3DMatPacket*); - /* 8032548C */ void entryImm(J3DPacket*, u16); - /* 803254AC */ void draw() const; - /* 80325500 */ void drawHead() const; - /* 80325578 */ void drawTail() const; - - static u8 sortFuncTable[72]; - static u8 drawFuncTable[24]; - static u8 entryNum[4 + 4 /* padding */]; -}; +#include "JSystem/J3DGraphBase/J3DPacket.h" // // Forward References: @@ -98,35 +65,51 @@ SECTION_SDATA2 static f32 lit_782 = 10000.0f; /* 80456408-80456410 004A08 0008+00 2/2 0/0 0/0 .sdata2 @784 */ SECTION_SDATA2 static f64 lit_784 = 4503599627370496.0 /* cast u32 to float */; -/* 80324F08-80324F70 31F848 0068+00 0/0 1/1 0/0 .text initialize__13J3DDrawBufferFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DDrawBuffer::initialize() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DDrawBuffer/initialize__13J3DDrawBufferFv.s" +void J3DDrawBuffer::calcZRatio() { + mZRatio = (mZFar - mZNear) / (f32)mBufSize; } -#pragma pop -/* 80324F70-80325008 31F8B0 0098+00 0/0 1/1 0/0 .text allocBuffer__13J3DDrawBufferFUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DDrawBuffer::allocBuffer(u32 param_0) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DDrawBuffer/allocBuffer__13J3DDrawBufferFUl.s" +void J3DDrawBuffer::initialize() { + mDrawType = 0; + mSortType = 0; + mZNear = lit_781; + mZFar = lit_782; + mpZMtx = NULL; + mpCallBackPacket = NULL; + mBufSize = 0x20; + calcZRatio(); } -#pragma pop -/* 80325008-80325068 31F948 0060+00 0/0 2/2 0/0 .text __dt__13J3DDrawBufferFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm J3DDrawBuffer::~J3DDrawBuffer() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DDrawBuffer/__dt__13J3DDrawBufferFv.s" +J3DError J3DDrawBuffer::allocBuffer(u32 bufSize) { + mpBuf = new (0x20) J3DPacket*[bufSize]; + if (mpBuf == NULL) + return kJ3DError_Alloc; + + mBufSize = bufSize; + frameInit(); + calcZRatio(); + return kJ3DError_Success; } -#pragma pop + +J3DDrawBuffer::~J3DDrawBuffer() { + frameInit(); + + delete[] mpBuf; + mpBuf = NULL; +} + +#if NON_MATCHING + +/* 80325068-8032509C 31F9A8 0034+00 2/2 1/1 0/0 .text frameInit__13J3DDrawBufferFv */ +void J3DDrawBuffer::frameInit() { + // can't make mwcc not generate "mtctr" for this loop + for (int i = 0; i < mBufSize; i++) + mpBuf[i] = NULL; + + mpCallBackPacket = NULL; +} + +#else /* 80325068-8032509C 31F9A8 0034+00 2/2 1/1 0/0 .text frameInit__13J3DDrawBufferFv */ #pragma push @@ -138,6 +121,8 @@ asm void J3DDrawBuffer::frameInit() { } #pragma pop +#endif + /* 8032509C-803251E4 31F9DC 0148+00 2/1 0/0 0/0 .text * entryMatSort__13J3DDrawBufferFP12J3DMatPacket */ #pragma push @@ -193,26 +178,21 @@ asm void J3DDrawBuffer::entryInvalidSort(J3DMatPacket* param_0) { } #pragma pop -/* 80325458-8032548C 31FD98 0034+00 1/0 0/0 0/0 .text - * entryNonSort__13J3DDrawBufferFP12J3DMatPacket */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DDrawBuffer::entryNonSort(J3DMatPacket* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DDrawBuffer/entryNonSort__13J3DDrawBufferFP12J3DMatPacket.s" +bool J3DDrawBuffer::entryNonSort(J3DMatPacket* pMat) { + pMat->clear(); + pMat->mpFirstShapePacket->clear(); + + // inlined copy of entryImm, add to start of buf + pMat->mpNextSibling = mpBuf[0]; + mpBuf[0] = pMat; + return true; } -#pragma pop -/* 8032548C-803254AC 31FDCC 0020+00 0/0 8/8 9/9 .text entryImm__13J3DDrawBufferFP9J3DPacketUs */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DDrawBuffer::entryImm(J3DPacket* param_0, u16 param_1) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DDrawBuffer/entryImm__13J3DDrawBufferFP9J3DPacketUs.s" +bool J3DDrawBuffer::entryImm(J3DPacket* pPacket, u16 index) { + pPacket->mpNextSibling = mpBuf[index]; + mpBuf[index] = pPacket; + return true; } -#pragma pop /* ############################################################################################## */ /* 803CEBE8-803CEBF4 -00001 000C+00 1/1 0/0 0/0 .data @992 */ diff --git a/libs/JSystem/J3DGraphBase/J3DPacket.cpp b/libs/JSystem/J3DGraphBase/J3DPacket.cpp index 68ade874af..1786915338 100644 --- a/libs/JSystem/J3DGraphBase/J3DPacket.cpp +++ b/libs/JSystem/J3DGraphBase/J3DPacket.cpp @@ -4,8 +4,13 @@ // #include "JSystem/J3DGraphBase/J3DPacket.h" +#include "JSystem/JKernel/JKRHeap.h" #include "dol2asm.h" +#include "dolphin/gx/GX.h" +#include "dolphin/os/OSCache.h" #include "dolphin/types.h" +#include "global.h" +#include "msl_c/string.h" // // Types: @@ -15,16 +20,6 @@ struct J3DVertexBuffer { /* 8031106C */ void setArray() const; }; -struct J3DShapePacket { - /* 80312B20 */ J3DShapePacket(); - /* 80312B74 */ ~J3DShapePacket(); - /* 80312BD4 */ void calcDifferedBufferSize(u32); - /* 80312DBC */ void newDifferedDisplayList(u32); - /* 80312E08 */ void prepareDraw() const; - /* 80312F24 */ void draw(); - /* 80312FBC */ void drawFast(); -}; - struct J3DShape { /* 80315300 */ void loadPreDrawSetting() const; @@ -35,52 +30,10 @@ struct J3DDrawBuffer { static u8 sortFuncTable[72]; }; -struct J3DPacket { - /* 8000E680 */ ~J3DPacket(); - /* 80312750 */ bool entry(J3DDrawBuffer*); - /* 80312758 */ void addChildPacket(J3DPacket*); - /* 80313044 */ void draw(); -}; - struct J3DModelData { /* 803260F8 */ void syncJ3DSysFlags() const; }; -struct J3DMatPacket { - /* 80312948 */ J3DMatPacket(); - /* 803129A4 */ ~J3DMatPacket(); - /* 80312A04 */ void addShapePacket(J3DShapePacket*); - /* 80312A24 */ void beginDiff(); - /* 80312A4C */ void endDiff(); - /* 80312A74 */ void isSame(J3DMatPacket*) const; - /* 80312A9C */ void draw(); - /* 80313048 */ void entry(J3DDrawBuffer*); -}; - -struct J3DDrawPacket { - /* 80312778 */ J3DDrawPacket(); - /* 803127B0 */ ~J3DDrawPacket(); - /* 8031280C */ void newDisplayList(u32); - /* 80312898 */ void newSingleDisplayList(u32); - /* 80312924 */ void draw(); -}; - -struct J3DDisplayListObj { - /* 80312488 */ void newDisplayList(u32); - /* 80312508 */ void newSingleDisplayList(u32); - /* 8031256C */ void single_To_Double(); - /* 803125E4 */ void setSingleDisplayList(void*, u32); - /* 80312604 */ void swapBuffer(); - /* 80312618 */ void callDL() const; - /* 80312644 */ void beginDL(); - /* 80312698 */ void endDL(); - /* 803126F4 */ void beginPatch(); - /* 80312714 */ void endPatch(); - - static u8 sGDLObj[16]; - static u8 sInterruptFlag[4 + 4 /* padding */]; -}; - struct J3DDifferedTexMtx { static u8 sTexGenBlock[4]; static u8 sTexMtxObj[4]; @@ -130,7 +83,6 @@ extern "C" u8 sInterruptFlag__17J3DDisplayListObj[4 + 4 /* padding */]; // External References: // -SECTION_INIT void memcpy(); extern "C" void __dt__9J3DPacketFv(); extern "C" void* __nw__FUl(); extern "C" void* __nwa__FUli(); @@ -138,10 +90,6 @@ extern "C" void __dl__FPv(); extern "C" void setArray__15J3DVertexBufferCFv(); extern "C" void loadPreDrawSetting__8J3DShapeCFv(); extern "C" void syncJ3DSysFlags__12J3DModelDataCFv(); -extern "C" void DCStoreRange(); -extern "C" void OSDisableInterrupts(); -extern "C" void OSRestoreInterrupts(); -extern "C" void GXCallDisplayList(); extern "C" void GDInitGDLObj(); extern "C" void GDFlushCurrToMem(); extern "C" void GDPadCurr32(); @@ -160,68 +108,55 @@ extern "C" extern u8 __GDCurrentDL[4]; // Declarations: // -/* 80312488-80312508 30CDC8 0080+00 1/1 1/1 0/0 .text newDisplayList__17J3DDisplayListObjFUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DDisplayListObj::newDisplayList(u32 param_0) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DPacket/newDisplayList__17J3DDisplayListObjFUl.s" +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; } -#pragma pop -/* 80312508-8031256C 30CE48 0064+00 1/1 1/1 0/0 .text newSingleDisplayList__17J3DDisplayListObjFUl - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DDisplayListObj::newSingleDisplayList(u32 param_0) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DPacket/newSingleDisplayList__17J3DDisplayListObjFUl.s" +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; } -#pragma pop /* 8031256C-803125E4 30CEAC 0078+00 0/0 1/1 0/0 .text single_To_Double__17J3DDisplayListObjFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DDisplayListObj::single_To_Double() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DPacket/single_To_Double__17J3DDisplayListObjFv.s" +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; } -#pragma pop -/* 803125E4-80312604 30CF24 0020+00 0/0 1/1 0/0 .text - * setSingleDisplayList__17J3DDisplayListObjFPvUl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DDisplayListObj::setSingleDisplayList(void* param_0, u32 param_1) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DPacket/setSingleDisplayList__17J3DDisplayListObjFPvUl.s" +void J3DDisplayListObj::setSingleDisplayList(void* pDLData, u32 size) { + mCapacity = ALIGN_NEXT(size, 0x20); + mpData[0] = pDLData; + mpData[1] = mpData[0]; + mSize = size; } -#pragma pop -/* 80312604-80312618 30CF44 0014+00 1/1 0/0 0/0 .text swapBuffer__17J3DDisplayListObjFv - */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DDisplayListObj::swapBuffer() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DPacket/swapBuffer__17J3DDisplayListObjFv.s" +void J3DDisplayListObj::swapBuffer() { + void* pTmp = mpData[0]; + mpData[0] = mpData[1]; + mpData[1] = pTmp; } -#pragma pop -/* 80312618-80312644 30CF58 002C+00 3/3 4/4 1/1 .text callDL__17J3DDisplayListObjCFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DDisplayListObj::callDL() const { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DPacket/callDL__17J3DDisplayListObjCFv.s" +void J3DDisplayListObj::callDL() const { + GXCallDisplayList(mpData[0], mSize); } -#pragma pop /* ############################################################################################## */ /* 80434C70-80434C80 061990 0010+00 2/2 3/3 0/0 .bss sGDLObj__17J3DDisplayListObj */ @@ -277,15 +212,14 @@ bool J3DPacket::entry(J3DDrawBuffer* param_0) { return true; } -/* 80312758-80312778 30D098 0020+00 0/0 2/2 0/0 .text addChildPacket__9J3DPacketFP9J3DPacket */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DPacket::addChildPacket(J3DPacket* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DPacket/addChildPacket__9J3DPacketFP9J3DPacket.s" +void J3DPacket::addChildPacket(J3DPacket* pPacket) { + if (mpFirstChild == NULL) { + mpFirstChild = pPacket; + } else { + pPacket->mpNextSibling = mpFirstChild; + mpFirstChild = pPacket; + } } -#pragma pop /* ############################################################################################## */ /* 803CD900-803CD920 02AA20 0020+00 1/1 0/0 0/0 .data sDifferedRegister */ @@ -361,7 +295,7 @@ asm J3DDrawPacket::~J3DDrawPacket() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void J3DDrawPacket::newDisplayList(u32 param_0) { +asm J3DError J3DDrawPacket::newDisplayList(u32 param_0) { nofralloc #include "asm/JSystem/J3DGraphBase/J3DPacket/newDisplayList__13J3DDrawPacketFUl.s" } @@ -371,21 +305,15 @@ asm void J3DDrawPacket::newDisplayList(u32 param_0) { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void J3DDrawPacket::newSingleDisplayList(u32 param_0) { +asm J3DError J3DDrawPacket::newSingleDisplayList(u32 param_0) { nofralloc #include "asm/JSystem/J3DGraphBase/J3DPacket/newSingleDisplayList__13J3DDrawPacketFUl.s" } #pragma pop -/* 80312924-80312948 30D264 0024+00 1/0 0/0 0/0 .text draw__13J3DDrawPacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DDrawPacket::draw() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DPacket/draw__13J3DDrawPacketFv.s" +void J3DDrawPacket::draw() { + mpDisplayListObj->callDL(); } -#pragma pop /* 80312948-803129A4 30D288 005C+00 0/0 1/1 0/0 .text __ct__12J3DMatPacketFv */ #pragma push @@ -407,36 +335,22 @@ asm J3DMatPacket::~J3DMatPacket() { } #pragma pop -/* 80312A04-80312A24 30D344 0020+00 0/0 3/3 0/0 .text - * addShapePacket__12J3DMatPacketFP14J3DShapePacket */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DMatPacket::addShapePacket(J3DShapePacket* param_0) { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DPacket/addShapePacket__12J3DMatPacketFP14J3DShapePacket.s" +void J3DMatPacket::addShapePacket(J3DShapePacket* pShape) { + if (mpFirstShapePacket == NULL) { + mpFirstShapePacket = pShape; + } else { + pShape->mpNextSibling = mpFirstShapePacket; + mpFirstShapePacket = pShape; + } } -#pragma pop -/* 80312A24-80312A4C 30D364 0028+00 0/0 1/1 0/0 .text beginDiff__12J3DMatPacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DMatPacket::beginDiff() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DPacket/beginDiff__12J3DMatPacketFv.s" +void J3DMatPacket::beginDiff() { + mpShapePacket->mpDisplayListObj->beginDL(); } -#pragma pop -/* 80312A4C-80312A74 30D38C 0028+00 0/0 1/1 0/0 .text endDiff__12J3DMatPacketFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void J3DMatPacket::endDiff() { - nofralloc -#include "asm/JSystem/J3DGraphBase/J3DPacket/endDiff__12J3DMatPacketFv.s" +void J3DMatPacket::endDiff() { + mpShapePacket->mpDisplayListObj->endDL(); } -#pragma pop /* 80312A74-80312A9C 30D3B4 0028+00 0/0 1/1 0/0 .text isSame__12J3DMatPacketCFP12J3DMatPacket */ #pragma push @@ -539,7 +453,7 @@ void J3DPacket::draw() { #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void J3DMatPacket::entry(J3DDrawBuffer* param_0) { +asm bool J3DMatPacket::entry(J3DDrawBuffer* param_0) { nofralloc #include "asm/JSystem/J3DGraphBase/J3DPacket/entry__12J3DMatPacketFP13J3DDrawBuffer.s" } diff --git a/libs/JSystem/J3DGraphBase/Makefile b/libs/JSystem/J3DGraphBase/Makefile index 570ccabb27..ba29c56e49 100644 --- a/libs/JSystem/J3DGraphBase/Makefile +++ b/libs/JSystem/J3DGraphBase/Makefile @@ -50,6 +50,6 @@ $(BUILD_DIR)/libJ3DGraphBase.a: $(LIBJ3DGRAPHBASE_A_O_FILES) $(BUILD_DIR)/libs/JSystem/J3DGraphBase/%.o: libs/JSystem/J3DGraphBase/%.cpp @mkdir -p $(@D) @echo building... $< - @iconv -f UTF-8 -t SHIFT-JIS -o $@.iconv.cpp $< + @iconv -f UTF-8 -t CP932 < $< > $@.iconv.cpp @$(CC) $(CFLAGS) $(LIBJ3DGRAPHBASE_A_CFLAGS) -c -o $@ $@.iconv.cpp |
