diff options
Diffstat (limited to '')
| -rw-r--r-- | src/common/settings.h | 1 | ||||
| -rw-r--r-- | src/core/hle/service/nvflinger/nvflinger.cpp | 11 | ||||
| -rw-r--r-- | src/yuzu/configuration/config.cpp | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_general.cpp | 4 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_general.ui | 30 | ||||
| -rw-r--r-- | src/yuzu/main.cpp | 2 | ||||
| -rw-r--r-- | src/yuzu_cmd/config.cpp | 1 | ||||
| -rw-r--r-- | src/yuzu_cmd/default_ini.h | 4 |
8 files changed, 49 insertions, 6 deletions
diff --git a/src/common/settings.h b/src/common/settings.h index 32dfb1d9f..df1762d1b 100644 --- a/src/common/settings.h +++ b/src/common/settings.h | |||
| @@ -339,6 +339,7 @@ struct Values { | |||
| 339 | Setting<bool> use_nvdec_emulation{true, "use_nvdec_emulation"}; | 339 | Setting<bool> use_nvdec_emulation{true, "use_nvdec_emulation"}; |
| 340 | Setting<bool> accelerate_astc{true, "accelerate_astc"}; | 340 | Setting<bool> accelerate_astc{true, "accelerate_astc"}; |
| 341 | Setting<bool> use_vsync{true, "use_vsync"}; | 341 | Setting<bool> use_vsync{true, "use_vsync"}; |
| 342 | BasicSetting<u16> fps_cap{1000, "fps_cap"}; | ||
| 342 | BasicSetting<bool> disable_fps_limit{false, "disable_fps_limit"}; | 343 | BasicSetting<bool> disable_fps_limit{false, "disable_fps_limit"}; |
| 343 | Setting<ShaderBackend> shader_backend{ShaderBackend::GLASM, "shader_backend"}; | 344 | Setting<ShaderBackend> shader_backend{ShaderBackend::GLASM, "shader_backend"}; |
| 344 | Setting<bool> use_asynchronous_shaders{false, "use_asynchronous_shaders"}; | 345 | Setting<bool> use_asynchronous_shaders{false, "use_asynchronous_shaders"}; |
diff --git a/src/core/hle/service/nvflinger/nvflinger.cpp b/src/core/hle/service/nvflinger/nvflinger.cpp index 1d810562f..941748970 100644 --- a/src/core/hle/service/nvflinger/nvflinger.cpp +++ b/src/core/hle/service/nvflinger/nvflinger.cpp | |||
| @@ -307,11 +307,12 @@ void NVFlinger::Compose() { | |||
| 307 | } | 307 | } |
| 308 | 308 | ||
| 309 | s64 NVFlinger::GetNextTicks() const { | 309 | s64 NVFlinger::GetNextTicks() const { |
| 310 | if (Settings::values.disable_fps_limit.GetValue()) { | 310 | static constexpr s64 max_hertz = 120LL; |
| 311 | return 0; | 311 | |
| 312 | } | 312 | const auto& settings = Settings::values; |
| 313 | constexpr s64 max_hertz = 120LL; | 313 | const bool unlocked_fps = settings.disable_fps_limit.GetValue(); |
| 314 | return (1000000000 * (1LL << swap_interval)) / max_hertz; | 314 | const s64 fps_cap = unlocked_fps ? static_cast<s64>(settings.fps_cap.GetValue()) : 1; |
| 315 | return (1000000000 * (1LL << swap_interval)) / (max_hertz * fps_cap); | ||
| 315 | } | 316 | } |
| 316 | 317 | ||
| 317 | } // namespace Service::NVFlinger | 318 | } // namespace Service::NVFlinger |
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index 52b3ed02e..4d89b00e9 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp | |||
| @@ -823,6 +823,7 @@ void Config::ReadRendererValues() { | |||
| 823 | ReadGlobalSetting(Settings::values.bg_blue); | 823 | ReadGlobalSetting(Settings::values.bg_blue); |
| 824 | 824 | ||
| 825 | if (global) { | 825 | if (global) { |
| 826 | ReadBasicSetting(Settings::values.fps_cap); | ||
| 826 | ReadBasicSetting(Settings::values.renderer_debug); | 827 | ReadBasicSetting(Settings::values.renderer_debug); |
| 827 | ReadBasicSetting(Settings::values.enable_nsight_aftermath); | 828 | ReadBasicSetting(Settings::values.enable_nsight_aftermath); |
| 828 | ReadBasicSetting(Settings::values.disable_shader_loop_safety_checks); | 829 | ReadBasicSetting(Settings::values.disable_shader_loop_safety_checks); |
| @@ -1357,6 +1358,7 @@ void Config::SaveRendererValues() { | |||
| 1357 | WriteGlobalSetting(Settings::values.bg_blue); | 1358 | WriteGlobalSetting(Settings::values.bg_blue); |
| 1358 | 1359 | ||
| 1359 | if (global) { | 1360 | if (global) { |
| 1361 | WriteBasicSetting(Settings::values.fps_cap); | ||
| 1360 | WriteBasicSetting(Settings::values.renderer_debug); | 1362 | WriteBasicSetting(Settings::values.renderer_debug); |
| 1361 | WriteBasicSetting(Settings::values.enable_nsight_aftermath); | 1363 | WriteBasicSetting(Settings::values.enable_nsight_aftermath); |
| 1362 | WriteBasicSetting(Settings::values.disable_shader_loop_safety_checks); | 1364 | WriteBasicSetting(Settings::values.disable_shader_loop_safety_checks); |
diff --git a/src/yuzu/configuration/configure_general.cpp b/src/yuzu/configuration/configure_general.cpp index 18f25def6..d79d2e23e 100644 --- a/src/yuzu/configuration/configure_general.cpp +++ b/src/yuzu/configuration/configure_general.cpp | |||
| @@ -48,6 +48,8 @@ void ConfigureGeneral::SetConfiguration() { | |||
| 48 | ui->toggle_frame_limit->setChecked(Settings::values.use_frame_limit.GetValue()); | 48 | ui->toggle_frame_limit->setChecked(Settings::values.use_frame_limit.GetValue()); |
| 49 | ui->frame_limit->setValue(Settings::values.frame_limit.GetValue()); | 49 | ui->frame_limit->setValue(Settings::values.frame_limit.GetValue()); |
| 50 | 50 | ||
| 51 | ui->fps_cap->setValue(Settings::values.fps_cap.GetValue()); | ||
| 52 | |||
| 51 | ui->button_reset_defaults->setEnabled(runtime_lock); | 53 | ui->button_reset_defaults->setEnabled(runtime_lock); |
| 52 | 54 | ||
| 53 | if (Settings::IsConfiguringGlobal()) { | 55 | if (Settings::IsConfiguringGlobal()) { |
| @@ -87,6 +89,8 @@ void ConfigureGeneral::ApplyConfiguration() { | |||
| 87 | UISettings::values.pause_when_in_background = ui->toggle_background_pause->isChecked(); | 89 | UISettings::values.pause_when_in_background = ui->toggle_background_pause->isChecked(); |
| 88 | UISettings::values.hide_mouse = ui->toggle_hide_mouse->isChecked(); | 90 | UISettings::values.hide_mouse = ui->toggle_hide_mouse->isChecked(); |
| 89 | 91 | ||
| 92 | Settings::values.fps_cap.SetValue(ui->fps_cap->value()); | ||
| 93 | |||
| 90 | // Guard if during game and set to game-specific value | 94 | // Guard if during game and set to game-specific value |
| 91 | if (Settings::values.use_frame_limit.UsingGlobal()) { | 95 | if (Settings::values.use_frame_limit.UsingGlobal()) { |
| 92 | Settings::values.use_frame_limit.SetValue(ui->toggle_frame_limit->checkState() == | 96 | Settings::values.use_frame_limit.SetValue(ui->toggle_frame_limit->checkState() == |
diff --git a/src/yuzu/configuration/configure_general.ui b/src/yuzu/configuration/configure_general.ui index bc7041090..bc3c4b481 100644 --- a/src/yuzu/configuration/configure_general.ui +++ b/src/yuzu/configuration/configure_general.ui | |||
| @@ -52,6 +52,36 @@ | |||
| 52 | </layout> | 52 | </layout> |
| 53 | </item> | 53 | </item> |
| 54 | <item> | 54 | <item> |
| 55 | <layout class="QHBoxLayout" name="horizontalLayout_2"> | ||
| 56 | <item> | ||
| 57 | <widget class="QLabel" name="fps_cap_label"> | ||
| 58 | <property name="text"> | ||
| 59 | <string>Framerate Cap</string> | ||
| 60 | </property> | ||
| 61 | <property name="toolTip"> | ||
| 62 | <string>Requires the use of the FPS Limiter Toggle hotkey to take effect.</string> | ||
| 63 | </property> | ||
| 64 | </widget> | ||
| 65 | </item> | ||
| 66 | <item> | ||
| 67 | <widget class="QSpinBox" name="fps_cap"> | ||
| 68 | <property name="suffix"> | ||
| 69 | <string>x</string> | ||
| 70 | </property> | ||
| 71 | <property name="minimum"> | ||
| 72 | <number>1</number> | ||
| 73 | </property> | ||
| 74 | <property name="maximum"> | ||
| 75 | <number>1000</number> | ||
| 76 | </property> | ||
| 77 | <property name="value"> | ||
| 78 | <number>500</number> | ||
| 79 | </property> | ||
| 80 | </widget> | ||
| 81 | </item> | ||
| 82 | </layout> | ||
| 83 | </item> | ||
| 84 | <item> | ||
| 55 | <widget class="QCheckBox" name="use_multi_core"> | 85 | <widget class="QCheckBox" name="use_multi_core"> |
| 56 | <property name="text"> | 86 | <property name="text"> |
| 57 | <string>Multicore CPU Emulation</string> | 87 | <string>Multicore CPU Emulation</string> |
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 2f84ada73..3d747e8d9 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp | |||
| @@ -2919,7 +2919,7 @@ void GMainWindow::UpdateStatusBar() { | |||
| 2919 | } | 2919 | } |
| 2920 | if (Settings::values.disable_fps_limit) { | 2920 | if (Settings::values.disable_fps_limit) { |
| 2921 | game_fps_label->setText( | 2921 | game_fps_label->setText( |
| 2922 | tr("Game: %1 FPS (Limit off)").arg(results.average_game_fps, 0, 'f', 0)); | 2922 | tr("Game: %1 FPS (Unlocked)").arg(results.average_game_fps, 0, 'f', 0)); |
| 2923 | } else { | 2923 | } else { |
| 2924 | game_fps_label->setText(tr("Game: %1 FPS").arg(results.average_game_fps, 0, 'f', 0)); | 2924 | game_fps_label->setText(tr("Game: %1 FPS").arg(results.average_game_fps, 0, 'f', 0)); |
| 2925 | } | 2925 | } |
diff --git a/src/yuzu_cmd/config.cpp b/src/yuzu_cmd/config.cpp index 640d7d111..d4ca6bb57 100644 --- a/src/yuzu_cmd/config.cpp +++ b/src/yuzu_cmd/config.cpp | |||
| @@ -457,6 +457,7 @@ void Config::ReadValues() { | |||
| 457 | ReadSetting("Renderer", Settings::values.gpu_accuracy); | 457 | ReadSetting("Renderer", Settings::values.gpu_accuracy); |
| 458 | ReadSetting("Renderer", Settings::values.use_asynchronous_gpu_emulation); | 458 | ReadSetting("Renderer", Settings::values.use_asynchronous_gpu_emulation); |
| 459 | ReadSetting("Renderer", Settings::values.use_vsync); | 459 | ReadSetting("Renderer", Settings::values.use_vsync); |
| 460 | ReadSetting("Renderer", Settings::values.fps_cap); | ||
| 460 | ReadSetting("Renderer", Settings::values.disable_fps_limit); | 461 | ReadSetting("Renderer", Settings::values.disable_fps_limit); |
| 461 | ReadSetting("Renderer", Settings::values.shader_backend); | 462 | ReadSetting("Renderer", Settings::values.shader_backend); |
| 462 | ReadSetting("Renderer", Settings::values.use_asynchronous_shaders); | 463 | ReadSetting("Renderer", Settings::values.use_asynchronous_shaders); |
diff --git a/src/yuzu_cmd/default_ini.h b/src/yuzu_cmd/default_ini.h index b7115b06a..b2b2095d1 100644 --- a/src/yuzu_cmd/default_ini.h +++ b/src/yuzu_cmd/default_ini.h | |||
| @@ -299,6 +299,10 @@ bg_red = | |||
| 299 | bg_blue = | 299 | bg_blue = |
| 300 | bg_green = | 300 | bg_green = |
| 301 | 301 | ||
| 302 | # Caps the unlocked framerate to a multiple of the title's target FPS. | ||
| 303 | # 1 - 1000: Target FPS multiple cap. 1000 (default) | ||
| 304 | fps_cap = | ||
| 305 | |||
| 302 | [Audio] | 306 | [Audio] |
| 303 | # Which audio output engine to use. | 307 | # Which audio output engine to use. |
| 304 | # auto (default): Auto-select | 308 | # auto (default): Auto-select |