소스 검색

configure_graphics: Fix handling of broken Vulkan

The VSync combobox wouldn't populate if there was no Vulkan device,
which caused issues with trying to set VSync on other backends.

This also adds another layer to GetCurrentGraphicsBackend to check for
broken Vulkan and return OpenGL instead of Vulkan.
lat9nq 2 년 전
부모
커밋
ea46efd9a2
1개의 변경된 파일16개의 추가작업 그리고 12개의 파일을 삭제
  1. 16 12
      src/yuzu/configuration/configure_graphics.cpp

+ 16 - 12
src/yuzu/configuration/configure_graphics.cpp

@@ -193,14 +193,10 @@ void ConfigureGraphics::PopulateVSyncModeSelection() {
                             : vsync_mode_combobox_enum_map[current_index];
     int index{};
     const int device{vulkan_device_combobox->currentIndex()}; //< current selected Vulkan device
-    if (device == -1) {
-        // Invalid device
-        return;
-    }
 
     const auto& present_modes = //< relevant vector of present modes for the selected device or API
-        backend == Settings::RendererBackend::Vulkan ? device_present_modes[device]
-                                                     : default_present_modes;
+        backend == Settings::RendererBackend::Vulkan && device > -1 ? device_present_modes[device]
+                                                                    : default_present_modes;
 
     vsync_mode_combobox->clear();
     vsync_mode_combobox_enum_map.clear();
@@ -497,11 +493,19 @@ void ConfigureGraphics::RetrieveVulkanDevices() {
 }
 
 Settings::RendererBackend ConfigureGraphics::GetCurrentGraphicsBackend() const {
-    if (!Settings::IsConfiguringGlobal() && !api_restore_global_button->isEnabled()) {
-        return Settings::values.renderer_backend.GetValue(true);
+    const auto selected_backend = [=]() {
+        if (!Settings::IsConfiguringGlobal() && !api_restore_global_button->isEnabled()) {
+            return Settings::values.renderer_backend.GetValue(true);
+        }
+        return static_cast<Settings::RendererBackend>(
+            combobox_translations.at(Settings::EnumMetadata<Settings::RendererBackend>::Index())
+                .at(api_combobox->currentIndex())
+                .first);
+    }();
+
+    if (selected_backend == Settings::RendererBackend::Vulkan &&
+        UISettings::values.has_broken_vulkan) {
+        return Settings::RendererBackend::OpenGL;
     }
-    return static_cast<Settings::RendererBackend>(
-        combobox_translations.at(Settings::EnumMetadata<Settings::RendererBackend>::Index())
-            .at(api_combobox->currentIndex())
-            .first);
+    return selected_backend;
 }