summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraliaspider2015-04-13 02:43:42 +0100
committeraliaspider2015-04-13 02:43:42 +0100
commit69b5bfc05e5736bab2e8f78e4904f9028f0ab414 (patch)
tree2d953ffa43fd54a1660d3ce7addc91342f638deb
parent5b6683bb939d5930e5cd69a5b49aa03523ce3ea3 (diff)
downloadpicogpsp-69b5bfc05e5736bab2e8f78e4904f9028f0ab414.tar.gz
picogpsp-69b5bfc05e5736bab2e8f78e4904f9028f0ab414.tar.bz2
picogpsp-69b5bfc05e5736bab2e8f78e4904f9028f0ab414.zip
allocate gba_screen_pixels on the heap.
use linearMemAlign for the 3DS target.
-rw-r--r--libretro.c17
-rw-r--r--video.c2
-rw-r--r--video.h2
3 files changed, 18 insertions, 3 deletions
diff --git a/libretro.c b/libretro.c
index c2820da..bd3ade8 100644
--- a/libretro.c
+++ b/libretro.c
@@ -8,13 +8,17 @@
#include "libretro.h"
#include "memmap.h"
-#if defined(_3DS) && defined(HAVE_DYNAREC)
+#if defined(_3DS)
+void* linearMemAlign(size_t size, size_t alignment);
+void linearFree(void* mem);
+#if defined(HAVE_DYNAREC)
int32_t hbInit(void);
void hbExit(void);
int32_t HB_FlushInvalidateCache(void);
int32_t HB_ReprotectMemory(void* addr, uint32_t pages, uint32_t mode, uint32_t* reprotectedPages);
int hb_service_available;
#endif
+#endif
#ifndef MAX_PATH
#define MAX_PATH (512)
@@ -126,6 +130,12 @@ void retro_init(void)
}
#endif
+#ifdef _3DS
+ gba_screen_pixels = (uint16_t*)linearMemAlign(GBA_SCREEN_PITCH * GBA_SCREEN_HEIGHT * sizeof(uint16_t), 128);
+#else
+ gba_screen_pixels = (uint16_t*)malloc(GBA_SCREEN_PITCH * GBA_SCREEN_HEIGHT * sizeof(uint16_t));
+#endif
+
}
void retro_deinit(void)
@@ -141,6 +151,11 @@ void retro_deinit(void)
#if defined(_3DS) && defined(HAVE_DYNAREC)
hbExit();
#endif
+#ifdef _3DS
+ linearFree(gba_screen_pixels);
+#else
+ free(gba_screen_pixels);
+#endif
}
static retro_time_t retro_perf_dummy_get_time_usec() { return 0; }
diff --git a/video.c b/video.c
index 45ebe1e..14708fd 100644
--- a/video.c
+++ b/video.c
@@ -19,7 +19,7 @@
#include "common.h"
-u16 gba_screen_pixels[GBA_SCREEN_PITCH * GBA_SCREEN_HEIGHT];
+u16* gba_screen_pixels;
#define get_screen_pixels() gba_screen_pixels
#define get_screen_pitch() GBA_SCREEN_PITCH
diff --git a/video.h b/video.h
index df95fcd..0f21d19 100644
--- a/video.h
+++ b/video.h
@@ -54,6 +54,6 @@ typedef enum
filter_bilinear
} video_filter_type;
-extern u16 gba_screen_pixels[GBA_SCREEN_PITCH * GBA_SCREEN_HEIGHT];
+extern u16* gba_screen_pixels;
#endif