From de41bfac45d2e4be7cba8942c408571d2ecbc0d1 Mon Sep 17 00:00:00 2001 From: aliaspider Date: Wed, 21 Oct 2015 03:14:35 +0100 Subject: (CTR/3DS) allocate GFX.Screen_buffer in linear memory. --- libretro.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'libretro.c') diff --git a/libretro.c b/libretro.c index 650150b..e0b7b53 100644 --- a/libretro.c +++ b/libretro.c @@ -20,6 +20,11 @@ #include +#ifdef _3DS +void* linearMemAlign(size_t size, size_t alignment); +void linearFree(void* mem); +#endif + static retro_log_printf_t log_cb = NULL; static retro_video_refresh_t video_cb = NULL; @@ -122,6 +127,8 @@ void S9xDeinitDisplay(void) { #ifdef DS2_DMA if (GFX.Screen_buffer) AlignedFree(GFX.Screen, PtrAdj.GFXScreen); +#elif defined(_3DS) + if (GFX.Screen_buffer) linearFree(GFX.Screen_buffer); #else if (GFX.Screen_buffer) free(GFX.Screen_buffer); #endif @@ -143,12 +150,15 @@ void S9xDeinitDisplay(void) void S9xInitDisplay(void) { int h = IMAGE_HEIGHT; - const int safety = 32; + int safety = 32; GFX.Pitch = IMAGE_WIDTH * 2; #ifdef DS2_DMA GFX.Screen_buffer = (unsigned char*) AlignedMalloc(GFX.Pitch * h + safety, 32, &PtrAdj.GFXScreen); +#elif defined(_3DS) + safety = 0x80; + GFX.Screen_buffer = (unsigned char*) linearMemAlign(GFX.Pitch * h + safety, 0x80); #else GFX.Screen_buffer = (unsigned char*) malloc(GFX.Pitch * h + safety); #endif -- cgit v1.2.3