From 8031a541da9418105d9edabc2b113650f71fcc24 Mon Sep 17 00:00:00 2001 From: radius Date: Sun, 28 Jan 2018 22:29:58 -0500 Subject: [PATCH 01/16] remove menu shader parameters --- menu/cbs/menu_cbs_left.c | 30 +++++++++++------------------- menu/cbs/menu_cbs_right.c | 14 +++++--------- menu/cbs/menu_cbs_select.c | 2 +- menu/cbs/menu_cbs_start.c | 9 ++------- menu/menu_cbs.h | 3 --- menu/menu_displaylist.c | 5 ----- 6 files changed, 19 insertions(+), 44 deletions(-) diff --git a/menu/cbs/menu_cbs_left.c b/menu/cbs/menu_cbs_left.c index 3085d9fb52..75026eb31a 100644 --- a/menu/cbs/menu_cbs_left.c +++ b/menu/cbs/menu_cbs_left.c @@ -60,33 +60,25 @@ static int generic_shader_action_parameter_left( return 0; } -static int shader_action_parameter_left(unsigned type, const char *label, - bool wraparound) +int shader_action_parameter_left(unsigned type, const char *label, bool wraparound) { video_shader_ctx_t shader_info; struct video_shader_parameter *param = NULL; video_shader_driver_get_current_shader(&shader_info); - param = &shader_info.data->parameters[type - - MENU_SETTINGS_SHADER_PARAMETER_0]; + param = &shader_info.data->parameters[type - MENU_SETTINGS_SHADER_PARAMETER_0]; if (!param) - return 0; - return generic_shader_action_parameter_left(param, - type, label, wraparound); + return menu_cbs_exit(); + generic_shader_action_parameter_left(param, type, label, wraparound); + + param = menu_shader_manager_get_parameters( + type - MENU_SETTINGS_SHADER_PARAMETER_0); + if (!param) + return menu_cbs_exit(); + return generic_shader_action_parameter_left(param, type, label, wraparound); } -static int shader_action_parameter_preset_left(unsigned type, - const char *label, - bool wraparound) -{ - struct video_shader_parameter *param = menu_shader_manager_get_parameters( - type - MENU_SETTINGS_SHADER_PRESET_PARAMETER_0); - if (!param) - return 0; - return generic_shader_action_parameter_left(param, - type, label, wraparound); -} #endif static int action_left_cheat(unsigned type, const char *label, @@ -614,7 +606,7 @@ static int menu_cbs_init_bind_left_compare_type(menu_file_list_cbs_t *cbs, else if (type >= MENU_SETTINGS_SHADER_PRESET_PARAMETER_0 && type <= MENU_SETTINGS_SHADER_PRESET_PARAMETER_LAST) { - BIND_ACTION_LEFT(cbs, shader_action_parameter_preset_left); + BIND_ACTION_LEFT(cbs, shader_action_parameter_left); } #endif else if (type >= MENU_SETTINGS_INPUT_DESC_BEGIN diff --git a/menu/cbs/menu_cbs_right.c b/menu/cbs/menu_cbs_right.c index 61e53eb34c..3ef4948435 100644 --- a/menu/cbs/menu_cbs_right.c +++ b/menu/cbs/menu_cbs_right.c @@ -71,16 +71,12 @@ int shader_action_parameter_right(unsigned type, const char *label, bool wraparo video_shader_driver_get_current_shader(&shader_info); param = &shader_info.data->parameters[type - MENU_SETTINGS_SHADER_PARAMETER_0]; + if (!param) return menu_cbs_exit(); - return generic_shader_action_parameter_right(param, type, label, wraparound); -} - -int shader_action_parameter_preset_right(unsigned type, const char *label, - bool wraparound) -{ - struct video_shader_parameter *param = menu_shader_manager_get_parameters( - type - MENU_SETTINGS_SHADER_PRESET_PARAMETER_0); + generic_shader_action_parameter_right(param, type, label, wraparound); + param = menu_shader_manager_get_parameters( + type - MENU_SETTINGS_SHADER_PARAMETER_0); if (!param) return menu_cbs_exit(); return generic_shader_action_parameter_right(param, type, label, wraparound); @@ -481,7 +477,7 @@ static int menu_cbs_init_bind_right_compare_type(menu_file_list_cbs_t *cbs, else if (type >= MENU_SETTINGS_SHADER_PRESET_PARAMETER_0 && type <= MENU_SETTINGS_SHADER_PRESET_PARAMETER_LAST) { - BIND_ACTION_RIGHT(cbs, shader_action_parameter_preset_right); + BIND_ACTION_RIGHT(cbs, shader_action_parameter_right); } #endif else if (type >= MENU_SETTINGS_INPUT_DESC_BEGIN diff --git a/menu/cbs/menu_cbs_select.c b/menu/cbs/menu_cbs_select.c index 195a5e05bb..df21786a9e 100644 --- a/menu/cbs/menu_cbs_select.c +++ b/menu/cbs/menu_cbs_select.c @@ -132,7 +132,7 @@ static int shader_action_parameter_select(const char *path, const char *label, u static int shader_action_parameter_preset_select(const char *path, const char *label, unsigned type, size_t idx) { - return shader_action_parameter_preset_right(type, label, true); + return shader_action_parameter_right(type, label, true); } #endif diff --git a/menu/cbs/menu_cbs_start.c b/menu/cbs/menu_cbs_start.c index e573cbbbd4..dfc376bf17 100644 --- a/menu/cbs/menu_cbs_start.c +++ b/menu/cbs/menu_cbs_start.c @@ -135,12 +135,7 @@ static int action_start_shader_action_parameter(unsigned type, const char *label #endif - return 0; -} - -static int action_start_shader_action_preset_parameter(unsigned type, const char *label) -{ - unsigned parameter = type - MENU_SETTINGS_SHADER_PRESET_PARAMETER_0; + unsigned parameter = type - MENU_SETTINGS_SHADER_PARAMETER_0; return menu_shader_manager_clear_parameter(parameter); } @@ -337,7 +332,7 @@ static int menu_cbs_init_bind_start_compare_type(menu_file_list_cbs_t *cbs, else if (type >= MENU_SETTINGS_SHADER_PRESET_PARAMETER_0 && type <= MENU_SETTINGS_SHADER_PRESET_PARAMETER_LAST) { - BIND_ACTION_START(cbs, action_start_shader_action_preset_parameter); + BIND_ACTION_START(cbs, action_start_shader_action_parameter); } else if (type >= MENU_SETTINGS_LIBRETRO_PERF_COUNTERS_BEGIN && type <= MENU_SETTINGS_LIBRETRO_PERF_COUNTERS_END) diff --git a/menu/menu_cbs.h b/menu/menu_cbs.h index 11065bbfd9..c8fe8d53c2 100644 --- a/menu/menu_cbs.h +++ b/menu/menu_cbs.h @@ -141,9 +141,6 @@ int action_refresh_default(file_list_t *list, file_list_t *menu_list); int shader_action_parameter_right(unsigned type, const char *label, bool wraparound); -int shader_action_parameter_preset_right(unsigned type, const char *label, - bool wraparound); - int generic_action_ok_displaylist_push(const char *path, const char *new_path, const char *label, unsigned type, size_t idx, size_t entry_idx, unsigned action_type); diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index dd5f68718b..d0ed8c9c3b 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -1397,11 +1397,6 @@ static int menu_displaylist_parse_shader_options(menu_displaylist_info_t *info) msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PARAMETERS), MENU_ENUM_LABEL_VIDEO_SHADER_PARAMETERS, MENU_SETTING_ACTION, 0, 0); - menu_entries_append_enum(info->list, - msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS), - msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_PARAMETERS), - MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_PARAMETERS, - MENU_SETTING_ACTION, 0, 0); menu_entries_append_enum(info->list, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_NUM_PASSES), msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_NUM_PASSES), From 5783030b5cfb37ada48a01b04703fab1bf3be40d Mon Sep 17 00:00:00 2001 From: radius Date: Sun, 28 Jan 2018 14:57:49 -0500 Subject: [PATCH 02/16] add per-parent-dir shader preset saving --- intl/msg_hash_us.h | 4 ++++ menu/cbs/menu_cbs_ok.c | 24 ++++++++++++++++++++++-- menu/cbs/menu_cbs_sublabel.c | 4 ++++ menu/menu_displaylist.c | 5 +++++ msg_hash.h | 1 + 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 9c694e7f55..ab1c726c5f 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -1765,6 +1765,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, "Save Shader Preset As") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, "Save Core Preset") +MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_PARENT, + "Save Parent Preset") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_GAME, "Save Game Preset") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHARED_CONTEXT, @@ -3147,6 +3149,8 @@ MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_AS, "Save the current shader settings as a new shader preset.") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_CORE, "Save the current shader settings as the default settings for this application/core.") +MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_PARENT, + "Save the current shader settings as the default settings for all files in the content's parent directory.") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_GAME, "Save the current shader settings as the default settings for the content.") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SHADER_PARAMETERS, diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index bea9aecdd2..b18f32606c 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -1868,7 +1868,8 @@ default_action_dialog_start(action_ok_rename_entry, enum { ACTION_OK_SHADER_PRESET_SAVE_CORE = 0, - ACTION_OK_SHADER_PRESET_SAVE_GAME + ACTION_OK_SHADER_PRESET_SAVE_GAME, + ACTION_OK_SHADER_PRESET_SAVE_PARENT }; static int generic_action_ok_shader_preset_save(const char *path, @@ -1915,6 +1916,17 @@ static int generic_action_ok_shader_preset_save(const char *path, fill_pathname_join(file, directory, game_name, sizeof(file)); } break; + case ACTION_OK_SHADER_PRESET_SAVE_PARENT: + { + strlcpy(tmp, path_get(RARCH_PATH_BASENAME), sizeof(tmp)); + path_basedir(tmp); + char* last_slash = find_last_slash(tmp); + last_slash[0] = '\0'; + last_slash = find_last_slash(tmp); + strlcpy(tmp, last_slash + 1, sizeof(tmp)); + fill_pathname_join(file, directory, tmp, sizeof(file)); + } + break; } if(menu_shader_manager_save_preset(file, false, true)) @@ -1943,7 +1955,12 @@ static int action_ok_shader_preset_save_game(const char *path, idx, entry_idx, ACTION_OK_SHADER_PRESET_SAVE_GAME); } - +static int action_ok_shader_preset_save_parent(const char *path, + const char *label, unsigned type, size_t idx, size_t entry_idx) +{ + return generic_action_ok_shader_preset_save(path, label, type, + idx, entry_idx, ACTION_OK_SHADER_PRESET_SAVE_PARENT); +} static int generic_action_ok_remap_file_operation(const char *path, const char *label, unsigned type, size_t idx, size_t entry_idx, @@ -4189,6 +4206,9 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_CORE: BIND_ACTION_OK(cbs, action_ok_shader_preset_save_core); break; + case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_PARENT: + BIND_ACTION_OK(cbs, action_ok_shader_preset_save_parent); + break; case MENU_ENUM_LABEL_CHEAT_FILE_SAVE_AS: BIND_ACTION_OK(cbs, action_ok_cheat_file_save_as); break; diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index e1f01dffe3..4210b08fe9 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -358,6 +358,7 @@ default_sublabel_macro(action_bind_sublabel_shader_num_passes, default_sublabel_macro(action_bind_sublabel_shader_preset, MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET) default_sublabel_macro(action_bind_sublabel_shader_preset_save_as, MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_AS) default_sublabel_macro(action_bind_sublabel_shader_preset_save_core, MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_CORE) +default_sublabel_macro(action_bind_sublabel_shader_preset_save_parent, MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_PARENT) default_sublabel_macro(action_bind_sublabel_shader_preset_save_game, MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_GAME) default_sublabel_macro(action_bind_sublabel_shader_parameters, MENU_ENUM_SUBLABEL_VIDEO_SHADER_PARAMETERS) default_sublabel_macro(action_bind_sublabel_shader_preset_parameters, MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_PARAMETERS) @@ -505,6 +506,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_CORE: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_shader_preset_save_core); break; + case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_PARENT: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_shader_preset_save_parent); + break; case MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GAME: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_shader_preset_save_game); break; diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index d0ed8c9c3b..9be506d276 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -1387,6 +1387,11 @@ static int menu_displaylist_parse_shader_options(menu_displaylist_info_t *info) msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_AS), MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_CORE, MENU_SETTING_ACTION, 0, 0); + menu_entries_append_enum(info->list, + msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_PARENT), + msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_AS), + MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_PARENT, + MENU_SETTING_ACTION, 0, 0); menu_entries_append_enum(info->list, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_GAME), msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_AS), diff --git a/msg_hash.h b/msg_hash.h index 8dbee05bba..94db6d4d59 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -1514,6 +1514,7 @@ enum msg_hash_enums MENU_LABEL(VIDEO_SHADER_PRESET_SAVE_AS), MENU_LABEL(VIDEO_SHADER_PRESET_SAVE_CORE), MENU_LABEL(VIDEO_SHADER_PRESET_SAVE_GAME), + MENU_LABEL(VIDEO_SHADER_PRESET_SAVE_PARENT), MENU_LABEL(USER_LANGUAGE), MENU_LABEL(NETPLAY_NICKNAME), MENU_LABEL(VIDEO_VI_WIDTH), From 940efa8d73a55a7817dfc333cdc34c807519432c Mon Sep 17 00:00:00 2001 From: radius Date: Sun, 28 Jan 2018 16:22:50 -0500 Subject: [PATCH 03/16] allow loading of parent-dir specific presets --- CHANGES.md | 2 ++ configuration.c | 38 ++++++++++++++++++++++++++++++++++++-- menu/cbs/menu_cbs_ok.c | 7 +------ 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 4275c5a181..064a723334 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -36,6 +36,8 @@ - LOCALIZATION: Update Spanish translation. - NETPLAY: Add menu option to select different MITM (relay) server locations. - OSX: Modify HID buttons detection algorithm. +- SHADERS: Allow saving of shader presets based on the parent directory (Saving one for */foo/bar/mario.sfc* would result in *shaders/presets/corename/bar.ext*). We decided it's safer to still isolate the presets to a single core because different cores may treat video output differently. +- SHADERS: Don't save the path to the current preset to the main config. This was causing weird behavior, instead it will try to load *currentconfig.ext* and it will save a preset with that name when select *apply shader preset*. The resulting shader will restore properly after restarting and even after core/parent/game specific presets are loaded - SOLARIS: Initial port. - SWITCH: Initial Nintendo Switch port, based on libtransistor SDK. - PS3: Enable Cheevos. diff --git a/configuration.c b/configuration.c index 6ade326f55..ed99685fb3 100644 --- a/configuration.c +++ b/configuration.c @@ -1070,8 +1070,6 @@ static struct config_path_setting *populate_settings_path(settings_t *settings, settings->paths.path_core_options, false, NULL, true); SETTING_PATH("libretro_info_path", settings->paths.path_libretro_info, false, NULL, true); - SETTING_PATH("video_shader", - settings->paths.path_shader, false, NULL, true); SETTING_PATH("content_database_path", settings->paths.path_content_database, false, NULL, true); SETTING_PATH("cheat_database_path", @@ -3227,10 +3225,19 @@ bool config_load_shader_preset(void) char *shader_directory = NULL; char *core_path = NULL; char *game_path = NULL; + char *parent_path = NULL; settings_t *settings = config_get_ptr(); rarch_system_info_t *system = runloop_get_system_info(); const char *core_name = system ? system->info.library_name : NULL; const char *game_name = path_basename(path_get(RARCH_PATH_BASENAME)); + char *parent_path = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); /* final path for parent-dir-specific configuration (prefix+suffix) */ + char parent_name[PATH_MAX_LENGTH]; + + settings_t *settings = config_get_ptr(); + rarch_system_info_t *system = runloop_get_system_info(); + + if (!string_is_empty(path_get(RARCH_PATH_BASENAME))) + fill_pathname_parent_dir_name(parent_name, path_get(RARCH_PATH_BASENAME), sizeof(parent_name)); if (string_is_empty(core_name) || string_is_empty(game_name)) return false; @@ -3288,6 +3295,33 @@ bool config_load_shader_preset(void) goto success; } + for(idx = FILE_PATH_CGP_EXTENSION; idx <= FILE_PATH_SLANGP_EXTENSION; idx++) + { + if (!check_shader_compatibility((enum file_path_enum)(idx))) + continue; + /* Concatenate strings into full paths for core_path, parent path */ + fill_pathname_join_special_ext(parent_path, + shader_directory, core_name, + parent_name, + file_path_str((enum file_path_enum)(idx)), + path_size); + + /* Create a new config file from parent path */ + new_conf = config_file_new(parent_path); + + if (!new_conf) + { + RARCH_LOG("Shaders: no parent-dir-specific preset found at %s.\n", parent_path); + continue; + } + + /* Core shader preset exists, load it. */ + RARCH_LOG("Shaders: parent-dir-specific shader preset found at %s.\n", parent_path); + path_set(RARCH_PATH_DEFAULT_SHADER_PRESET, settings->paths.path_shader); + strlcpy(settings->paths.path_shader, parent_path, sizeof(settings->paths.path_shader)); + goto success; + } + for(idx = FILE_PATH_CGP_EXTENSION; idx <= FILE_PATH_SLANGP_EXTENSION; idx++) { if (!check_shader_compatibility((enum file_path_enum)(idx))) diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index b18f32606c..39fa6cfc46 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -1918,12 +1918,7 @@ static int generic_action_ok_shader_preset_save(const char *path, break; case ACTION_OK_SHADER_PRESET_SAVE_PARENT: { - strlcpy(tmp, path_get(RARCH_PATH_BASENAME), sizeof(tmp)); - path_basedir(tmp); - char* last_slash = find_last_slash(tmp); - last_slash[0] = '\0'; - last_slash = find_last_slash(tmp); - strlcpy(tmp, last_slash + 1, sizeof(tmp)); + fill_pathname_parent_dir_name(tmp, path_get(RARCH_PATH_BASENAME), sizeof(tmp)); fill_pathname_join(file, directory, tmp, sizeof(file)); } break; From d5dbfe78d5fd3b8c0551617c30f7b21bc89506f8 Mon Sep 17 00:00:00 2001 From: radius Date: Sun, 28 Jan 2018 20:03:17 -0500 Subject: [PATCH 04/16] make sure a startup shader loads if one exists --- configuration.c | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/configuration.c b/configuration.c index ed99685fb3..8c7b513302 100644 --- a/configuration.c +++ b/configuration.c @@ -2875,28 +2875,41 @@ static bool config_load_file(const char *path, bool set_defaults, ret = true; + /* Find a compatible startup shader*/ + if (!string_is_empty(settings->paths.directory_video_shader)) { - const char *shader_ext = path_get_extension(settings->paths.path_shader); + /* Get the config filename */ + const char *s = path_basename(path_get(RARCH_PATH_CONFIG)); + strlcpy (tmp_str, s, PATH_MAX_LENGTH); + path_remove_extension(tmp_str); - if (!string_is_empty(shader_ext)) + for(i = FILE_PATH_CGP_EXTENSION; i <= FILE_PATH_SLANGP_EXTENSION; i++) { - for(i = FILE_PATH_CGP_EXTENSION; i <= FILE_PATH_SLANGP_EXTENSION; i++) + if (!check_shader_compatibility((enum file_path_enum)(i))) + continue; + + /* Build up the startup shader path from the config name and the + supported extensions */ + fill_pathname_join_special_ext(settings->paths.path_shader, + settings->paths.directory_video_shader, "", tmp_str, + file_path_str((enum file_path_enum)(i)), + sizeof(settings->paths.path_shader)); + + /* Check if the shader exists */ + if (!path_is_valid(settings->paths.path_shader)) { - enum file_path_enum ext = (enum file_path_enum)(i); - if(!strstr(file_path_str(ext), shader_ext)) - continue; - - if (check_shader_compatibility(ext)) - continue; - - RARCH_LOG("Incompatible shader for backend %s, clearing...\n", - settings->arrays.video_driver); - settings->paths.path_shader[0] = '\0'; - break; + RARCH_LOG("Shaders: no startup shader found at %s.\n", settings->paths.path_shader); + continue; } + + /* Game shader preset exists, load it */ + RARCH_LOG("Shaders: startup shader found at %s.\n", settings->paths.path_shader); + + path_set(RARCH_PATH_DEFAULT_SHADER_PRESET, settings->paths.path_shader); } } + end: if (conf) config_file_free(conf); From c64d5556c127a9d193cc47dea41950c23ed2d036 Mon Sep 17 00:00:00 2001 From: radius Date: Mon, 29 Jan 2018 22:11:08 -0500 Subject: [PATCH 05/16] readd shader to config, let's use a runtime check instead of overwritting the shader preset all the time --- command.c | 20 +------ configuration.c | 53 +++++++------------ gfx/drivers/d3d9.c | 7 +-- gfx/drivers/gl.c | 3 +- gfx/drivers/vulkan.c | 3 +- .../d3d9_hlsl_renderchain.c | 2 +- menu/menu_shader.c | 2 +- retroarch.c | 31 +++++++++++ retroarch.h | 6 +++ 9 files changed, 65 insertions(+), 62 deletions(-) diff --git a/command.c b/command.c index 8b9d903622..dab3fbc862 100644 --- a/command.c +++ b/command.c @@ -1295,31 +1295,13 @@ static void command_event_disable_overrides(void) return; /* reload the original config */ - config_unload_override(); rarch_ctl(RARCH_CTL_UNSET_OVERRIDES_ACTIVE, NULL); } static void command_event_restore_default_shader_preset(void) { - if (!path_is_empty(RARCH_PATH_DEFAULT_SHADER_PRESET)) - { - /* auto shader preset: reload the original shader */ - settings_t *settings = config_get_ptr(); - const char *shader_preset = path_get(RARCH_PATH_DEFAULT_SHADER_PRESET); - - if (!string_is_empty(shader_preset)) - { - RARCH_LOG("%s %s\n", - msg_hash_to_str(MSG_RESTORING_DEFAULT_SHADER_PRESET_TO), - shader_preset); - strlcpy(settings->paths.path_shader, - shader_preset, - sizeof(settings->paths.path_shader)); - } - } - - path_clear(RARCH_PATH_DEFAULT_SHADER_PRESET); + retroarch_unset_shader_preset(); } static void command_event_restore_remaps(void) diff --git a/configuration.c b/configuration.c index 8c7b513302..7e4d3360a5 100644 --- a/configuration.c +++ b/configuration.c @@ -1070,6 +1070,8 @@ static struct config_path_setting *populate_settings_path(settings_t *settings, settings->paths.path_core_options, false, NULL, true); SETTING_PATH("libretro_info_path", settings->paths.path_libretro_info, false, NULL, true); + SETTING_PATH("video_shader", + settings->paths.path_shader, false, NULL, true); SETTING_PATH("content_database_path", settings->paths.path_content_database, false, NULL, true); SETTING_PATH("cheat_database_path", @@ -2873,41 +2875,28 @@ static bool config_load_file(const char *path, bool set_defaults, config_read_keybinds_conf(conf); - ret = true; - /* Find a compatible startup shader*/ - if (!string_is_empty(settings->paths.directory_video_shader)) + const char *shader_ext = path_get_extension(settings->paths.path_shader); + + if (!string_is_empty(shader_ext)) { - /* Get the config filename */ - const char *s = path_basename(path_get(RARCH_PATH_CONFIG)); - strlcpy (tmp_str, s, PATH_MAX_LENGTH); - path_remove_extension(tmp_str); - for(i = FILE_PATH_CGP_EXTENSION; i <= FILE_PATH_SLANGP_EXTENSION; i++) { - if (!check_shader_compatibility((enum file_path_enum)(i))) + enum file_path_enum ext = (enum file_path_enum)(i); + if(!strstr(file_path_str(ext), shader_ext)) continue; - /* Build up the startup shader path from the config name and the - supported extensions */ - fill_pathname_join_special_ext(settings->paths.path_shader, - settings->paths.directory_video_shader, "", tmp_str, - file_path_str((enum file_path_enum)(i)), - sizeof(settings->paths.path_shader)); - - /* Check if the shader exists */ - if (!path_is_valid(settings->paths.path_shader)) - { - RARCH_LOG("Shaders: no startup shader found at %s.\n", settings->paths.path_shader); + if (check_shader_compatibility(ext)) continue; - } - /* Game shader preset exists, load it */ - RARCH_LOG("Shaders: startup shader found at %s.\n", settings->paths.path_shader); - - path_set(RARCH_PATH_DEFAULT_SHADER_PRESET, settings->paths.path_shader); - } + RARCH_LOG("Incompatible shader for backend %s, clearing...\n", + settings->arrays.video_driver); + settings->paths.path_shader[0] = '\0'; + break; } +} + + ret = true; end: @@ -3302,9 +3291,7 @@ bool config_load_shader_preset(void) /* Game shader preset exists, load it. */ RARCH_LOG("Shaders: game-specific shader preset found at %s.\n", game_path); - - path_set(RARCH_PATH_DEFAULT_SHADER_PRESET, settings->paths.path_shader); - strlcpy(settings->paths.path_shader, game_path, sizeof(settings->paths.path_shader)); + retroarch_set_shader_preset(game_path); goto success; } @@ -3328,10 +3315,9 @@ bool config_load_shader_preset(void) continue; } - /* Core shader preset exists, load it. */ + /* Parent-dir shader preset exists, load it. */ RARCH_LOG("Shaders: parent-dir-specific shader preset found at %s.\n", parent_path); - path_set(RARCH_PATH_DEFAULT_SHADER_PRESET, settings->paths.path_shader); - strlcpy(settings->paths.path_shader, parent_path, sizeof(settings->paths.path_shader)); + retroarch_set_shader_preset(parent_path); goto success; } @@ -3357,8 +3343,7 @@ bool config_load_shader_preset(void) /* Core shader preset exists, load it. */ RARCH_LOG("Shaders: core-specific shader preset found at %s.\n", core_path); - path_set(RARCH_PATH_DEFAULT_SHADER_PRESET, settings->paths.path_shader); - strlcpy(settings->paths.path_shader, core_path, sizeof(settings->paths.path_shader)); + retroarch_set_shader_preset(core_path); goto success; } diff --git a/gfx/drivers/d3d9.c b/gfx/drivers/d3d9.c index 8a0c81cf83..a95ca5a9aa 100644 --- a/gfx/drivers/d3d9.c +++ b/gfx/drivers/d3d9.c @@ -56,6 +56,7 @@ #include "../../core.h" #include "../../verbosity.h" +#include "../../retroarch.h" static LPDIRECT3D9 g_pD3D9; @@ -1081,7 +1082,7 @@ static bool d3d9_init_internal(d3d_video_t *d3d, if (settings->bools.video_shader_enable) { enum rarch_shader_type type = - video_shader_parse_type(settings->paths.path_shader, + video_shader_parse_type(retroarch_get_shader_preset(), RARCH_SHADER_NONE); switch (type) @@ -1089,8 +1090,8 @@ static bool d3d9_init_internal(d3d_video_t *d3d, case RARCH_SHADER_CG: if (!string_is_empty(d3d->shader_path)) free(d3d->shader_path); - if (!string_is_empty(settings->paths.path_shader)) - d3d->shader_path = strdup(settings->paths.path_shader); + if (!string_is_empty(retroarch_get_shader_preset())) + d3d->shader_path = strdup(retroarch_get_shader_preset()); break; default: break; diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 48a813a675..202e43ab4c 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -379,8 +379,7 @@ static bool gl_shader_init(gl_t *gl, const gfx_ctx_driver_t *ctx_driver, { video_shader_ctx_init_t init_data; settings_t *settings = config_get_ptr(); - const char *shader_path = (settings->bools.video_shader_enable - && *settings->paths.path_shader) ? settings->paths.path_shader : NULL; + const char *shader_path = retroarch_get_shader_preset(); enum rarch_shader_type type = video_shader_parse_type(shader_path, gl->core_context_in_use ? RARCH_SHADER_GLSL : DEFAULT_SHADER_TYPE); diff --git a/gfx/drivers/vulkan.c b/gfx/drivers/vulkan.c index 4351f5562d..5b2de52fa6 100644 --- a/gfx/drivers/vulkan.c +++ b/gfx/drivers/vulkan.c @@ -810,8 +810,7 @@ static bool vulkan_init_filter_chain_preset(vk_t *vk, const char *shader_path) static bool vulkan_init_filter_chain(vk_t *vk) { settings_t *settings = config_get_ptr(); - const char *shader_path = (settings->bools.video_shader_enable && *settings->paths.path_shader) ? - settings->paths.path_shader : NULL; + const char *shader_path = retroarch_get_shader_preset(); enum rarch_shader_type type = video_shader_parse_type(shader_path, RARCH_SHADER_NONE); diff --git a/gfx/drivers_renderchain/d3d9_hlsl_renderchain.c b/gfx/drivers_renderchain/d3d9_hlsl_renderchain.c index 4d8b433960..100f6c60d3 100644 --- a/gfx/drivers_renderchain/d3d9_hlsl_renderchain.c +++ b/gfx/drivers_renderchain/d3d9_hlsl_renderchain.c @@ -296,7 +296,7 @@ static bool hlsl_d3d9_renderchain_init_shader(void *data, init.shader_type = RARCH_SHADER_HLSL; init.data = data; - init.path = settings->paths.path_shader; + init.path = retroarch_get_shader_preset(); init.shader = &hlsl_backend; RARCH_LOG("D3D]: Using HLSL shader backend.\n"); diff --git a/menu/menu_shader.c b/menu/menu_shader.c index 2f3982c345..6fee9be4f2 100644 --- a/menu/menu_shader.c +++ b/menu/menu_shader.c @@ -130,7 +130,7 @@ bool menu_shader_manager_init(void) #ifdef HAVE_SHADER_MANAGER settings_t *settings = config_get_ptr(); const char *config_path = path_get(RARCH_PATH_CONFIG); - const char *path_shader = settings->paths.path_shader; + const char *path_shader = retroarch_get_shader_preset(); menu_shader_manager_free(); diff --git a/retroarch.c b/retroarch.c index a5afe79e6e..bc75699272 100644 --- a/retroarch.c +++ b/retroarch.c @@ -182,6 +182,7 @@ static jmp_buf error_sjlj_context; static enum rarch_core_type current_core_type = CORE_TYPE_PLAIN; static enum rarch_core_type explicit_current_core_type = CORE_TYPE_PLAIN; static char error_string[255] = {0}; +static char runtime_shader_preset[255] = {0}; #ifdef HAVE_THREAD_STORAGE static sthread_tls_t rarch_tls; @@ -1924,6 +1925,36 @@ void retroarch_unset_forced_fullscreen(void) rarch_force_fullscreen = false; } +/* set a runtime shader preset without overwriting the settings value */ +void retroarch_set_shader_preset(char* preset) +{ + if (!string_is_empty(preset)) + strlcpy(runtime_shader_preset, preset, sizeof(runtime_shader_preset)); + else + runtime_shader_preset[0] = '\0'; +} + +/* unset a runtime shader preset */ +void retroarch_unset_shader_preset(void) +{ + runtime_shader_preset[0] = '\0'; +} + +/* get the name of the current shader preset */ +char* retroarch_get_shader_preset(void) +{ + settings_t *settings = config_get_ptr(); + if (!settings->bools.video_shader_enable) + return ""; + + if (!string_is_empty(runtime_shader_preset)) + return runtime_shader_preset; + else if (!string_is_empty(settings->paths.path_shader)) + return settings->paths.path_shader; + else + return ""; +} + bool retroarch_override_setting_is_set(enum rarch_override_setting enum_idx, void *data) { switch (enum_idx) diff --git a/retroarch.h b/retroarch.h index 78c0459c0f..38b40cbe31 100644 --- a/retroarch.h +++ b/retroarch.h @@ -288,6 +288,12 @@ void retroarch_unset_forced_fullscreen(void); void retroarch_set_current_core_type(enum rarch_core_type type, bool explicitly_set); +void retroarch_set_shader_preset(char* preset); + +void retroarch_unset_shader_preset(void); + +char* retroarch_get_shader_preset(void); + /** * retroarch_fail: * @error_code : Error code. From bc9006236631f0f9bfc488a32dfecfc8176738ab Mon Sep 17 00:00:00 2001 From: radius Date: Mon, 29 Jan 2018 22:18:08 -0500 Subject: [PATCH 06/16] small fixes --- menu/cbs/menu_cbs_left.c | 2 +- menu/menu_shader.c | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/menu/cbs/menu_cbs_left.c b/menu/cbs/menu_cbs_left.c index 75026eb31a..7e6fb6cb79 100644 --- a/menu/cbs/menu_cbs_left.c +++ b/menu/cbs/menu_cbs_left.c @@ -60,7 +60,7 @@ static int generic_shader_action_parameter_left( return 0; } -int shader_action_parameter_left(unsigned type, const char *label, bool wraparound) +static int shader_action_parameter_left(unsigned type, const char *label, bool wraparound) { video_shader_ctx_t shader_info; struct video_shader_parameter *param = NULL; diff --git a/menu/menu_shader.c b/menu/menu_shader.c index 6fee9be4f2..951163583e 100644 --- a/menu/menu_shader.c +++ b/menu/menu_shader.c @@ -30,6 +30,7 @@ #include "../file_path_special.h" #include "../configuration.h" #include "../paths.h" +#include "../retroarch.h" #include "../verbosity.h" #ifdef HAVE_SHADER_MANAGER From 37454f79a8ba0de1d923fe28cc010add044790ec Mon Sep 17 00:00:00 2001 From: radius Date: Tue, 30 Jan 2018 22:11:09 -0500 Subject: [PATCH 07/16] fix SHADER_NEXT/SHADER_PREV --- command.c | 1 + gfx/video_driver.c | 14 ++++++++++++-- retroarch.c | 2 +- retroarch.h | 2 +- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/command.c b/command.c index dab3fbc862..bc03534094 100644 --- a/command.c +++ b/command.c @@ -245,6 +245,7 @@ bool command_set_shader(const char *arg) msg_hash_to_str(MSG_APPLYING_SHADER), arg); + retroarch_set_shader_preset(arg); return video_driver_set_shader(type, arg); } diff --git a/gfx/video_driver.c b/gfx/video_driver.c index 72bc4c36d5..538f6327df 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -31,6 +31,8 @@ #include #include +#include "menu/menu_shader.h" + #ifdef HAVE_CONFIG_H #include "../config.h" #endif @@ -672,9 +674,17 @@ retro_proc_address_t video_driver_get_proc_address(const char *sym) bool video_driver_set_shader(enum rarch_shader_type type, const char *path) { + bool ret = false; if (current_video->set_shader) - return current_video->set_shader(video_driver_data, type, path); - return false; + ret = current_video->set_shader(video_driver_data, type, path); + + if (ret) + { + menu_shader_manager_free(); + menu_shader_manager_init(); + } + + return ret; } static void video_driver_filter_free(void) diff --git a/retroarch.c b/retroarch.c index bc75699272..00416fb6a6 100644 --- a/retroarch.c +++ b/retroarch.c @@ -1926,7 +1926,7 @@ void retroarch_unset_forced_fullscreen(void) } /* set a runtime shader preset without overwriting the settings value */ -void retroarch_set_shader_preset(char* preset) +void retroarch_set_shader_preset(const char* preset) { if (!string_is_empty(preset)) strlcpy(runtime_shader_preset, preset, sizeof(runtime_shader_preset)); diff --git a/retroarch.h b/retroarch.h index 38b40cbe31..63c37428f1 100644 --- a/retroarch.h +++ b/retroarch.h @@ -288,7 +288,7 @@ void retroarch_unset_forced_fullscreen(void); void retroarch_set_current_core_type(enum rarch_core_type type, bool explicitly_set); -void retroarch_set_shader_preset(char* preset); +void retroarch_set_shader_preset(const char* preset); void retroarch_unset_shader_preset(void); From e9b7c7267e24c20f3c63c4c8856b25d7cf57b1c4 Mon Sep 17 00:00:00 2001 From: radius Date: Tue, 30 Jan 2018 22:38:03 -0500 Subject: [PATCH 08/16] fix some potential crashes when a shader is not set in config --- gfx/drivers/gl.c | 9 ++++++++- menu/menu_shader.c | 2 +- retroarch.c | 4 ++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/gfx/drivers/gl.c b/gfx/drivers/gl.c index 202e43ab4c..a1d521ae01 100644 --- a/gfx/drivers/gl.c +++ b/gfx/drivers/gl.c @@ -380,9 +380,16 @@ static bool gl_shader_init(gl_t *gl, const gfx_ctx_driver_t *ctx_driver, video_shader_ctx_init_t init_data; settings_t *settings = config_get_ptr(); const char *shader_path = retroarch_get_shader_preset(); - enum rarch_shader_type type = video_shader_parse_type(shader_path, + enum rarch_shader_type type; + + if (shader_path) + { + type = video_shader_parse_type(shader_path, gl->core_context_in_use ? RARCH_SHADER_GLSL : DEFAULT_SHADER_TYPE); + } + else + type = DEFAULT_SHADER_TYPE; switch (type) { diff --git a/menu/menu_shader.c b/menu/menu_shader.c index 951163583e..96c6680484 100644 --- a/menu/menu_shader.c +++ b/menu/menu_shader.c @@ -138,7 +138,7 @@ bool menu_shader_manager_init(void) menu_driver_shader = (struct video_shader*) calloc(1, sizeof(struct video_shader)); - if (!menu_driver_shader) + if (!menu_driver_shader || !path_shader) return false; /* In a multi-config setting, we can't have diff --git a/retroarch.c b/retroarch.c index 00416fb6a6..2f680c17c6 100644 --- a/retroarch.c +++ b/retroarch.c @@ -1945,14 +1945,14 @@ char* retroarch_get_shader_preset(void) { settings_t *settings = config_get_ptr(); if (!settings->bools.video_shader_enable) - return ""; + return NULL; if (!string_is_empty(runtime_shader_preset)) return runtime_shader_preset; else if (!string_is_empty(settings->paths.path_shader)) return settings->paths.path_shader; else - return ""; + return NULL; } bool retroarch_override_setting_is_set(enum rarch_override_setting enum_idx, void *data) From 30353792a532d471eef46fc5c36784866986987f Mon Sep 17 00:00:00 2001 From: radius Date: Wed, 31 Jan 2018 09:45:26 -0500 Subject: [PATCH 09/16] update gx2_gfx to use retroarch_get_shader_preset() --- gfx/drivers/gx2_gfx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gfx/drivers/gx2_gfx.c b/gfx/drivers/gx2_gfx.c index 79e3320104..61e3c2408d 100644 --- a/gfx/drivers/gx2_gfx.c +++ b/gfx/drivers/gx2_gfx.c @@ -23,6 +23,7 @@ #include "../../driver.h" #include "../../configuration.h" #include "../../verbosity.h" +#include "../../retroarch.h" #ifdef HAVE_CONFIG_H #include "../../config.h" @@ -446,7 +447,7 @@ static void *wiiu_gfx_init(const video_info_t *video, if(settings->bools.video_shader_enable) { - const char* ext = path_get_extension(settings->paths.path_shader); + const char* ext = retroarch_get_shader_preset(); if(ext && !strncmp(ext, "slang", 5)) wiiu_gfx_set_shader(wiiu, RARCH_SHADER_SLANG, settings->paths.path_shader); From 3b3bcd8697725128fa347b2d8bab065d19f2b27e Mon Sep 17 00:00:00 2001 From: radius Date: Wed, 31 Jan 2018 09:50:21 -0500 Subject: [PATCH 10/16] update strings --- intl/msg_hash_us.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index ab1c726c5f..ee40997341 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -1756,7 +1756,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_DIR, MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_NUM_PASSES, "Shader Passes") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, - "Preview Shader Parameters") + "Shader Parameters") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, "Load Shader Preset") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, @@ -1766,7 +1766,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, "Save Core Preset") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_PARENT, - "Save Parent Preset") + "Save Content Directory Preset") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_GAME, "Save Game Preset") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHARED_CONTEXT, @@ -3150,7 +3150,7 @@ MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_AS, MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_CORE, "Save the current shader settings as the default settings for this application/core.") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_PARENT, - "Save the current shader settings as the default settings for all files in the content's parent directory.") + "Save the current shader settings as the default settings for all files in the current content directory.") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SHADER_PRESET_SAVE_GAME, "Save the current shader settings as the default settings for the content.") MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_SHADER_PARAMETERS, From 6900045b35886c285fccee4336bfacc849786c77 Mon Sep 17 00:00:00 2001 From: radius Date: Wed, 31 Jan 2018 10:36:06 -0500 Subject: [PATCH 11/16] remove a leftover string --- intl/msg_hash_cht.h | 2 -- intl/msg_hash_de.h | 2 -- intl/msg_hash_eo.h | 2 -- intl/msg_hash_es.h | 4 ---- intl/msg_hash_fr.h | 2 -- intl/msg_hash_it.h | 2 -- intl/msg_hash_ja.h | 2 -- intl/msg_hash_ko.h | 2 -- intl/msg_hash_nl.h | 2 -- intl/msg_hash_pl.h | 2 -- intl/msg_hash_pt_br.h | 3 --- intl/msg_hash_pt_pt.h | 4 +--- intl/msg_hash_ru.h | 2 -- intl/msg_hash_us.h | 2 -- intl/msg_hash_vn.h | 2 -- 15 files changed, 1 insertion(+), 34 deletions(-) diff --git a/intl/msg_hash_cht.h b/intl/msg_hash_cht.h index 9fcc387aca..adfb03691a 100644 --- a/intl/msg_hash_cht.h +++ b/intl/msg_hash_cht.h @@ -1642,8 +1642,6 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, "預覽Shader參數") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, "戴入Shader預設") -MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, - "選單Shader參數") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, "儲存Shader預設為") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, diff --git a/intl/msg_hash_de.h b/intl/msg_hash_de.h index 10449b4f9a..6010143c4b 100644 --- a/intl/msg_hash_de.h +++ b/intl/msg_hash_de.h @@ -1689,8 +1689,6 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, "Vorschau der Shader-Parameter") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, "Shader-Voreinstellung laden") -MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, - "Shader-Parameter anpassen") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, "Shader-Voreinstellung speichern unter...") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, diff --git a/intl/msg_hash_eo.h b/intl/msg_hash_eo.h index e37169d050..af30b6281d 100644 --- a/intl/msg_hash_eo.h +++ b/intl/msg_hash_eo.h @@ -1542,8 +1542,6 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, "Preview Shader Parameters") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, "Load Shader Preset") -MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, - "Menu Shader Parameters") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, "Save Shader Preset As") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, diff --git a/intl/msg_hash_es.h b/intl/msg_hash_es.h index 58b4e74a5d..1757cb50b7 100644 --- a/intl/msg_hash_es.h +++ b/intl/msg_hash_es.h @@ -2985,10 +2985,6 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, "Cargar preset de shaders" ) -MSG_HASH( - MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, - "Parámetros de shaders del menú" - ) MSG_HASH( MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, "Guardar preset de shaders como.." diff --git a/intl/msg_hash_fr.h b/intl/msg_hash_fr.h index 7e724453d5..33307c51fd 100644 --- a/intl/msg_hash_fr.h +++ b/intl/msg_hash_fr.h @@ -1659,8 +1659,6 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, "Prévisualiser les paramètres") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, "Charger un pré-réglage de shader") -MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, - "Charger un pré-réglage de shader") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, "Enregistrer le pré-réglage sous") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, diff --git a/intl/msg_hash_it.h b/intl/msg_hash_it.h index 9ba49a2bd7..ac899ab0d0 100644 --- a/intl/msg_hash_it.h +++ b/intl/msg_hash_it.h @@ -1687,8 +1687,6 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, "Anteprima dei parametri Shader") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, "Carica Shader Preset") -MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, - "Parametri Shader del menu") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, "Salvare Preset Shader come") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, diff --git a/intl/msg_hash_ja.h b/intl/msg_hash_ja.h index 1c257a27bc..b09611a3c6 100644 --- a/intl/msg_hash_ja.h +++ b/intl/msg_hash_ja.h @@ -1753,8 +1753,6 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, "シェーダーパラメータのプレビュー") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, "シェーダーのプリセットをロード") -MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, - "メニューのシェーダーパラメータ") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, "シェーダーのプリセットを名前を付けて保存") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, diff --git a/intl/msg_hash_ko.h b/intl/msg_hash_ko.h index 5787dd7154..8fa53c27f2 100644 --- a/intl/msg_hash_ko.h +++ b/intl/msg_hash_ko.h @@ -1639,8 +1639,6 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, "쉐이더 매개변수 미리보기") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, "쉐이더 프리셋 불러오기") -MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, - "메뉴 쉐이더 매개변수") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, "쉐이더 프리셋 다른 이름으로 저장") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, diff --git a/intl/msg_hash_nl.h b/intl/msg_hash_nl.h index 2c820d871a..cb37aff900 100644 --- a/intl/msg_hash_nl.h +++ b/intl/msg_hash_nl.h @@ -1540,8 +1540,6 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, "Voorbeeldweergave Shader Parameters") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, "Load Shader Preset") -MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, - "Menu Shader Parameters") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, "Shader Preset Opslaan Als") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, diff --git a/intl/msg_hash_pl.h b/intl/msg_hash_pl.h index 0d517a6ff3..ef87d2a682 100644 --- a/intl/msg_hash_pl.h +++ b/intl/msg_hash_pl.h @@ -1701,8 +1701,6 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, "Podgląd parametrów modułu cieniującego") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, "Załaduj ustawienia Shader") -MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, - "Parametry menu Shadera") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, "Zapisz ustawienie Shadera jako") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, diff --git a/intl/msg_hash_pt_br.h b/intl/msg_hash_pt_br.h index e85ec3b3ab..f1a8606fd0 100644 --- a/intl/msg_hash_pt_br.h +++ b/intl/msg_hash_pt_br.h @@ -2148,9 +2148,6 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, "Carregar Predefinição de Shader" ) -MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, - "Menu de Parâmetros de Shader" - ) MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, "Salvar Predefinição de Shader Como" ) diff --git a/intl/msg_hash_pt_pt.h b/intl/msg_hash_pt_pt.h index 8fc632719f..23946d10e2 100644 --- a/intl/msg_hash_pt_pt.h +++ b/intl/msg_hash_pt_pt.h @@ -1630,9 +1630,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_NUM_PASSES, MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, "Ver parâmetros de sombreamento") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, - "Carregar sombreamento pré-definido") -MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, - "Menu de parâmetros de sombramento") + "Carregar Sombreamento Predefinido") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, "Guardar pré-definições de sombreamento como") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, diff --git a/intl/msg_hash_ru.h b/intl/msg_hash_ru.h index 5fe069db60..46cddaa6f5 100644 --- a/intl/msg_hash_ru.h +++ b/intl/msg_hash_ru.h @@ -1668,8 +1668,6 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, "Предварительный просмотр параметров шейдера") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, "Загрузить предварительную настройку шейдера") -MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, - "Параметры меню шейдера") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, "Сохранить предустановку шейдера как") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index ee40997341..4afc164c31 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -1759,8 +1759,6 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, "Shader Parameters") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, "Load Shader Preset") -MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, - "Menu Shader Parameters") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, "Save Shader Preset As") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, diff --git a/intl/msg_hash_vn.h b/intl/msg_hash_vn.h index c685d4354b..b83eb25d02 100644 --- a/intl/msg_hash_vn.h +++ b/intl/msg_hash_vn.h @@ -1653,8 +1653,6 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS, "Preview Shader Parameters") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET, "Tải Shader Preset") -MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS, - "Menu Shader Parameters") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_AS, "Save Shader Preset As") MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE, From 26b2ff7c3f7348c743bc3fdf7acb41e4bd05494b Mon Sep 17 00:00:00 2001 From: radius Date: Tue, 6 Feb 2018 22:39:36 -0500 Subject: [PATCH 12/16] build fixes --- configuration.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/configuration.c b/configuration.c index 7e4d3360a5..061d10dc76 100644 --- a/configuration.c +++ b/configuration.c @@ -3232,12 +3232,8 @@ bool config_load_shader_preset(void) rarch_system_info_t *system = runloop_get_system_info(); const char *core_name = system ? system->info.library_name : NULL; const char *game_name = path_basename(path_get(RARCH_PATH_BASENAME)); - char *parent_path = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); /* final path for parent-dir-specific configuration (prefix+suffix) */ char parent_name[PATH_MAX_LENGTH]; - settings_t *settings = config_get_ptr(); - rarch_system_info_t *system = runloop_get_system_info(); - if (!string_is_empty(path_get(RARCH_PATH_BASENAME))) fill_pathname_parent_dir_name(parent_name, path_get(RARCH_PATH_BASENAME), sizeof(parent_name)); @@ -3255,6 +3251,9 @@ bool config_load_shader_preset(void) core_path = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); /* final path for game-specific configuration (prefix+suffix) */ game_path = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); + /* final path for parent-dir-specific configuration (prefix+suffix) */ + parent_path = (char*)malloc(PATH_MAX_LENGTH * sizeof(char)); + shader_directory[0] = core_path[0] = game_path[0] = '\0'; fill_pathname_join (shader_directory, settings->paths.directory_video_shader, From 4eb7ca5db1b166e8f241112f5cce1d9f6bd6b35e Mon Sep 17 00:00:00 2001 From: radius Date: Tue, 6 Feb 2018 23:21:17 -0500 Subject: [PATCH 13/16] better fix for shader next / shader prev --- command.c | 3 ++- gfx/video_driver.c | 6 ------ menu/menu_shader.c | 10 ++++++---- menu/menu_shader.h | 2 +- 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/command.c b/command.c index bc03534094..5a78e23ea7 100644 --- a/command.c +++ b/command.c @@ -220,6 +220,7 @@ bool command_set_shader(const char *arg) { char msg[256]; enum rarch_shader_type type = RARCH_SHADER_NONE; + struct video_shader *shader = menu_shader_get(); switch (msg_hash_to_file_type(msg_hash_calculate(path_get_extension(arg)))) { @@ -246,7 +247,7 @@ bool command_set_shader(const char *arg) arg); retroarch_set_shader_preset(arg); - return video_driver_set_shader(type, arg); + return menu_shader_manager_set_preset(shader, type, arg); } #if defined(HAVE_COMMAND) && defined(HAVE_CHEEVOS) diff --git a/gfx/video_driver.c b/gfx/video_driver.c index 538f6327df..13232e940d 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -678,12 +678,6 @@ bool video_driver_set_shader(enum rarch_shader_type type, if (current_video->set_shader) ret = current_video->set_shader(video_driver_data, type, path); - if (ret) - { - menu_shader_manager_free(); - menu_shader_manager_init(); - } - return ret; } diff --git a/menu/menu_shader.c b/menu/menu_shader.c index 96c6680484..0aa87873e9 100644 --- a/menu/menu_shader.c +++ b/menu/menu_shader.c @@ -249,7 +249,7 @@ bool menu_shader_manager_init(void) * * Sets shader preset. **/ -void menu_shader_manager_set_preset(void *data, +bool menu_shader_manager_set_preset(void *data, unsigned type, const char *preset_path) { #ifdef HAVE_SHADER_MANAGER @@ -261,7 +261,7 @@ void menu_shader_manager_set_preset(void *data, if (!video_driver_set_shader((enum rarch_shader_type)type, preset_path)) { configuration_set_bool(settings, settings->bools.video_shader_enable, false); - return; + return false; } /* Makes sure that we use Menu Preset shader on driver reinit. @@ -272,7 +272,7 @@ void menu_shader_manager_set_preset(void *data, configuration_set_bool(settings, settings->bools.video_shader_enable, true); if (!preset_path || !shader) - return; + return false; /* Load stored Preset into menu on success. * Used when a preset is directly loaded. @@ -281,7 +281,7 @@ void menu_shader_manager_set_preset(void *data, conf = config_file_new(preset_path); if (!conf) - return; + return false; RARCH_LOG("Setting Menu shader: %s.\n", preset_path); @@ -293,6 +293,8 @@ void menu_shader_manager_set_preset(void *data, config_file_free(conf); menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); + + return true; #endif } diff --git a/menu/menu_shader.h b/menu/menu_shader.h index 460b65fdea..92a3345dd5 100644 --- a/menu/menu_shader.h +++ b/menu/menu_shader.h @@ -48,7 +48,7 @@ bool menu_shader_manager_init(void); * * Sets shader preset. **/ -void menu_shader_manager_set_preset( +bool menu_shader_manager_set_preset( void *data, unsigned type, const char *preset_path); /** From c02ff23ab6d834d76af55d4d80a68c8228ef2fbf Mon Sep 17 00:00:00 2001 From: radius Date: Tue, 6 Feb 2018 23:32:09 -0500 Subject: [PATCH 14/16] fix these entries --- menu/menu_displaylist.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 9be506d276..a06163bd37 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -1384,17 +1384,17 @@ static int menu_displaylist_parse_shader_options(menu_displaylist_info_t *info) MENU_SETTING_ACTION, 0, 0); menu_entries_append_enum(info->list, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_CORE), - msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_AS), + msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_CORE), MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_CORE, MENU_SETTING_ACTION, 0, 0); menu_entries_append_enum(info->list, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_PARENT), - msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_AS), + msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_PARENT), MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_PARENT, MENU_SETTING_ACTION, 0, 0); menu_entries_append_enum(info->list, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_SAVE_GAME), - msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_AS), + msg_hash_to_str(MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GAME), MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GAME, MENU_SETTING_ACTION, 0, 0); menu_entries_append_enum(info->list, From ce5b481fc867c7feb8103efd8382c8367d22ebb3 Mon Sep 17 00:00:00 2001 From: radius Date: Wed, 7 Feb 2018 00:10:54 -0500 Subject: [PATCH 15/16] android build fix --- gfx/video_driver.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gfx/video_driver.c b/gfx/video_driver.c index 13232e940d..ffa4c310fa 100644 --- a/gfx/video_driver.c +++ b/gfx/video_driver.c @@ -31,7 +31,7 @@ #include #include -#include "menu/menu_shader.h" +#include "../menu/menu_shader.h" #ifdef HAVE_CONFIG_H #include "../config.h" From 11df7366624d124d0203e8f84d319d6dbb0f3926 Mon Sep 17 00:00:00 2001 From: radius Date: Wed, 7 Feb 2018 15:58:41 -0500 Subject: [PATCH 16/16] coverity fixes --- command.c | 1 + configuration.c | 1 + 2 files changed, 2 insertions(+) diff --git a/command.c b/command.c index 5a78e23ea7..27ebfdeb72 100644 --- a/command.c +++ b/command.c @@ -1424,6 +1424,7 @@ static bool command_event_save_core_config(void) { runloop_msg_queue_push(msg_hash_to_str(MSG_CONFIG_DIRECTORY_NOT_SET), 1, 180, true); RARCH_ERR("[Config]: %s\n", msg_hash_to_str(MSG_CONFIG_DIRECTORY_NOT_SET)); + free (config_dir); return false; } diff --git a/configuration.c b/configuration.c index 061d10dc76..44ca8c52f9 100644 --- a/configuration.c +++ b/configuration.c @@ -3355,6 +3355,7 @@ success: free(shader_directory); free(core_path); free(game_path); + free(parent_path); config_file_free(new_conf); return true; }