moved some stuff to MemoryMgr
This commit is contained in:
parent
b23bda6e45
commit
a8035b6466
@ -5,7 +5,7 @@
|
|||||||
#include "RpAnimBlend.h"
|
#include "RpAnimBlend.h"
|
||||||
#include "AnimManager.h"
|
#include "AnimManager.h"
|
||||||
#include "AnimBlendAssociation.h"
|
#include "AnimBlendAssociation.h"
|
||||||
#include "MemoryHeap.h"
|
#include "MemoryMgr.h"
|
||||||
|
|
||||||
CAnimBlendAssociation::CAnimBlendAssociation(void)
|
CAnimBlendAssociation::CAnimBlendAssociation(void)
|
||||||
{
|
{
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
#include "AnimBlendClumpData.h"
|
#include "AnimBlendClumpData.h"
|
||||||
#include "MemoryHeap.h"
|
#include "MemoryMgr.h"
|
||||||
|
|
||||||
|
|
||||||
CAnimBlendClumpData::CAnimBlendClumpData(void)
|
CAnimBlendClumpData::CAnimBlendClumpData(void)
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
#include "CdStream.h"
|
#include "CdStream.h"
|
||||||
#include "rwcore.h"
|
#include "rwcore.h"
|
||||||
#include "RwHelper.h"
|
#include "RwHelper.h"
|
||||||
#include "MemoryHeap.h"
|
#include "MemoryMgr.h"
|
||||||
|
|
||||||
#define CDDEBUG(f, ...) debug ("%s: " f "\n", "cdvd_stream", ## __VA_ARGS__)
|
#define CDDEBUG(f, ...) debug ("%s: " f "\n", "cdvd_stream", ## __VA_ARGS__)
|
||||||
#define CDTRACE(f, ...) printf("%s: " f "\n", "cdvd_stream", ## __VA_ARGS__)
|
#define CDTRACE(f, ...) printf("%s: " f "\n", "cdvd_stream", ## __VA_ARGS__)
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
#include "CdStream.h"
|
#include "CdStream.h"
|
||||||
#include "rwcore.h"
|
#include "rwcore.h"
|
||||||
#include "RwHelper.h"
|
#include "MemoryMgr.h"
|
||||||
|
|
||||||
#define CDDEBUG(f, ...) debug ("%s: " f "\n", "cdvd_stream", ## __VA_ARGS__)
|
#define CDDEBUG(f, ...) debug ("%s: " f "\n", "cdvd_stream", ## __VA_ARGS__)
|
||||||
#define CDTRACE(f, ...) printf("%s: " f "\n", "cdvd_stream", ## __VA_ARGS__)
|
#define CDTRACE(f, ...) printf("%s: " f "\n", "cdvd_stream", ## __VA_ARGS__)
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "Frontend.h"
|
#include "Frontend.h"
|
||||||
#include "Font.h"
|
#include "Font.h"
|
||||||
|
#include "MemoryMgr.h"
|
||||||
#include "MemoryHeap.h"
|
#include "MemoryHeap.h"
|
||||||
|
|
||||||
bool CStreaming::ms_disableStreaming;
|
bool CStreaming::ms_disableStreaming;
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include "RwHelper.h"
|
#include "RwHelper.h"
|
||||||
#include "Timer.h"
|
#include "Timer.h"
|
||||||
#include "Lights.h"
|
#include "Lights.h"
|
||||||
|
#include "MemoryMgr.h"
|
||||||
|
|
||||||
RpClump *gpPlayerClump;
|
RpClump *gpPlayerClump;
|
||||||
float gOldFov;
|
float gOldFov;
|
||||||
|
@ -494,129 +494,4 @@ CommonSize::Init(uint32 size)
|
|||||||
m_remaining = 0;
|
m_remaining = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void *pMemoryTop;
|
|
||||||
|
|
||||||
void
|
|
||||||
InitMemoryMgr(void)
|
|
||||||
{
|
|
||||||
#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
|
|
||||||
#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);
|
|
||||||
}
|
|
||||||
|
@ -62,18 +62,6 @@ enum {
|
|||||||
NUM_FIXED_MEMBLOCKS = 6
|
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>
|
template<typename T, uint32 N>
|
||||||
class CStack
|
class CStack
|
||||||
{
|
{
|
||||||
|
130
src/rw/MemoryMgr.cpp
Normal file
130
src/rw/MemoryMgr.cpp
Normal 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
12
src/rw/MemoryMgr.h
Normal 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);
|
@ -40,7 +40,7 @@
|
|||||||
#include "Sprite2d.h"
|
#include "Sprite2d.h"
|
||||||
#include "AnimViewer.h"
|
#include "AnimViewer.h"
|
||||||
#include "Font.h"
|
#include "Font.h"
|
||||||
#include "MemoryHeap.h"
|
#include "MemoryMgr.h"
|
||||||
|
|
||||||
#define MAX_SUBSYSTEMS (16)
|
#define MAX_SUBSYSTEMS (16)
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ static psGlobalType PsGlobal;
|
|||||||
#include "Sprite2d.h"
|
#include "Sprite2d.h"
|
||||||
#include "AnimViewer.h"
|
#include "AnimViewer.h"
|
||||||
#include "Font.h"
|
#include "Font.h"
|
||||||
#include "MemoryHeap.h"
|
#include "MemoryMgr.h"
|
||||||
|
|
||||||
VALIDATE_SIZE(psGlobalType, 0x28);
|
VALIDATE_SIZE(psGlobalType, 0x28);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user