FullscreenUI: Fix adapter list not updating on renderer change

Also disable the option when using GL.
This commit is contained in:
Stenzek
2026-05-25 01:03:07 +10:00
parent 8347d1de98
commit fab306cc76
+16 -13
View File
@@ -217,6 +217,7 @@ struct SettingsLocals
bool game_settings_changed = false;
bool cover_downloader_urls_loaded = false;
bool cover_downloader_use_serial_names = false;
GPURenderer graphics_adapter_list_cache_renderer = GPURenderer::Count;
InputBindingDialog input_binding_dialog;
};
@@ -1747,7 +1748,6 @@ void FullscreenUI::SwitchToSettings()
s_settings_locals.game_cheat_groups = {};
s_settings_locals.selected_controller_port = -1;
PopulateGraphicsAdapterList();
PopulateHotkeyList();
const auto lock = Core::GetSettingsLock();
@@ -1813,17 +1813,9 @@ void FullscreenUI::SwitchToGameSettings(const GameList::Entry* entry, SettingsPa
void FullscreenUI::PopulateGraphicsAdapterList()
{
GPURenderer renderer;
const auto lock = Core::GetSettingsLock();
{
renderer = Settings::ParseRendererName(
GetEffectiveTinyStringSetting(GetEditingSettingsInterface(false), "GPU", "Renderer").c_str())
.value_or(Settings::DEFAULT_GPU_RENDERER);
}
Error error;
std::optional<GPUDevice::AdapterInfoList> adapter_list = GPUDevice::GetAdapterListForAPI(
Settings::GetRenderAPIForRenderer(renderer),
Settings::GetRenderAPIForRenderer(s_settings_locals.graphics_adapter_list_cache_renderer),
g_gpu_device->HasMainSwapChain() ? g_gpu_device->GetMainSwapChain()->GetWindowInfo().type :
WindowInfoType::Surfaceless,
&error);
@@ -3975,15 +3967,26 @@ void FullscreenUI::DrawGraphicsSettingsPage()
.c_str())
.value_or(Settings::DEFAULT_GPU_RENDERER);
const bool is_hardware = (renderer != GPURenderer::Software);
if (s_settings_locals.graphics_adapter_list_cache_renderer != renderer)
{
s_settings_locals.graphics_adapter_list_cache_renderer = renderer;
PopulateGraphicsAdapterList();
}
std::optional<SmallString> current_adapter =
bsi->GetOptionalSmallStringValue("GPU", "Adapter", game_settings ? std::nullopt : std::optional<const char*>(""));
if (MenuActionButton(
FSUI_ICONVSTR(ICON_PF_GPU_GRAPHICS_CARD, "GPU Adapter"), FSUI_VSTR("Selects the GPU to use for rendering."),
current_adapter.has_value() ? (current_adapter->empty() ? FSUI_VSTR("Default") : current_adapter->view()) :
FSUI_VSTR("Use Global Setting"),
true))
current_adapter.has_value() ?
((current_adapter->empty() || std::ranges::none_of(s_settings_locals.graphics_adapter_list_cache,
[&current_adapter](const GPUDevice::AdapterInfo& ai) {
return (current_adapter.value() == ai.name);
})) ?
FSUI_VSTR("Default") :
current_adapter->view()) :
FSUI_VSTR("Use Global Setting"),
true, !s_settings_locals.graphics_adapter_list_cache.empty()))
{
DropdownDialogOptions options;
options.reserve(s_settings_locals.graphics_adapter_list_cache.size() + 2);