configure_graphics: Fix handling of broken Vulkan

The VSync combobox wouldn't populate if there was no Vulkan device,
which caused issues with trying to set VSync on other backends.

This also adds another layer to GetCurrentGraphicsBackend to check for
broken Vulkan and return OpenGL instead of Vulkan.
This commit is contained in:
lat9nq 2023-09-04 20:21:14 -04:00
parent 83ec05d8af
commit 7d94588301

View file

@ -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);
} }