Use allocAligned/freeAligned for all aligned allocs
This commit is contained in:
parent
f9d5b8eb74
commit
85c21df5e7
|
@ -3,9 +3,7 @@
|
|||
#include "hw/pvr/pvr_mem.h"
|
||||
#include "hw/sh4/dyna/blockmanager.h"
|
||||
#include "hw/sh4/sh4_mem.h"
|
||||
#if defined(__SWITCH__)
|
||||
#include <malloc.h>
|
||||
#endif
|
||||
#include "oslib/oslib.h"
|
||||
|
||||
#define HANDLER_MAX 0x1F
|
||||
#define HANDLER_COUNT (HANDLER_MAX+1)
|
||||
|
@ -360,20 +358,14 @@ u8* virt_ram_base;
|
|||
bool vmem_4gb_space;
|
||||
static VMemType vmemstatus = MemTypeError;
|
||||
|
||||
static void* malloc_pages(size_t size) {
|
||||
#ifdef _WIN32
|
||||
return _aligned_malloc(size, PAGE_SIZE);
|
||||
#elif defined(_ISOC11_SOURCE)
|
||||
return aligned_alloc(PAGE_SIZE, size);
|
||||
#elif defined(__SWITCH__)
|
||||
return memalign(PAGE_SIZE, size);
|
||||
#else
|
||||
void *data;
|
||||
if (posix_memalign(&data, PAGE_SIZE, size) != 0)
|
||||
return NULL;
|
||||
else
|
||||
return data;
|
||||
#endif
|
||||
static void *malloc_pages(size_t size)
|
||||
{
|
||||
return allocAligned(PAGE_SIZE, size);
|
||||
}
|
||||
|
||||
static void free_pages(void *p)
|
||||
{
|
||||
freeAligned(p);
|
||||
}
|
||||
|
||||
#if FEAT_SHREC != DYNAREC_NONE
|
||||
|
@ -449,27 +441,16 @@ bool _vmem_reserve()
|
|||
|
||||
static void _vmem_term_mappings()
|
||||
{
|
||||
if (vmemstatus == MemTypeError) {
|
||||
if (p_sh4rcb != NULL)
|
||||
{
|
||||
free(p_sh4rcb);
|
||||
p_sh4rcb = NULL;
|
||||
}
|
||||
if (mem_b.data != NULL)
|
||||
{
|
||||
free(mem_b.data);
|
||||
mem_b.data = NULL;
|
||||
}
|
||||
if (vram.data != NULL)
|
||||
{
|
||||
free(vram.data);
|
||||
vram.data = NULL;
|
||||
}
|
||||
if (aica_ram.data != NULL)
|
||||
{
|
||||
free(aica_ram.data);
|
||||
aica_ram.data = NULL;
|
||||
}
|
||||
if (vmemstatus == MemTypeError)
|
||||
{
|
||||
free_pages(p_sh4rcb);
|
||||
p_sh4rcb = nullptr;
|
||||
free_pages(mem_b.data);
|
||||
mem_b.data = nullptr;
|
||||
free_pages(vram.data);
|
||||
vram.data = nullptr;
|
||||
free_pages(aica_ram.data);
|
||||
aica_ram.data = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -593,9 +574,6 @@ void _vmem_init_mappings()
|
|||
ARAM_SIZE / 1024 / 1024, aica_ram.data);
|
||||
}
|
||||
|
||||
#define freedefptr(x) \
|
||||
if (x) { free(x); x = NULL; }
|
||||
|
||||
void _vmem_release()
|
||||
{
|
||||
if (virt_ram_base)
|
||||
|
@ -606,10 +584,7 @@ void _vmem_release()
|
|||
else
|
||||
{
|
||||
_vmem_unprotect_vram(0, VRAM_SIZE);
|
||||
freedefptr(p_sh4rcb);
|
||||
freedefptr(vram.data);
|
||||
freedefptr(aica_ram.data);
|
||||
freedefptr(mem_b.data);
|
||||
_vmem_term_mappings();
|
||||
}
|
||||
vmemstatus = MemTypeError;
|
||||
}
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
#include "ta_ctx.h"
|
||||
#include "spg.h"
|
||||
#include "cfg/option.h"
|
||||
#if defined(__SWITCH__)
|
||||
#include <malloc.h>
|
||||
#endif
|
||||
#include "Renderer_if.h"
|
||||
|
||||
extern u32 fskip;
|
||||
|
@ -16,37 +13,6 @@ tad_context ta_tad;
|
|||
TA_context* vd_ctx;
|
||||
rend_context vd_rc;
|
||||
|
||||
// helper for 32 byte aligned memory allocation
|
||||
void* OS_aligned_malloc(size_t align, size_t size)
|
||||
{
|
||||
#ifdef __MINGW32__
|
||||
return __mingw_aligned_malloc(size, align);
|
||||
#elif defined(_WIN32)
|
||||
return _aligned_malloc(size, align);
|
||||
#elif defined(__SWITCH__)
|
||||
return memalign(align, size);
|
||||
#else
|
||||
void *result;
|
||||
if (posix_memalign(&result, align, size))
|
||||
return NULL;
|
||||
else
|
||||
return result;
|
||||
#endif
|
||||
}
|
||||
|
||||
// helper for 32 byte aligned memory de-allocation
|
||||
void OS_aligned_free(void *ptr)
|
||||
{
|
||||
#ifdef __MINGW32__
|
||||
__mingw_aligned_free(ptr);
|
||||
#elif defined(_WIN32)
|
||||
_aligned_free(ptr);
|
||||
#else
|
||||
free(ptr);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void SetCurrentTARC(u32 addr)
|
||||
{
|
||||
if (addr != TACTX_NONE)
|
||||
|
|
|
@ -4,15 +4,10 @@
|
|||
#include "pvr_regs.h"
|
||||
#include "helper_classes.h"
|
||||
#include "stdclass.h"
|
||||
#include "oslib/oslib.h"
|
||||
|
||||
#include <mutex>
|
||||
|
||||
// helper for 32 byte aligned memory allocation
|
||||
void* OS_aligned_malloc(size_t align, size_t size);
|
||||
|
||||
// helper for 32 byte aligned memory de-allocation
|
||||
void OS_aligned_free(void *ptr);
|
||||
|
||||
class BaseTextureCacheData;
|
||||
|
||||
//Vertex storage types
|
||||
|
@ -208,7 +203,7 @@ struct TA_context
|
|||
|
||||
void Alloc()
|
||||
{
|
||||
tad.Reset((u8*)OS_aligned_malloc(32, TA_DATA_SIZE));
|
||||
tad.Reset((u8*)allocAligned(32, TA_DATA_SIZE));
|
||||
|
||||
rend.verts.InitBytes(4 * 1024 * 1024, &rend.Overrun, "verts"); //up to 4 mb of vtx data/frame = ~ 96k vtx/frame
|
||||
rend.idx.Init(120 * 1024, &rend.Overrun, "idx"); //up to 120K indexes ( idx have stripification overhead )
|
||||
|
@ -238,7 +233,7 @@ struct TA_context
|
|||
void Free()
|
||||
{
|
||||
verify(tad.End() - tad.thd_root <= TA_DATA_SIZE);
|
||||
OS_aligned_free(tad.thd_root);
|
||||
freeAligned(tad.thd_root);
|
||||
rend.verts.Free();
|
||||
rend.idx.Free();
|
||||
rend.global_param_op.Free();
|
||||
|
|
|
@ -19,6 +19,9 @@
|
|||
#include "oslib.h"
|
||||
#include "stdclass.h"
|
||||
#include "cfg/cfg.h"
|
||||
#if defined(__SWITCH__)
|
||||
#include <malloc.h>
|
||||
#endif
|
||||
|
||||
namespace hostfs
|
||||
{
|
||||
|
@ -127,3 +130,28 @@ std::string getBiosFontPath()
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
void *allocAligned(size_t alignment, size_t size)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
return _aligned_malloc(size, alignment);
|
||||
#elif defined(__SWITCH__)
|
||||
return memalign(alignment, size);
|
||||
#else
|
||||
void *data;
|
||||
if (posix_memalign(&data, alignment, size) != 0)
|
||||
return nullptr;
|
||||
else
|
||||
return data;
|
||||
#endif
|
||||
}
|
||||
|
||||
void freeAligned(void *p)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
_aligned_free(p);
|
||||
#else
|
||||
free(p);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -9,6 +9,9 @@ void os_CreateWindow();
|
|||
void os_SetupInput();
|
||||
void os_InstallFaultHandler();
|
||||
void os_UninstallFaultHandler();
|
||||
void *allocAligned(size_t alignment, size_t size);
|
||||
void freeAligned(void *p);
|
||||
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#include <intrin.h>
|
||||
|
|
Loading…
Reference in New Issue