summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar lat9nq2023-04-30 15:39:00 -0400
committerGravatar lat9nq2023-05-02 21:51:29 -0400
commit6f0929df82be77f116988cf16cde4ebbc5f978dc (patch)
treeb12668b13bce18dc9b628cf77b2d935ca0ab4f71
parentMerge pull request #9973 from GPUCode/async-present (diff)
downloadyuzu-6f0929df82be77f116988cf16cde4ebbc5f978dc.tar.gz
yuzu-6f0929df82be77f116988cf16cde4ebbc5f978dc.tar.xz
yuzu-6f0929df82be77f116988cf16cde4ebbc5f978dc.zip
configuration: Expose separate swap present modes
Previously, yuzu would try and guess which vsync mode to use given different scenarios, but apparently we didn't always get it right. This exposes the separate modes in a drop-down the user can select. If a mode isn't available in Vulkan, it defaults to FIFO.
-rw-r--r--src/common/settings.cpp3
-rw-r--r--src/common/settings.h9
-rw-r--r--src/core/telemetry_session.cpp15
-rw-r--r--src/video_core/renderer_vulkan/vk_swapchain.cpp27
-rw-r--r--src/yuzu/bootmanager.cpp13
-rw-r--r--src/yuzu/configuration/config.cpp10
-rw-r--r--src/yuzu/configuration/configure_graphics.cpp9
-rw-r--r--src/yuzu/configuration/configure_graphics.ui49
-rw-r--r--src/yuzu/configuration/configure_graphics_advanced.cpp5
-rw-r--r--src/yuzu/configuration/configure_graphics_advanced.ui10
-rw-r--r--src/yuzu_cmd/config.cpp2
11 files changed, 115 insertions, 37 deletions
diff --git a/src/common/settings.cpp b/src/common/settings.cpp
index 77ff21128..92794f4a2 100644
--- a/src/common/settings.cpp
+++ b/src/common/settings.cpp
@@ -60,7 +60,7 @@ void LogSettings() {
60 log_setting("Renderer_NvdecEmulation", values.nvdec_emulation.GetValue()); 60 log_setting("Renderer_NvdecEmulation", values.nvdec_emulation.GetValue());
61 log_setting("Renderer_AccelerateASTC", values.accelerate_astc.GetValue()); 61 log_setting("Renderer_AccelerateASTC", values.accelerate_astc.GetValue());
62 log_setting("Renderer_AsyncASTC", values.async_astc.GetValue()); 62 log_setting("Renderer_AsyncASTC", values.async_astc.GetValue());
63 log_setting("Renderer_UseVsync", values.use_vsync.GetValue()); 63 log_setting("Renderer_UseVsync", values.vsync_mode.GetValue());
64 log_setting("Renderer_ShaderBackend", values.shader_backend.GetValue()); 64 log_setting("Renderer_ShaderBackend", values.shader_backend.GetValue());
65 log_setting("Renderer_UseAsynchronousShaders", values.use_asynchronous_shaders.GetValue()); 65 log_setting("Renderer_UseAsynchronousShaders", values.use_asynchronous_shaders.GetValue());
66 log_setting("Renderer_AnisotropicFilteringLevel", values.max_anisotropy.GetValue()); 66 log_setting("Renderer_AnisotropicFilteringLevel", values.max_anisotropy.GetValue());
@@ -222,7 +222,6 @@ void RestoreGlobalState(bool is_powered_on) {
222 values.nvdec_emulation.SetGlobal(true); 222 values.nvdec_emulation.SetGlobal(true);
223 values.accelerate_astc.SetGlobal(true); 223 values.accelerate_astc.SetGlobal(true);
224 values.async_astc.SetGlobal(true); 224 values.async_astc.SetGlobal(true);
225 values.use_vsync.SetGlobal(true);
226 values.shader_backend.SetGlobal(true); 225 values.shader_backend.SetGlobal(true);
227 values.use_asynchronous_shaders.SetGlobal(true); 226 values.use_asynchronous_shaders.SetGlobal(true);
228 values.use_fast_gpu_time.SetGlobal(true); 227 values.use_fast_gpu_time.SetGlobal(true);
diff --git a/src/common/settings.h b/src/common/settings.h
index 5379d0dd5..2371495e4 100644
--- a/src/common/settings.h
+++ b/src/common/settings.h
@@ -16,6 +16,12 @@
16 16
17namespace Settings { 17namespace Settings {
18 18
19enum class VSyncMode : u32 {
20 Immediate,
21 FIFO,
22 Mailbox,
23};
24
19enum class RendererBackend : u32 { 25enum class RendererBackend : u32 {
20 OpenGL = 0, 26 OpenGL = 0,
21 Vulkan = 1, 27 Vulkan = 1,
@@ -455,7 +461,8 @@ struct Values {
455 SwitchableSetting<NvdecEmulation> nvdec_emulation{NvdecEmulation::GPU, "nvdec_emulation"}; 461 SwitchableSetting<NvdecEmulation> nvdec_emulation{NvdecEmulation::GPU, "nvdec_emulation"};
456 SwitchableSetting<bool> accelerate_astc{true, "accelerate_astc"}; 462 SwitchableSetting<bool> accelerate_astc{true, "accelerate_astc"};
457 SwitchableSetting<bool> async_astc{false, "async_astc"}; 463 SwitchableSetting<bool> async_astc{false, "async_astc"};
458 SwitchableSetting<bool> use_vsync{true, "use_vsync"}; 464 Setting<VSyncMode, true> vsync_mode{VSyncMode::FIFO, VSyncMode::Immediate, VSyncMode::Mailbox,
465 "use_vsync"};
459 SwitchableSetting<ShaderBackend, true> shader_backend{ShaderBackend::GLSL, ShaderBackend::GLSL, 466 SwitchableSetting<ShaderBackend, true> shader_backend{ShaderBackend::GLSL, ShaderBackend::GLSL,
460 ShaderBackend::SPIRV, "shader_backend"}; 467 ShaderBackend::SPIRV, "shader_backend"};
461 SwitchableSetting<bool> use_asynchronous_shaders{false, "use_asynchronous_shaders"}; 468 SwitchableSetting<bool> use_asynchronous_shaders{false, "use_asynchronous_shaders"};
diff --git a/src/core/telemetry_session.cpp b/src/core/telemetry_session.cpp
index 9178b00ca..6ec8e440c 100644
--- a/src/core/telemetry_session.cpp
+++ b/src/core/telemetry_session.cpp
@@ -85,6 +85,18 @@ static const char* TranslateNvdecEmulation(Settings::NvdecEmulation backend) {
85 return "Unknown"; 85 return "Unknown";
86} 86}
87 87
88constexpr const char* TranslateVSyncMode(Settings::VSyncMode mode) {
89 switch (mode) {
90 case Settings::VSyncMode::Immediate:
91 return "Immediate";
92 case Settings::VSyncMode::FIFO:
93 return "FIFO";
94 case Settings::VSyncMode::Mailbox:
95 return "Mailbox";
96 }
97 return "Unknown";
98}
99
88u64 GetTelemetryId() { 100u64 GetTelemetryId() {
89 u64 telemetry_id{}; 101 u64 telemetry_id{};
90 const auto filename = Common::FS::GetYuzuPath(Common::FS::YuzuPath::ConfigDir) / "telemetry_id"; 102 const auto filename = Common::FS::GetYuzuPath(Common::FS::YuzuPath::ConfigDir) / "telemetry_id";
@@ -241,7 +253,8 @@ void TelemetrySession::AddInitialInfo(Loader::AppLoader& app_loader,
241 AddField(field_type, "Renderer_NvdecEmulation", 253 AddField(field_type, "Renderer_NvdecEmulation",
242 TranslateNvdecEmulation(Settings::values.nvdec_emulation.GetValue())); 254 TranslateNvdecEmulation(Settings::values.nvdec_emulation.GetValue()));
243 AddField(field_type, "Renderer_AccelerateASTC", Settings::values.accelerate_astc.GetValue()); 255 AddField(field_type, "Renderer_AccelerateASTC", Settings::values.accelerate_astc.GetValue());
244 AddField(field_type, "Renderer_UseVsync", Settings::values.use_vsync.GetValue()); 256 AddField(field_type, "Renderer_UseVsync",
257 TranslateVSyncMode(Settings::values.vsync_mode.GetValue()));
245 AddField(field_type, "Renderer_ShaderBackend", 258 AddField(field_type, "Renderer_ShaderBackend",
246 static_cast<u32>(Settings::values.shader_backend.GetValue())); 259 static_cast<u32>(Settings::values.shader_backend.GetValue()));
247 AddField(field_type, "Renderer_UseAsynchronousShaders", 260 AddField(field_type, "Renderer_UseAsynchronousShaders",
diff --git a/src/video_core/renderer_vulkan/vk_swapchain.cpp b/src/video_core/renderer_vulkan/vk_swapchain.cpp
index 23bbea7f1..08d82769c 100644
--- a/src/video_core/renderer_vulkan/vk_swapchain.cpp
+++ b/src/video_core/renderer_vulkan/vk_swapchain.cpp
@@ -34,21 +34,22 @@ VkSurfaceFormatKHR ChooseSwapSurfaceFormat(vk::Span<VkSurfaceFormatKHR> formats)
34} 34}
35 35
36VkPresentModeKHR ChooseSwapPresentMode(vk::Span<VkPresentModeKHR> modes) { 36VkPresentModeKHR ChooseSwapPresentMode(vk::Span<VkPresentModeKHR> modes) {
37 // Mailbox (triple buffering) doesn't lock the application like fifo (vsync), 37 // Mailbox (triple buffering) doesn't lock the application like FIFO (vsync)
38 // prefer it if vsync option is not selected 38 // FIFO present mode locks the framerate to the monitor's refresh rate
39 const auto found_mailbox = std::find(modes.begin(), modes.end(), VK_PRESENT_MODE_MAILBOX_KHR); 39 const bool has_mailbox =
40 if (Settings::values.fullscreen_mode.GetValue() == Settings::FullscreenMode::Borderless && 40 std::find(modes.begin(), modes.end(), VK_PRESENT_MODE_MAILBOX_KHR) != modes.end();
41 found_mailbox != modes.end() && !Settings::values.use_vsync.GetValue()) { 41 const bool has_imm =
42 std::find(modes.begin(), modes.end(), VK_PRESENT_MODE_IMMEDIATE_KHR) != modes.end();
43 const Settings::VSyncMode mode = Settings::values.vsync_mode.GetValue();
44
45 if (mode == Settings::VSyncMode::Immediate && has_imm) {
46 LOG_INFO(Render_Vulkan, "Using swap present mode Immediate");
47 return VK_PRESENT_MODE_IMMEDIATE_KHR;
48 } else if (mode == Settings::VSyncMode::Mailbox && has_mailbox) {
49 LOG_INFO(Render_Vulkan, "Using swap present mode Mailbox");
42 return VK_PRESENT_MODE_MAILBOX_KHR; 50 return VK_PRESENT_MODE_MAILBOX_KHR;
43 } 51 }
44 if (!Settings::values.use_speed_limit.GetValue()) { 52 LOG_INFO(Render_Vulkan, "Using swap present mode FIFO");
45 // FIFO present mode locks the framerate to the monitor's refresh rate,
46 // Find an alternative to surpass this limitation if FPS is unlocked.
47 const auto found_imm = std::find(modes.begin(), modes.end(), VK_PRESENT_MODE_IMMEDIATE_KHR);
48 if (found_imm != modes.end()) {
49 return VK_PRESENT_MODE_IMMEDIATE_KHR;
50 }
51 }
52 return VK_PRESENT_MODE_FIFO_KHR; 53 return VK_PRESENT_MODE_FIFO_KHR;
53} 54}
54 55
diff --git a/src/yuzu/bootmanager.cpp b/src/yuzu/bootmanager.cpp
index 4c7bf28d8..01dc51cff 100644
--- a/src/yuzu/bootmanager.cpp
+++ b/src/yuzu/bootmanager.cpp
@@ -154,7 +154,18 @@ public:
154 154
155 // disable vsync for any shared contexts 155 // disable vsync for any shared contexts
156 auto format = share_context->format(); 156 auto format = share_context->format();
157 format.setSwapInterval(main_surface ? Settings::values.use_vsync.GetValue() : 0); 157 const int swap_interval = [&]() {
158 switch (Settings::values.vsync_mode.GetValue()) {
159 case Settings::VSyncMode::Immediate:
160 return 0;
161 case Settings::VSyncMode::FIFO:
162 return 1;
163 case Settings::VSyncMode::Mailbox:
164 return 2;
165 }
166 }();
167
168 format.setSwapInterval(main_surface ? swap_interval : 0);
158 169
159 context = std::make_unique<QOpenGLContext>(); 170 context = std::make_unique<QOpenGLContext>();
160 context->setShareContext(share_context); 171 context->setShareContext(share_context);
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp
index 305891d18..4a8436e5c 100644
--- a/src/yuzu/configuration/config.cpp
+++ b/src/yuzu/configuration/config.cpp
@@ -6,6 +6,7 @@
6#include <QSettings> 6#include <QSettings>
7#include "common/fs/fs.h" 7#include "common/fs/fs.h"
8#include "common/fs/path_util.h" 8#include "common/fs/path_util.h"
9#include "common/settings.h"
9#include "core/core.h" 10#include "core/core.h"
10#include "core/hle/service/acc/profile_manager.h" 11#include "core/hle/service/acc/profile_manager.h"
11#include "core/hle/service/hid/controllers/npad.h" 12#include "core/hle/service/hid/controllers/npad.h"
@@ -709,7 +710,6 @@ void Config::ReadRendererValues() {
709 ReadGlobalSetting(Settings::values.nvdec_emulation); 710 ReadGlobalSetting(Settings::values.nvdec_emulation);
710 ReadGlobalSetting(Settings::values.accelerate_astc); 711 ReadGlobalSetting(Settings::values.accelerate_astc);
711 ReadGlobalSetting(Settings::values.async_astc); 712 ReadGlobalSetting(Settings::values.async_astc);
712 ReadGlobalSetting(Settings::values.use_vsync);
713 ReadGlobalSetting(Settings::values.shader_backend); 713 ReadGlobalSetting(Settings::values.shader_backend);
714 ReadGlobalSetting(Settings::values.use_asynchronous_shaders); 714 ReadGlobalSetting(Settings::values.use_asynchronous_shaders);
715 ReadGlobalSetting(Settings::values.use_fast_gpu_time); 715 ReadGlobalSetting(Settings::values.use_fast_gpu_time);
@@ -720,6 +720,10 @@ void Config::ReadRendererValues() {
720 ReadGlobalSetting(Settings::values.bg_blue); 720 ReadGlobalSetting(Settings::values.bg_blue);
721 721
722 if (global) { 722 if (global) {
723 Settings::values.vsync_mode.SetValue(static_cast<Settings::VSyncMode>(
724 ReadSetting(QString::fromStdString(Settings::values.vsync_mode.GetLabel()),
725 static_cast<u32>(Settings::values.vsync_mode.GetDefault()))
726 .value<u32>()));
723 ReadBasicSetting(Settings::values.renderer_debug); 727 ReadBasicSetting(Settings::values.renderer_debug);
724 ReadBasicSetting(Settings::values.renderer_shader_feedback); 728 ReadBasicSetting(Settings::values.renderer_shader_feedback);
725 ReadBasicSetting(Settings::values.enable_nsight_aftermath); 729 ReadBasicSetting(Settings::values.enable_nsight_aftermath);
@@ -1352,7 +1356,6 @@ void Config::SaveRendererValues() {
1352 Settings::values.nvdec_emulation.UsingGlobal()); 1356 Settings::values.nvdec_emulation.UsingGlobal());
1353 WriteGlobalSetting(Settings::values.accelerate_astc); 1357 WriteGlobalSetting(Settings::values.accelerate_astc);
1354 WriteGlobalSetting(Settings::values.async_astc); 1358 WriteGlobalSetting(Settings::values.async_astc);
1355 WriteGlobalSetting(Settings::values.use_vsync);
1356 WriteSetting(QString::fromStdString(Settings::values.shader_backend.GetLabel()), 1359 WriteSetting(QString::fromStdString(Settings::values.shader_backend.GetLabel()),
1357 static_cast<u32>(Settings::values.shader_backend.GetValue(global)), 1360 static_cast<u32>(Settings::values.shader_backend.GetValue(global)),
1358 static_cast<u32>(Settings::values.shader_backend.GetDefault()), 1361 static_cast<u32>(Settings::values.shader_backend.GetDefault()),
@@ -1366,6 +1369,9 @@ void Config::SaveRendererValues() {
1366 WriteGlobalSetting(Settings::values.bg_blue); 1369 WriteGlobalSetting(Settings::values.bg_blue);
1367 1370
1368 if (global) { 1371 if (global) {
1372 WriteSetting(QString::fromStdString(Settings::values.vsync_mode.GetLabel()),
1373 static_cast<u32>(Settings::values.vsync_mode.GetValue()),
1374 static_cast<u32>(Settings::values.vsync_mode.GetDefault()));
1369 WriteBasicSetting(Settings::values.renderer_debug); 1375 WriteBasicSetting(Settings::values.renderer_debug);
1370 WriteBasicSetting(Settings::values.renderer_shader_feedback); 1376 WriteBasicSetting(Settings::values.renderer_shader_feedback);
1371 WriteBasicSetting(Settings::values.enable_nsight_aftermath); 1377 WriteBasicSetting(Settings::values.enable_nsight_aftermath);
diff --git a/src/yuzu/configuration/configure_graphics.cpp b/src/yuzu/configuration/configure_graphics.cpp
index e9388daad..17a54f0f4 100644
--- a/src/yuzu/configuration/configure_graphics.cpp
+++ b/src/yuzu/configuration/configure_graphics.cpp
@@ -99,6 +99,7 @@ void ConfigureGraphics::SetConfiguration() {
99 ui->nvdec_emulation_widget->setEnabled(runtime_lock); 99 ui->nvdec_emulation_widget->setEnabled(runtime_lock);
100 ui->resolution_combobox->setEnabled(runtime_lock); 100 ui->resolution_combobox->setEnabled(runtime_lock);
101 ui->accelerate_astc->setEnabled(runtime_lock); 101 ui->accelerate_astc->setEnabled(runtime_lock);
102 ui->vsync_mode_combobox->setEnabled(runtime_lock);
102 ui->use_disk_shader_cache->setChecked(Settings::values.use_disk_shader_cache.GetValue()); 103 ui->use_disk_shader_cache->setChecked(Settings::values.use_disk_shader_cache.GetValue());
103 ui->use_asynchronous_gpu_emulation->setChecked( 104 ui->use_asynchronous_gpu_emulation->setChecked(
104 Settings::values.use_asynchronous_gpu_emulation.GetValue()); 105 Settings::values.use_asynchronous_gpu_emulation.GetValue());
@@ -118,6 +119,9 @@ void ConfigureGraphics::SetConfiguration() {
118 ui->fsr_sharpening_slider->setValue(Settings::values.fsr_sharpening_slider.GetValue()); 119 ui->fsr_sharpening_slider->setValue(Settings::values.fsr_sharpening_slider.GetValue());
119 ui->anti_aliasing_combobox->setCurrentIndex( 120 ui->anti_aliasing_combobox->setCurrentIndex(
120 static_cast<int>(Settings::values.anti_aliasing.GetValue())); 121 static_cast<int>(Settings::values.anti_aliasing.GetValue()));
122
123 ui->vsync_mode_combobox->setCurrentIndex(
124 static_cast<int>(Settings::values.vsync_mode.GetValue()));
121 } else { 125 } else {
122 ConfigurationShared::SetPerGameSetting(ui->api, &Settings::values.renderer_backend); 126 ConfigurationShared::SetPerGameSetting(ui->api, &Settings::values.renderer_backend);
123 ConfigurationShared::SetHighlight(ui->api_widget, 127 ConfigurationShared::SetHighlight(ui->api_widget,
@@ -232,6 +236,9 @@ void ConfigureGraphics::ApplyConfiguration() {
232 Settings::values.anti_aliasing.SetValue(anti_aliasing); 236 Settings::values.anti_aliasing.SetValue(anti_aliasing);
233 } 237 }
234 Settings::values.fsr_sharpening_slider.SetValue(ui->fsr_sharpening_slider->value()); 238 Settings::values.fsr_sharpening_slider.SetValue(ui->fsr_sharpening_slider->value());
239
240 Settings::values.vsync_mode.SetValue(
241 static_cast<Settings::VSyncMode>(ui->vsync_mode_combobox->currentIndex()));
235 } else { 242 } else {
236 if (ui->resolution_combobox->currentIndex() == ConfigurationShared::USE_GLOBAL_INDEX) { 243 if (ui->resolution_combobox->currentIndex() == ConfigurationShared::USE_GLOBAL_INDEX) {
237 Settings::values.resolution_setup.SetGlobal(true); 244 Settings::values.resolution_setup.SetGlobal(true);
@@ -465,4 +472,6 @@ void ConfigureGraphics::SetupPerGameUI() {
465 ui->api, static_cast<int>(Settings::values.renderer_backend.GetValue(true))); 472 ui->api, static_cast<int>(Settings::values.renderer_backend.GetValue(true)));
466 ConfigurationShared::InsertGlobalItem( 473 ConfigurationShared::InsertGlobalItem(
467 ui->nvdec_emulation, static_cast<int>(Settings::values.nvdec_emulation.GetValue(true))); 474 ui->nvdec_emulation, static_cast<int>(Settings::values.nvdec_emulation.GetValue(true)));
475
476 ui->vsync_mode_layout->setVisible(false);
468} 477}
diff --git a/src/yuzu/configuration/configure_graphics.ui b/src/yuzu/configuration/configure_graphics.ui
index a45ec69ec..4c241e247 100644
--- a/src/yuzu/configuration/configure_graphics.ui
+++ b/src/yuzu/configuration/configure_graphics.ui
@@ -189,6 +189,53 @@
189 </widget> 189 </widget>
190 </item> 190 </item>
191 <item> 191 <item>
192 <widget class="QWidget" name="vsync_mode_layout" native="true">
193 <layout class="QHBoxLayout" name="horizontalLayout_4">
194 <property name="leftMargin">
195 <number>0</number>
196 </property>
197 <property name="topMargin">
198 <number>0</number>
199 </property>
200 <property name="rightMargin">
201 <number>0</number>
202 </property>
203 <property name="bottomMargin">
204 <number>0</number>
205 </property>
206 <item>
207 <widget class="QLabel" name="vsync_mode_label">
208 <property name="text">
209 <string>VSync Mode</string>
210 </property>
211 </widget>
212 </item>
213 <item>
214 <widget class="QComboBox" name="vsync_mode_combobox">
215 <property name="currentText">
216 <string>Off (Immediate)</string>
217 </property>
218 <item>
219 <property name="text">
220 <string>Off (Immediate)</string>
221 </property>
222 </item>
223 <item>
224 <property name="text">
225 <string>Double Buffering (FIFO)</string>
226 </property>
227 </item>
228 <item>
229 <property name="text">
230 <string>Triple Buffering (Mailbox)</string>
231 </property>
232 </item>
233 </widget>
234 </item>
235 </layout>
236 </widget>
237 </item>
238 <item>
192 <widget class="QWidget" name="nvdec_emulation_widget" native="true"> 239 <widget class="QWidget" name="nvdec_emulation_widget" native="true">
193 <layout class="QHBoxLayout" name="nvdec_emulation_layout"> 240 <layout class="QHBoxLayout" name="nvdec_emulation_layout">
194 <property name="leftMargin"> 241 <property name="leftMargin">
@@ -366,7 +413,7 @@
366 </item> 413 </item>
367 <item> 414 <item>
368 <property name="text"> 415 <property name="text">
369 <string>1.5X (1080p/1620p) [EXPERIMENTAL]</string> 416 <string>1.5X (1080p/1620p) [EXPERIMENTAL]</string>
370 </property> 417 </property>
371 </item> 418 </item>
372 <item> 419 <item>
diff --git a/src/yuzu/configuration/configure_graphics_advanced.cpp b/src/yuzu/configuration/configure_graphics_advanced.cpp
index 7f7bf0e4d..4072ce145 100644
--- a/src/yuzu/configuration/configure_graphics_advanced.cpp
+++ b/src/yuzu/configuration/configure_graphics_advanced.cpp
@@ -21,7 +21,6 @@ ConfigureGraphicsAdvanced::~ConfigureGraphicsAdvanced() = default;
21 21
22void ConfigureGraphicsAdvanced::SetConfiguration() { 22void ConfigureGraphicsAdvanced::SetConfiguration() {
23 const bool runtime_lock = !system.IsPoweredOn(); 23 const bool runtime_lock = !system.IsPoweredOn();
24 ui->use_vsync->setEnabled(runtime_lock);
25 ui->async_present->setEnabled(runtime_lock); 24 ui->async_present->setEnabled(runtime_lock);
26 ui->renderer_force_max_clock->setEnabled(runtime_lock); 25 ui->renderer_force_max_clock->setEnabled(runtime_lock);
27 ui->async_astc->setEnabled(runtime_lock); 26 ui->async_astc->setEnabled(runtime_lock);
@@ -30,7 +29,6 @@ void ConfigureGraphicsAdvanced::SetConfiguration() {
30 29
31 ui->async_present->setChecked(Settings::values.async_presentation.GetValue()); 30 ui->async_present->setChecked(Settings::values.async_presentation.GetValue());
32 ui->renderer_force_max_clock->setChecked(Settings::values.renderer_force_max_clock.GetValue()); 31 ui->renderer_force_max_clock->setChecked(Settings::values.renderer_force_max_clock.GetValue());
33 ui->use_vsync->setChecked(Settings::values.use_vsync.GetValue());
34 ui->async_astc->setChecked(Settings::values.async_astc.GetValue()); 32 ui->async_astc->setChecked(Settings::values.async_astc.GetValue());
35 ui->use_asynchronous_shaders->setChecked(Settings::values.use_asynchronous_shaders.GetValue()); 33 ui->use_asynchronous_shaders->setChecked(Settings::values.use_asynchronous_shaders.GetValue());
36 ui->use_fast_gpu_time->setChecked(Settings::values.use_fast_gpu_time.GetValue()); 34 ui->use_fast_gpu_time->setChecked(Settings::values.use_fast_gpu_time.GetValue());
@@ -63,7 +61,6 @@ void ConfigureGraphicsAdvanced::ApplyConfiguration() {
63 renderer_force_max_clock); 61 renderer_force_max_clock);
64 ConfigurationShared::ApplyPerGameSetting(&Settings::values.max_anisotropy, 62 ConfigurationShared::ApplyPerGameSetting(&Settings::values.max_anisotropy,
65 ui->anisotropic_filtering_combobox); 63 ui->anisotropic_filtering_combobox);
66 ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_vsync, ui->use_vsync, use_vsync);
67 ConfigurationShared::ApplyPerGameSetting(&Settings::values.async_astc, ui->async_astc, 64 ConfigurationShared::ApplyPerGameSetting(&Settings::values.async_astc, ui->async_astc,
68 async_astc); 65 async_astc);
69 ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_asynchronous_shaders, 66 ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_asynchronous_shaders,
@@ -97,7 +94,6 @@ void ConfigureGraphicsAdvanced::SetupPerGameUI() {
97 ui->async_present->setEnabled(Settings::values.async_presentation.UsingGlobal()); 94 ui->async_present->setEnabled(Settings::values.async_presentation.UsingGlobal());
98 ui->renderer_force_max_clock->setEnabled( 95 ui->renderer_force_max_clock->setEnabled(
99 Settings::values.renderer_force_max_clock.UsingGlobal()); 96 Settings::values.renderer_force_max_clock.UsingGlobal());
100 ui->use_vsync->setEnabled(Settings::values.use_vsync.UsingGlobal());
101 ui->async_astc->setEnabled(Settings::values.async_astc.UsingGlobal()); 97 ui->async_astc->setEnabled(Settings::values.async_astc.UsingGlobal());
102 ui->use_asynchronous_shaders->setEnabled( 98 ui->use_asynchronous_shaders->setEnabled(
103 Settings::values.use_asynchronous_shaders.UsingGlobal()); 99 Settings::values.use_asynchronous_shaders.UsingGlobal());
@@ -117,7 +113,6 @@ void ConfigureGraphicsAdvanced::SetupPerGameUI() {
117 ConfigurationShared::SetColoredTristate(ui->renderer_force_max_clock, 113 ConfigurationShared::SetColoredTristate(ui->renderer_force_max_clock,
118 Settings::values.renderer_force_max_clock, 114 Settings::values.renderer_force_max_clock,
119 renderer_force_max_clock); 115 renderer_force_max_clock);
120 ConfigurationShared::SetColoredTristate(ui->use_vsync, Settings::values.use_vsync, use_vsync);
121 ConfigurationShared::SetColoredTristate(ui->async_astc, Settings::values.async_astc, 116 ConfigurationShared::SetColoredTristate(ui->async_astc, Settings::values.async_astc,
122 async_astc); 117 async_astc);
123 ConfigurationShared::SetColoredTristate(ui->use_asynchronous_shaders, 118 ConfigurationShared::SetColoredTristate(ui->use_asynchronous_shaders,
diff --git a/src/yuzu/configuration/configure_graphics_advanced.ui b/src/yuzu/configuration/configure_graphics_advanced.ui
index d7ec18939..134023032 100644
--- a/src/yuzu/configuration/configure_graphics_advanced.ui
+++ b/src/yuzu/configuration/configure_graphics_advanced.ui
@@ -87,16 +87,6 @@
87 </widget> 87 </widget>
88 </item> 88 </item>
89 <item> 89 <item>
90 <widget class="QCheckBox" name="use_vsync">
91 <property name="toolTip">
92 <string>VSync prevents the screen from tearing, but some graphics cards have lower performance with VSync enabled. Keep it enabled if you don't notice a performance difference.</string>
93 </property>
94 <property name="text">
95 <string>Use VSync</string>
96 </property>
97 </widget>
98 </item>
99 <item>
100 <widget class="QCheckBox" name="async_astc"> 90 <widget class="QCheckBox" name="async_astc">
101 <property name="toolTip"> 91 <property name="toolTip">
102 <string>Enables asynchronous ASTC texture decoding, which may reduce load time stutter. This feature is experimental.</string> 92 <string>Enables asynchronous ASTC texture decoding, which may reduce load time stutter. This feature is experimental.</string>
diff --git a/src/yuzu_cmd/config.cpp b/src/yuzu_cmd/config.cpp
index fa347fb8c..a692ef809 100644
--- a/src/yuzu_cmd/config.cpp
+++ b/src/yuzu_cmd/config.cpp
@@ -320,7 +320,7 @@ void Config::ReadValues() {
320 ReadSetting("Renderer", Settings::values.use_disk_shader_cache); 320 ReadSetting("Renderer", Settings::values.use_disk_shader_cache);
321 ReadSetting("Renderer", Settings::values.gpu_accuracy); 321 ReadSetting("Renderer", Settings::values.gpu_accuracy);
322 ReadSetting("Renderer", Settings::values.use_asynchronous_gpu_emulation); 322 ReadSetting("Renderer", Settings::values.use_asynchronous_gpu_emulation);
323 ReadSetting("Renderer", Settings::values.use_vsync); 323 ReadSetting("Renderer", Settings::values.vsync_mode);
324 ReadSetting("Renderer", Settings::values.shader_backend); 324 ReadSetting("Renderer", Settings::values.shader_backend);
325 ReadSetting("Renderer", Settings::values.use_asynchronous_shaders); 325 ReadSetting("Renderer", Settings::values.use_asynchronous_shaders);
326 ReadSetting("Renderer", Settings::values.nvdec_emulation); 326 ReadSetting("Renderer", Settings::values.nvdec_emulation);