configure_graphics_advanced.cpp 10 KB

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