X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=frontend%2Flibretro.c;h=f212cdd8d0b519d733d35da4bf347dc25ac761f3;hp=7a7c2ef936bea350cc6122c3b6d1e923b7bb0c06;hb=7d68d030b6a2c294ab6f18892f61e1861ecdd40f;hpb=51ba74081fe32f7581b75acded217a9a67ede429 diff --git a/frontend/libretro.c b/frontend/libretro.c index 7a7c2ef9..f212cdd8 100644 --- a/frontend/libretro.c +++ b/frontend/libretro.c @@ -39,6 +39,8 @@ static int samples_sent, samples_to_send; static int plugins_opened; static int is_pal_mode; +extern int soft_filter; + /* memory card data */ extern char Mcd1Data[MCD_SIZE]; extern char McdDisable[2]; @@ -230,7 +232,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) +{ + static const struct retro_variable vars[] = { + { "frameskip", "Frameskip; 0|1|2|3" }, +#ifdef __ARM_NEON__ + { "soft_filter", "Software filter; none|scale2x|eagle2x" }, + { "neon_enhancement_enable", "Enhanced resolution (slow); disabled|enabled" }, +#endif + { NULL, NULL }, + }; + + environ_cb = cb; + + cb(RETRO_ENVIRONMENT_SET_VARIABLES, (void*)vars); +} + 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 +727,52 @@ 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) +{ + struct retro_variable var; + + var.value = NULL; + var.key = "frameskip"; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value) + pl_rearmed_cbs.frameskip = atoi(var.value); +#ifdef __ARM_NEON__ + var.value = NULL; + var.key = "soft_filter"; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value) + { + if (strcmp(var.value, "none")) + soft_filter = 0; + else if (strcmp(var.value, "scale2x")) + soft_filter = 1; + else if (strcmp(var.value, "eagle2x")) + soft_filter = 2; + } + + var.value = NULL; + var.key = "neon_enhancement_enable"; + + if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value) + { + 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 +853,8 @@ void retro_init(void) SaveFuncs.write = save_write; SaveFuncs.seek = save_seek; SaveFuncs.close = save_close; + + update_variables(); } void retro_deinit(void)