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); m_value = std::string(value);
return true; return true;
} }
void set(std::string_view value)
{
m_value = std::string(value);
}
}; };
// Simple set entry (TODO: template for various types) // Simple set entry (TODO: template for various types)

View File

@ -121,7 +121,8 @@ namespace rsx
} }
Emulator::Emulator() noexcept 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; s_emulator_available = true;
} }
@ -303,6 +304,15 @@ static void fixup_settings(const psf::registry* _psf)
g_cfg.audio.music.set(music_handler::null); 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 // Some settings are not allowed in certain PPU decoders
if (g_cfg.core.ppu_decoder != ppu_decoder_type::_static) if (g_cfg.core.ppu_decoder != ppu_decoder_type::_static)

View File

@ -142,6 +142,7 @@ class Emulator final
games_config m_games_config; games_config m_games_config;
std::set<video_renderer> m_supported_renderers;
video_renderer m_default_renderer; video_renderer m_default_renderer;
std::string m_default_graphics_adapter; std::string m_default_graphics_adapter;
@ -476,6 +477,10 @@ public:
bool IsHeadless() const { return m_headless; } bool IsHeadless() const { return m_headless; }
void SetHeadless(bool headless) { m_headless = 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 SetDefaultRenderer(video_renderer renderer) { m_default_renderer = renderer; }
void SetDefaultGraphicsAdapter(std::string adapter) { m_default_graphics_adapter = std::move(adapter); } 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); 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 // 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(); 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); cfg_log.notice("Setting the default renderer to Vulkan. Default GPU: '%s'", adapter);
Emu.SetDefaultRenderer(video_renderer::vulkan); Emu.SetDefaultRenderer(video_renderer::vulkan);
Emu.SetDefaultGraphicsAdapter(adapter); 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) void emu_settings::LoadSettings(const std::string& title_id, bool create_config_from_global, const std::string& db_config)