diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 0650f5911f..d48d061259 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -4679,6 +4679,10 @@ MSG_HASH( MSG_FAILED_TO_APPLY_SHADER, "Failed to apply shader." ) +MSG_HASH( + MSG_FAILED_TO_APPLY_SHADER_PRESET, + "Failed to apply shader preset:" + ) MSG_HASH( MSG_FAILED_TO_BIND_SOCKET, "Failed to bind socket." diff --git a/menu/menu_setting.c b/menu/menu_setting.c index c7476e0234..1b418e0109 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -5713,8 +5713,8 @@ void general_write_handler(rarch_setting_t *setting) settings->bools.video_shader_enable = false; } } - /* TODO/FIXME - fallthrough here intentional? */ #endif + break; case MENU_ENUM_LABEL_VIDEO_THREADED: { if (*setting->value.target.boolean) diff --git a/menu/menu_shader.c b/menu/menu_shader.c index f05cc64d70..217f2039ca 100644 --- a/menu/menu_shader.c +++ b/menu/menu_shader.c @@ -158,7 +158,32 @@ bool menu_shader_manager_set_preset(void *data, if (!video_driver_set_shader(type, preset_path)) { - configuration_set_bool(settings, settings->bools.video_shader_enable, false); + char msg[PATH_MAX_LENGTH]; + const char *preset_file = NULL; + + msg[0] = '\0'; + + /* Display error message */ + if (!string_is_empty(preset_path)) + preset_file = path_basename(preset_path); + + snprintf(msg, sizeof(msg), "%s %s", + msg_hash_to_str(MSG_FAILED_TO_APPLY_SHADER_PRESET), + string_is_empty(preset_file) ? "(null)" : preset_file); + + runloop_msg_queue_push( + msg, 1, 180, true, NULL, + MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_ERROR); + + /* We don't want to disable shaders entirely here, + * just reset number of passes + * > Note: Disabling shaders at this point would in + * fact be dangerous, since it changes the number of + * entries in the shader options menu which can in + * turn lead to the menu selection pointer going out + * of bounds. This causes undefined behaviour/segfaults */ + menu_shader_manager_clear_num_passes(); + return false; } diff --git a/msg_hash.h b/msg_hash.h index 8fdfcc786c..cd6354c3f7 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -389,6 +389,7 @@ enum msg_hash_enums MSG_STATE_SLOT, MSG_STARTING_MOVIE_RECORD_TO, MSG_FAILED_TO_APPLY_SHADER, + MSG_FAILED_TO_APPLY_SHADER_PRESET, MSG_APPLYING_SHADER, MSG_SHADER, MSG_REDIRECTING_SAVESTATE_TO,