configure_graphics.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. // SPDX-FileCopyrightText: 2016 Citra Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <functional>
  5. #include <memory>
  6. #include <type_traits>
  7. #include <typeindex>
  8. #include <vector>
  9. #include <QColor>
  10. #include <QString>
  11. #include <QWidget>
  12. #include <qobjectdefs.h>
  13. #include <vulkan/vulkan_core.h>
  14. #include "common/common_types.h"
  15. #include "common/settings_enums.h"
  16. #include "configuration/shared_translation.h"
  17. #include "vk_device_info.h"
  18. #include "yuzu/configuration/configuration_shared.h"
  19. class QPushButton;
  20. class QEvent;
  21. class QObject;
  22. class QComboBox;
  23. namespace Settings {
  24. enum class NvdecEmulation : u32;
  25. enum class RendererBackend : u32;
  26. enum class ShaderBackend : u32;
  27. } // namespace Settings
  28. namespace Core {
  29. class System;
  30. }
  31. namespace Ui {
  32. class ConfigureGraphics;
  33. }
  34. namespace ConfigurationShared {
  35. class Builder;
  36. }
  37. class ConfigureGraphics : public ConfigurationShared::Tab {
  38. Q_OBJECT
  39. public:
  40. explicit ConfigureGraphics(
  41. const Core::System& system_, std::vector<VkDeviceInfo::Record>& records,
  42. const std::function<void()>& expose_compute_option,
  43. const std::function<void(Settings::AspectRatio, Settings::ResolutionSetup)>&
  44. update_aspect_ratio,
  45. std::shared_ptr<std::vector<ConfigurationShared::Tab*>> group,
  46. const ConfigurationShared::Builder& builder, QWidget* parent = nullptr);
  47. ~ConfigureGraphics() override;
  48. void ApplyConfiguration() override;
  49. void SetConfiguration() override;
  50. private:
  51. void changeEvent(QEvent* event) override;
  52. void RetranslateUI();
  53. void Setup(const ConfigurationShared::Builder& builder);
  54. void PopulateVSyncModeSelection(bool use_setting);
  55. void UpdateVsyncSetting() const;
  56. void UpdateBackgroundColorButton(QColor color);
  57. void UpdateAPILayout();
  58. void UpdateDeviceSelection(int device);
  59. void UpdateShaderBackendSelection(int backend);
  60. void RetrieveVulkanDevices();
  61. /* Turns a Vulkan present mode into a textual string for a UI
  62. * (and eventually for a human to read) */
  63. const QString TranslateVSyncMode(VkPresentModeKHR mode,
  64. Settings::RendererBackend backend) const;
  65. Settings::RendererBackend GetCurrentGraphicsBackend() const;
  66. int FindIndex(u32 enumeration, int value) const;
  67. std::unique_ptr<Ui::ConfigureGraphics> ui;
  68. QColor bg_color;
  69. std::vector<std::function<void(bool)>> apply_funcs{};
  70. std::vector<VkDeviceInfo::Record>& records;
  71. std::vector<QString> vulkan_devices;
  72. std::vector<std::vector<VkPresentModeKHR>> device_present_modes;
  73. std::vector<VkPresentModeKHR>
  74. vsync_mode_combobox_enum_map{}; //< Keeps track of which present mode corresponds to which
  75. // selection in the combobox
  76. u32 vulkan_device{};
  77. Settings::ShaderBackend shader_backend{};
  78. const std::function<void()>& expose_compute_option;
  79. const std::function<void(Settings::AspectRatio, Settings::ResolutionSetup)> update_aspect_ratio;
  80. const Core::System& system;
  81. const ConfigurationShared::ComboboxTranslationMap& combobox_translations;
  82. const std::vector<std::pair<u32, QString>>& shader_mapping;
  83. QPushButton* api_restore_global_button;
  84. QComboBox* vulkan_device_combobox;
  85. QComboBox* api_combobox;
  86. QComboBox* shader_backend_combobox;
  87. QComboBox* vsync_mode_combobox;
  88. QPushButton* vsync_restore_global_button;
  89. QWidget* vulkan_device_widget;
  90. QWidget* api_widget;
  91. QWidget* shader_backend_widget;
  92. QComboBox* aspect_ratio_combobox;
  93. QComboBox* resolution_combobox;
  94. };