summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar liamwhite2023-09-10 13:41:10 -0400
committerGravatar GitHub2023-09-10 13:41:10 -0400
commiteb9e84738025f681ac01c8ea16595b52834732d4 (patch)
tree92d91c48c42f4b9bc18fd5fea0a9bf5ed529ff04 /src
parentMerge pull request #11436 from liamwhite/bad-format (diff)
parentyuzu-qt: Use Null when OpenGL is not compiled (diff)
downloadyuzu-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.cpp28
-rw-r--r--src/yuzu/main.cpp11
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
499Settings::RendererBackend ConfigureGraphics::GetCurrentGraphicsBackend() const { 495Settings::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
3845void GMainWindow::OnToggleGraphicsAPI() { 3850void 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);