diff options
| author | 2021-07-22 21:03:50 -0400 | |
|---|---|---|
| committer | 2021-07-23 22:04:36 -0400 | |
| commit | 2c6e274b3978ce4ee1af98e21f101e7037ec9d24 (patch) | |
| tree | 3342199a569d656ed23b0d2407c01f939066aaed | |
| parent | Merge pull request #6686 from ReinUsesLisp/vk-optimal-copy (diff) | |
| download | yuzu-2c6e274b3978ce4ee1af98e21f101e7037ec9d24.tar.gz yuzu-2c6e274b3978ce4ee1af98e21f101e7037ec9d24.tar.xz yuzu-2c6e274b3978ce4ee1af98e21f101e7037ec9d24.zip | |
config, nvflinger: Add FPS cap setting
Allows finer tuning of the FPS limit.
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 ce1bc647d..8ad320aed 100644 --- a/src/common/settings.h +++ b/src/common/settings.h | |||
| @@ -330,6 +330,7 @@ struct Values { | |||
| 330 | Setting<bool> use_nvdec_emulation{true, "use_nvdec_emulation"}; | 330 | Setting<bool> use_nvdec_emulation{true, "use_nvdec_emulation"}; |
| 331 | Setting<bool> accelerate_astc{true, "accelerate_astc"}; | 331 | Setting<bool> accelerate_astc{true, "accelerate_astc"}; |
| 332 | Setting<bool> use_vsync{true, "use_vsync"}; | 332 | Setting<bool> use_vsync{true, "use_vsync"}; |
| 333 | BasicSetting<u16> fps_cap{1000, "fps_cap"}; | ||
| 333 | BasicSetting<bool> disable_fps_limit{false, "disable_fps_limit"}; | 334 | BasicSetting<bool> disable_fps_limit{false, "disable_fps_limit"}; |
| 334 | Setting<bool> use_assembly_shaders{false, "use_assembly_shaders"}; | 335 | Setting<bool> use_assembly_shaders{false, "use_assembly_shaders"}; |
| 335 | Setting<bool> use_asynchronous_shaders{false, "use_asynchronous_shaders"}; | 336 | 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 a5e032959..52bb07d16 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 | } | 828 | } |
| 828 | 829 | ||
| @@ -1352,6 +1353,7 @@ void Config::SaveRendererValues() { | |||
| 1352 | WriteGlobalSetting(Settings::values.bg_blue); | 1353 | WriteGlobalSetting(Settings::values.bg_blue); |
| 1353 | 1354 | ||
| 1354 | if (global) { | 1355 | if (global) { |
| 1356 | WriteBasicSetting(Settings::values.fps_cap); | ||
| 1355 | WriteBasicSetting(Settings::values.renderer_debug); | 1357 | WriteBasicSetting(Settings::values.renderer_debug); |
| 1356 | } | 1358 | } |
| 1357 | 1359 | ||
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 03a909d17..ce7415592 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp | |||
| @@ -2921,7 +2921,7 @@ void GMainWindow::UpdateStatusBar() { | |||
| 2921 | } | 2921 | } |
| 2922 | if (Settings::values.disable_fps_limit) { | 2922 | if (Settings::values.disable_fps_limit) { |
| 2923 | game_fps_label->setText( | 2923 | game_fps_label->setText( |
| 2924 | tr("Game: %1 FPS (Limit off)").arg(results.average_game_fps, 0, 'f', 0)); | 2924 | tr("Game: %1 FPS (Unlocked)").arg(results.average_game_fps, 0, 'f', 0)); |
| 2925 | } else { | 2925 | } else { |
| 2926 | game_fps_label->setText(tr("Game: %1 FPS").arg(results.average_game_fps, 0, 'f', 0)); | 2926 | game_fps_label->setText(tr("Game: %1 FPS").arg(results.average_game_fps, 0, 'f', 0)); |
| 2927 | } | 2927 | } |
diff --git a/src/yuzu_cmd/config.cpp b/src/yuzu_cmd/config.cpp index 3e22fee37..12a61fc43 100644 --- a/src/yuzu_cmd/config.cpp +++ b/src/yuzu_cmd/config.cpp | |||
| @@ -455,6 +455,7 @@ void Config::ReadValues() { | |||
| 455 | ReadSetting("Renderer", Settings::values.gpu_accuracy); | 455 | ReadSetting("Renderer", Settings::values.gpu_accuracy); |
| 456 | ReadSetting("Renderer", Settings::values.use_asynchronous_gpu_emulation); | 456 | ReadSetting("Renderer", Settings::values.use_asynchronous_gpu_emulation); |
| 457 | ReadSetting("Renderer", Settings::values.use_vsync); | 457 | ReadSetting("Renderer", Settings::values.use_vsync); |
| 458 | ReadSetting("Renderer", Settings::values.fps_cap); | ||
| 458 | ReadSetting("Renderer", Settings::values.disable_fps_limit); | 459 | ReadSetting("Renderer", Settings::values.disable_fps_limit); |
| 459 | ReadSetting("Renderer", Settings::values.use_assembly_shaders); | 460 | ReadSetting("Renderer", Settings::values.use_assembly_shaders); |
| 460 | ReadSetting("Renderer", Settings::values.use_asynchronous_shaders); | 461 | ReadSetting("Renderer", Settings::values.use_asynchronous_shaders); |
diff --git a/src/yuzu_cmd/default_ini.h b/src/yuzu_cmd/default_ini.h index 88d33ecab..833c346bc 100644 --- a/src/yuzu_cmd/default_ini.h +++ b/src/yuzu_cmd/default_ini.h | |||
| @@ -290,6 +290,10 @@ bg_red = | |||
| 290 | bg_blue = | 290 | bg_blue = |
| 291 | bg_green = | 291 | bg_green = |
| 292 | 292 | ||
| 293 | # Caps the unlocked framerate to a multiple of the title's target FPS. | ||
| 294 | # 1 - 1000: Target FPS multiple cap. 1000 (default) | ||
| 295 | fps_cap = | ||
| 296 | |||
| 293 | [Audio] | 297 | [Audio] |
| 294 | # Which audio output engine to use. | 298 | # Which audio output engine to use. |
| 295 | # auto (default): Auto-select | 299 | # auto (default): Auto-select |