forked from suyu/suyu
Merge pull request #11450 from lat9nq/no-vk-device-fix
configure_graphics: Fix handling of broken Vulkan
This commit is contained in:
commit
eb9e847380
2 changed files with 26 additions and 13 deletions
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue