snd_FrameHeap OK

This commit is contained in:
robojumper
2025-05-25 22:41:53 +02:00
parent 7038a266f4
commit 6272daffa4
3 changed files with 13 additions and 15 deletions
+1 -1
View File
@@ -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"),
+7 -10
View File
@@ -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);
+5 -4
View File
@@ -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() {