mirror of
https://github.com/stenzek/duckstation.git
synced 2026-10-12 02:23:23 +00:00
FullscreenUI: Fix adapter list not updating on renderer change
Also disable the option when using GL.
This commit is contained in:
@@ -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,
|
||||
[¤t_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);
|
||||
|
||||
Reference in New Issue
Block a user