From 5034fb943c1f0a1e8d77a27925275f18e98818bc Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sun, 6 Apr 2025 21:05:20 +1000 Subject: [PATCH] Hotkeys: Rearrange categories for some shortcuts and improve naming --- src/core/hotkeys.cpp | 535 +++++++++++++++++++++++------------------- src/core/settings.cpp | 27 ++- src/core/settings.h | 1 + src/core/system.cpp | 17 +- 4 files changed, 318 insertions(+), 262 deletions(-) diff --git a/src/core/hotkeys.cpp b/src/core/hotkeys.cpp index 00b672946..5e45acef8 100644 --- a/src/core/hotkeys.cpp +++ b/src/core/hotkeys.cpp @@ -155,134 +155,100 @@ static bool CanPause() return false; } +#define DEFINE_NON_ANDROID_HOTKEY(name, category, display_name, handler) \ + DEFINE_HOTKEY(name, category, display_name, handler) + +#else + +#define DEFINE_NON_ANDROID_HOTKEY(name, category, display_name, handler) + #endif BEGIN_HOTKEY_LIST(g_common_hotkeys) -DEFINE_HOTKEY("FastForward", TRANSLATE_NOOP("Hotkeys", "General"), TRANSLATE_NOOP("Hotkeys", "Fast Forward"), +DEFINE_NON_ANDROID_HOTKEY("OpenPauseMenu", TRANSLATE_NOOP("Hotkeys", "Interface"), + TRANSLATE_NOOP("Hotkeys", "Open Pause Menu"), [](s32 pressed) { + if (!pressed && CanPause()) + FullscreenUI::OpenPauseMenu(); + }) + +DEFINE_NON_ANDROID_HOTKEY("OpenCheatsMenu", TRANSLATE_NOOP("Hotkeys", "Interface"), + TRANSLATE_NOOP("Hotkeys", "Open Cheat Settings"), [](s32 pressed) { + if (!pressed && CanPause()) + FullscreenUI::OpenCheatsMenu(); + }) + +DEFINE_NON_ANDROID_HOTKEY("OpenAchievements", TRANSLATE_NOOP("Hotkeys", "Interface"), + TRANSLATE_NOOP("Hotkeys", "Open Achievement List"), [](s32 pressed) { + if (!pressed && CanPause()) + FullscreenUI::OpenAchievementsWindow(); + }) + +DEFINE_NON_ANDROID_HOTKEY("OpenLeaderboards", TRANSLATE_NOOP("Hotkeys", "Interface"), + TRANSLATE_NOOP("Hotkeys", "Open Leaderboard List"), [](s32 pressed) { + if (!pressed && CanPause()) + FullscreenUI::OpenLeaderboardsWindow(); + }) + +DEFINE_NON_ANDROID_HOTKEY("Screenshot", TRANSLATE_NOOP("Hotkeys", "Interface"), + TRANSLATE_NOOP("Hotkeys", "Save Screenshot"), [](s32 pressed) { + if (!pressed) + System::SaveScreenshot(); + }) + +DEFINE_NON_ANDROID_HOTKEY("TogglePause", TRANSLATE_NOOP("Hotkeys", "Interface"), + TRANSLATE_NOOP("Hotkeys", "Toggle Pause"), [](s32 pressed) { + if (!pressed && CanPause()) + System::PauseSystem(!System::IsPaused()); + }) + +DEFINE_NON_ANDROID_HOTKEY("ToggleFullscreen", TRANSLATE_NOOP("Hotkeys", "Interface"), + TRANSLATE_NOOP("Hotkeys", "Toggle Fullscreen"), [](s32 pressed) { + if (!pressed) + Host::SetFullscreen(!Host::IsFullscreen()); + }) + +DEFINE_HOTKEY("FastForward", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Fast Forward (Hold)"), [](s32 pressed) { if (pressed < 0) return; System::SetFastForwardEnabled(pressed > 0); }) -DEFINE_HOTKEY("ToggleFastForward", TRANSLATE_NOOP("Hotkeys", "General"), - TRANSLATE_NOOP("Hotkeys", "Toggle Fast Forward"), [](s32 pressed) { +DEFINE_HOTKEY("ToggleFastForward", TRANSLATE_NOOP("Hotkeys", "System"), + TRANSLATE_NOOP("Hotkeys", "Fast Forward (Toggle)"), [](s32 pressed) { if (!pressed) System::SetFastForwardEnabled(!System::IsFastForwardEnabled()); }) -DEFINE_HOTKEY("Turbo", TRANSLATE_NOOP("Hotkeys", "General"), TRANSLATE_NOOP("Hotkeys", "Turbo"), [](s32 pressed) { +DEFINE_HOTKEY("Turbo", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Turbo (Hold)"), [](s32 pressed) { if (pressed < 0) return; System::SetTurboEnabled(pressed > 0); }) -DEFINE_HOTKEY("ToggleTurbo", TRANSLATE_NOOP("Hotkeys", "General"), TRANSLATE_NOOP("Hotkeys", "Toggle Turbo"), +DEFINE_HOTKEY("ToggleTurbo", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Turbo (Toggle)"), [](s32 pressed) { if (!pressed) System::SetTurboEnabled(!System::IsTurboEnabled()); }) -#ifndef __ANDROID__ -DEFINE_HOTKEY("ToggleFullscreen", TRANSLATE_NOOP("Hotkeys", "General"), TRANSLATE_NOOP("Hotkeys", "Toggle Fullscreen"), - [](s32 pressed) { - if (!pressed) - Host::SetFullscreen(!Host::IsFullscreen()); - }) - -DEFINE_HOTKEY("TogglePause", TRANSLATE_NOOP("Hotkeys", "General"), TRANSLATE_NOOP("Hotkeys", "Toggle Pause"), - [](s32 pressed) { - if (!pressed && CanPause()) - System::PauseSystem(!System::IsPaused()); - }) - -DEFINE_HOTKEY("PowerOff", TRANSLATE_NOOP("Hotkeys", "General"), TRANSLATE_NOOP("Hotkeys", "Power Off System"), - [](s32 pressed) { - if (!pressed && CanPause()) - Host::RequestSystemShutdown(true, g_settings.save_state_on_exit, true); - }) - -DEFINE_HOTKEY("OpenPauseMenu", TRANSLATE_NOOP("Hotkeys", "General"), TRANSLATE_NOOP("Hotkeys", "Open Pause Menu"), - [](s32 pressed) { - if (!pressed && CanPause()) - FullscreenUI::OpenPauseMenu(); - }) - -DEFINE_HOTKEY("OpenCheatsMenu", TRANSLATE_NOOP("Hotkeys", "General"), TRANSLATE_NOOP("Hotkeys", "Open Cheat Settings"), - [](s32 pressed) { - if (!pressed && CanPause()) - FullscreenUI::OpenCheatsMenu(); - }) - -DEFINE_HOTKEY("ChangeDisc", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Change Disc"), - [](s32 pressed) { - if (!pressed) - FullscreenUI::OpenDiscChangeMenu(); - }) - -DEFINE_HOTKEY("Screenshot", TRANSLATE_NOOP("Hotkeys", "General"), TRANSLATE_NOOP("Hotkeys", "Save Screenshot"), - [](s32 pressed) { - if (!pressed) - System::SaveScreenshot(); - }) - -DEFINE_HOTKEY("ToggleMediaCapture", TRANSLATE_NOOP("Hotkeys", "General"), - TRANSLATE_NOOP("Hotkeys", "Toggle Media Capture"), [](s32 pressed) { - if (!pressed) - { - if (System::GetMediaCapture()) - System::StopMediaCapture(); - else - System::StartMediaCapture(); - } - }) - -DEFINE_HOTKEY("OpenAchievements", TRANSLATE_NOOP("Hotkeys", "General"), - TRANSLATE_NOOP("Hotkeys", "Open Achievement List"), [](s32 pressed) { - if (!pressed && CanPause()) - FullscreenUI::OpenAchievementsWindow(); - }) - -DEFINE_HOTKEY("OpenLeaderboards", TRANSLATE_NOOP("Hotkeys", "General"), - TRANSLATE_NOOP("Hotkeys", "Open Leaderboard List"), [](s32 pressed) { - if (!pressed && CanPause()) - FullscreenUI::OpenLeaderboardsWindow(); - }) -#endif - -DEFINE_HOTKEY("RecordSingleFrameGPUDump", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Record Single Frame GPU Trace"), [](s32 pressed) { - if (!pressed) - System::StartRecordingGPUDump(nullptr, 1); - }) - -DEFINE_HOTKEY("RecordMultiFrameGPUDump", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Record Multi-Frame GPU Trace"), [](s32 pressed) { - if (pressed > 0) - System::StartRecordingGPUDump(nullptr, 0); - else - System::StopRecordingGPUDump(); - }) +DEFINE_NON_ANDROID_HOTKEY("PowerOff", TRANSLATE_NOOP("Hotkeys", "System"), + TRANSLATE_NOOP("Hotkeys", "Power Off System"), [](s32 pressed) { + if (!pressed && CanPause()) + Host::RequestSystemShutdown(true, g_settings.save_state_on_exit, true); + }) DEFINE_HOTKEY("Reset", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Reset System"), [](s32 pressed) { if (!pressed) Host::RunOnCPUThread(System::ResetSystem); }) -DEFINE_HOTKEY("SwapMemoryCards", TRANSLATE_NOOP("Hotkeys", "System"), - TRANSLATE_NOOP("Hotkeys", "Swap Memory Card Slots"), [](s32 pressed) { - if (!pressed) - System::SwapMemoryCards(); - }) - -#ifndef __ANDROID__ -DEFINE_HOTKEY("FrameStep", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Frame Step"), - [](s32 pressed) { - if (!pressed) - System::DoFrameStep(); - }) -#endif +DEFINE_NON_ANDROID_HOTKEY("ChangeDisc", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Change Disc"), + [](s32 pressed) { + if (!pressed) + FullscreenUI::OpenDiscChangeMenu(); + }) DEFINE_HOTKEY("Rewind", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Rewind"), [](s32 pressed) { if (pressed < 0) @@ -290,9 +256,32 @@ DEFINE_HOTKEY("Rewind", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hot System::SetRewindState(pressed > 0); }) +DEFINE_NON_ANDROID_HOTKEY("FrameStep", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Frame Step"), + [](s32 pressed) { + if (!pressed) + System::DoFrameStep(); + }) + +DEFINE_HOTKEY("SwapMemoryCards", TRANSLATE_NOOP("Hotkeys", "System"), + TRANSLATE_NOOP("Hotkeys", "Swap Memory Card Slots"), [](s32 pressed) { + if (!pressed) + System::SwapMemoryCards(); + }) + +DEFINE_NON_ANDROID_HOTKEY("ToggleMediaCapture", TRANSLATE_NOOP("Hotkeys", "System"), + TRANSLATE_NOOP("Hotkeys", "Toggle Media Capture"), [](s32 pressed) { + if (!pressed) + { + if (System::GetMediaCapture()) + System::StopMediaCapture(); + else + System::StartMediaCapture(); + } + }) + DEFINE_HOTKEY("ToggleOverclocking", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Toggle Clock Speed Control (Overclocking)"), [](s32 pressed) { - if (!pressed && System::IsValid()) + if (!pressed && System::IsValid() && !Achievements::IsHardcoreModeActive()) { g_settings.cpu_overclock_enable = !g_settings.cpu_overclock_enable; g_settings.UpdateOverclockActive(); @@ -338,7 +327,8 @@ DEFINE_HOTKEY("DecreaseEmulationSpeed", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Decrease Emulation Speed"), [](s32 pressed) { if (!pressed && System::IsValid()) { - g_settings.emulation_speed = std::max(g_settings.emulation_speed - 0.1f, 0.1f); + g_settings.emulation_speed = + std::max(g_settings.emulation_speed - 0.1f, Achievements::IsHardcoreModeActive() ? 1.0f : 0.1f); System::UpdateSpeedLimiterState(); Host::AddIconOSDMessage( "EmulationSpeedChange", ICON_FA_TACHOMETER_ALT, @@ -352,7 +342,8 @@ DEFINE_HOTKEY("ResetEmulationSpeed", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Reset Emulation Speed"), [](s32 pressed) { if (!pressed && System::IsValid()) { - g_settings.emulation_speed = Host::GetFloatSettingValue("Main", "EmulationSpeed", 1.0f); + g_settings.emulation_speed = std::max(Host::GetFloatSettingValue("Main", "EmulationSpeed", 1.0f), + Achievements::IsHardcoreModeActive() ? 1.0f : 0.1f); System::UpdateSpeedLimiterState(); Host::AddIconOSDMessage( "EmulationSpeedChange", ICON_FA_TACHOMETER_ALT, @@ -362,131 +353,6 @@ DEFINE_HOTKEY("ResetEmulationSpeed", TRANSLATE_NOOP("Hotkeys", "System"), } }) -DEFINE_HOTKEY("ToggleSoftwareRendering", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Toggle Software Rendering"), [](s32 pressed) { - if (!pressed && System::IsValid()) - System::ToggleSoftwareRendering(); - }) - -DEFINE_HOTKEY("TogglePGXP", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Toggle PGXP"), - [](s32 pressed) { - if (!pressed && System::IsValid()) - { - System::ClearMemorySaveStates(true, true); - - g_settings.gpu_pgxp_enable = !g_settings.gpu_pgxp_enable; - GPUThread::UpdateSettings(true, false, false); - - Host::AddKeyedOSDMessage("TogglePGXP", - g_settings.gpu_pgxp_enable ? - TRANSLATE_STR("OSDMessage", "PGXP is now enabled.") : - TRANSLATE_STR("OSDMessage", "PGXP is now disabled."), - 5.0f); - - if (g_settings.gpu_pgxp_enable) - CPU::PGXP::Initialize(); - else - CPU::PGXP::Shutdown(); - - // we need to recompile all blocks if pgxp is toggled on/off - CPU::CodeCache::Reset(); - - // need to swap interpreters - System::InterruptExecution(); - } - }) - -DEFINE_HOTKEY("IncreaseResolutionScale", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Increase Resolution Scale"), [](s32 pressed) { - if (!pressed && System::IsValid()) - HotkeyModifyResolutionScale(1); - }) - -DEFINE_HOTKEY("DecreaseResolutionScale", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Decrease Resolution Scale"), [](s32 pressed) { - if (!pressed && System::IsValid()) - HotkeyModifyResolutionScale(-1); - }) - -DEFINE_HOTKEY("TogglePostProcessing", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Toggle Post-Processing"), [](s32 pressed) { - if (!pressed && System::IsValid()) - GPUPresenter::TogglePostProcessing(); - }) - -DEFINE_HOTKEY("ReloadPostProcessingShaders", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Reload Post Processing Shaders"), [](s32 pressed) { - if (!pressed && System::IsValid()) - GPUPresenter::ReloadPostProcessingSettings(true, true, true); - }) - -DEFINE_HOTKEY("ReloadTextureReplacements", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Reload Texture Replacements"), [](s32 pressed) { - if (!pressed && System::IsValid()) - GPUThread::RunOnThread([]() { GPUTextureCache::ReloadTextureReplacements(true); }); - }) - -DEFINE_HOTKEY("ToggleWidescreen", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Toggle Widescreen"), - [](s32 pressed) { - if (!pressed) - System::ToggleWidescreen(); - }) - -DEFINE_HOTKEY("TogglePGXPDepth", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Toggle PGXP Depth Buffer"), [](s32 pressed) { - if (!pressed && System::IsValid()) - { - if (!g_settings.gpu_pgxp_enable) - return; - - System::ClearMemorySaveStates(true, true); - - g_settings.gpu_pgxp_depth_buffer = !g_settings.gpu_pgxp_depth_buffer; - GPUThread::UpdateSettings(true, false, false); - - Host::AddKeyedOSDMessage("TogglePGXPDepth", - g_settings.gpu_pgxp_depth_buffer ? - TRANSLATE_STR("OSDMessage", "PGXP Depth Buffer is now enabled.") : - TRANSLATE_STR("OSDMessage", "PGXP Depth Buffer is now disabled."), - 5.0f); - } - }) - -DEFINE_HOTKEY("TogglePGXPCPU", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Toggle PGXP CPU Mode"), - [](s32 pressed) { - if (pressed && System::IsValid()) - { - if (!g_settings.gpu_pgxp_enable) - return; - - System::ClearMemorySaveStates(true, true); - - // GPU thread is unchanged - g_settings.gpu_pgxp_cpu = !g_settings.gpu_pgxp_cpu; - - Host::AddKeyedOSDMessage("TogglePGXPCPU", - g_settings.gpu_pgxp_cpu ? - TRANSLATE_STR("OSDMessage", "PGXP CPU mode is now enabled.") : - TRANSLATE_STR("OSDMessage", "PGXP CPU mode is now disabled."), - 5.0f); - - CPU::PGXP::Shutdown(); - CPU::PGXP::Initialize(); - - // we need to recompile all blocks if pgxp is toggled on/off - CPU::CodeCache::Reset(); - - // need to swap interpreters - System::InterruptExecution(); - } - }) - -DEFINE_HOTKEY("ToggleOSD", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Toggle On-Screen Display"), - [](s32 pressed) { - if (!pressed) - HotkeyToggleOSD(); - }) - DEFINE_HOTKEY("RotateClockwise", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Rotate Display Clockwise"), [](s32 pressed) { if (!pressed) @@ -508,97 +374,216 @@ DEFINE_HOTKEY("RotateCounterclockwise", TRANSLATE_NOOP("Hotkeys", "Graphics"), } }) +DEFINE_HOTKEY("ToggleOSD", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Toggle On-Screen Display"), + [](s32 pressed) { + if (!pressed) + HotkeyToggleOSD(); + }) + +DEFINE_HOTKEY("ToggleSoftwareRendering", TRANSLATE_NOOP("Hotkeys", "Graphics"), + TRANSLATE_NOOP("Hotkeys", "Toggle Software Rendering"), [](s32 pressed) { + if (!pressed && System::IsValid()) + System::ToggleSoftwareRendering(); + }) + +DEFINE_HOTKEY("TogglePGXP", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Toggle PGXP"), + [](s32 pressed) { + if (!pressed && System::IsValid()) + { + System::ClearMemorySaveStates(true, true); + + // This is pretty yikes, if PGXP was off we'll have already disabled all the dependent settings. + g_settings.gpu_pgxp_enable = !g_settings.gpu_pgxp_enable; + { + const auto lock = Host::GetSettingsLock(); + const SettingsInterface& si = *Host::GetSettingsInterface(); + if (g_settings.gpu_pgxp_enable) + g_settings.LoadPGXPSettings(si); + g_settings.FixIncompatibleSettings(si, false); + } + + GPUThread::UpdateSettings(true, false, false); + + Host::AddKeyedOSDMessage("TogglePGXP", + g_settings.gpu_pgxp_enable ? + TRANSLATE_STR("OSDMessage", "PGXP is now enabled.") : + TRANSLATE_STR("OSDMessage", "PGXP is now disabled."), + Host::OSD_QUICK_DURATION); + + if (g_settings.gpu_pgxp_enable) + CPU::PGXP::Initialize(); + else + CPU::PGXP::Shutdown(); + + // we need to recompile all blocks if pgxp is toggled on/off + CPU::CodeCache::Reset(); + + // need to swap interpreters + System::InterruptExecution(); + } + }) + +DEFINE_HOTKEY("TogglePGXPDepth", TRANSLATE_NOOP("Hotkeys", "Graphics"), + TRANSLATE_NOOP("Hotkeys", "Toggle PGXP Depth Buffer"), [](s32 pressed) { + if (!pressed && System::IsValid()) + { + if (!g_settings.gpu_pgxp_enable) + return; + + System::ClearMemorySaveStates(true, true); + + g_settings.gpu_pgxp_depth_buffer = !g_settings.gpu_pgxp_depth_buffer; + GPUThread::UpdateSettings(true, false, false); + + Host::AddIconOSDMessage("TogglePGXPDepth", ICON_FA_SITEMAP, + g_settings.gpu_pgxp_depth_buffer ? + TRANSLATE_STR("OSDMessage", "PGXP Depth Buffer is now enabled.") : + TRANSLATE_STR("OSDMessage", "PGXP Depth Buffer is now disabled."), + Host::OSD_QUICK_DURATION); + } + }) + +DEFINE_HOTKEY("ToggleWidescreen", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Toggle Widescreen"), + [](s32 pressed) { + if (!pressed) + System::ToggleWidescreen(); + }) + +DEFINE_HOTKEY("TogglePostProcessing", TRANSLATE_NOOP("Hotkeys", "Graphics"), + TRANSLATE_NOOP("Hotkeys", "Toggle Post-Processing"), [](s32 pressed) { + if (!pressed && System::IsValid()) + GPUPresenter::TogglePostProcessing(); + }) + +DEFINE_HOTKEY("ReloadPostProcessingShaders", TRANSLATE_NOOP("Hotkeys", "Graphics"), + TRANSLATE_NOOP("Hotkeys", "Reload Post Processing Shaders"), [](s32 pressed) { + if (!pressed && System::IsValid()) + GPUPresenter::ReloadPostProcessingSettings(true, true, true); + }) + +DEFINE_HOTKEY("ReloadTextureReplacements", TRANSLATE_NOOP("Hotkeys", "Graphics"), + TRANSLATE_NOOP("Hotkeys", "Reload Texture Replacements"), [](s32 pressed) { + if (!pressed && System::IsValid()) + GPUThread::RunOnThread([]() { GPUTextureCache::ReloadTextureReplacements(true); }); + }) + +DEFINE_HOTKEY("IncreaseResolutionScale", TRANSLATE_NOOP("Hotkeys", "Graphics"), + TRANSLATE_NOOP("Hotkeys", "Increase Resolution Scale"), [](s32 pressed) { + if (!pressed && System::IsValid()) + HotkeyModifyResolutionScale(1); + }) + +DEFINE_HOTKEY("DecreaseResolutionScale", TRANSLATE_NOOP("Hotkeys", "Graphics"), + TRANSLATE_NOOP("Hotkeys", "Decrease Resolution Scale"), [](s32 pressed) { + if (!pressed && System::IsValid()) + HotkeyModifyResolutionScale(-1); + }) + +DEFINE_HOTKEY("RecordSingleFrameGPUDump", TRANSLATE_NOOP("Hotkeys", "Graphics"), + TRANSLATE_NOOP("Hotkeys", "Record Single Frame GPU Trace"), [](s32 pressed) { + if (!pressed) + System::StartRecordingGPUDump(nullptr, 1); + }) + +DEFINE_HOTKEY("RecordMultiFrameGPUDump", TRANSLATE_NOOP("Hotkeys", "Graphics"), + TRANSLATE_NOOP("Hotkeys", "Record Multi-Frame GPU Trace"), [](s32 pressed) { + if (pressed > 0) + System::StartRecordingGPUDump(nullptr, 0); + else + System::StopRecordingGPUDump(); + }) + // See gte.cpp. #ifndef __ANDROID__ -DEFINE_HOTKEY("FreecamToggle", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Freecam Toggle"), +DEFINE_HOTKEY("FreecamToggle", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Toggle"), [](s32 pressed) { if (!pressed && !Achievements::IsHardcoreModeActive()) GTE::SetFreecamEnabled(!GTE::IsFreecamEnabled()); }) -DEFINE_HOTKEY("FreecamReset", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Freecam Reset"), +DEFINE_HOTKEY("FreecamReset", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Reset"), [](s32 pressed) { if (!pressed && !Achievements::IsHardcoreModeActive()) GTE::ResetFreecam(); }) -DEFINE_HOTKEY("FreecamMoveLeft", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Freecam Move Left"), - [](s32 pressed) { +DEFINE_HOTKEY("FreecamMoveLeft", TRANSLATE_NOOP("Hotkeys", "Free Camera"), + TRANSLATE_NOOP("Hotkeys", "Freecam Move Left"), [](s32 pressed) { if (Achievements::IsHardcoreModeActive()) return; GTE::SetFreecamMoveAxis(0, std::max(static_cast(pressed), 0.0f)); }) -DEFINE_HOTKEY("FreecamMoveRight", TRANSLATE_NOOP("Hotkeys", "Graphics"), +DEFINE_HOTKEY("FreecamMoveRight", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Move Right"), [](s32 pressed) { if (Achievements::IsHardcoreModeActive()) return; GTE::SetFreecamMoveAxis(0, std::min(static_cast(-pressed), 0.0f)); }) -DEFINE_HOTKEY("FreecamMoveUp", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Freecam Move Up"), +DEFINE_HOTKEY("FreecamMoveUp", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Move Up"), [](s32 pressed) { if (Achievements::IsHardcoreModeActive()) return; GTE::SetFreecamMoveAxis(1, std::max(static_cast(pressed), 0.0f)); }) -DEFINE_HOTKEY("FreecamMoveDown", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Freecam Move Down"), - [](s32 pressed) { +DEFINE_HOTKEY("FreecamMoveDown", TRANSLATE_NOOP("Hotkeys", "Free Camera"), + TRANSLATE_NOOP("Hotkeys", "Freecam Move Down"), [](s32 pressed) { if (Achievements::IsHardcoreModeActive()) return; GTE::SetFreecamMoveAxis(1, std::min(static_cast(-pressed), 0.0f)); }) -DEFINE_HOTKEY("FreecamMoveForward", TRANSLATE_NOOP("Hotkeys", "Graphics"), +DEFINE_HOTKEY("FreecamMoveForward", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Move Forward"), [](s32 pressed) { if (Achievements::IsHardcoreModeActive()) return; GTE::SetFreecamMoveAxis(2, std::min(static_cast(-pressed), 0.0f)); }) -DEFINE_HOTKEY("FreecamMoveBackward", TRANSLATE_NOOP("Hotkeys", "Graphics"), +DEFINE_HOTKEY("FreecamMoveBackward", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Move Backward"), [](s32 pressed) { if (Achievements::IsHardcoreModeActive()) return; GTE::SetFreecamMoveAxis(2, std::max(static_cast(pressed), 0.0f)); }) -DEFINE_HOTKEY("FreecamRotateLeft", TRANSLATE_NOOP("Hotkeys", "Graphics"), +DEFINE_HOTKEY("FreecamRotateLeft", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Rotate Left"), [](s32 pressed) { if (Achievements::IsHardcoreModeActive()) return; GTE::SetFreecamRotateAxis(1, std::max(static_cast(pressed), 0.0f)); }) -DEFINE_HOTKEY("FreecamRotateRight", TRANSLATE_NOOP("Hotkeys", "Graphics"), +DEFINE_HOTKEY("FreecamRotateRight", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Rotate Right"), [](s32 pressed) { if (Achievements::IsHardcoreModeActive()) return; GTE::SetFreecamRotateAxis(1, std::min(static_cast(-pressed), 0.0f)); }) -DEFINE_HOTKEY("FreecamRotateForward", TRANSLATE_NOOP("Hotkeys", "Graphics"), +DEFINE_HOTKEY("FreecamRotateForward", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Rotate Forward"), [](s32 pressed) { if (Achievements::IsHardcoreModeActive()) return; GTE::SetFreecamRotateAxis(0, std::min(static_cast(-pressed), 0.0f)); }) -DEFINE_HOTKEY("FreecamRotateBackward", TRANSLATE_NOOP("Hotkeys", "Graphics"), +DEFINE_HOTKEY("FreecamRotateBackward", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Rotate Backward"), [](s32 pressed) { if (Achievements::IsHardcoreModeActive()) return; GTE::SetFreecamRotateAxis(0, std::max(static_cast(pressed), 0.0f)); }) -DEFINE_HOTKEY("FreecamRollLeft", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Freecam Roll Left"), - [](s32 pressed) { +DEFINE_HOTKEY("FreecamRollLeft", TRANSLATE_NOOP("Hotkeys", "Free Camera"), + TRANSLATE_NOOP("Hotkeys", "Freecam Roll Left"), [](s32 pressed) { if (Achievements::IsHardcoreModeActive()) return; GTE::SetFreecamRotateAxis(2, std::min(static_cast(-pressed), 0.0f)); }) -DEFINE_HOTKEY("FreecamRollRight", TRANSLATE_NOOP("Hotkeys", "Graphics"), +DEFINE_HOTKEY("FreecamRollRight", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Roll Right"), [](s32 pressed) { if (Achievements::IsHardcoreModeActive()) return; @@ -768,4 +753,68 @@ MAKE_SAVE_STATE_HOTKEY(true, 10, TRANSLATE_NOOP("Hotkeys", "Save Global State 10 #undef MAKE_SAVE_STATE_HOTKEY #undef MAKE_LOAD_STATE_HOTKEY +DEFINE_HOTKEY("TogglePGXPCPU", TRANSLATE_NOOP("Hotkeys", "Debugging"), + TRANSLATE_NOOP("Hotkeys", "Toggle PGXP CPU Mode"), [](s32 pressed) { + if (pressed && System::IsValid()) + { + if (!g_settings.gpu_pgxp_enable) + return; + + System::ClearMemorySaveStates(true, true); + + // GPU thread is unchanged + g_settings.gpu_pgxp_cpu = !g_settings.gpu_pgxp_cpu; + + Host::AddIconOSDMessage("TogglePGXPCPU", ICON_FA_BEZIER_CURVE, + g_settings.gpu_pgxp_cpu ? + TRANSLATE_STR("OSDMessage", "PGXP CPU mode is now enabled.") : + TRANSLATE_STR("OSDMessage", "PGXP CPU mode is now disabled."), + Host::OSD_QUICK_DURATION); + + CPU::PGXP::Shutdown(); + CPU::PGXP::Initialize(); + + // we need to recompile all blocks if pgxp is toggled on/off + CPU::CodeCache::Reset(); + + // need to swap interpreters + System::InterruptExecution(); + } + }) +DEFINE_HOTKEY("TogglePGXPPreserveProjPrecision", TRANSLATE_NOOP("Hotkeys", "Debugging"), + TRANSLATE_NOOP("Hotkeys", "Toggle PGXP Preserve Projection Precision"), [](s32 pressed) { + if (pressed && System::IsValid()) + { + if (!g_settings.gpu_pgxp_enable) + return; + + // GPU thread is unchanged + g_settings.gpu_pgxp_preserve_proj_fp = !g_settings.gpu_pgxp_preserve_proj_fp; + + Host::AddIconOSDMessage( + "TogglePGXPPreserveProjPrecision", ICON_FA_DRAW_POLYGON, + g_settings.gpu_pgxp_preserve_proj_fp ? + TRANSLATE_STR("OSDMessage", "PGXP Preserve Projection Precision is now enabled.") : + TRANSLATE_STR("OSDMessage", "PGXP Preserve Projection Precision is now disabled."), + Host::OSD_QUICK_DURATION); + } + }) +DEFINE_HOTKEY("ToggleVRAMView", TRANSLATE_NOOP("Hotkeys", "Debugging"), TRANSLATE_NOOP("Hotkeys", "Toggle VRAM View"), + [](s32 pressed) { + if (pressed && System::IsValid()) + { + if (!g_settings.gpu_pgxp_enable || Achievements::IsHardcoreModeActive()) + return; + + g_settings.gpu_show_vram = !g_settings.gpu_show_vram; + GPUThread::UpdateSettings(true, false, false); + + Host::AddIconOSDMessage("ToggleVRAMView", ICON_FA_FILE_ALT, + g_settings.gpu_show_vram ? + TRANSLATE_STR("OSDMessage", "Now showing VRAM.") : + TRANSLATE_STR("OSDMessage", "Now showing display."), + Host::OSD_QUICK_DURATION); + } + }) + END_HOTKEY_LIST() diff --git a/src/core/settings.cpp b/src/core/settings.cpp index d61ba6058..6990e04ae 100644 --- a/src/core/settings.cpp +++ b/src/core/settings.cpp @@ -265,17 +265,7 @@ void Settings::Load(const SettingsInterface& si, const SettingsInterface& contro gpu_texture_cache = si.GetBoolValue("GPU", "EnableTextureCache", false); display_24bit_chroma_smoothing = si.GetBoolValue("GPU", "ChromaSmoothing24Bit", false); gpu_pgxp_enable = si.GetBoolValue("GPU", "PGXPEnable", false); - gpu_pgxp_culling = si.GetBoolValue("GPU", "PGXPCulling", true); - gpu_pgxp_texture_correction = si.GetBoolValue("GPU", "PGXPTextureCorrection", true); - gpu_pgxp_color_correction = si.GetBoolValue("GPU", "PGXPColorCorrection", false); - gpu_pgxp_vertex_cache = si.GetBoolValue("GPU", "PGXPVertexCache", false); - gpu_pgxp_cpu = si.GetBoolValue("GPU", "PGXPCPU", false); - gpu_pgxp_preserve_proj_fp = si.GetBoolValue("GPU", "PGXPPreserveProjFP", false); - gpu_pgxp_tolerance = si.GetFloatValue("GPU", "PGXPTolerance", -1.0f); - gpu_pgxp_depth_buffer = si.GetBoolValue("GPU", "PGXPDepthBuffer", false); - gpu_pgxp_disable_2d = si.GetBoolValue("GPU", "PGXPDisableOn2DPolygons", false); - gpu_pgxp_transparent_depth = si.GetBoolValue("GPU", "PGXPTransparentDepthTest", false); - SetPGXPDepthClearThreshold(si.GetFloatValue("GPU", "PGXPDepthThreshold", DEFAULT_GPU_PGXP_DEPTH_THRESHOLD)); + LoadPGXPSettings(si); gpu_show_vram = si.GetBoolValue("Debug", "ShowVRAM"); gpu_dump_cpu_to_vram_copies = si.GetBoolValue("Debug", "DumpCPUToVRAMCopies"); gpu_dump_vram_to_cpu_copies = si.GetBoolValue("Debug", "DumpVRAMToCPUCopies"); @@ -531,6 +521,21 @@ void Settings::Load(const SettingsInterface& si, const SettingsInterface& contro #endif } +void Settings::LoadPGXPSettings(const SettingsInterface& si) +{ + gpu_pgxp_culling = si.GetBoolValue("GPU", "PGXPCulling", true); + gpu_pgxp_texture_correction = si.GetBoolValue("GPU", "PGXPTextureCorrection", true); + gpu_pgxp_color_correction = si.GetBoolValue("GPU", "PGXPColorCorrection", false); + gpu_pgxp_vertex_cache = si.GetBoolValue("GPU", "PGXPVertexCache", false); + gpu_pgxp_cpu = si.GetBoolValue("GPU", "PGXPCPU", false); + gpu_pgxp_preserve_proj_fp = si.GetBoolValue("GPU", "PGXPPreserveProjFP", false); + gpu_pgxp_tolerance = si.GetFloatValue("GPU", "PGXPTolerance", -1.0f); + gpu_pgxp_depth_buffer = si.GetBoolValue("GPU", "PGXPDepthBuffer", false); + gpu_pgxp_disable_2d = si.GetBoolValue("GPU", "PGXPDisableOn2DPolygons", false); + gpu_pgxp_transparent_depth = si.GetBoolValue("GPU", "PGXPTransparentDepthTest", false); + SetPGXPDepthClearThreshold(si.GetFloatValue("GPU", "PGXPDepthThreshold", DEFAULT_GPU_PGXP_DEPTH_THRESHOLD)); +} + void Settings::Save(SettingsInterface& si, bool ignore_base) const { si.SetStringValue("Console", "Region", GetConsoleRegionName(region)); diff --git a/src/core/settings.h b/src/core/settings.h index 7f45d1367..e99cda12a 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -441,6 +441,7 @@ struct Settings : public GPUSettings }; void Load(const SettingsInterface& si, const SettingsInterface& controller_si); + void LoadPGXPSettings(const SettingsInterface& si); void Save(SettingsInterface& si, bool ignore_base) const; static void Clear(SettingsInterface& si); diff --git a/src/core/system.cpp b/src/core/system.cpp index 549cb67fc..262fbfcc9 100644 --- a/src/core/system.cpp +++ b/src/core/system.cpp @@ -5755,18 +5755,19 @@ void System::ToggleWidescreen() if (g_settings.gpu_widescreen_hack) { - Host::AddKeyedOSDMessage( - "WidescreenHack", - fmt::format(TRANSLATE_FS("OSDMessage", "Widescreen hack is now enabled, and aspect ratio is set to {}."), + Host::AddIconOSDMessage( + "ToggleWidescreen", ICON_FA_SHAPES, + fmt::format(TRANSLATE_FS("OSDMessage", "Widescreen rendering is now enabled, and aspect ratio is set to {}."), Settings::GetDisplayAspectRatioDisplayName(g_settings.display_aspect_ratio)), - 5.0f); + Host::OSD_QUICK_DURATION); } else { - Host::AddKeyedOSDMessage( - "WidescreenHack", - fmt::format(TRANSLATE_FS("OSDMessage", "Widescreen hack is now disabled, and aspect ratio is set to {}."), - Settings::GetDisplayAspectRatioDisplayName(g_settings.display_aspect_ratio), 5.0f)); + Host::AddIconOSDMessage( + "ToggleWidescreen", ICON_FA_SHAPES, + fmt::format(TRANSLATE_FS("OSDMessage", "Widescreen rendering is now disabled, and aspect ratio is set to {}."), + Settings::GetDisplayAspectRatioDisplayName(g_settings.display_aspect_ratio), + Host::OSD_QUICK_DURATION)); } UpdateGTEAspectRatio();