summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/yuzu/configuration/config.cpp221
-rw-r--r--src/yuzu/configuration/config.h6
2 files changed, 100 insertions, 127 deletions
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp
index 62bafc453..2ad0ac32e 100644
--- a/src/yuzu/configuration/config.cpp
+++ b/src/yuzu/configuration/config.cpp
@@ -491,8 +491,8 @@ void Config::ReadAudioValues() {
491 .toStdString(); 491 .toStdString();
492 } 492 }
493 ReadSettingGlobal(Settings::values.enable_audio_stretching, 493 ReadSettingGlobal(Settings::values.enable_audio_stretching,
494 QStringLiteral("enable_audio_stretching"), true); 494 QStringLiteral("enable_audio_stretching"));
495 ReadSettingGlobal(Settings::values.volume, QStringLiteral("volume"), 1); 495 ReadSettingGlobal(Settings::values.volume, QStringLiteral("volume"));
496 496
497 qt_config->endGroup(); 497 qt_config->endGroup();
498} 498}
@@ -515,7 +515,7 @@ void Config::ReadControlValues() {
515 Settings::values.mouse_panning_sensitivity = 515 Settings::values.mouse_panning_sensitivity =
516 ReadSetting(QStringLiteral("mouse_panning_sensitivity"), 1).toFloat(); 516 ReadSetting(QStringLiteral("mouse_panning_sensitivity"), 1).toFloat();
517 517
518 ReadSettingGlobal(Settings::values.use_docked_mode, QStringLiteral("use_docked_mode"), true); 518 ReadSettingGlobal(Settings::values.use_docked_mode, QStringLiteral("use_docked_mode"));
519 519
520 // Disable docked mode if handheld is selected 520 // Disable docked mode if handheld is selected
521 const auto controller_type = Settings::values.players.GetValue()[0].controller_type; 521 const auto controller_type = Settings::values.players.GetValue()[0].controller_type;
@@ -523,11 +523,10 @@ void Config::ReadControlValues() {
523 Settings::values.use_docked_mode.SetValue(false); 523 Settings::values.use_docked_mode.SetValue(false);
524 } 524 }
525 525
526 ReadSettingGlobal(Settings::values.vibration_enabled, QStringLiteral("vibration_enabled"), 526 ReadSettingGlobal(Settings::values.vibration_enabled, QStringLiteral("vibration_enabled"));
527 true);
528 ReadSettingGlobal(Settings::values.enable_accurate_vibrations, 527 ReadSettingGlobal(Settings::values.enable_accurate_vibrations,
529 QStringLiteral("enable_accurate_vibrations"), false); 528 QStringLiteral("enable_accurate_vibrations"));
530 ReadSettingGlobal(Settings::values.motion_enabled, QStringLiteral("motion_enabled"), true); 529 ReadSettingGlobal(Settings::values.motion_enabled, QStringLiteral("motion_enabled"));
531 530
532 qt_config->endGroup(); 531 qt_config->endGroup();
533} 532}
@@ -591,7 +590,7 @@ void Config::ReadMotionTouchValues() {
591void Config::ReadCoreValues() { 590void Config::ReadCoreValues() {
592 qt_config->beginGroup(QStringLiteral("Core")); 591 qt_config->beginGroup(QStringLiteral("Core"));
593 592
594 ReadSettingGlobal(Settings::values.use_multi_core, QStringLiteral("use_multi_core"), true); 593 ReadSettingGlobal(Settings::values.use_multi_core, QStringLiteral("use_multi_core"));
595 594
596 qt_config->endGroup(); 595 qt_config->endGroup();
597} 596}
@@ -751,18 +750,18 @@ void Config::ReadPathValues() {
751void Config::ReadCpuValues() { 750void Config::ReadCpuValues() {
752 qt_config->beginGroup(QStringLiteral("Cpu")); 751 qt_config->beginGroup(QStringLiteral("Cpu"));
753 752
754 ReadSettingGlobal(Settings::values.cpu_accuracy, QStringLiteral("cpu_accuracy"), 0); 753 ReadSettingGlobal(Settings::values.cpu_accuracy, QStringLiteral("cpu_accuracy"));
755 754
756 ReadSettingGlobal(Settings::values.cpuopt_unsafe_unfuse_fma, 755 ReadSettingGlobal(Settings::values.cpuopt_unsafe_unfuse_fma,
757 QStringLiteral("cpuopt_unsafe_unfuse_fma"), true); 756 QStringLiteral("cpuopt_unsafe_unfuse_fma"));
758 ReadSettingGlobal(Settings::values.cpuopt_unsafe_reduce_fp_error, 757 ReadSettingGlobal(Settings::values.cpuopt_unsafe_reduce_fp_error,
759 QStringLiteral("cpuopt_unsafe_reduce_fp_error"), true); 758 QStringLiteral("cpuopt_unsafe_reduce_fp_error"));
760 ReadSettingGlobal(Settings::values.cpuopt_unsafe_ignore_standard_fpcr, 759 ReadSettingGlobal(Settings::values.cpuopt_unsafe_ignore_standard_fpcr,
761 QStringLiteral("cpuopt_unsafe_ignore_standard_fpcr"), true); 760 QStringLiteral("cpuopt_unsafe_ignore_standard_fpcr"));
762 ReadSettingGlobal(Settings::values.cpuopt_unsafe_inaccurate_nan, 761 ReadSettingGlobal(Settings::values.cpuopt_unsafe_inaccurate_nan,
763 QStringLiteral("cpuopt_unsafe_inaccurate_nan"), true); 762 QStringLiteral("cpuopt_unsafe_inaccurate_nan"));
764 ReadSettingGlobal(Settings::values.cpuopt_unsafe_fastmem_check, 763 ReadSettingGlobal(Settings::values.cpuopt_unsafe_fastmem_check,
765 QStringLiteral("cpuopt_unsafe_fastmem_check"), true); 764 QStringLiteral("cpuopt_unsafe_fastmem_check"));
766 765
767 if (global) { 766 if (global) {
768 Settings::values.cpuopt_page_tables = 767 Settings::values.cpuopt_page_tables =
@@ -791,41 +790,32 @@ void Config::ReadCpuValues() {
791void Config::ReadRendererValues() { 790void Config::ReadRendererValues() {
792 qt_config->beginGroup(QStringLiteral("Renderer")); 791 qt_config->beginGroup(QStringLiteral("Renderer"));
793 792
794 ReadSettingGlobal(Settings::values.renderer_backend, QStringLiteral("backend"), 0); 793 ReadSettingGlobal(Settings::values.renderer_backend, QStringLiteral("backend"));
795 ReadSettingGlobal(Settings::values.renderer_debug, QStringLiteral("debug"), false); 794 ReadSettingGlobal(Settings::values.renderer_debug, QStringLiteral("debug"), false);
796 ReadSettingGlobal(Settings::values.vulkan_device, QStringLiteral("vulkan_device"), 0); 795 ReadSettingGlobal(Settings::values.vulkan_device, QStringLiteral("vulkan_device"));
797#ifdef _WIN32 796 ReadSettingGlobal(Settings::values.fullscreen_mode, QStringLiteral("fullscreen_mode"));
798 ReadSettingGlobal(Settings::values.fullscreen_mode, QStringLiteral("fullscreen_mode"), 0); 797 ReadSettingGlobal(Settings::values.aspect_ratio, QStringLiteral("aspect_ratio"));
799#else 798 ReadSettingGlobal(Settings::values.max_anisotropy, QStringLiteral("max_anisotropy"));
800 // *nix platforms may have issues with the borderless windowed fullscreen mode. 799 ReadSettingGlobal(Settings::values.use_frame_limit, QStringLiteral("use_frame_limit"));
801 // Default to exclusive fullscreen on these platforms for now. 800 ReadSettingGlobal(Settings::values.frame_limit, QStringLiteral("frame_limit"));
802 ReadSettingGlobal(Settings::values.fullscreen_mode, QStringLiteral("fullscreen_mode"), 1);
803#endif
804 ReadSettingGlobal(Settings::values.aspect_ratio, QStringLiteral("aspect_ratio"), 0);
805 ReadSettingGlobal(Settings::values.max_anisotropy, QStringLiteral("max_anisotropy"), 0);
806 ReadSettingGlobal(Settings::values.use_frame_limit, QStringLiteral("use_frame_limit"), true);
807 ReadSettingGlobal(Settings::values.frame_limit, QStringLiteral("frame_limit"), 100);
808 ReadSettingGlobal(Settings::values.use_disk_shader_cache, 801 ReadSettingGlobal(Settings::values.use_disk_shader_cache,
809 QStringLiteral("use_disk_shader_cache"), true); 802 QStringLiteral("use_disk_shader_cache"));
810 ReadSettingGlobal(Settings::values.gpu_accuracy, QStringLiteral("gpu_accuracy"), 1); 803 ReadSettingGlobal(Settings::values.gpu_accuracy, QStringLiteral("gpu_accuracy"));
811 ReadSettingGlobal(Settings::values.use_asynchronous_gpu_emulation, 804 ReadSettingGlobal(Settings::values.use_asynchronous_gpu_emulation,
812 QStringLiteral("use_asynchronous_gpu_emulation"), true); 805 QStringLiteral("use_asynchronous_gpu_emulation"));
813 ReadSettingGlobal(Settings::values.use_nvdec_emulation, QStringLiteral("use_nvdec_emulation"), 806 ReadSettingGlobal(Settings::values.use_nvdec_emulation, QStringLiteral("use_nvdec_emulation"));
814 true); 807 ReadSettingGlobal(Settings::values.accelerate_astc, QStringLiteral("accelerate_astc"));
815 ReadSettingGlobal(Settings::values.accelerate_astc, QStringLiteral("accelerate_astc"), true); 808 ReadSettingGlobal(Settings::values.use_vsync, QStringLiteral("use_vsync"));
816 ReadSettingGlobal(Settings::values.use_vsync, QStringLiteral("use_vsync"), true); 809 ReadSettingGlobal(Settings::values.disable_fps_limit, QStringLiteral("disable_fps_limit"));
817 ReadSettingGlobal(Settings::values.disable_fps_limit, QStringLiteral("disable_fps_limit"), 810 ReadSettingGlobal(Settings::values.use_assembly_shaders,
818 false); 811 QStringLiteral("use_assembly_shaders"));
819 ReadSettingGlobal(Settings::values.use_assembly_shaders, QStringLiteral("use_assembly_shaders"),
820 false);
821 ReadSettingGlobal(Settings::values.use_asynchronous_shaders, 812 ReadSettingGlobal(Settings::values.use_asynchronous_shaders,
822 QStringLiteral("use_asynchronous_shaders"), false); 813 QStringLiteral("use_asynchronous_shaders"));
823 ReadSettingGlobal(Settings::values.use_fast_gpu_time, QStringLiteral("use_fast_gpu_time"), 814 ReadSettingGlobal(Settings::values.use_fast_gpu_time, QStringLiteral("use_fast_gpu_time"));
824 true); 815 ReadSettingGlobal(Settings::values.use_caches_gc, QStringLiteral("use_caches_gc"));
825 ReadSettingGlobal(Settings::values.use_caches_gc, QStringLiteral("use_caches_gc"), false); 816 ReadSettingGlobal(Settings::values.bg_red, QStringLiteral("bg_red"));
826 ReadSettingGlobal(Settings::values.bg_red, QStringLiteral("bg_red"), 0.0); 817 ReadSettingGlobal(Settings::values.bg_green, QStringLiteral("bg_green"));
827 ReadSettingGlobal(Settings::values.bg_green, QStringLiteral("bg_green"), 0.0); 818 ReadSettingGlobal(Settings::values.bg_blue, QStringLiteral("bg_blue"));
828 ReadSettingGlobal(Settings::values.bg_blue, QStringLiteral("bg_blue"), 0.0);
829 819
830 qt_config->endGroup(); 820 qt_config->endGroup();
831} 821}
@@ -874,11 +864,11 @@ void Config::ReadSystemValues() {
874 Settings::values.current_user = 864 Settings::values.current_user =
875 std::clamp<int>(Settings::values.current_user, 0, Service::Account::MAX_USERS - 1); 865 std::clamp<int>(Settings::values.current_user, 0, Service::Account::MAX_USERS - 1);
876 866
877 ReadSettingGlobal(Settings::values.language_index, QStringLiteral("language_index"), 1); 867 ReadSettingGlobal(Settings::values.language_index, QStringLiteral("language_index"));
878 868
879 ReadSettingGlobal(Settings::values.region_index, QStringLiteral("region_index"), 1); 869 ReadSettingGlobal(Settings::values.region_index, QStringLiteral("region_index"));
880 870
881 ReadSettingGlobal(Settings::values.time_zone_index, QStringLiteral("time_zone_index"), 0); 871 ReadSettingGlobal(Settings::values.time_zone_index, QStringLiteral("time_zone_index"));
882 872
883 bool rng_seed_enabled; 873 bool rng_seed_enabled;
884 ReadSettingGlobal(rng_seed_enabled, QStringLiteral("rng_seed_enabled"), false); 874 ReadSettingGlobal(rng_seed_enabled, QStringLiteral("rng_seed_enabled"), false);
@@ -904,7 +894,7 @@ void Config::ReadSystemValues() {
904 } 894 }
905 } 895 }
906 896
907 ReadSettingGlobal(Settings::values.sound_index, QStringLiteral("sound_index"), 1); 897 ReadSettingGlobal(Settings::values.sound_index, QStringLiteral("sound_index"));
908 898
909 qt_config->endGroup(); 899 qt_config->endGroup();
910} 900}
@@ -1188,8 +1178,8 @@ void Config::SaveAudioValues() {
1188 QStringLiteral("auto")); 1178 QStringLiteral("auto"));
1189 } 1179 }
1190 WriteSettingGlobal(QStringLiteral("enable_audio_stretching"), 1180 WriteSettingGlobal(QStringLiteral("enable_audio_stretching"),
1191 Settings::values.enable_audio_stretching, true); 1181 Settings::values.enable_audio_stretching);
1192 WriteSettingGlobal(QStringLiteral("volume"), Settings::values.volume, 1.0f); 1182 WriteSettingGlobal(QStringLiteral("volume"), Settings::values.volume);
1193 1183
1194 qt_config->endGroup(); 1184 qt_config->endGroup();
1195} 1185}
@@ -1205,12 +1195,11 @@ void Config::SaveControlValues() {
1205 SaveTouchscreenValues(); 1195 SaveTouchscreenValues();
1206 SaveMotionTouchValues(); 1196 SaveMotionTouchValues();
1207 1197
1208 WriteSettingGlobal(QStringLiteral("use_docked_mode"), Settings::values.use_docked_mode, true); 1198 WriteSettingGlobal(QStringLiteral("use_docked_mode"), Settings::values.use_docked_mode);
1209 WriteSettingGlobal(QStringLiteral("vibration_enabled"), Settings::values.vibration_enabled, 1199 WriteSettingGlobal(QStringLiteral("vibration_enabled"), Settings::values.vibration_enabled);
1210 true);
1211 WriteSettingGlobal(QStringLiteral("enable_accurate_vibrations"), 1200 WriteSettingGlobal(QStringLiteral("enable_accurate_vibrations"),
1212 Settings::values.enable_accurate_vibrations, false); 1201 Settings::values.enable_accurate_vibrations);
1213 WriteSettingGlobal(QStringLiteral("motion_enabled"), Settings::values.motion_enabled, true); 1202 WriteSettingGlobal(QStringLiteral("motion_enabled"), Settings::values.motion_enabled);
1214 WriteSetting(QStringLiteral("motion_device"), 1203 WriteSetting(QStringLiteral("motion_device"),
1215 QString::fromStdString(Settings::values.motion_device), 1204 QString::fromStdString(Settings::values.motion_device),
1216 QStringLiteral("engine:motion_emu,update_period:100,sensitivity:0.01")); 1205 QStringLiteral("engine:motion_emu,update_period:100,sensitivity:0.01"));
@@ -1228,7 +1217,7 @@ void Config::SaveControlValues() {
1228void Config::SaveCoreValues() { 1217void Config::SaveCoreValues() {
1229 qt_config->beginGroup(QStringLiteral("Core")); 1218 qt_config->beginGroup(QStringLiteral("Core"));
1230 1219
1231 WriteSettingGlobal(QStringLiteral("use_multi_core"), Settings::values.use_multi_core, true); 1220 WriteSettingGlobal(QStringLiteral("use_multi_core"), Settings::values.use_multi_core);
1232 1221
1233 qt_config->endGroup(); 1222 qt_config->endGroup();
1234} 1223}
@@ -1339,18 +1328,18 @@ void Config::SaveCpuValues() {
1339 WriteSettingGlobal(QStringLiteral("cpu_accuracy"), 1328 WriteSettingGlobal(QStringLiteral("cpu_accuracy"),
1340 static_cast<u32>(Settings::values.cpu_accuracy.GetValue(global)), 1329 static_cast<u32>(Settings::values.cpu_accuracy.GetValue(global)),
1341 Settings::values.cpu_accuracy.UsingGlobal(), 1330 Settings::values.cpu_accuracy.UsingGlobal(),
1342 static_cast<u32>(Settings::CPUAccuracy::Accurate)); 1331 static_cast<u32>(Settings::values.cpu_accuracy.GetDefault()));
1343 1332
1344 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_unfuse_fma"), 1333 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_unfuse_fma"),
1345 Settings::values.cpuopt_unsafe_unfuse_fma, true); 1334 Settings::values.cpuopt_unsafe_unfuse_fma);
1346 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_reduce_fp_error"), 1335 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_reduce_fp_error"),
1347 Settings::values.cpuopt_unsafe_reduce_fp_error, true); 1336 Settings::values.cpuopt_unsafe_reduce_fp_error);
1348 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_ignore_standard_fpcr"), 1337 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_ignore_standard_fpcr"),
1349 Settings::values.cpuopt_unsafe_ignore_standard_fpcr, true); 1338 Settings::values.cpuopt_unsafe_ignore_standard_fpcr);
1350 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_inaccurate_nan"), 1339 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_inaccurate_nan"),
1351 Settings::values.cpuopt_unsafe_inaccurate_nan, true); 1340 Settings::values.cpuopt_unsafe_inaccurate_nan);
1352 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_fastmem_check"), 1341 WriteSettingGlobal(QStringLiteral("cpuopt_unsafe_fastmem_check"),
1353 Settings::values.cpuopt_unsafe_fastmem_check, true); 1342 Settings::values.cpuopt_unsafe_fastmem_check);
1354 1343
1355 if (global) { 1344 if (global) {
1356 WriteSetting(QStringLiteral("cpuopt_page_tables"), Settings::values.cpuopt_page_tables, 1345 WriteSetting(QStringLiteral("cpuopt_page_tables"), Settings::values.cpuopt_page_tables,
@@ -1377,45 +1366,37 @@ void Config::SaveRendererValues() {
1377 qt_config->beginGroup(QStringLiteral("Renderer")); 1366 qt_config->beginGroup(QStringLiteral("Renderer"));
1378 1367
1379 WriteSettingGlobal(QStringLiteral("backend"), 1368 WriteSettingGlobal(QStringLiteral("backend"),
1380 static_cast<int>(Settings::values.renderer_backend.GetValue(global)), 1369 static_cast<u32>(Settings::values.renderer_backend.GetValue(global)),
1381 Settings::values.renderer_backend.UsingGlobal(), 0); 1370 Settings::values.renderer_backend.UsingGlobal(),
1382 WriteSetting(QStringLiteral("debug"), Settings::values.renderer_debug, false); 1371 static_cast<u32>(Settings::values.renderer_backend.GetDefault()));
1383 WriteSettingGlobal(QStringLiteral("vulkan_device"), Settings::values.vulkan_device, 0); 1372 WriteSetting(QStringLiteral("debug"), Settings::values.renderer_debug);
1384#ifdef _WIN32 1373 WriteSettingGlobal(QStringLiteral("vulkan_device"), Settings::values.vulkan_device);
1385 WriteSettingGlobal(QStringLiteral("fullscreen_mode"), Settings::values.fullscreen_mode, 0); 1374 WriteSettingGlobal(QStringLiteral("fullscreen_mode"), Settings::values.fullscreen_mode);
1386#else 1375 WriteSettingGlobal(QStringLiteral("aspect_ratio"), Settings::values.aspect_ratio);
1387 // *nix platforms may have issues with the borderless windowed fullscreen mode. 1376 WriteSettingGlobal(QStringLiteral("max_anisotropy"), Settings::values.max_anisotropy);
1388 // Default to exclusive fullscreen on these platforms for now. 1377 WriteSettingGlobal(QStringLiteral("use_frame_limit"), Settings::values.use_frame_limit);
1389 WriteSettingGlobal(QStringLiteral("fullscreen_mode"), Settings::values.fullscreen_mode, 1); 1378 WriteSettingGlobal(QStringLiteral("frame_limit"), Settings::values.frame_limit);
1390#endif
1391 WriteSettingGlobal(QStringLiteral("aspect_ratio"), Settings::values.aspect_ratio, 0);
1392 WriteSettingGlobal(QStringLiteral("max_anisotropy"), Settings::values.max_anisotropy, 0);
1393 WriteSettingGlobal(QStringLiteral("use_frame_limit"), Settings::values.use_frame_limit, true);
1394 WriteSettingGlobal(QStringLiteral("frame_limit"), Settings::values.frame_limit, 100);
1395 WriteSettingGlobal(QStringLiteral("use_disk_shader_cache"), 1379 WriteSettingGlobal(QStringLiteral("use_disk_shader_cache"),
1396 Settings::values.use_disk_shader_cache, true); 1380 Settings::values.use_disk_shader_cache);
1397 WriteSettingGlobal(QStringLiteral("gpu_accuracy"), 1381 WriteSettingGlobal(QStringLiteral("gpu_accuracy"),
1398 static_cast<int>(Settings::values.gpu_accuracy.GetValue(global)), 1382 static_cast<u32>(Settings::values.gpu_accuracy.GetValue(global)),
1399 Settings::values.gpu_accuracy.UsingGlobal(), 1); 1383 Settings::values.gpu_accuracy.UsingGlobal(),
1384 static_cast<u32>(Settings::values.gpu_accuracy.GetDefault()));
1400 WriteSettingGlobal(QStringLiteral("use_asynchronous_gpu_emulation"), 1385 WriteSettingGlobal(QStringLiteral("use_asynchronous_gpu_emulation"),
1401 Settings::values.use_asynchronous_gpu_emulation, true); 1386 Settings::values.use_asynchronous_gpu_emulation);
1402 WriteSettingGlobal(QStringLiteral("use_nvdec_emulation"), Settings::values.use_nvdec_emulation, 1387 WriteSettingGlobal(QStringLiteral("use_nvdec_emulation"), Settings::values.use_nvdec_emulation);
1403 true); 1388 WriteSettingGlobal(QStringLiteral("accelerate_astc"), Settings::values.accelerate_astc);
1404 WriteSettingGlobal(QStringLiteral("accelerate_astc"), Settings::values.accelerate_astc, true); 1389 WriteSettingGlobal(QStringLiteral("use_vsync"), Settings::values.use_vsync);
1405 WriteSettingGlobal(QStringLiteral("use_vsync"), Settings::values.use_vsync, true); 1390 WriteSettingGlobal(QStringLiteral("disable_fps_limit"), Settings::values.disable_fps_limit);
1406 WriteSettingGlobal(QStringLiteral("disable_fps_limit"), Settings::values.disable_fps_limit,
1407 false);
1408 WriteSettingGlobal(QStringLiteral("use_assembly_shaders"), 1391 WriteSettingGlobal(QStringLiteral("use_assembly_shaders"),
1409 Settings::values.use_assembly_shaders, false); 1392 Settings::values.use_assembly_shaders);
1410 WriteSettingGlobal(QStringLiteral("use_asynchronous_shaders"), 1393 WriteSettingGlobal(QStringLiteral("use_asynchronous_shaders"),
1411 Settings::values.use_asynchronous_shaders, false); 1394 Settings::values.use_asynchronous_shaders);
1412 WriteSettingGlobal(QStringLiteral("use_fast_gpu_time"), Settings::values.use_fast_gpu_time, 1395 WriteSettingGlobal(QStringLiteral("use_fast_gpu_time"), Settings::values.use_fast_gpu_time);
1413 true); 1396 WriteSettingGlobal(QStringLiteral("use_caches_gc"), Settings::values.use_caches_gc);
1414 WriteSettingGlobal(QStringLiteral("use_caches_gc"), Settings::values.use_caches_gc, false); 1397 WriteSettingGlobal(QStringLiteral("bg_red"), Settings::values.bg_red);
1415 // Cast to double because Qt's written float values are not human-readable 1398 WriteSettingGlobal(QStringLiteral("bg_green"), Settings::values.bg_green);
1416 WriteSettingGlobal(QStringLiteral("bg_red"), Settings::values.bg_red, 0.0); 1399 WriteSettingGlobal(QStringLiteral("bg_blue"), Settings::values.bg_blue);
1417 WriteSettingGlobal(QStringLiteral("bg_green"), Settings::values.bg_green, 0.0);
1418 WriteSettingGlobal(QStringLiteral("bg_blue"), Settings::values.bg_blue, 0.0);
1419 1400
1420 qt_config->endGroup(); 1401 qt_config->endGroup();
1421} 1402}
@@ -1454,10 +1435,10 @@ void Config::SaveShortcutValues() {
1454void Config::SaveSystemValues() { 1435void Config::SaveSystemValues() {
1455 qt_config->beginGroup(QStringLiteral("System")); 1436 qt_config->beginGroup(QStringLiteral("System"));
1456 1437
1457 WriteSetting(QStringLiteral("current_user"), Settings::values.current_user, 0); 1438 WriteSetting(QStringLiteral("current_user"), Settings::values.current_user);
1458 WriteSettingGlobal(QStringLiteral("language_index"), Settings::values.language_index, 1); 1439 WriteSettingGlobal(QStringLiteral("language_index"), Settings::values.language_index);
1459 WriteSettingGlobal(QStringLiteral("region_index"), Settings::values.region_index, 1); 1440 WriteSettingGlobal(QStringLiteral("region_index"), Settings::values.region_index);
1460 WriteSettingGlobal(QStringLiteral("time_zone_index"), Settings::values.time_zone_index, 0); 1441 WriteSettingGlobal(QStringLiteral("time_zone_index"), Settings::values.time_zone_index);
1461 1442
1462 WriteSettingGlobal(QStringLiteral("rng_seed_enabled"), 1443 WriteSettingGlobal(QStringLiteral("rng_seed_enabled"),
1463 Settings::values.rng_seed.GetValue(global).has_value(), 1444 Settings::values.rng_seed.GetValue(global).has_value(),
@@ -1475,7 +1456,7 @@ void Config::SaveSystemValues() {
1475 0); 1456 0);
1476 } 1457 }
1477 1458
1478 WriteSettingGlobal(QStringLiteral("sound_index"), Settings::values.sound_index, 1); 1459 WriteSettingGlobal(QStringLiteral("sound_index"), Settings::values.sound_index);
1479 1460
1480 qt_config->endGroup(); 1461 qt_config->endGroup();
1481} 1462}
@@ -1574,22 +1555,25 @@ QVariant Config::ReadSetting(const QString& name, const QVariant& default_value)
1574 return result; 1555 return result;
1575} 1556}
1576 1557
1577template <typename Type> 1558QVariant Config::ReadSetting(const QString& name, Settings::CPUAccuracy default_value) const {
1578void Config::ReadSettingGlobal(Settings::Setting<Type>& setting, const QString& name) { 1559 return ReadSetting(name, static_cast<u32>(default_value));
1579 const bool use_global = qt_config->value(name + QStringLiteral("/use_global"), true).toBool(); 1560}
1580 setting.SetGlobal(use_global); 1561
1581 if (global || !use_global) { 1562QVariant Config::ReadSetting(const QString& name, Settings::GPUAccuracy default_value) const {
1582 setting.SetValue(ReadSetting(name).value<Type>()); 1563 return ReadSetting(name, static_cast<u32>(default_value));
1583 } 1564}
1565
1566QVariant Config::ReadSetting(const QString& name, Settings::RendererBackend default_value) const {
1567 return ReadSetting(name, static_cast<u32>(default_value));
1584} 1568}
1585 1569
1586template <typename Type> 1570template <typename Type>
1587void Config::ReadSettingGlobal(Settings::Setting<Type>& setting, const QString& name, 1571void Config::ReadSettingGlobal(Settings::Setting<Type>& setting, const QString& name) {
1588 const QVariant& default_value) {
1589 const bool use_global = qt_config->value(name + QStringLiteral("/use_global"), true).toBool(); 1572 const bool use_global = qt_config->value(name + QStringLiteral("/use_global"), true).toBool();
1590 setting.SetGlobal(use_global); 1573 setting.SetGlobal(use_global);
1574 const Type& default_value = setting.GetDefault();
1591 if (global || !use_global) { 1575 if (global || !use_global) {
1592 setting.SetValue(ReadSetting(name, default_value).value<Type>()); 1576 setting.SetValue(static_cast<QVariant>(ReadSetting(name, default_value)).value<Type>());
1593 } 1577 }
1594} 1578}
1595 1579
@@ -1618,19 +1602,8 @@ void Config::WriteSettingGlobal(const QString& name, const Settings::Setting<Typ
1618 qt_config->setValue(name + QStringLiteral("/use_global"), setting.UsingGlobal()); 1602 qt_config->setValue(name + QStringLiteral("/use_global"), setting.UsingGlobal());
1619 } 1603 }
1620 if (global || !setting.UsingGlobal()) { 1604 if (global || !setting.UsingGlobal()) {
1621 qt_config->setValue(name, setting.GetValue(global));
1622 }
1623}
1624
1625template <typename Type>
1626void Config::WriteSettingGlobal(const QString& name, const Settings::Setting<Type>& setting,
1627 const QVariant& default_value) {
1628 if (!global) {
1629 qt_config->setValue(name + QStringLiteral("/use_global"), setting.UsingGlobal());
1630 }
1631 if (global || !setting.UsingGlobal()) {
1632 qt_config->setValue(name + QStringLiteral("/default"), 1605 qt_config->setValue(name + QStringLiteral("/default"),
1633 setting.GetValue(global) == default_value.value<Type>()); 1606 setting.GetValue(global) == setting.GetDefault());
1634 qt_config->setValue(name, setting.GetValue(global)); 1607 qt_config->setValue(name, setting.GetValue(global));
1635 } 1608 }
1636} 1609}
diff --git a/src/yuzu/configuration/config.h b/src/yuzu/configuration/config.h
index 3c1de0ac9..62501997c 100644
--- a/src/yuzu/configuration/config.h
+++ b/src/yuzu/configuration/config.h
@@ -104,14 +104,14 @@ private:
104 104
105 QVariant ReadSetting(const QString& name) const; 105 QVariant ReadSetting(const QString& name) const;
106 QVariant ReadSetting(const QString& name, const QVariant& default_value) const; 106 QVariant ReadSetting(const QString& name, const QVariant& default_value) const;
107 QVariant ReadSetting(const QString& name, Settings::CPUAccuracy default_value) const;
108 QVariant ReadSetting(const QString& name, Settings::GPUAccuracy default_value) const;
109 QVariant ReadSetting(const QString& name, Settings::RendererBackend default_value) const;
107 // Templated ReadSettingGlobal functions will also look for the use_global setting and set 110 // Templated ReadSettingGlobal functions will also look for the use_global setting and set
108 // both the value and the global state properly 111 // both the value and the global state properly
109 template <typename Type> 112 template <typename Type>
110 void ReadSettingGlobal(Settings::Setting<Type>& setting, const QString& name); 113 void ReadSettingGlobal(Settings::Setting<Type>& setting, const QString& name);
111 template <typename Type> 114 template <typename Type>
112 void ReadSettingGlobal(Settings::Setting<Type>& setting, const QString& name,
113 const QVariant& default_value);
114 template <typename Type>
115 void ReadSettingGlobal(Type& setting, const QString& name, const QVariant& default_value) const; 115 void ReadSettingGlobal(Type& setting, const QString& name, const QVariant& default_value) const;
116 // Templated WriteSettingGlobal functions will also write the global state if needed and will 116 // Templated WriteSettingGlobal functions will also write the global state if needed and will
117 // skip writing the actual setting if it defers to the global value 117 // skip writing the actual setting if it defers to the global value