diff options
| author | 2023-09-10 13:41:10 -0400 | |
|---|---|---|
| committer | 2023-09-10 13:41:10 -0400 | |
| commit | eb9e84738025f681ac01c8ea16595b52834732d4 (patch) | |
| tree | 92d91c48c42f4b9bc18fd5fea0a9bf5ed529ff04 /src | |
| parent | Merge pull request #11436 from liamwhite/bad-format (diff) | |
| parent | yuzu-qt: Use Null when OpenGL is not compiled (diff) | |
| download | yuzu-eb9e84738025f681ac01c8ea16595b52834732d4.tar.gz yuzu-eb9e84738025f681ac01c8ea16595b52834732d4.tar.xz yuzu-eb9e84738025f681ac01c8ea16595b52834732d4.zip | |
Merge pull request #11450 from lat9nq/no-vk-device-fix
configure_graphics: Fix handling of broken Vulkan
Diffstat (limited to 'src')
| -rw-r--r-- | src/yuzu/configuration/configure_graphics.cpp | 28 | ||||
| -rw-r--r-- | src/yuzu/main.cpp | 11 |
2 files changed, 26 insertions, 13 deletions
diff --git a/src/yuzu/configuration/configure_graphics.cpp b/src/yuzu/configuration/configure_graphics.cpp index 8622dc184..fd6bebf0f 100644 --- a/src/yuzu/configuration/configure_graphics.cpp +++ b/src/yuzu/configuration/configure_graphics.cpp | |||
| @@ -193,14 +193,10 @@ void ConfigureGraphics::PopulateVSyncModeSelection() { | |||
| 193 | : vsync_mode_combobox_enum_map[current_index]; | 193 | : vsync_mode_combobox_enum_map[current_index]; |
| 194 | int index{}; | 194 | int index{}; |
| 195 | const int device{vulkan_device_combobox->currentIndex()}; //< current selected Vulkan device | 195 | const int device{vulkan_device_combobox->currentIndex()}; //< current selected Vulkan device |
| 196 | if (device == -1) { | ||
| 197 | // Invalid device | ||
| 198 | return; | ||
| 199 | } | ||
| 200 | 196 | ||
| 201 | const auto& present_modes = //< relevant vector of present modes for the selected device or API | 197 | const auto& present_modes = //< relevant vector of present modes for the selected device or API |
| 202 | backend == Settings::RendererBackend::Vulkan ? device_present_modes[device] | 198 | backend == Settings::RendererBackend::Vulkan && device > -1 ? device_present_modes[device] |
| 203 | : default_present_modes; | 199 | : default_present_modes; |
| 204 | 200 | ||
| 205 | vsync_mode_combobox->clear(); | 201 | vsync_mode_combobox->clear(); |
| 206 | vsync_mode_combobox_enum_map.clear(); | 202 | vsync_mode_combobox_enum_map.clear(); |
| @@ -497,11 +493,19 @@ void ConfigureGraphics::RetrieveVulkanDevices() { | |||
| 497 | } | 493 | } |
| 498 | 494 | ||
| 499 | Settings::RendererBackend ConfigureGraphics::GetCurrentGraphicsBackend() const { | 495 | Settings::RendererBackend ConfigureGraphics::GetCurrentGraphicsBackend() const { |
| 500 | if (!Settings::IsConfiguringGlobal() && !api_restore_global_button->isEnabled()) { | 496 | const auto selected_backend = [&]() { |
| 501 | return Settings::values.renderer_backend.GetValue(true); | 497 | if (!Settings::IsConfiguringGlobal() && !api_restore_global_button->isEnabled()) { |
| 498 | return Settings::values.renderer_backend.GetValue(true); | ||
| 499 | } | ||
| 500 | return static_cast<Settings::RendererBackend>( | ||
| 501 | combobox_translations.at(Settings::EnumMetadata<Settings::RendererBackend>::Index()) | ||
| 502 | .at(api_combobox->currentIndex()) | ||
| 503 | .first); | ||
| 504 | }(); | ||
| 505 | |||
| 506 | if (selected_backend == Settings::RendererBackend::Vulkan && | ||
| 507 | UISettings::values.has_broken_vulkan) { | ||
| 508 | return Settings::RendererBackend::OpenGL; | ||
| 502 | } | 509 | } |
| 503 | return static_cast<Settings::RendererBackend>( | 510 | return selected_backend; |
| 504 | combobox_translations.at(Settings::EnumMetadata<Settings::RendererBackend>::Index()) | ||
| 505 | .at(api_combobox->currentIndex()) | ||
| 506 | .first); | ||
| 507 | } | 511 | } |
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 21df742cb..9cea60c32 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp | |||
| @@ -442,8 +442,13 @@ GMainWindow::GMainWindow(std::unique_ptr<Config> config_, bool has_broken_vulkan | |||
| 442 | "#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>" | 442 | "#yuzu-starts-with-the-error-broken-vulkan-installation-detected'>" |
| 443 | "here for instructions to fix the issue</a>.")); | 443 | "here for instructions to fix the issue</a>.")); |
| 444 | 444 | ||
| 445 | #ifdef HAS_OPENGL | ||
| 445 | Settings::values.renderer_backend = Settings::RendererBackend::OpenGL; | 446 | Settings::values.renderer_backend = Settings::RendererBackend::OpenGL; |
| 447 | #else | ||
| 448 | Settings::values.renderer_backend = Settings::RendererBackend::Null; | ||
| 449 | #endif | ||
| 446 | 450 | ||
| 451 | UpdateAPIText(); | ||
| 447 | renderer_status_button->setDisabled(true); | 452 | renderer_status_button->setDisabled(true); |
| 448 | renderer_status_button->setChecked(false); | 453 | renderer_status_button->setChecked(false); |
| 449 | } else { | 454 | } else { |
| @@ -3844,10 +3849,14 @@ void GMainWindow::OnToggleAdaptingFilter() { | |||
| 3844 | 3849 | ||
| 3845 | void GMainWindow::OnToggleGraphicsAPI() { | 3850 | void GMainWindow::OnToggleGraphicsAPI() { |
| 3846 | auto api = Settings::values.renderer_backend.GetValue(); | 3851 | auto api = Settings::values.renderer_backend.GetValue(); |
| 3847 | if (api == Settings::RendererBackend::OpenGL) { | 3852 | if (api != Settings::RendererBackend::Vulkan) { |
| 3848 | api = Settings::RendererBackend::Vulkan; | 3853 | api = Settings::RendererBackend::Vulkan; |
| 3849 | } else { | 3854 | } else { |
| 3855 | #ifdef HAS_OPENGL | ||
| 3850 | api = Settings::RendererBackend::OpenGL; | 3856 | api = Settings::RendererBackend::OpenGL; |
| 3857 | #else | ||
| 3858 | api = Settings::RendererBackend::Null; | ||
| 3859 | #endif | ||
| 3851 | } | 3860 | } |
| 3852 | Settings::values.renderer_backend.SetValue(api); | 3861 | Settings::values.renderer_backend.SetValue(api); |
| 3853 | renderer_status_button->setChecked(api == Settings::RendererBackend::Vulkan); | 3862 | renderer_status_button->setChecked(api == Settings::RendererBackend::Vulkan); |