diff options
author | twinaphex | 2013-05-24 00:08:10 +0200 |
---|---|---|
committer | twinaphex | 2013-05-24 00:08:10 +0200 |
commit | 6b5beb44bae19400acddc052b3e475e638f3d50c (patch) | |
tree | 4dde2113779c80210ff6e516d313d13cf69a6d9c | |
parent | 5cdb2a3c8c6d53dd47257101d577f1fb43c2f459 (diff) | |
download | pcsx_rearmed-6b5beb44bae19400acddc052b3e475e638f3d50c.tar.gz pcsx_rearmed-6b5beb44bae19400acddc052b3e475e638f3d50c.tar.bz2 pcsx_rearmed-6b5beb44bae19400acddc052b3e475e638f3d50c.zip |
(NEON ARM) Add NEON ARM core option (Enhanced resolution - slow)
-rw-r--r-- | frontend/libretro.c | 41 | ||||
-rwxr-xr-x | frontend/libretro.h | 9 |
2 files changed, 48 insertions, 2 deletions
diff --git a/frontend/libretro.c b/frontend/libretro.c index 7a7c2ef..8fb58b7 100644 --- a/frontend/libretro.c +++ b/frontend/libretro.c @@ -230,7 +230,22 @@ void out_register_libretro(struct out_driver *drv) } /* libretro */ -void retro_set_environment(retro_environment_t cb) { environ_cb = cb; } +void retro_set_environment(retro_environment_t cb) +{ +#ifdef __ARM_NEON__ + static const struct retro_variable vars[] = { + { "neon_enhancement_enable", "Enhanced resolution (slow); disabled|enabled" }, + { NULL, NULL }, + }; + + environ_cb = cb; + + cb(RETRO_ENVIRONMENT_SET_VARIABLES, (void*)vars); +#else + environ_cb = cb; +#endif +} + void retro_set_video_refresh(retro_video_refresh_t cb) { video_cb = cb; } void retro_set_audio_sample(retro_audio_sample_t cb) { (void)cb; } void retro_set_audio_sample_batch(retro_audio_sample_batch_t cb) { audio_batch_cb = cb; } @@ -710,11 +725,33 @@ static const unsigned short retro_psx_map[] = { }; #define RETRO_PSX_MAP_LEN (sizeof(retro_psx_map) / sizeof(retro_psx_map[0])) +static void update_variables(void) +{ +#ifdef __ARM_NEON__ + struct retro_variable var; + var.value = NULL; + var.key = "neon_enhancement_enable"; + + if (!environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || !var.value) + return; + + if (strcmp(var.value, "disabled") == 0) + pl_rearmed_cbs.gpu_neon.enhancement_enable = 0; + else if (strcmp(var.value, "enabled") == 0) + pl_rearmed_cbs.gpu_neon.enhancement_enable = 1; +#endif +} + void retro_run(void) { int i; input_poll_cb(); + + bool updated = false; + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE, &updated) && updated) + update_variables(); + in_keystate = 0; for (i = 0; i < RETRO_PSX_MAP_LEN; i++) if (input_state_cb(1, RETRO_DEVICE_JOYPAD, 0, i)) @@ -795,6 +832,8 @@ void retro_init(void) SaveFuncs.write = save_write; SaveFuncs.seek = save_seek; SaveFuncs.close = save_close; + + update_variables(); } void retro_deinit(void) diff --git a/frontend/libretro.h b/frontend/libretro.h index b02855a..dc5b52b 100755 --- a/frontend/libretro.h +++ b/frontend/libretro.h @@ -452,6 +452,13 @@ enum retro_mod // Result is set to true if some variables are updated by // frontend since last call to RETRO_ENVIRONMENT_GET_VARIABLE. // Variables should be queried with GET_VARIABLE. + // +#define RETRO_ENVIRONMENT_SET_SUPPORT_NO_GAME 18 + // const bool * -- + // If true, the libretro implementation supports calls to retro_load_game() with NULL as argument. + // Used by cores which can run without particular game data. + // This should be called within retro_set_environment() only. + // Pass this to retro_video_refresh_t if rendering to hardware. // Passing NULL to retro_video_refresh_t is still a frame dupe as normal. @@ -496,7 +503,7 @@ typedef void (*retro_keyboard_event_t)(bool down, unsigned keycode, uint32_t cha struct retro_keyboard_callback { - retro_keyboard_event_t callback; + retro_keyboard_event_t callback; }; // Callbacks for RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE. |