moved some stuff to MemoryMgr

This commit is contained in:
aap 2020-11-28 16:16:15 +01:00
parent b23bda6e45
commit a8035b6466
12 changed files with 150 additions and 143 deletions

View file

@ -5,7 +5,7 @@
#include "RpAnimBlend.h"
#include "AnimManager.h"
#include "AnimBlendAssociation.h"
#include "MemoryHeap.h"
#include "MemoryMgr.h"
CAnimBlendAssociation::CAnimBlendAssociation(void)
{

View file

@ -1,7 +1,7 @@
#include "common.h"
#include "AnimBlendClumpData.h"
#include "MemoryHeap.h"
#include "MemoryMgr.h"
CAnimBlendClumpData::CAnimBlendClumpData(void)

View file

@ -5,7 +5,7 @@
#include "CdStream.h"
#include "rwcore.h"
#include "RwHelper.h"
#include "MemoryHeap.h"
#include "MemoryMgr.h"
#define CDDEBUG(f, ...) debug ("%s: " f "\n", "cdvd_stream", ## __VA_ARGS__)
#define CDTRACE(f, ...) printf("%s: " f "\n", "cdvd_stream", ## __VA_ARGS__)

View file

@ -16,7 +16,7 @@
#include "CdStream.h"
#include "rwcore.h"
#include "RwHelper.h"
#include "MemoryMgr.h"
#define CDDEBUG(f, ...) debug ("%s: " f "\n", "cdvd_stream", ## __VA_ARGS__)
#define CDTRACE(f, ...) printf("%s: " f "\n", "cdvd_stream", ## __VA_ARGS__)

View file

@ -34,6 +34,7 @@
#include "main.h"
#include "Frontend.h"
#include "Font.h"
#include "MemoryMgr.h"
#include "MemoryHeap.h"
bool CStreaming::ms_disableStreaming;

View file

@ -14,6 +14,7 @@
#include "RwHelper.h"
#include "Timer.h"
#include "Lights.h"
#include "MemoryMgr.h"
RpClump *gpPlayerClump;
float gOldFov;

View file

@ -494,129 +494,4 @@ CommonSize::Init(uint32 size)
m_remaining = 0;
}
void *pMemoryTop;
void
InitMemoryMgr(void)
{
#ifdef GTA_PS2
#error "finish this"
#else
// randomly allocate 128mb
gMainHeap.Init(128*1024*1024);
#endif
}
RwMemoryFunctions memFuncs = {
MemoryMgrMalloc,
MemoryMgrFree,
MemoryMgrRealloc,
MemoryMgrCalloc
};
#ifdef USE_CUSTOM_ALLOCATOR
// game seems to be using heap directly here, but this is nicer
void *operator new(size_t sz) { return MemoryMgrMalloc(sz); }
void *operator new[](size_t sz) { return MemoryMgrMalloc(sz); }
void operator delete(void *ptr) noexcept { MemoryMgrFree(ptr); }
void operator delete[](void *ptr) noexcept { MemoryMgrFree(ptr); }
#endif
#endif
void*
MemoryMgrMalloc(uint32 size)
{
#ifdef USE_CUSTOM_ALLOCATOR
void *mem = gMainHeap.Malloc(size);
#else
void *mem = malloc(size);
#endif
if(mem > pMemoryTop)
pMemoryTop = mem;
return mem;
}
void*
MemoryMgrRealloc(void *ptr, uint32 size)
{
#ifdef USE_CUSTOM_ALLOCATOR
void *mem = gMainHeap.Realloc(ptr, size);
#else
void *mem = realloc(ptr, size);
#endif
if(mem > pMemoryTop)
pMemoryTop = mem;
return mem;
}
void*
MemoryMgrCalloc(uint32 num, uint32 size)
{
#ifdef USE_CUSTOM_ALLOCATOR
void *mem = gMainHeap.Malloc(num*size);
#else
void *mem = calloc(num, size);
#endif
if(mem > pMemoryTop)
pMemoryTop = mem;
#ifdef FIX_BUGS
memset(mem, 0, num*size);
#endif
return mem;
}
void
MemoryMgrFree(void *ptr)
{
#ifdef USE_CUSTOM_ALLOCATOR
#ifdef FIX_BUGS
// i don't suppose this is handled by RW?
if(ptr == nil) return;
#endif
gMainHeap.Free(ptr);
#else
free(ptr);
#endif
}
void *
RwMallocAlign(RwUInt32 size, RwUInt32 align)
{
#ifdef FIX_BUGS
uintptr ptralign = align-1;
void *mem = (void *)MemoryMgrMalloc(size + sizeof(uintptr) + ptralign);
ASSERT(mem != nil);
void *addr = (void *)((((uintptr)mem) + sizeof(uintptr) + ptralign) & ~ptralign);
ASSERT(addr != nil);
#else
void *mem = (void *)MemoryMgrMalloc(size + align);
ASSERT(mem != nil);
void *addr = (void *)((((uintptr)mem) + align) & ~(align - 1));
ASSERT(addr != nil);
#endif
*(((void **)addr) - 1) = mem;
return addr;
}
void
RwFreeAlign(void *mem)
{
ASSERT(mem != nil);
void *addr = *(((void **)mem) - 1);
ASSERT(addr != nil);
MemoryMgrFree(addr);
}

View file

@ -62,18 +62,6 @@ enum {
NUM_FIXED_MEMBLOCKS = 6
};
extern RwMemoryFunctions memFuncs;
void InitMemoryMgr(void);
void *MemoryMgrMalloc(uint32 size);
void *MemoryMgrRealloc(void *ptr, uint32 size);
void *MemoryMgrCalloc(uint32 num, uint32 size);
void MemoryMgrFree(void *ptr);
void *RwMallocAlign(RwUInt32 size, RwUInt32 align);
void RwFreeAlign(void *mem);
template<typename T, uint32 N>
class CStack
{

130
src/rw/MemoryMgr.cpp Normal file
View file

@ -0,0 +1,130 @@
#include "common.h"
#include "MemoryHeap.h"
#include "MemoryMgr.h"
void *pMemoryTop;
void
InitMemoryMgr(void)
{
#ifdef USE_CUSTOM_ALLOCATOR
#ifdef GTA_PS2
#error "finish this"
#else
// randomly allocate 128mb
gMainHeap.Init(128*1024*1024);
#endif
#endif
}
RwMemoryFunctions memFuncs = {
MemoryMgrMalloc,
MemoryMgrFree,
MemoryMgrRealloc,
MemoryMgrCalloc
};
#ifdef USE_CUSTOM_ALLOCATOR
// game seems to be using heap directly here, but this is nicer
void *operator new(size_t sz) { return MemoryMgrMalloc(sz); }
void *operator new[](size_t sz) { return MemoryMgrMalloc(sz); }
void operator delete(void *ptr) noexcept { MemoryMgrFree(ptr); }
void operator delete[](void *ptr) noexcept { MemoryMgrFree(ptr); }
#endif
void*
MemoryMgrMalloc(size_t size)
{
#ifdef USE_CUSTOM_ALLOCATOR
void *mem = gMainHeap.Malloc(size);
#else
void *mem = malloc(size);
#endif
if(mem > pMemoryTop)
pMemoryTop = mem;
return mem;
}
void*
MemoryMgrRealloc(void *ptr, size_t size)
{
#ifdef USE_CUSTOM_ALLOCATOR
void *mem = gMainHeap.Realloc(ptr, size);
#else
void *mem = realloc(ptr, size);
#endif
if(mem > pMemoryTop)
pMemoryTop = mem;
return mem;
}
void*
MemoryMgrCalloc(size_t num, size_t size)
{
#ifdef USE_CUSTOM_ALLOCATOR
void *mem = gMainHeap.Malloc(num*size);
#else
void *mem = calloc(num, size);
#endif
if(mem > pMemoryTop)
pMemoryTop = mem;
#ifdef FIX_BUGS
memset(mem, 0, num*size);
#endif
return mem;
}
void
MemoryMgrFree(void *ptr)
{
#ifdef USE_CUSTOM_ALLOCATOR
#ifdef FIX_BUGS
// i don't suppose this is handled by RW?
if(ptr == nil) return;
#endif
gMainHeap.Free(ptr);
#else
free(ptr);
#endif
}
void *
RwMallocAlign(RwUInt32 size, RwUInt32 align)
{
#ifdef FIX_BUGS
uintptr ptralign = align-1;
void *mem = (void *)MemoryMgrMalloc(size + sizeof(uintptr) + ptralign);
ASSERT(mem != nil);
void *addr = (void *)((((uintptr)mem) + sizeof(uintptr) + ptralign) & ~ptralign);
ASSERT(addr != nil);
#else
void *mem = (void *)MemoryMgrMalloc(size + align);
ASSERT(mem != nil);
void *addr = (void *)((((uintptr)mem) + align) & ~(align - 1));
ASSERT(addr != nil);
#endif
*(((void **)addr) - 1) = mem;
return addr;
}
void
RwFreeAlign(void *mem)
{
ASSERT(mem != nil);
void *addr = *(((void **)mem) - 1);
ASSERT(addr != nil);
MemoryMgrFree(addr);
}

12
src/rw/MemoryMgr.h Normal file
View file

@ -0,0 +1,12 @@
#pragma once
extern RwMemoryFunctions memFuncs;
void InitMemoryMgr(void);
void *MemoryMgrMalloc(size_t size);
void *MemoryMgrRealloc(void *ptr, size_t size);
void *MemoryMgrCalloc(size_t num, size_t size);
void MemoryMgrFree(void *ptr);
void *RwMallocAlign(RwUInt32 size, RwUInt32 align);
void RwFreeAlign(void *mem);

View file

@ -40,7 +40,7 @@
#include "Sprite2d.h"
#include "AnimViewer.h"
#include "Font.h"
#include "MemoryHeap.h"
#include "MemoryMgr.h"
#define MAX_SUBSYSTEMS (16)

View file

@ -97,7 +97,7 @@ static psGlobalType PsGlobal;
#include "Sprite2d.h"
#include "AnimViewer.h"
#include "Font.h"
#include "MemoryHeap.h"
#include "MemoryMgr.h"
VALIDATE_SIZE(psGlobalType, 0x28);