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 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
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 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 =
290bg_blue = 290bg_blue =
291bg_green = 291bg_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)
295fps_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