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]; |                             : vsync_mode_combobox_enum_map[current_index]; | ||||||
|     int index{}; |     int index{}; | ||||||
|     const int device{vulkan_device_combobox->currentIndex()}; //< current selected Vulkan device |     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 |     const auto& present_modes = //< relevant vector of present modes for the selected device or API | ||||||
|         backend == Settings::RendererBackend::Vulkan ? device_present_modes[device] |         backend == Settings::RendererBackend::Vulkan && device > -1 ? device_present_modes[device] | ||||||
|                                                      : default_present_modes; |                                                                     : default_present_modes; | ||||||
|  |  | ||||||
|     vsync_mode_combobox->clear(); |     vsync_mode_combobox->clear(); | ||||||
|     vsync_mode_combobox_enum_map.clear(); |     vsync_mode_combobox_enum_map.clear(); | ||||||
| @@ -497,11 +493,19 @@ void ConfigureGraphics::RetrieveVulkanDevices() { | |||||||
| } | } | ||||||
|  |  | ||||||
| Settings::RendererBackend ConfigureGraphics::GetCurrentGraphicsBackend() const { | Settings::RendererBackend ConfigureGraphics::GetCurrentGraphicsBackend() const { | ||||||
|     if (!Settings::IsConfiguringGlobal() && !api_restore_global_button->isEnabled()) { |     const auto selected_backend = [&]() { | ||||||
|         return Settings::values.renderer_backend.GetValue(true); |         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>( |     return selected_backend; | ||||||
|         combobox_translations.at(Settings::EnumMetadata<Settings::RendererBackend>::Index()) |  | ||||||
|             .at(api_combobox->currentIndex()) |  | ||||||
|             .first); |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -442,8 +442,13 @@ GMainWindow::GMainWindow(std::unique_ptr<Config> config_, bool has_broken_vulkan | |||||||
|                                 "#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>" |                                 "#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>" | ||||||
|                                 "here for instructions to fix the issue</a>.")); |                                 "here for instructions to fix the issue</a>.")); | ||||||
|  |  | ||||||
|  | #ifdef HAS_OPENGL | ||||||
|         Settings::values.renderer_backend = Settings::RendererBackend::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->setDisabled(true); | ||||||
|         renderer_status_button->setChecked(false); |         renderer_status_button->setChecked(false); | ||||||
|     } else { |     } else { | ||||||
| @@ -3844,10 +3849,14 @@ void GMainWindow::OnToggleAdaptingFilter() { | |||||||
|  |  | ||||||
| void GMainWindow::OnToggleGraphicsAPI() { | void GMainWindow::OnToggleGraphicsAPI() { | ||||||
|     auto api = Settings::values.renderer_backend.GetValue(); |     auto api = Settings::values.renderer_backend.GetValue(); | ||||||
|     if (api == Settings::RendererBackend::OpenGL) { |     if (api != Settings::RendererBackend::Vulkan) { | ||||||
|         api = Settings::RendererBackend::Vulkan; |         api = Settings::RendererBackend::Vulkan; | ||||||
|     } else { |     } else { | ||||||
|  | #ifdef HAS_OPENGL | ||||||
|         api = Settings::RendererBackend::OpenGL; |         api = Settings::RendererBackend::OpenGL; | ||||||
|  | #else | ||||||
|  |         api = Settings::RendererBackend::Null; | ||||||
|  | #endif | ||||||
|     } |     } | ||||||
|     Settings::values.renderer_backend.SetValue(api); |     Settings::values.renderer_backend.SetValue(api); | ||||||
|     renderer_status_button->setChecked(api == Settings::RendererBackend::Vulkan); |     renderer_status_button->setChecked(api == Settings::RendererBackend::Vulkan); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 liamwhite
					liamwhite