mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2025-02-17 03:15:39 +00:00
libretro: Try for a GLES context first depending on preferred renderer
This commit is contained in:
parent
e198e31598
commit
3df1670809
|
@ -824,7 +824,12 @@ bool LibretroHostInterface::RequestHardwareRendererContext()
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GPURenderer::HardwareOpenGL:
|
case GPURenderer::HardwareOpenGL:
|
||||||
m_hw_render_callback_valid = LibretroOpenGLHostDisplay::RequestHardwareRendererContext(&m_hw_render_callback);
|
{
|
||||||
|
const bool prefer_gles =
|
||||||
|
(preferred_renderer == RETRO_HW_CONTEXT_OPENGLES2 || preferred_renderer == RETRO_HW_CONTEXT_OPENGLES_VERSION);
|
||||||
|
m_hw_render_callback_valid =
|
||||||
|
LibretroOpenGLHostDisplay::RequestHardwareRendererContext(&m_hw_render_callback, prefer_gles);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -23,15 +23,10 @@ void LibretroOpenGLHostDisplay::SetVSync(bool enabled)
|
||||||
Log_DevPrintf("Ignoring SetVSync(%u)", BoolToUInt32(enabled));
|
Log_DevPrintf("Ignoring SetVSync(%u)", BoolToUInt32(enabled));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool LibretroOpenGLHostDisplay::RequestHardwareRendererContext(retro_hw_render_callback* cb)
|
static bool TryDesktopVersions(retro_hw_render_callback* cb)
|
||||||
{
|
{
|
||||||
// Prefer a desktop OpenGL context where possible. If we can't get this, try OpenGL ES.
|
|
||||||
static constexpr std::array<std::tuple<u32, u32>, 11> desktop_versions_to_try = {
|
static constexpr std::array<std::tuple<u32, u32>, 11> desktop_versions_to_try = {
|
||||||
{/*{4, 6}, {4, 5}, {4, 4}, {4, 3}, {4, 2}, {4, 1}, {4, 0}, {3, 3}, {3, 2}, */ {3, 1}, {3, 0}}};
|
{/*{4, 6}, {4, 5}, {4, 4}, {4, 3}, {4, 2}, {4, 1}, {4, 0}, */ {3, 3}, {3, 2}, {3, 1}, {3, 0}}};
|
||||||
static constexpr std::array<std::tuple<u32, u32>, 4> es_versions_to_try = {{{3, 2}, {3, 1}, {3, 0}}};
|
|
||||||
|
|
||||||
cb->cache_context = true;
|
|
||||||
cb->bottom_left_origin = true;
|
|
||||||
|
|
||||||
for (const auto& [major, minor] : desktop_versions_to_try)
|
for (const auto& [major, minor] : desktop_versions_to_try)
|
||||||
{
|
{
|
||||||
|
@ -52,6 +47,13 @@ bool LibretroOpenGLHostDisplay::RequestHardwareRendererContext(retro_hw_render_c
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool TryESVersions(retro_hw_render_callback* cb)
|
||||||
|
{
|
||||||
|
static constexpr std::array<std::tuple<u32, u32>, 4> es_versions_to_try = {{{3, 2}, {3, 1}, {3, 0}}};
|
||||||
|
|
||||||
for (const auto& [major, minor] : es_versions_to_try)
|
for (const auto& [major, minor] : es_versions_to_try)
|
||||||
{
|
{
|
||||||
if (major >= 3 && minor > 0)
|
if (major >= 3 && minor > 0)
|
||||||
|
@ -71,6 +73,26 @@ bool LibretroOpenGLHostDisplay::RequestHardwareRendererContext(retro_hw_render_c
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool LibretroOpenGLHostDisplay::RequestHardwareRendererContext(retro_hw_render_callback* cb, bool prefer_gles)
|
||||||
|
{
|
||||||
|
// Prefer a desktop OpenGL context where possible. If we can't get this, try OpenGL ES.
|
||||||
|
cb->cache_context = true;
|
||||||
|
cb->bottom_left_origin = true;
|
||||||
|
|
||||||
|
if (!prefer_gles)
|
||||||
|
{
|
||||||
|
if (TryDesktopVersions(cb) || TryESVersions(cb))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (TryESVersions(cb) || TryDesktopVersions(cb))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
Log_ErrorPrint("Failed to set any GL HW renderer");
|
Log_ErrorPrint("Failed to set any GL HW renderer");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ public:
|
||||||
LibretroOpenGLHostDisplay();
|
LibretroOpenGLHostDisplay();
|
||||||
~LibretroOpenGLHostDisplay();
|
~LibretroOpenGLHostDisplay();
|
||||||
|
|
||||||
static bool RequestHardwareRendererContext(retro_hw_render_callback* cb);
|
static bool RequestHardwareRendererContext(retro_hw_render_callback* cb, bool prefer_gles);
|
||||||
|
|
||||||
RenderAPI GetRenderAPI() const override;
|
RenderAPI GetRenderAPI() const override;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue