From 3a2c2b4e1640371b8005af3dfb35bd907213301e Mon Sep 17 00:00:00 2001 From: auguste120 Date: Wed, 1 Apr 2026 18:14:56 +0200 Subject: [PATCH] Implements gsys::MemBuffer --- data/uking_functions.csv | 12 +++++----- lib/gsys/CMakeLists.txt | 2 ++ lib/gsys/include/gsys/gsysMemBuffer.h | 23 +++++++++++++++++++ lib/gsys/src/gsys/gsysMemBuffer.cpp | 32 +++++++++++++++++++++++++++ 4 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 lib/gsys/include/gsys/gsysMemBuffer.h create mode 100644 lib/gsys/src/gsys/gsysMemBuffer.cpp diff --git a/data/uking_functions.csv b/data/uking_functions.csv index ca006143..bfd0fad2 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -70514,12 +70514,12 @@ Address,Quality,Size,Name 0x0000007100c7cd74,U,000140, 0x0000007100c7ce00,U,000176, 0x0000007100c7ceb0,U,000052,_ZN4gsys12MemAllocator8tryAllocEmj -0x0000007100c7cee4,U,000024,_ZN4gsys9MemBufferC2Ev -0x0000007100c7cefc,U,000004,nullsub_3622 -0x0000007100c7cf00,U,000004,j__ZdlPv_832 -0x0000007100c7cf04,U,000104,_ZN4gsys9MemBuffer8tryAllocEPN4sead4HeapEmj -0x0000007100c7cf6c,U,000016,_ZN4gsys9MemBuffer4freeEv -0x0000007100c7cf7c,U,000052,_ZN4gsys9MemBuffer5allocEmj +0x0000007100c7cee4,O,000024,_ZN4gsys9MemBufferC2Ev +0x0000007100c7cefc,O,000004,_ZN4gsys9MemBufferD1Ev +0x0000007100c7cf00,O,000004,_ZN4gsys9MemBufferD0Ev +0x0000007100c7cf04,O,000104,_ZN4gsys9MemBuffer8tryAllocEPN4sead4HeapEmj +0x0000007100c7cf6c,O,000016,_ZN4gsys9MemBuffer4freeEv +0x0000007100c7cf7c,O,000052,_ZN4gsys9MemBuffer5allocEmj 0x0000007100c7cfb0,U,000060,_ZN4gsys23ModelAnimationDebugInfoD2Ev 0x0000007100c7cfec,U,000244, 0x0000007100c7d0e0,U,000060,_ZN4gsys21ModelAssignRenderInfoC2Ev diff --git a/lib/gsys/CMakeLists.txt b/lib/gsys/CMakeLists.txt index bec73906..13947de7 100644 --- a/lib/gsys/CMakeLists.txt +++ b/lib/gsys/CMakeLists.txt @@ -4,6 +4,7 @@ add_library(gsys OBJECT include/gsys/gsysMaskedProjLight.h include/gsys/gsysMaskedProjLight.h include/gsys/gsysMaskedSpotLight.h + include/gsys/gsysMemBuffer.h include/gsys/gsysModel.h include/gsys/gsysModelAccessKey.h include/gsys/gsysModelNW.h @@ -16,6 +17,7 @@ add_library(gsys OBJECT include/gsys/gsysPointLight.h include/gsys/gsysSpotLight.h + src/gsys/gsysMemBuffer.cpp src/gsys/gsysModelAccessKey.cpp src/gsys/gsysModelSceneConfig.cpp src/gsys/gsysParticleConfig.cpp diff --git a/lib/gsys/include/gsys/gsysMemBuffer.h b/lib/gsys/include/gsys/gsysMemBuffer.h new file mode 100644 index 00000000..1dcec12d --- /dev/null +++ b/lib/gsys/include/gsys/gsysMemBuffer.h @@ -0,0 +1,23 @@ +#pragma once + +#include +#include + +namespace gsys { + +class MemBuffer { +public: + MemBuffer(); + virtual ~MemBuffer(); + + void* alloc(size_t size, u32 align); + void tryAlloc(sead::Heap* heap, size_t size, u32 align); + void free(); + +private: + void* mBuffer = nullptr; + uintptr_t mOffset = 0; + size_t mSize = 0; +}; + +} // namespace gsys \ No newline at end of file diff --git a/lib/gsys/src/gsys/gsysMemBuffer.cpp b/lib/gsys/src/gsys/gsysMemBuffer.cpp new file mode 100644 index 00000000..0ac332e0 --- /dev/null +++ b/lib/gsys/src/gsys/gsysMemBuffer.cpp @@ -0,0 +1,32 @@ +#include "gsys/gsysMemBuffer.h" + +#include +#include +#include + +namespace gsys { + +MemBuffer::MemBuffer() = default; +MemBuffer::~MemBuffer() = default; + +void MemBuffer::tryAlloc(sead::Heap* heap, size_t size, u32 align) { + if (!heap) + heap = sead::HeapMgr::sInstancePtr->getCurrentHeap(); + void* buffer = heap->tryAlloc(size, static_cast(align)); + mSize = size; + mOffset = 0; + mBuffer = buffer; +} + +void* MemBuffer::alloc(size_t size, u32 align) { + uintptr_t current = mOffset + reinterpret_cast(mBuffer); + uintptr_t aligned = sead::MathSizeT::roundUp(current, align); + mOffset += aligned - current + size; + return reinterpret_cast(aligned); +} + +void MemBuffer::free() { + delete static_cast(mBuffer); +} + +} // namespace gsys \ No newline at end of file