summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/common/settings.h1
-rw-r--r--src/core/hle/service/nvflinger/nvflinger.cpp11
-rw-r--r--src/yuzu/configuration/config.cpp2
-rw-r--r--src/yuzu/configuration/configure_general.cpp4
-rw-r--r--src/yuzu/configuration/configure_general.ui30
-rw-r--r--src/yuzu/main.cpp2
-rw-r--r--src/yuzu_cmd/config.cpp1
-rw-r--r--src/yuzu_cmd/default_ini.h4
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
309s64 NVFlinger::GetNextTicks() const { 309s64 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 =
299bg_blue = 299bg_blue =
300bg_green = 300bg_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)
304fps_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