From 96e6f99f1472a9d55b1fd6caf699d0a39ffde81a Mon Sep 17 00:00:00 2001 From: barbudreadmon Date: Wed, 23 Sep 2020 11:29:44 +0200 Subject: [PATCH 1/4] allow context switching from gl to glcore --- retroarch.c | 59 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/retroarch.c b/retroarch.c index 0af5d0cde5..8a6ec49989 100644 --- a/retroarch.c +++ b/retroarch.c @@ -18916,9 +18916,11 @@ static bool dynamic_verify_hw_context( case RETRO_HW_CONTEXT_OPENGLES3: case RETRO_HW_CONTEXT_OPENGLES_VERSION: case RETRO_HW_CONTEXT_OPENGL: + if (!string_is_equal(video_ident, "gl")) + return false; + break; case RETRO_HW_CONTEXT_OPENGL_CORE: - if (!string_is_equal(video_ident, "gl") && - !string_is_equal(video_ident, "glcore")) + if (!string_is_equal(video_ident, "glcore")) return false; break; case RETRO_HW_CONTEXT_DIRECT3D: @@ -31603,14 +31605,13 @@ static bool hw_render_context_is_d3d11(const struct retro_hw_render_callback* hw } #endif -#if defined(HAVE_OPENGL) || defined(HAVE_OPENGL_CORE) +#ifdef HAVE_OPENGL static bool hw_render_context_is_gl(enum retro_hw_context_type type) { switch (type) { case RETRO_HW_CONTEXT_OPENGL: case RETRO_HW_CONTEXT_OPENGLES2: - case RETRO_HW_CONTEXT_OPENGL_CORE: case RETRO_HW_CONTEXT_OPENGLES3: case RETRO_HW_CONTEXT_OPENGLES_VERSION: return true; @@ -31622,6 +31623,13 @@ static bool hw_render_context_is_gl(enum retro_hw_context_type type) } #endif +#ifdef HAVE_OPENGL_CORE +static bool hw_render_context_is_glcore(enum retro_hw_context_type type) +{ + return type == RETRO_HW_CONTEXT_OPENGL_CORE; +} +#endif + bool *video_driver_get_threaded(void) { struct rarch_state *p_rarch = &rarch_st; @@ -33064,36 +33072,39 @@ static bool video_driver_find_driver(struct rarch_state *p_rarch) } #endif -#if defined(HAVE_OPENGL) || defined(HAVE_OPENGL_CORE) +#if defined(HAVE_OPENGL) if (hwr && hw_render_context_is_gl(hwr->context_type)) { RARCH_LOG("[Video]: Using HW render, OpenGL driver forced.\n"); - - /* If we have configured one of the HW render capable GL drivers, go with that. */ - if ( !string_is_equal(settings->arrays.video_driver, "gl") && - !string_is_equal(settings->arrays.video_driver, "glcore")) + if (!string_is_equal(settings->arrays.video_driver, "gl")) { RARCH_LOG("[Video]: \"%s\" saved as cached driver.\n", settings->arrays.video_driver); strlcpy(p_rarch->cached_video_driver, - settings->arrays.video_driver, - sizeof(p_rarch->cached_video_driver)); -#if defined(HAVE_OPENGL_CORE) - RARCH_LOG("[Video]: Forcing \"glcore\" driver.\n"); + settings->arrays.video_driver, + sizeof(p_rarch->cached_video_driver)); configuration_set_string(settings, - settings->arrays.video_driver, "glcore"); - p_rarch->current_video = &video_gl_core; -#else - RARCH_LOG("[Video]: Forcing \"gl\" driver.\n"); - configuration_set_string(settings, - settings->arrays.video_driver, "gl"); - p_rarch->current_video = &video_gl2; + settings->arrays.video_driver, + "gl"); + } + p_rarch->current_video = &video_gl2; + } #endif - } - else + +#if defined(HAVE_OPENGL_CORE) + if (hwr && hw_render_context_is_glcore(hwr->context_type)) + { + RARCH_LOG("[Video]: Using HW render, OpenGL Core driver forced.\n"); + if (!string_is_equal(settings->arrays.video_driver, "glcore")) { - RARCH_LOG("[Video]: Using configured \"%s\" driver for GL HW render.\n", - settings->arrays.video_driver); + RARCH_LOG("[Video]: \"%s\" saved as cached driver.\n", settings->arrays.video_driver); + strlcpy(p_rarch->cached_video_driver, + settings->arrays.video_driver, + sizeof(p_rarch->cached_video_driver)); + configuration_set_string(settings, + settings->arrays.video_driver, + "gl"); } + p_rarch->current_video = &video_gl_core; } #endif From eed47273fb7c77e6b3e3db8e55cccfbe852820ba Mon Sep 17 00:00:00 2001 From: barbudreadmon Date: Wed, 23 Sep 2020 12:34:00 +0200 Subject: [PATCH 2/4] fix crash when using RETRO_ENVIRONMENT_SET_HW_SHARED_CONTEXT --- retroarch.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/retroarch.c b/retroarch.c index 8a6ec49989..5f43a0f75b 100644 --- a/retroarch.c +++ b/retroarch.c @@ -34089,7 +34089,7 @@ static const gfx_ctx_driver_t *video_context_driver_init( { struct rarch_state *p_rarch = &rarch_st; settings_t *settings = p_rarch->configuration_settings; - bool video_shared_context = settings->bools.video_shared_context; + bool video_shared_context = settings->bools.video_shared_context || libretro_get_shared_context(); if (!ctx->bind_api(data, api, major, minor)) { From 1ed6bfb31f2f055cf13636d2c4bbd499be67e96b Mon Sep 17 00:00:00 2001 From: barbudreadmon Date: Tue, 29 Sep 2020 15:50:02 +0200 Subject: [PATCH 3/4] allow context switching from gl to glcore (fix typo) --- retroarch.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/retroarch.c b/retroarch.c index 5f43a0f75b..2fc813b114 100644 --- a/retroarch.c +++ b/retroarch.c @@ -33102,7 +33102,7 @@ static bool video_driver_find_driver(struct rarch_state *p_rarch) sizeof(p_rarch->cached_video_driver)); configuration_set_string(settings, settings->arrays.video_driver, - "gl"); + "glcore"); } p_rarch->current_video = &video_gl_core; } From 5bb90ecf4655393fdd95e22e5ddc6c97d2483bd3 Mon Sep 17 00:00:00 2001 From: barbudreadmon Date: Fri, 2 Oct 2020 14:28:57 +0200 Subject: [PATCH 4/4] compatibility with targets lacking glcore --- retroarch.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/retroarch.c b/retroarch.c index 2fc813b114..69d43d8c20 100644 --- a/retroarch.c +++ b/retroarch.c @@ -18912,6 +18912,14 @@ static bool dynamic_verify_hw_context( if (!string_is_equal(video_ident, "vulkan")) return false; break; +#if defined(HAVE_OPENGL_CORE) + case RETRO_HW_CONTEXT_OPENGL_CORE: + if (!string_is_equal(video_ident, "glcore")) + return false; + break; +#else + case RETRO_HW_CONTEXT_OPENGL_CORE: +#endif case RETRO_HW_CONTEXT_OPENGLES2: case RETRO_HW_CONTEXT_OPENGLES3: case RETRO_HW_CONTEXT_OPENGLES_VERSION: @@ -18919,10 +18927,6 @@ static bool dynamic_verify_hw_context( if (!string_is_equal(video_ident, "gl")) return false; break; - case RETRO_HW_CONTEXT_OPENGL_CORE: - if (!string_is_equal(video_ident, "glcore")) - return false; - break; case RETRO_HW_CONTEXT_DIRECT3D: if (!(string_is_equal(video_ident, "d3d11") && major == 11)) return false; @@ -31611,6 +31615,9 @@ static bool hw_render_context_is_gl(enum retro_hw_context_type type) switch (type) { case RETRO_HW_CONTEXT_OPENGL: +#ifndef HAVE_OPENGL_CORE + case RETRO_HW_CONTEXT_OPENGL_CORE: +#endif case RETRO_HW_CONTEXT_OPENGLES2: case RETRO_HW_CONTEXT_OPENGLES3: case RETRO_HW_CONTEXT_OPENGLES_VERSION: