Merge pull request #11450 from lat9nq/no-vk-device-fix
configure_graphics: Fix handling of broken Vulkan
This commit is contained in:
		| @@ -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; | ||||
| } | ||||
|   | ||||
| @@ -442,8 +442,13 @@ GMainWindow::GMainWindow(std::unique_ptr<Config> config_, bool has_broken_vulkan | ||||
|                                 "#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>" | ||||
|                                 "here for instructions to fix the issue</a>.")); | ||||
|  | ||||
| #ifdef HAS_OPENGL | ||||
|         Settings::values.renderer_backend = Settings::RendererBackend::OpenGL; | ||||
| #else | ||||
|         Settings::values.renderer_backend = Settings::RendererBackend::Null; | ||||
| #endif | ||||
|  | ||||
|         UpdateAPIText(); | ||||
|         renderer_status_button->setDisabled(true); | ||||
|         renderer_status_button->setChecked(false); | ||||
|     } else { | ||||
| @@ -3844,10 +3849,14 @@ void GMainWindow::OnToggleAdaptingFilter() { | ||||
|  | ||||
| void GMainWindow::OnToggleGraphicsAPI() { | ||||
|     auto api = Settings::values.renderer_backend.GetValue(); | ||||
|     if (api == Settings::RendererBackend::OpenGL) { | ||||
|     if (api != Settings::RendererBackend::Vulkan) { | ||||
|         api = Settings::RendererBackend::Vulkan; | ||||
|     } else { | ||||
| #ifdef HAS_OPENGL | ||||
|         api = Settings::RendererBackend::OpenGL; | ||||
| #else | ||||
|         api = Settings::RendererBackend::Null; | ||||
| #endif | ||||
|     } | ||||
|     Settings::values.renderer_backend.SetValue(api); | ||||
|     renderer_status_button->setChecked(api == Settings::RendererBackend::Vulkan); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 liamwhite
					liamwhite