configure_graphics_advanced.cpp 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. // SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "common/settings.h"
  4. #include "core/core.h"
  5. #include "ui_configure_graphics_advanced.h"
  6. #include "yuzu/configuration/configuration_shared.h"
  7. #include "yuzu/configuration/configure_graphics_advanced.h"
  8. ConfigureGraphicsAdvanced::ConfigureGraphicsAdvanced(const Core::System& system_, QWidget* parent)
  9. : QWidget(parent), ui{std::make_unique<Ui::ConfigureGraphicsAdvanced>()}, system{system_} {
  10. ui->setupUi(this);
  11. SetupPerGameUI();
  12. SetConfiguration();
  13. }
  14. ConfigureGraphicsAdvanced::~ConfigureGraphicsAdvanced() = default;
  15. void ConfigureGraphicsAdvanced::SetConfiguration() {
  16. const bool runtime_lock = !system.IsPoweredOn();
  17. ui->use_vsync->setEnabled(runtime_lock);
  18. ui->renderer_force_max_clock->setEnabled(runtime_lock);
  19. ui->async_astc->setEnabled(runtime_lock);
  20. ui->use_asynchronous_shaders->setEnabled(runtime_lock);
  21. ui->anisotropic_filtering_combobox->setEnabled(runtime_lock);
  22. ui->renderer_force_max_clock->setChecked(Settings::values.renderer_force_max_clock.GetValue());
  23. ui->use_vsync->setChecked(Settings::values.use_vsync.GetValue());
  24. ui->async_astc->setChecked(Settings::values.async_astc.GetValue());
  25. ui->use_asynchronous_shaders->setChecked(Settings::values.use_asynchronous_shaders.GetValue());
  26. ui->use_fast_gpu_time->setChecked(Settings::values.use_fast_gpu_time.GetValue());
  27. ui->use_pessimistic_flushes->setChecked(Settings::values.use_pessimistic_flushes.GetValue());
  28. ui->use_vulkan_driver_pipeline_cache->setChecked(
  29. Settings::values.use_vulkan_driver_pipeline_cache.GetValue());
  30. if (Settings::IsConfiguringGlobal()) {
  31. ui->gpu_accuracy->setCurrentIndex(
  32. static_cast<int>(Settings::values.gpu_accuracy.GetValue()));
  33. ui->anisotropic_filtering_combobox->setCurrentIndex(
  34. Settings::values.max_anisotropy.GetValue());
  35. } else {
  36. ConfigurationShared::SetPerGameSetting(ui->gpu_accuracy, &Settings::values.gpu_accuracy);
  37. ConfigurationShared::SetPerGameSetting(ui->anisotropic_filtering_combobox,
  38. &Settings::values.max_anisotropy);
  39. ConfigurationShared::SetHighlight(ui->label_gpu_accuracy,
  40. !Settings::values.gpu_accuracy.UsingGlobal());
  41. ConfigurationShared::SetHighlight(ui->af_label,
  42. !Settings::values.max_anisotropy.UsingGlobal());
  43. }
  44. }
  45. void ConfigureGraphicsAdvanced::ApplyConfiguration() {
  46. ConfigurationShared::ApplyPerGameSetting(&Settings::values.gpu_accuracy, ui->gpu_accuracy);
  47. ConfigurationShared::ApplyPerGameSetting(&Settings::values.renderer_force_max_clock,
  48. ui->renderer_force_max_clock,
  49. renderer_force_max_clock);
  50. ConfigurationShared::ApplyPerGameSetting(&Settings::values.max_anisotropy,
  51. ui->anisotropic_filtering_combobox);
  52. ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_vsync, ui->use_vsync, use_vsync);
  53. ConfigurationShared::ApplyPerGameSetting(&Settings::values.async_astc, ui->async_astc,
  54. async_astc);
  55. ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_asynchronous_shaders,
  56. ui->use_asynchronous_shaders,
  57. use_asynchronous_shaders);
  58. ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_fast_gpu_time,
  59. ui->use_fast_gpu_time, use_fast_gpu_time);
  60. ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_pessimistic_flushes,
  61. ui->use_pessimistic_flushes, use_pessimistic_flushes);
  62. ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_vulkan_driver_pipeline_cache,
  63. ui->use_vulkan_driver_pipeline_cache,
  64. use_vulkan_driver_pipeline_cache);
  65. }
  66. void ConfigureGraphicsAdvanced::changeEvent(QEvent* event) {
  67. if (event->type() == QEvent::LanguageChange) {
  68. RetranslateUI();
  69. }
  70. QWidget::changeEvent(event);
  71. }
  72. void ConfigureGraphicsAdvanced::RetranslateUI() {
  73. ui->retranslateUi(this);
  74. }
  75. void ConfigureGraphicsAdvanced::SetupPerGameUI() {
  76. // Disable if not global (only happens during game)
  77. if (Settings::IsConfiguringGlobal()) {
  78. ui->gpu_accuracy->setEnabled(Settings::values.gpu_accuracy.UsingGlobal());
  79. ui->renderer_force_max_clock->setEnabled(
  80. Settings::values.renderer_force_max_clock.UsingGlobal());
  81. ui->use_vsync->setEnabled(Settings::values.use_vsync.UsingGlobal());
  82. ui->async_astc->setEnabled(Settings::values.async_astc.UsingGlobal());
  83. ui->use_asynchronous_shaders->setEnabled(
  84. Settings::values.use_asynchronous_shaders.UsingGlobal());
  85. ui->use_fast_gpu_time->setEnabled(Settings::values.use_fast_gpu_time.UsingGlobal());
  86. ui->use_pessimistic_flushes->setEnabled(
  87. Settings::values.use_pessimistic_flushes.UsingGlobal());
  88. ui->use_vulkan_driver_pipeline_cache->setEnabled(
  89. Settings::values.use_vulkan_driver_pipeline_cache.UsingGlobal());
  90. ui->anisotropic_filtering_combobox->setEnabled(
  91. Settings::values.max_anisotropy.UsingGlobal());
  92. return;
  93. }
  94. ConfigurationShared::SetColoredTristate(ui->renderer_force_max_clock,
  95. Settings::values.renderer_force_max_clock,
  96. renderer_force_max_clock);
  97. ConfigurationShared::SetColoredTristate(ui->use_vsync, Settings::values.use_vsync, use_vsync);
  98. ConfigurationShared::SetColoredTristate(ui->async_astc, Settings::values.async_astc,
  99. async_astc);
  100. ConfigurationShared::SetColoredTristate(ui->use_asynchronous_shaders,
  101. Settings::values.use_asynchronous_shaders,
  102. use_asynchronous_shaders);
  103. ConfigurationShared::SetColoredTristate(ui->use_fast_gpu_time,
  104. Settings::values.use_fast_gpu_time, use_fast_gpu_time);
  105. ConfigurationShared::SetColoredTristate(ui->use_pessimistic_flushes,
  106. Settings::values.use_pessimistic_flushes,
  107. use_pessimistic_flushes);
  108. ConfigurationShared::SetColoredTristate(ui->use_vulkan_driver_pipeline_cache,
  109. Settings::values.use_vulkan_driver_pipeline_cache,
  110. use_vulkan_driver_pipeline_cache);
  111. ConfigurationShared::SetColoredComboBox(
  112. ui->gpu_accuracy, ui->label_gpu_accuracy,
  113. static_cast<int>(Settings::values.gpu_accuracy.GetValue(true)));
  114. ConfigurationShared::SetColoredComboBox(
  115. ui->anisotropic_filtering_combobox, ui->af_label,
  116. static_cast<int>(Settings::values.max_anisotropy.GetValue(true)));
  117. }