From 6272daffa4f0aaffebd8a28abc85d7201b4faca5 Mon Sep 17 00:00:00 2001 From: robojumper Date: Sun, 25 May 2025 22:41:53 +0200 Subject: [PATCH] snd_FrameHeap OK --- configure.py | 2 +- include/nw4r/snd/snd_FrameHeap.h | 17 +++++++---------- src/nw4r/snd/snd_FrameHeap.cpp | 9 +++++---- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/configure.py b/configure.py index e4c39068..c0e8045f 100644 --- a/configure.py +++ b/configure.py @@ -1028,7 +1028,7 @@ config.libs = [ Object(Matching, "nw4r/snd/snd_DvdSoundArchive.cpp"), Object(Matching, "nw4r/snd/snd_EnvGenerator.cpp"), Object(NonMatching, "nw4r/snd/snd_ExternalSoundPlayer.cpp"), - Object(NonMatching, "nw4r/snd/snd_FrameHeap.cpp"), + Object(Matching, "nw4r/snd/snd_FrameHeap.cpp"), Object(NonMatching, "nw4r/snd/snd_FxBase.cpp"), Object(NonMatching, "nw4r/snd/snd_FxChorus.cpp"), Object(NonMatching, "nw4r/snd/snd_FxDelay.cpp"), diff --git a/include/nw4r/snd/snd_FrameHeap.h b/include/nw4r/snd/snd_FrameHeap.h index 3fe9d628..86b4b3ed 100644 --- a/include/nw4r/snd/snd_FrameHeap.h +++ b/include/nw4r/snd/snd_FrameHeap.h @@ -34,22 +34,19 @@ public: private: struct Block { NW4R_UT_LIST_NODE_DECL(); // at 0x0 - u32 mSize; // at 0x8 - FreeCallback mCallback; // at 0xc - void *mCallbackArg; // at 0x10 + void *mpBuffer; // at 0x8 + u32 mSize; // at 0xC + FreeCallback mCallback; // at 0x10 + void *mCallbackArg; // at 0x14 - Block(u32 size, FreeCallback pCallback, void *pCallbackArg) - : mSize(size), mCallback(pCallback), mCallbackArg(pCallbackArg) {} + Block(void *pBuffer2, u32 size, FreeCallback pCallback, void *pCallbackArg) + : mSize(size), mCallback(pCallback), mCallbackArg(pCallbackArg), mpBuffer(pBuffer2) {} ~Block() { if (mCallback != NULL) { - mCallback(GetBufferAddr(), mSize, mCallbackArg); + mCallback(mpBuffer, mSize, mCallbackArg); } } - - void *GetBufferAddr() { - return ut::AddOffsetToPtr(this, BLOCK_BUFFER_SIZE); - } }; NW4R_UT_LIST_TYPEDEF_DECL(Block); diff --git a/src/nw4r/snd/snd_FrameHeap.cpp b/src/nw4r/snd/snd_FrameHeap.cpp index 5c67fdad..31202906 100644 --- a/src/nw4r/snd/snd_FrameHeap.cpp +++ b/src/nw4r/snd/snd_FrameHeap.cpp @@ -63,10 +63,11 @@ void* FrameHeap::Alloc(u32 size, FreeCallback pCallback, void* pCallbackArg) { return NULL; } - Block* pBlock = new (pBuffer) Block(size, pCallback, pCallbackArg); + void *pBuffer2 = ut::AddOffsetToPtr(pBuffer, BLOCK_BUFFER_SIZE); + Block* pBlock = new (pBuffer) Block(pBuffer2, size, pCallback, pCallbackArg); mSectionList.GetBack().AppendBlock(pBlock); - return pBlock->GetBufferAddr(); + return pBuffer2; } int FrameHeap::SaveState() { @@ -106,11 +107,11 @@ int FrameHeap::GetCurrentLevel() const { u32 FrameHeap::GetFreeSize() const { u32 freeSize = MEMGetAllocatableSizeForFrmHeapEx(mHandle, HEAP_ALIGN); - if (freeSize < BLOCK_BUFFER_SIZE) { + if (freeSize < sizeof(Block)) { return 0; } - return ut::RoundDown(freeSize - BLOCK_BUFFER_SIZE, HEAP_ALIGN); + return ut::RoundDown(freeSize - sizeof(Block), HEAP_ALIGN); } bool FrameHeap::NewSection() {