diff options
Diffstat (limited to 'src/yuzu/configuration')
| -rw-r--r-- | src/yuzu/configuration/config.cpp | 8 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_graphics.cpp | 36 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_graphics.h | 2 | ||||
| -rw-r--r-- | src/yuzu/configuration/configure_graphics.ui | 91 | 
4 files changed, 92 insertions, 45 deletions
| diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index fffbfab02..9df4752be 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -682,6 +682,12 @@ void Config::ReadRendererValues() {      ReadGlobalSetting(Settings::values.bg_green);      ReadGlobalSetting(Settings::values.bg_blue); +    if (!global && UISettings::values.has_broken_vulkan && +        Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::Vulkan && +        !Settings::values.renderer_backend.UsingGlobal()) { +        Settings::values.renderer_backend.SetGlobal(true); +    } +      if (global) {          ReadBasicSetting(Settings::values.renderer_debug);          ReadBasicSetting(Settings::values.renderer_shader_feedback); @@ -801,6 +807,7 @@ void Config::ReadUIValues() {      ReadBasicSetting(UISettings::values.pause_when_in_background);      ReadBasicSetting(UISettings::values.mute_when_in_background);      ReadBasicSetting(UISettings::values.hide_mouse); +    ReadBasicSetting(UISettings::values.has_broken_vulkan);      ReadBasicSetting(UISettings::values.disable_web_applet);      qt_config->endGroup(); @@ -1348,6 +1355,7 @@ void Config::SaveUIValues() {      WriteBasicSetting(UISettings::values.pause_when_in_background);      WriteBasicSetting(UISettings::values.mute_when_in_background);      WriteBasicSetting(UISettings::values.hide_mouse); +    WriteBasicSetting(UISettings::values.has_broken_vulkan);      WriteBasicSetting(UISettings::values.disable_web_applet);      qt_config->endGroup(); diff --git a/src/yuzu/configuration/configure_graphics.cpp b/src/yuzu/configuration/configure_graphics.cpp index 2f1435b10..85f34dc35 100644 --- a/src/yuzu/configuration/configure_graphics.cpp +++ b/src/yuzu/configuration/configure_graphics.cpp @@ -17,6 +17,7 @@  #include "video_core/vulkan_common/vulkan_library.h"  #include "yuzu/configuration/configuration_shared.h"  #include "yuzu/configuration/configure_graphics.h" +#include "yuzu/uisettings.h"  ConfigureGraphics::ConfigureGraphics(const Core::System& system_, QWidget* parent)      : QWidget(parent), ui{std::make_unique<Ui::ConfigureGraphics>()}, system{system_} { @@ -57,6 +58,24 @@ ConfigureGraphics::ConfigureGraphics(const Core::System& system_, QWidget* paren          UpdateBackgroundColorButton(new_bg_color);      }); +    connect(ui->button_check_vulkan, &QAbstractButton::clicked, this, [this] { +        UISettings::values.has_broken_vulkan = false; + +        if (RetrieveVulkanDevices()) { +            ui->api->setEnabled(true); +            ui->button_check_vulkan->hide(); + +            for (const auto& device : vulkan_devices) { +                ui->device->addItem(device); +            } +        } else { +            UISettings::values.has_broken_vulkan = true; +        } +    }); + +    ui->api->setEnabled(!UISettings::values.has_broken_vulkan.GetValue()); +    ui->button_check_vulkan->setVisible(UISettings::values.has_broken_vulkan.GetValue()); +      ui->bg_label->setVisible(Settings::IsConfiguringGlobal());      ui->bg_combobox->setVisible(!Settings::IsConfiguringGlobal());  } @@ -296,7 +315,7 @@ void ConfigureGraphics::UpdateAPILayout() {          vulkan_device = Settings::values.vulkan_device.GetValue(true);          shader_backend = Settings::values.shader_backend.GetValue(true);          ui->device_widget->setEnabled(false); -        ui->backend_widget->setEnabled(false); +        ui->backend_widget->setEnabled(UISettings::values.has_broken_vulkan.GetValue());      } else {          vulkan_device = Settings::values.vulkan_device.GetValue();          shader_backend = Settings::values.shader_backend.GetValue(); @@ -318,7 +337,11 @@ void ConfigureGraphics::UpdateAPILayout() {      }  } -void ConfigureGraphics::RetrieveVulkanDevices() try { +bool ConfigureGraphics::RetrieveVulkanDevices() try { +    if (UISettings::values.has_broken_vulkan) { +        return false; +    } +      using namespace Vulkan;      vk::InstanceDispatch dld; @@ -333,8 +356,10 @@ void ConfigureGraphics::RetrieveVulkanDevices() try {          vulkan_devices.push_back(QString::fromStdString(name));      } +    return true;  } catch (const Vulkan::vk::Exception& exception) {      LOG_ERROR(Frontend, "Failed to enumerate devices with error: {}", exception.what()); +    return false;  }  Settings::RendererBackend ConfigureGraphics::GetCurrentGraphicsBackend() const { @@ -415,4 +440,11 @@ void ConfigureGraphics::SetupPerGameUI() {          ui->api, static_cast<int>(Settings::values.renderer_backend.GetValue(true)));      ConfigurationShared::InsertGlobalItem(          ui->nvdec_emulation, static_cast<int>(Settings::values.nvdec_emulation.GetValue(true))); + +    if (UISettings::values.has_broken_vulkan) { +        ui->backend_widget->setEnabled(true); +        ConfigurationShared::SetColoredComboBox( +            ui->backend, ui->backend_widget, +            static_cast<int>(Settings::values.shader_backend.GetValue(true))); +    }  } diff --git a/src/yuzu/configuration/configure_graphics.h b/src/yuzu/configuration/configure_graphics.h index 1b101c940..8438f0187 100644 --- a/src/yuzu/configuration/configure_graphics.h +++ b/src/yuzu/configuration/configure_graphics.h @@ -41,7 +41,7 @@ private:      void UpdateDeviceSelection(int device);      void UpdateShaderBackendSelection(int backend); -    void RetrieveVulkanDevices(); +    bool RetrieveVulkanDevices();      void SetupPerGameUI(); diff --git a/src/yuzu/configuration/configure_graphics.ui b/src/yuzu/configuration/configure_graphics.ui index 74f0e0b79..2f94c94bc 100644 --- a/src/yuzu/configuration/configure_graphics.ui +++ b/src/yuzu/configuration/configure_graphics.ui @@ -6,8 +6,8 @@     <rect>      <x>0</x>      <y>0</y> -    <width>437</width> -    <height>482</height> +    <width>471</width> +    <height>759</height>     </rect>    </property>    <property name="windowTitle"> @@ -171,11 +171,11 @@           </widget>          </item>          <item> -          <widget class="QCheckBox" name="accelerate_astc"> -            <property name="text"> -              <string>Accelerate ASTC texture decoding</string> -            </property> -          </widget> +         <widget class="QCheckBox" name="accelerate_astc"> +          <property name="text"> +           <string>Accelerate ASTC texture decoding</string> +          </property> +         </widget>          </item>          <item>           <widget class="QWidget" name="nvdec_emulation_widget" native="true"> @@ -438,43 +438,43 @@           </widget>          </item>          <item> -          <widget class="QWidget" name="anti_aliasing_layout" native="true"> -            <layout class="QHBoxLayout" name="horizontalLayout_7"> -              <property name="leftMargin"> -                <number>0</number> -              </property> -              <property name="topMargin"> -                <number>0</number> -              </property> -              <property name="rightMargin"> -                <number>0</number> +         <widget class="QWidget" name="anti_aliasing_layout" native="true"> +          <layout class="QHBoxLayout" name="horizontalLayout_7"> +           <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> +           <item> +            <widget class="QLabel" name="anti_aliasing_label"> +             <property name="text"> +              <string>Anti-Aliasing Method:</string> +             </property> +            </widget> +           </item> +           <item> +            <widget class="QComboBox" name="anti_aliasing_combobox"> +             <item> +              <property name="text"> +               <string>None</string>                </property> -              <property name="bottomMargin"> -                <number>0</number> +             </item> +             <item> +              <property name="text"> +               <string>FXAA</string>                </property> -              <item> -                <widget class="QLabel" name="anti_aliasing_label"> -                  <property name="text"> -                    <string>Anti-Aliasing Method:</string> -                  </property> -                </widget> -              </item> -              <item> -                <widget class="QComboBox" name="anti_aliasing_combobox"> -                  <item> -                    <property name="text"> -                      <string>None</string> -                    </property> -                  </item> -                  <item> -                    <property name="text"> -                      <string>FXAA</string> -                    </property> -                  </item> -                </widget> -              </item> -            </layout> -          </widget> +             </item> +            </widget> +           </item> +          </layout> +         </widget>          </item>          <item>           <widget class="QWidget" name="bg_layout" native="true"> @@ -574,6 +574,13 @@       </property>      </spacer>     </item> +   <item> +    <widget class="QPushButton" name="button_check_vulkan"> +     <property name="text"> +      <string>Check for Working Vulkan</string> +     </property> +    </widget> +   </item>    </layout>   </widget>   <resources/> | 
