configure_graphics_advanced.cpp 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  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. ui->enable_compute_pipelines_checkbox->setVisible(false);
  14. }
  15. ConfigureGraphicsAdvanced::~ConfigureGraphicsAdvanced() = default;
  16. void ConfigureGraphicsAdvanced::SetConfiguration() {
  17. const bool runtime_lock = !system.IsPoweredOn();
  18. ui->use_reactive_flushing->setEnabled(runtime_lock);
  19. ui->async_present->setEnabled(runtime_lock);
  20. ui->renderer_force_max_clock->setEnabled(runtime_lock);
  21. ui->async_astc->setEnabled(runtime_lock);
  22. ui->astc_recompression_combobox->setEnabled(runtime_lock);
  23. ui->use_asynchronous_shaders->setEnabled(runtime_lock);
  24. ui->anisotropic_filtering_combobox->setEnabled(runtime_lock);
  25. ui->enable_compute_pipelines_checkbox->setEnabled(runtime_lock);
  26. ui->async_present->setChecked(Settings::values.async_presentation.GetValue());
  27. ui->renderer_force_max_clock->setChecked(Settings::values.renderer_force_max_clock.GetValue());
  28. ui->use_reactive_flushing->setChecked(Settings::values.use_reactive_flushing.GetValue());
  29. ui->async_astc->setChecked(Settings::values.async_astc.GetValue());
  30. ui->use_asynchronous_shaders->setChecked(Settings::values.use_asynchronous_shaders.GetValue());
  31. ui->use_fast_gpu_time->setChecked(Settings::values.use_fast_gpu_time.GetValue());
  32. ui->use_vulkan_driver_pipeline_cache->setChecked(
  33. Settings::values.use_vulkan_driver_pipeline_cache.GetValue());
  34. ui->enable_compute_pipelines_checkbox->setChecked(
  35. Settings::values.enable_compute_pipelines.GetValue());
  36. if (Settings::IsConfiguringGlobal()) {
  37. ui->gpu_accuracy->setCurrentIndex(
  38. static_cast<int>(Settings::values.gpu_accuracy.GetValue()));
  39. ui->anisotropic_filtering_combobox->setCurrentIndex(
  40. Settings::values.max_anisotropy.GetValue());
  41. ui->astc_recompression_combobox->setCurrentIndex(
  42. static_cast<int>(Settings::values.astc_recompression.GetValue()));
  43. } else {
  44. ConfigurationShared::SetPerGameSetting(ui->gpu_accuracy, &Settings::values.gpu_accuracy);
  45. ConfigurationShared::SetPerGameSetting(ui->anisotropic_filtering_combobox,
  46. &Settings::values.max_anisotropy);
  47. ConfigurationShared::SetPerGameSetting(ui->astc_recompression_combobox,
  48. &Settings::values.astc_recompression);
  49. ConfigurationShared::SetHighlight(ui->label_gpu_accuracy,
  50. !Settings::values.gpu_accuracy.UsingGlobal());
  51. ConfigurationShared::SetHighlight(ui->af_label,
  52. !Settings::values.max_anisotropy.UsingGlobal());
  53. ConfigurationShared::SetHighlight(ui->label_astc_recompression,
  54. !Settings::values.astc_recompression.UsingGlobal());
  55. }
  56. }
  57. void ConfigureGraphicsAdvanced::ApplyConfiguration() {
  58. ConfigurationShared::ApplyPerGameSetting(&Settings::values.gpu_accuracy, ui->gpu_accuracy);
  59. ConfigurationShared::ApplyPerGameSetting(&Settings::values.async_presentation,
  60. ui->async_present, async_present);
  61. ConfigurationShared::ApplyPerGameSetting(&Settings::values.renderer_force_max_clock,
  62. ui->renderer_force_max_clock,
  63. renderer_force_max_clock);
  64. ConfigurationShared::ApplyPerGameSetting(&Settings::values.max_anisotropy,
  65. ui->anisotropic_filtering_combobox);
  66. ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_reactive_flushing,
  67. ui->use_reactive_flushing, use_reactive_flushing);
  68. ConfigurationShared::ApplyPerGameSetting(&Settings::values.async_astc, ui->async_astc,
  69. async_astc);
  70. ConfigurationShared::ApplyPerGameSetting(&Settings::values.astc_recompression,
  71. ui->astc_recompression_combobox);
  72. ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_asynchronous_shaders,
  73. ui->use_asynchronous_shaders,
  74. use_asynchronous_shaders);
  75. ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_fast_gpu_time,
  76. ui->use_fast_gpu_time, use_fast_gpu_time);
  77. ConfigurationShared::ApplyPerGameSetting(&Settings::values.use_vulkan_driver_pipeline_cache,
  78. ui->use_vulkan_driver_pipeline_cache,
  79. use_vulkan_driver_pipeline_cache);
  80. ConfigurationShared::ApplyPerGameSetting(&Settings::values.enable_compute_pipelines,
  81. ui->enable_compute_pipelines_checkbox,
  82. enable_compute_pipelines);
  83. }
  84. void ConfigureGraphicsAdvanced::changeEvent(QEvent* event) {
  85. if (event->type() == QEvent::LanguageChange) {
  86. RetranslateUI();
  87. }
  88. QWidget::changeEvent(event);
  89. }
  90. void ConfigureGraphicsAdvanced::RetranslateUI() {
  91. ui->retranslateUi(this);
  92. }
  93. void ConfigureGraphicsAdvanced::SetupPerGameUI() {
  94. // Disable if not global (only happens during game)
  95. if (Settings::IsConfiguringGlobal()) {
  96. ui->gpu_accuracy->setEnabled(Settings::values.gpu_accuracy.UsingGlobal());
  97. ui->async_present->setEnabled(Settings::values.async_presentation.UsingGlobal());
  98. ui->renderer_force_max_clock->setEnabled(
  99. Settings::values.renderer_force_max_clock.UsingGlobal());
  100. ui->use_reactive_flushing->setEnabled(Settings::values.use_reactive_flushing.UsingGlobal());
  101. ui->async_astc->setEnabled(Settings::values.async_astc.UsingGlobal());
  102. ui->astc_recompression_combobox->setEnabled(
  103. Settings::values.astc_recompression.UsingGlobal());
  104. ui->use_asynchronous_shaders->setEnabled(
  105. Settings::values.use_asynchronous_shaders.UsingGlobal());
  106. ui->use_fast_gpu_time->setEnabled(Settings::values.use_fast_gpu_time.UsingGlobal());
  107. ui->use_vulkan_driver_pipeline_cache->setEnabled(
  108. Settings::values.use_vulkan_driver_pipeline_cache.UsingGlobal());
  109. ui->anisotropic_filtering_combobox->setEnabled(
  110. Settings::values.max_anisotropy.UsingGlobal());
  111. ui->enable_compute_pipelines_checkbox->setEnabled(
  112. Settings::values.enable_compute_pipelines.UsingGlobal());
  113. return;
  114. }
  115. ConfigurationShared::SetColoredTristate(ui->async_present, Settings::values.async_presentation,
  116. async_present);
  117. ConfigurationShared::SetColoredTristate(ui->renderer_force_max_clock,
  118. Settings::values.renderer_force_max_clock,
  119. renderer_force_max_clock);
  120. ConfigurationShared::SetColoredTristate(
  121. ui->use_reactive_flushing, Settings::values.use_reactive_flushing, use_reactive_flushing);
  122. ConfigurationShared::SetColoredTristate(ui->async_astc, Settings::values.async_astc,
  123. async_astc);
  124. ConfigurationShared::SetColoredTristate(ui->use_asynchronous_shaders,
  125. Settings::values.use_asynchronous_shaders,
  126. use_asynchronous_shaders);
  127. ConfigurationShared::SetColoredTristate(ui->use_fast_gpu_time,
  128. Settings::values.use_fast_gpu_time, use_fast_gpu_time);
  129. ConfigurationShared::SetColoredTristate(ui->use_vulkan_driver_pipeline_cache,
  130. Settings::values.use_vulkan_driver_pipeline_cache,
  131. use_vulkan_driver_pipeline_cache);
  132. ConfigurationShared::SetColoredTristate(ui->enable_compute_pipelines_checkbox,
  133. Settings::values.enable_compute_pipelines,
  134. enable_compute_pipelines);
  135. ConfigurationShared::SetColoredComboBox(
  136. ui->gpu_accuracy, ui->label_gpu_accuracy,
  137. static_cast<int>(Settings::values.gpu_accuracy.GetValue(true)));
  138. ConfigurationShared::SetColoredComboBox(
  139. ui->anisotropic_filtering_combobox, ui->af_label,
  140. static_cast<int>(Settings::values.max_anisotropy.GetValue(true)));
  141. ConfigurationShared::SetColoredComboBox(
  142. ui->astc_recompression_combobox, ui->label_astc_recompression,
  143. static_cast<int>(Settings::values.astc_recompression.GetValue(true)));
  144. }
  145. void ConfigureGraphicsAdvanced::ExposeComputeOption() {
  146. ui->enable_compute_pipelines_checkbox->setVisible(true);
  147. }