Force renderer to default renderer if not supported

This commit is contained in:
Megamouse 2026-06-02 00:44:15 +02:00
parent cc999d4210
commit 44b33f1962
4 changed files with 32 additions and 5 deletions

View File

@ -717,6 +717,11 @@ namespace cfg
m_value = std::string(value);
return true;
}
void set(std::string_view value)
{
m_value = std::string(value);
}
};
// Simple set entry (TODO: template for various types)

View File

@ -121,7 +121,8 @@ namespace rsx
}
Emulator::Emulator() noexcept
: m_default_renderer(video_renderer::null)
: m_supported_renderers({video_renderer::null})
, m_default_renderer(video_renderer::null)
{
s_emulator_available = true;
}
@ -303,6 +304,15 @@ static void fixup_settings(const psf::registry* _psf)
g_cfg.audio.music.set(music_handler::null);
}
}
else
{
// Make sure we have a valid renderer
if (!Emu.GetSupportedRenderers().contains(g_cfg.video.renderer.get()))
{
sys_log.warning("The video renderer '%s' is not supported on this device and will therefore be set to '%s'.", g_cfg.video.renderer.get(), Emu.GetDefaultRenderer());
g_cfg.video.renderer.set(Emu.GetDefaultRenderer());
}
}
// Some settings are not allowed in certain PPU decoders
if (g_cfg.core.ppu_decoder != ppu_decoder_type::_static)

View File

@ -142,6 +142,7 @@ class Emulator final
games_config m_games_config;
std::set<video_renderer> m_supported_renderers;
video_renderer m_default_renderer;
std::string m_default_graphics_adapter;
@ -476,6 +477,10 @@ public:
bool IsHeadless() const { return m_headless; }
void SetHeadless(bool headless) { m_headless = headless; }
const std::set<video_renderer>& GetSupportedRenderers() const { return m_supported_renderers; }
void SetSupportedRenderers(std::set<video_renderer> renderers) { m_supported_renderers = std::move(renderers); }
video_renderer GetDefaultRenderer() const { return m_default_renderer; }
void SetDefaultRenderer(video_renderer renderer) { m_default_renderer = renderer; }
void SetDefaultGraphicsAdapter(std::string adapter) { m_default_graphics_adapter = std::move(adapter); }

View File

@ -100,21 +100,28 @@ bool emu_settings::Init()
{
m_render_creator = new render_creator(this);
if (m_render_creator->abort_requested)
std::set<video_renderer> supported_renderers;
supported_renderers.insert(video_renderer::null);
if (m_render_creator->OpenGL.supported)
{
return false;
supported_renderers.insert(video_renderer::opengl);
}
// Make Vulkan default setting if it is supported
if (m_render_creator->Vulkan.supported && !m_render_creator->Vulkan.adapters.empty())
if (!m_render_creator->abort_requested && m_render_creator->Vulkan.supported && !m_render_creator->Vulkan.adapters.empty())
{
const std::string adapter = ::at32(m_render_creator->Vulkan.adapters, 0).toStdString();
cfg_log.notice("Setting the default renderer to Vulkan. Default GPU: '%s'", adapter);
Emu.SetDefaultRenderer(video_renderer::vulkan);
Emu.SetDefaultGraphicsAdapter(adapter);
supported_renderers.insert(video_renderer::vulkan);
}
return true;
Emu.SetSupportedRenderers(supported_renderers);
return !m_render_creator->abort_requested;
}
void emu_settings::LoadSettings(const std::string& title_id, bool create_config_from_global, const std::string& db_config)