diff --git a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.cpp b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.cpp index 0ca706b28a..dc7df7699a 100644 --- a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.cpp +++ b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.cpp @@ -43,7 +43,7 @@ namespace rsx : home_menu_settings_page(x, y, width, height, use_separators, parent, get_localized_string(localized_string_id::HOME_MENU_SETTINGS_VIDEO)) { add_dropdown(&g_cfg.video.frame_limit, "Frame Limit"); - add_unsigned_slider(&g_cfg.video.anisotropic_level_override, "Anisotropic Filter Override", "x", 2, {{0, "Auto"}}); + add_unsigned_slider(&g_cfg.video.anisotropic_level_override, "Anisotropic Filter Override", "x", 2, {{0, "Auto"}}, {14}); add_dropdown(&g_cfg.video.output_scaling, "Output Scaling"); if (g_cfg.video.renderer == video_renderer::vulkan && g_cfg.video.output_scaling == output_scaling_mode::fsr) @@ -65,7 +65,7 @@ namespace rsx add_dropdown(&g_cfg.core.sleep_timers_accuracy, "Sleep Timers Accuracy"); add_signed_slider(&g_cfg.core.max_spurs_threads, "Max SPURS Threads", "", 1); - add_unsigned_slider(&g_cfg.video.driver_wakeup_delay, "Driver Wake-Up Delay", " µs", 20, {}, g_cfg.video.driver_wakeup_delay.min, 800); + add_unsigned_slider(&g_cfg.video.driver_wakeup_delay, "Driver Wake-Up Delay", " µs", 20, {}, {}, g_cfg.video.driver_wakeup_delay.min, 800); add_signed_slider(&g_cfg.video.vblank_rate, "VBlank Frequency", " Hz", 30); add_checkbox(&g_cfg.video.vblank_ntsc, "VBlank NTSC Fixup"); diff --git a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.h b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.h index dca88824ad..5e2b3209da 100644 --- a/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.h +++ b/rpcs3/Emu/RSX/Overlays/HomeMenu/overlay_home_menu_settings.h @@ -127,12 +127,13 @@ namespace rsx } template - void add_unsigned_slider(cfg::uint* setting, const std::string& text, const std::string& suffix, u64 step_size, std::map special_labels = {}, u64 minimum = Min, u64 maximum = Max) + void add_unsigned_slider(cfg::uint* setting, const std::string& text, const std::string& suffix, u64 step_size, std::map special_labels = {}, const std::set& exceptions = {}, u64 minimum = Min, u64 maximum = Max) { ensure(setting && setting->get_is_dynamic()); + ensure(!exceptions.contains(minimum) && !exceptions.contains(maximum)); std::unique_ptr elem = std::make_unique>(setting, text, suffix, special_labels, minimum, maximum); - add_item(elem, [this, setting, text, step_size, minimum, maximum](pad_button btn) -> page_navigation + add_item(elem, [this, setting, text, step_size, minimum, maximum, exceptions](pad_button btn) -> page_navigation { if (setting) { @@ -141,11 +142,19 @@ namespace rsx { case pad_button::dpad_left: case pad_button::ls_left: - value = step_size > value ? minimum : std::max(value - step_size, minimum); + do + { + value = step_size > value ? minimum : std::max(value - step_size, minimum); + } + while (exceptions.contains(value)); break; case pad_button::dpad_right: case pad_button::ls_right: - value = std::min(value + step_size, maximum); + do + { + value = std::min(value + step_size, maximum); + } + while (exceptions.contains(value)); break; default: return page_navigation::stay;