diff options
| author | swurl <swurl@swurl.xyz> | 2025-04-23 20:57:53 -0400 |
|---|---|---|
| committer | swurl <swurl@swurl.xyz> | 2025-04-23 20:57:53 -0400 |
| commit | 1949e7c438bd0d8a19c8fa2861a3ef3461837fc7 (patch) | |
| tree | dae34b501ae943dfffd7d73292e7e0b93536916f /src | |
| parent | c64c404a2f60fee2126f671ab38940bf6c19089a (diff) | |
Add dynamic state extension configs
Signed-off-by: swurl <swurl@swurl.xyz>
Diffstat (limited to 'src')
| -rw-r--r-- | src/common/settings.cpp | 1 | ||||
| -rw-r--r-- | src/common/settings.h | 11 | ||||
| -rw-r--r-- | src/common/settings_common.h | 1 | ||||
| -rw-r--r-- | src/frontend_common/config.cpp | 2 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_pipeline_cache.cpp | 11 | ||||
| -rw-r--r-- | src/yuzu/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_dialog.cpp | 29 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_dialog.h | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_graphics_extensions.cpp | 71 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_graphics_extensions.h | 45 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_graphics_extensions.ui | 68 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_per_game.cpp | 4 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_per_game.h | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/shared_translation.cpp | 20 |
14 files changed, 251 insertions, 17 deletions
diff --git a/src/common/settings.cpp b/src/common/settings.cpp index 245c432939..ee7074b128 100644 --- a/src/common/settings.cpp +++ b/src/common/settings.cpp @@ -206,6 +206,7 @@ const char* TranslateCategory(Category category) { case Category::Renderer: case Category::RendererAdvanced: case Category::RendererDebug: + case Category::RendererExtensions: return "Renderer"; case Category::System: case Category::SystemAudio: diff --git a/src/common/settings.h b/src/common/settings.h index c2cdeb4994..ca1de28d0a 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -445,6 +445,17 @@ struct Values { SwitchableSetting<bool> barrier_feedback_loops{linkage, true, "barrier_feedback_loops", Category::RendererAdvanced}; + SwitchableSetting<bool> use_dyna_state_1{linkage, true, "use_dyna_state_1", + Category::RendererExtensions}; + SwitchableSetting<bool> use_dyna_state_2{linkage, true, "use_dyna_state_2", + Category::RendererExtensions}; + SwitchableSetting<bool> use_dyna_state_2_extras{linkage, true, "use_dyna_state_2_extras", + Category::RendererExtensions}; + SwitchableSetting<bool> use_dyna_state_3{linkage, false, "use_dyna_state_3", + Category::RendererExtensions}; + SwitchableSetting<bool> use_dyna_state_3_blend{linkage, false, "use_dyna_state_3_blend", + Category::RendererExtensions}; + Setting<bool> renderer_debug{linkage, false, "debug", Category::RendererDebug}; Setting<bool> renderer_shader_feedback{linkage, false, "shader_feedback", Category::RendererDebug}; diff --git a/src/common/settings_common.h b/src/common/settings_common.h index 2df3f08099..af16ec692b 100644 --- a/src/common/settings_common.h +++ b/src/common/settings_common.h @@ -21,6 +21,7 @@ enum class Category : u32 { Overlay, Renderer, RendererAdvanced, + RendererExtensions, RendererDebug, System, SystemAudio, diff --git a/src/frontend_common/config.cpp b/src/frontend_common/config.cpp index 95f8c8c369..326267e774 100644 --- a/src/frontend_common/config.cpp +++ b/src/frontend_common/config.cpp @@ -362,6 +362,7 @@ void Config::ReadRendererValues() { ReadCategory(Settings::Category::Renderer); ReadCategory(Settings::Category::RendererAdvanced); + ReadCategory(Settings::Category::RendererExtensions); ReadCategory(Settings::Category::RendererDebug); EndGroup(); @@ -670,6 +671,7 @@ void Config::SaveRendererValues() { WriteCategory(Settings::Category::Renderer); WriteCategory(Settings::Category::RendererAdvanced); + WriteCategory(Settings::Category::RendererExtensions); WriteCategory(Settings::Category::RendererDebug); EndGroup(); diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index a8883bc89f..a0312df65a 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -5,6 +5,7 @@ #include <algorithm> #include <cstddef> #include <fstream> +#include <iostream> #include <memory> #include <thread> #include <vector> @@ -427,11 +428,11 @@ PipelineCache::PipelineCache(Tegra::MaxwellDeviceMemoryManager& device_memory_, } dynamic_features = DynamicFeatures{ - .has_extended_dynamic_state = device.IsExtExtendedDynamicStateSupported(), - .has_extended_dynamic_state_2 = device.IsExtExtendedDynamicState2Supported(), - .has_extended_dynamic_state_2_extra = device.IsExtExtendedDynamicState2ExtrasSupported(), - .has_extended_dynamic_state_3_blend = device.IsExtExtendedDynamicState3BlendingSupported(), - .has_extended_dynamic_state_3_enables = device.IsExtExtendedDynamicState3EnablesSupported(), + .has_extended_dynamic_state = Settings::values.use_dyna_state_1.GetValue(), + .has_extended_dynamic_state_2 = Settings::values.use_dyna_state_2.GetValue(), + .has_extended_dynamic_state_2_extra = Settings::values.use_dyna_state_2_extras.GetValue(), + .has_extended_dynamic_state_3_blend = Settings::values.use_dyna_state_3_blend.GetValue(), + .has_extended_dynamic_state_3_enables = Settings::values.use_dyna_state_3.GetValue(), .has_dynamic_vertex_input = device.IsExtVertexInputDynamicStateSupported(), }; } diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt index 7b94b8054b..e8d2a9ad2a 100644 --- a/src/yuzu/CMakeLists.txt +++ b/src/yuzu/CMakeLists.txt @@ -231,6 +231,7 @@ add_executable(yuzu compatdb.h yuzu.qrc yuzu.rc + configuration/configure_graphics_extensions.h configuration/configure_graphics_extensions.cpp configuration/configure_graphics_extensions.ui ) set_target_properties(yuzu PROPERTIES OUTPUT_NAME "eden") diff --git a/src/yuzu/configuration/configure_dialog.cpp b/src/yuzu/configuration/configure_dialog.cpp index 37f23388e6..987b1462db 100644 --- a/src/yuzu/configuration/configure_dialog.cpp +++ b/src/yuzu/configuration/configure_dialog.cpp @@ -17,6 +17,7 @@ #include "yuzu/configuration/configure_general.h" #include "yuzu/configuration/configure_graphics.h" #include "yuzu/configuration/configure_graphics_advanced.h" +#include "yuzu/configuration/configure_graphics_extensions.h" #include "yuzu/configuration/configure_hotkeys.h" #include "yuzu/configuration/configure_input.h" #include "yuzu/configuration/configure_input_player.h" @@ -42,7 +43,9 @@ ConfigureDialog::ConfigureDialog(QWidget* parent, HotkeyRegistry& registry_, filesystem_tab{std::make_unique<ConfigureFilesystem>(this)}, general_tab{std::make_unique<ConfigureGeneral>(system_, nullptr, *builder, this)}, graphics_advanced_tab{ - std::make_unique<ConfigureGraphicsAdvanced>(system_, nullptr, *builder, this)}, + std::make_unique<ConfigureGraphicsAdvanced>(system_, nullptr, *builder, this)}, + graphics_extensions_tab{ + std::make_unique<ConfigureGraphicsExtensions>(system_, nullptr, *builder, this)}, ui_tab{std::make_unique<ConfigureUi>(system_, this)}, graphics_tab{std::make_unique<ConfigureGraphics>( system_, vk_device_records, [&]() { graphics_advanced_tab->ExposeComputeOption(); }, @@ -68,6 +71,7 @@ ConfigureDialog::ConfigureDialog(QWidget* parent, HotkeyRegistry& registry_, ui->tabWidget->addTab(general_tab.get(), tr("General")); ui->tabWidget->addTab(graphics_tab.get(), tr("Graphics")); ui->tabWidget->addTab(graphics_advanced_tab.get(), tr("GraphicsAdvanced")); + ui->tabWidget->addTab(graphics_extensions_tab.get(), tr("GraphicsExtensions")); ui->tabWidget->addTab(hotkeys_tab.get(), tr("Hotkeys")); ui->tabWidget->addTab(input_tab.get(), tr("Controls")); ui->tabWidget->addTab(profile_tab.get(), tr("Profiles")); @@ -104,7 +108,7 @@ ConfigureDialog::ConfigureDialog(QWidget* parent, HotkeyRegistry& registry_, adjustSize(); ui->selectorList->setCurrentRow(0); - // Selects the leftmost button on the bottom bar (Cancel as of writing) + // Selects the leftmost button on the bottom bar (Cancel as of writing) ui->buttonBox->setFocus(); } @@ -123,6 +127,7 @@ void ConfigureDialog::ApplyConfiguration() { cpu_tab->ApplyConfiguration(); graphics_tab->ApplyConfiguration(); graphics_advanced_tab->ApplyConfiguration(); + graphics_extensions_tab->ApplyConfiguration(); audio_tab->ApplyConfiguration(); debug_tab_tab->ApplyConfiguration(); web_tab->ApplyConfiguration(); @@ -162,16 +167,16 @@ Q_DECLARE_METATYPE(QList<QWidget*>); void ConfigureDialog::PopulateSelectionList() { const std::array<std::pair<QString, QList<QWidget*>>, 6> items{ - {{tr("General"), - {general_tab.get(), hotkeys_tab.get(), ui_tab.get(), web_tab.get(), debug_tab_tab.get()}}, - {tr("System"), - {system_tab.get(), profile_tab.get(), network_tab.get(), filesystem_tab.get(), - applets_tab.get()}}, - {tr("CPU"), {cpu_tab.get()}}, - {tr("Graphics"), {graphics_tab.get(), graphics_advanced_tab.get()}}, - {tr("Audio"), {audio_tab.get()}}, - {tr("Controls"), input_tab->GetSubTabs()}}, - }; + {{tr("General"), + {general_tab.get(), hotkeys_tab.get(), ui_tab.get(), web_tab.get(), debug_tab_tab.get()}}, + {tr("System"), + {system_tab.get(), profile_tab.get(), network_tab.get(), filesystem_tab.get(), + applets_tab.get()}}, + {tr("CPU"), {cpu_tab.get()}}, + {tr("Graphics"), {graphics_tab.get(), graphics_advanced_tab.get(), graphics_extensions_tab.get()}}, + {tr("Audio"), {audio_tab.get()}}, + {tr("Controls"), input_tab->GetSubTabs()}}, + }; [[maybe_unused]] const QSignalBlocker blocker(ui->selectorList); diff --git a/src/yuzu/configuration/configure_dialog.h b/src/yuzu/configuration/configure_dialog.h index d0a24a07b3..0b6b285678 100644 --- a/src/yuzu/configuration/configure_dialog.h +++ b/src/yuzu/configuration/configure_dialog.h @@ -23,6 +23,7 @@ class ConfigureFilesystem; class ConfigureGeneral; class ConfigureGraphics; class ConfigureGraphicsAdvanced; +class ConfigureGraphicsExtensions; class ConfigureHotkeys; class ConfigureInput; class ConfigureProfileManager; @@ -83,6 +84,7 @@ private: std::unique_ptr<ConfigureFilesystem> filesystem_tab; std::unique_ptr<ConfigureGeneral> general_tab; std::unique_ptr<ConfigureGraphicsAdvanced> graphics_advanced_tab; + std::unique_ptr<ConfigureGraphicsExtensions> graphics_extensions_tab; std::unique_ptr<ConfigureUi> ui_tab; std::unique_ptr<ConfigureGraphics> graphics_tab; std::unique_ptr<ConfigureHotkeys> hotkeys_tab; diff --git a/src/yuzu/configuration/configure_graphics_extensions.cpp b/src/yuzu/configuration/configure_graphics_extensions.cpp new file mode 100644 index 0000000000..28e11b78b7 --- /dev/null +++ b/src/yuzu/configuration/configure_graphics_extensions.cpp @@ -0,0 +1,71 @@ +// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include <vector> +#include <QLabel> +#include <qnamespace.h> +#include "common/settings.h" +#include "core/core.h" +#include "ui_configure_graphics_extensions.h" +#include "yuzu/configuration/configuration_shared.h" +#include "yuzu/configuration/configure_graphics_extensions.h" +#include "yuzu/configuration/shared_translation.h" +#include "yuzu/configuration/shared_widget.h" + +ConfigureGraphicsExtensions::ConfigureGraphicsExtensions( + const Core::System& system_, std::shared_ptr<std::vector<ConfigurationShared::Tab*>> group_, + const ConfigurationShared::Builder& builder, QWidget* parent) + : Tab(group_, parent), ui{std::make_unique<Ui::ConfigureGraphicsExtensions>()}, system{system_} { + + ui->setupUi(this); + + Setup(builder); + + SetConfiguration(); +} + +ConfigureGraphicsExtensions::~ConfigureGraphicsExtensions() = default; + +void ConfigureGraphicsExtensions::SetConfiguration() {} + +void ConfigureGraphicsExtensions::Setup(const ConfigurationShared::Builder& builder) { + auto& layout = *ui->populate_target->layout(); + std::map<u32, QWidget*> hold{}; // A map will sort the data for us + + for (auto setting : + Settings::values.linkage.by_category[Settings::Category::RendererExtensions]) { + ConfigurationShared::Widget* widget = builder.BuildWidget(setting, apply_funcs); + + if (widget == nullptr) { + continue; + } + if (!widget->Valid()) { + widget->deleteLater(); + continue; + } + + hold.emplace(setting->Id(), widget); + } + for (const auto& [id, widget] : hold) { + layout.addWidget(widget); + } +} + +void ConfigureGraphicsExtensions::ApplyConfiguration() { + const bool is_powered_on = system.IsPoweredOn(); + for (const auto& func : apply_funcs) { + func(is_powered_on); + } +} + +void ConfigureGraphicsExtensions::changeEvent(QEvent* event) { + if (event->type() == QEvent::LanguageChange) { + RetranslateUI(); + } + + QWidget::changeEvent(event); +} + +void ConfigureGraphicsExtensions::RetranslateUI() { + ui->retranslateUi(this); +} diff --git a/src/yuzu/configuration/configure_graphics_extensions.h b/src/yuzu/configuration/configure_graphics_extensions.h new file mode 100644 index 0000000000..aea51f5fbe --- /dev/null +++ b/src/yuzu/configuration/configure_graphics_extensions.h @@ -0,0 +1,45 @@ +// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <memory> +#include <vector> +#include <QWidget> +#include "yuzu/configuration/configuration_shared.h" + +namespace Core { +class System; +} + +namespace Ui { +class ConfigureGraphicsExtensions; +} + +namespace ConfigurationShared { +class Builder; +} + +class ConfigureGraphicsExtensions : public ConfigurationShared::Tab { + Q_OBJECT + +public: + explicit ConfigureGraphicsExtensions( + const Core::System& system_, std::shared_ptr<std::vector<ConfigurationShared::Tab*>> group, + const ConfigurationShared::Builder& builder, QWidget* parent = nullptr); + ~ConfigureGraphicsExtensions() override; + + void ApplyConfiguration() override; + void SetConfiguration() override; + +private: + void Setup(const ConfigurationShared::Builder& builder); + void changeEvent(QEvent* event) override; + void RetranslateUI(); + + std::unique_ptr<Ui::ConfigureGraphicsExtensions> ui; + + const Core::System& system; + + std::vector<std::function<void(bool)>> apply_funcs; +}; diff --git a/src/yuzu/configuration/configure_graphics_extensions.ui b/src/yuzu/configuration/configure_graphics_extensions.ui new file mode 100644 index 0000000000..871c794a7c --- /dev/null +++ b/src/yuzu/configuration/configure_graphics_extensions.ui @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ConfigureGraphicsExtensions</class> + <widget class="QWidget" name="ConfigureGraphicsExtensions"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>404</width> + <height>376</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <property name="accessibleName"> + <string>Extensions</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_1"> + <item> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="QGroupBox" name="groupBox_1"> + <property name="title"> + <string>Vulkan Extension Settings</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_3"> + <item> + <widget class="QWidget" name="populate_target" native="true"> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + </layout> + </widget> + </item> + </layout> + </widget> + </item> + </layout> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Orientation::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src/yuzu/configuration/configure_per_game.cpp b/src/yuzu/configuration/configure_per_game.cpp index df3251b9bf..031a8d4c2d 100644 --- a/src/yuzu/configuration/configure_per_game.cpp +++ b/src/yuzu/configuration/configure_per_game.cpp @@ -32,6 +32,7 @@ #include "yuzu/configuration/configure_cpu.h" #include "yuzu/configuration/configure_graphics.h" #include "yuzu/configuration/configure_graphics_advanced.h" +#include "yuzu/configuration/configure_graphics_extensions.h" #include "yuzu/configuration/configure_input_per_game.h" #include "yuzu/configuration/configure_linux_tab.h" #include "yuzu/configuration/configure_per_game.h" @@ -57,6 +58,8 @@ ConfigurePerGame::ConfigurePerGame(QWidget* parent, u64 title_id_, const std::st cpu_tab = std::make_unique<ConfigureCpu>(system_, tab_group, *builder, this); graphics_advanced_tab = std::make_unique<ConfigureGraphicsAdvanced>(system_, tab_group, *builder, this); + graphics_extensions_tab = + std::make_unique<ConfigureGraphicsExtensions>(system_, tab_group, *builder, this); graphics_tab = std::make_unique<ConfigureGraphics>( system_, vk_device_records, [&]() { graphics_advanced_tab->ExposeComputeOption(); }, [](Settings::AspectRatio, Settings::ResolutionSetup) {}, tab_group, *builder, this); @@ -71,6 +74,7 @@ ConfigurePerGame::ConfigurePerGame(QWidget* parent, u64 title_id_, const std::st ui->tabWidget->addTab(cpu_tab.get(), tr("CPU")); ui->tabWidget->addTab(graphics_tab.get(), tr("Graphics")); ui->tabWidget->addTab(graphics_advanced_tab.get(), tr("Adv. Graphics")); + ui->tabWidget->addTab(graphics_extensions_tab.get(), tr("GPU Extensions")); ui->tabWidget->addTab(audio_tab.get(), tr("Audio")); ui->tabWidget->addTab(input_tab.get(), tr("Input Profiles")); diff --git a/src/yuzu/configuration/configure_per_game.h b/src/yuzu/configuration/configure_per_game.h index 196cb32e6f..e0f4e5cd67 100644 --- a/src/yuzu/configuration/configure_per_game.h +++ b/src/yuzu/configuration/configure_per_game.h @@ -31,6 +31,7 @@ class ConfigureAudio; class ConfigureCpu; class ConfigureGraphics; class ConfigureGraphicsAdvanced; +class ConfigureGraphicsExtensions; class ConfigureInputPerGame; class ConfigureLinuxTab; class ConfigureSystem; @@ -84,6 +85,7 @@ private: std::unique_ptr<ConfigureAudio> audio_tab; std::unique_ptr<ConfigureCpu> cpu_tab; std::unique_ptr<ConfigureGraphicsAdvanced> graphics_advanced_tab; + std::unique_ptr<ConfigureGraphicsExtensions> graphics_extensions_tab; std::unique_ptr<ConfigureGraphics> graphics_tab; std::unique_ptr<ConfigureInputPerGame> input_tab; std::unique_ptr<ConfigureLinuxTab> linux_tab; diff --git a/src/yuzu/configuration/shared_translation.cpp b/src/yuzu/configuration/shared_translation.cpp index 440467010b..63ebba2dc1 100644 --- a/src/yuzu/configuration/shared_translation.cpp +++ b/src/yuzu/configuration/shared_translation.cpp @@ -230,6 +230,26 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QWidget* parent) { INSERT(Settings, barrier_feedback_loops, tr("Barrier feedback loops"), tr("Improves rendering of transparency effects in specific games.")); + INSERT(Settings, use_dyna_state_1, tr("Enable Extended Dynamic State 1"), + tr("Enables the VkExtendedDynamicState1 extension.\nThis setting may improve performance, " + "but may also cause games to break on some systems.")); + + INSERT(Settings, use_dyna_state_2, tr("Enable Extended Dynamic State 2"), + tr("Enables the VkExtendedDynamicState2 extension.\nThis setting may improve performance, " + "but may also cause games to break on some systems.")); + + INSERT(Settings, use_dyna_state_2_extras, tr("Enable Extended Dynamic State 2 Extras"), + tr("Enables the VkExtendedDynamicState2Extras extension.\nThis setting may improve performance, " + "but may also cause games to break on some systems.")); + + INSERT(Settings, use_dyna_state_3, tr("Enable Extended Dynamic State 3"), + tr("Enables the VkExtendedDynamicState3 extension.\nThis setting may improve performance, " + "but may also cause games to break on some systems.")); + + INSERT(Settings, use_dyna_state_3_blend, tr("Enable Extended Dynamic State 3 Blending"), + tr("Enables the VkExtendedDynamicState3Blending extension.\nThis setting may improve performance, " + "but may also cause games to break on some systems.")); + // Renderer (Debug) // System |
