summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2025-05-25 22:41:53 +0200
committerrobojumper <robojumper@gmail.com>2025-05-25 22:41:53 +0200
commit6272daffa4f0aaffebd8a28abc85d7201b4faca5 (patch)
tree400484367d6c8728418c8fd4be8d68c93d936942
parent7038a266f43549423c6627bdb5e9d1bfacf08560 (diff)
snd_FrameHeap OK
-rw-r--r--configure.py2
-rw-r--r--include/nw4r/snd/snd_FrameHeap.h17
-rw-r--r--src/nw4r/snd/snd_FrameHeap.cpp9
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() {