From 53dbd697516aa781312f60e4a25bbd44a495b2a3 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sat, 4 Jan 2020 15:09:42 +0100 Subject: [PATCH] (EGL) Create egl_bind_api --- gfx/common/egl_common.c | 5 +++++ gfx/common/egl_common.h | 2 ++ gfx/drivers_context/drm_ctx.c | 6 ++--- gfx/drivers_context/emscriptenegl_ctx.c | 2 +- gfx/drivers_context/orbis_ctx.c | 4 ++-- gfx/drivers_context/switch_ctx.c | 4 ++-- gfx/drivers_context/vc_egl_ctx.c | 29 ++++++++++++++----------- gfx/drivers_context/wayland_ctx.c | 6 ++--- gfx/drivers_context/xegl_ctx.c | 6 ++--- 9 files changed, 37 insertions(+), 27 deletions(-) diff --git a/gfx/common/egl_common.c b/gfx/common/egl_common.c index c014f3d541..077b1a4777 100644 --- a/gfx/common/egl_common.c +++ b/gfx/common/egl_common.c @@ -395,6 +395,11 @@ bool egl_init_context(egl_ctx_data_t *egl, return true; } +bool egl_bind_api(EGLenum egl_api) +{ + return eglBindAPI(egl_api); +} + bool egl_create_context(egl_ctx_data_t *egl, const EGLint *egl_attribs) { EGLContext ctx = eglCreateContext(egl->dpy, egl->config, EGL_NO_CONTEXT, diff --git a/gfx/common/egl_common.h b/gfx/common/egl_common.h index f02d42551a..0dd96bf98a 100644 --- a/gfx/common/egl_common.h +++ b/gfx/common/egl_common.h @@ -100,6 +100,8 @@ bool egl_init_context(egl_ctx_data_t *egl, const EGLint *attrib_ptr, egl_accept_config_cb_t cb); +bool egl_bind_api(EGLenum egl_api); + bool egl_create_context(egl_ctx_data_t *egl, const EGLint *egl_attribs); bool egl_create_surface(egl_ctx_data_t *egl, void *native_window); diff --git a/gfx/drivers_context/drm_ctx.c b/gfx/drivers_context/drm_ctx.c index 2512058acc..7eea5cd55c 100644 --- a/gfx/drivers_context/drm_ctx.c +++ b/gfx/drivers_context/drm_ctx.c @@ -839,7 +839,7 @@ static bool gfx_ctx_drm_bind_api(void *video_driver, if ((major * 1000 + minor) >= 3001) return false; #endif - return eglBindAPI(EGL_OPENGL_API); + return egl_bind_api(EGL_OPENGL_API); #else break; #endif @@ -850,13 +850,13 @@ static bool gfx_ctx_drm_bind_api(void *video_driver, if (major >= 3) return false; #endif - return eglBindAPI(EGL_OPENGL_ES_API); + return egl_bind_api(EGL_OPENGL_ES_API); #else break; #endif case GFX_CTX_OPENVG_API: #if defined(HAVE_EGL) && defined(HAVE_VG) - return eglBindAPI(EGL_OPENVG_API); + return egl_bind_api(EGL_OPENVG_API); #endif case GFX_CTX_NONE: default: diff --git a/gfx/drivers_context/emscriptenegl_ctx.c b/gfx/drivers_context/emscriptenegl_ctx.c index fd836fb661..1dfb3be0eb 100644 --- a/gfx/drivers_context/emscriptenegl_ctx.c +++ b/gfx/drivers_context/emscriptenegl_ctx.c @@ -273,7 +273,7 @@ static bool gfx_ctx_emscripten_bind_api(void *data, switch (api) { case GFX_CTX_OPENGL_ES_API: - return eglBindAPI(EGL_OPENGL_ES_API); + return egl_bind_api(EGL_OPENGL_ES_API); default: break; } diff --git a/gfx/drivers_context/orbis_ctx.c b/gfx/drivers_context/orbis_ctx.c index a795297e2b..3ee55850da 100644 --- a/gfx/drivers_context/orbis_ctx.c +++ b/gfx/drivers_context/orbis_ctx.c @@ -197,13 +197,13 @@ static enum gfx_ctx_api orbis_ctx_get_api(void *data) } static bool orbis_ctx_bind_api(void *data, - enum gfx_ctx_api api, unsigned major, unsigned minor) + enum gfx_ctx_api api, unsigned major, unsigned minor) { (void)data; ctx_orbis_api = api; if (api == GFX_CTX_OPENGL_ES_API) - if (eglBindAPI(EGL_OPENGL_ES_API) != EGL_FALSE) + if (egl_bind_api(EGL_OPENGL_ES_API)) return true; return false; diff --git a/gfx/drivers_context/switch_ctx.c b/gfx/drivers_context/switch_ctx.c index c89e3c62b6..5466371349 100644 --- a/gfx/drivers_context/switch_ctx.c +++ b/gfx/drivers_context/switch_ctx.c @@ -207,13 +207,13 @@ static enum gfx_ctx_api switch_ctx_get_api(void *data) } static bool switch_ctx_bind_api(void *data, - enum gfx_ctx_api api, unsigned major, unsigned minor) + enum gfx_ctx_api api, unsigned major, unsigned minor) { (void)data; ctx_nx_api = api; if (api == GFX_CTX_OPENGL_API) - if (eglBindAPI(EGL_OPENGL_API) != EGL_FALSE) + if (egl_bind_api(EGL_OPENGL_API)) return true; return false; diff --git a/gfx/drivers_context/vc_egl_ctx.c b/gfx/drivers_context/vc_egl_ctx.c index 5f25e88ca9..9e076e39a9 100644 --- a/gfx/drivers_context/vc_egl_ctx.c +++ b/gfx/drivers_context/vc_egl_ctx.c @@ -377,11 +377,11 @@ static bool gfx_ctx_vc_bind_api(void *data, switch (api) { case GFX_CTX_OPENGL_API: - return eglBindAPI(EGL_OPENGL_API); + return egl_bind_api(EGL_OPENGL_API); case GFX_CTX_OPENGL_ES_API: - return eglBindAPI(EGL_OPENGL_ES_API); + return egl_bind_api(EGL_OPENGL_ES_API); case GFX_CTX_OPENVG_API: - return eglBindAPI(EGL_OPENVG_API); + return egl_bind_api(EGL_OPENVG_API); default: break; } @@ -406,7 +406,7 @@ static void gfx_ctx_vc_destroy(void *data) { if (vc->eglBuffer[i] && peglDestroyImageKHR) { - eglBindAPI(EGL_OPENVG_API); + egl_bind_api(EGL_OPENVG_API); eglMakeCurrent(vc->egl.dpy, vc->pbuff_surf, vc->pbuff_surf, vc->eglimage_ctx); peglDestroyImageKHR(vc->egl.dpy, vc->eglBuffer[i]); @@ -414,7 +414,7 @@ static void gfx_ctx_vc_destroy(void *data) if (vc->vgimage[i]) { - eglBindAPI(EGL_OPENVG_API); + egl_bind_api(EGL_OPENVG_API); eglMakeCurrent(vc->egl.dpy, vc->pbuff_surf, vc->pbuff_surf, vc->eglimage_ctx); vgDestroyImage(vc->vgimage[i]); @@ -434,7 +434,7 @@ static void gfx_ctx_vc_destroy(void *data) if (vc->eglimage_ctx) { - eglBindAPI(EGL_OPENVG_API); + egl_bind_api(EGL_OPENVG_API); eglMakeCurrent(vc->egl.dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); eglDestroyContext(vc->egl.dpy, vc->eglimage_ctx); @@ -448,11 +448,11 @@ static void gfx_ctx_vc_destroy(void *data) if (vc->pbuff_surf) { - eglBindAPI(EGL_OPENVG_API); + egl_bind_api(EGL_OPENVG_API); eglDestroySurface(vc->egl.dpy, vc->pbuff_surf); } - eglBindAPI(EGL_OPENVG_API); + egl_bind_api(EGL_OPENVG_API); eglMakeCurrent(vc->egl.dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); gfx_ctx_vc_bind_api(data, vc_api, 0, 0); @@ -542,10 +542,12 @@ static bool gfx_ctx_vc_image_buffer_init(void *data, ) return false; - vc->res = video->input_scale * RARCH_SCALE_BASE; + vc->res = video->input_scale * RARCH_SCALE_BASE; + + egl_bind_api(EGL_OPENVG_API); + vc->pbuff_surf = eglCreatePbufferSurface( + vc->egl.dpy, vc->egl.config, pbufsurface_list); - eglBindAPI(EGL_OPENVG_API); - vc->pbuff_surf = eglCreatePbufferSurface(vc->egl.dpy, vc->egl.config, pbufsurface_list); if (vc->pbuff_surf == EGL_NO_SURFACE) { RARCH_ERR("[VideoCore:EGLImage] failed to create PbufferSurface\n"); @@ -601,8 +603,9 @@ static bool gfx_ctx_vc_image_buffer_write(void *data, const void *frame, unsigne if (!vc || index >= MAX_EGLIMAGE_TEXTURES) goto error; - eglBindAPI(EGL_OPENVG_API); - eglMakeCurrent(vc->egl.dpy, vc->pbuff_surf, vc->pbuff_surf, vc->eglimage_ctx); + egl_bind_api(EGL_OPENVG_API); + eglMakeCurrent(vc->egl.dpy, vc->pbuff_surf, + vc->pbuff_surf, vc->eglimage_ctx); if (!vc->eglBuffer[index] || !vc->vgimage[index]) { diff --git a/gfx/drivers_context/wayland_ctx.c b/gfx/drivers_context/wayland_ctx.c index e0001873ff..58c6bac247 100644 --- a/gfx/drivers_context/wayland_ctx.c +++ b/gfx/drivers_context/wayland_ctx.c @@ -1768,7 +1768,7 @@ static bool gfx_ctx_wl_bind_api(void *video_driver, return false; #endif #ifdef HAVE_EGL - if (eglBindAPI(EGL_OPENGL_API) == EGL_TRUE) + if (egl_bind_api(EGL_OPENGL_API)) return true; #endif #endif @@ -1780,7 +1780,7 @@ static bool gfx_ctx_wl_bind_api(void *video_driver, return false; #endif #ifdef HAVE_EGL - if (eglBindAPI(EGL_OPENGL_ES_API) == EGL_TRUE) + if (egl_bind_api(EGL_OPENGL_ES_API)) return true; #endif #endif @@ -1788,7 +1788,7 @@ static bool gfx_ctx_wl_bind_api(void *video_driver, case GFX_CTX_OPENVG_API: #ifdef HAVE_VG #ifdef HAVE_EGL - if (eglBindAPI(EGL_OPENVG_API) == EGL_TRUE) + if (egl_bind_api(EGL_OPENVG_API)) return true; #endif #endif diff --git a/gfx/drivers_context/xegl_ctx.c b/gfx/drivers_context/xegl_ctx.c index 0ccb5f31c2..723a3f94d4 100644 --- a/gfx/drivers_context/xegl_ctx.c +++ b/gfx/drivers_context/xegl_ctx.c @@ -495,16 +495,16 @@ static bool gfx_ctx_xegl_bind_api(void *video_driver, if ((major * 1000 + minor) >= 3001) break; #endif - return eglBindAPI(EGL_OPENGL_API); + return egl_bind_api(EGL_OPENGL_API); case GFX_CTX_OPENGL_ES_API: #ifndef EGL_KHR_create_context if (major >= 3) break; #endif - return eglBindAPI(EGL_OPENGL_ES_API); + return egl_bind_api(EGL_OPENGL_ES_API); case GFX_CTX_OPENVG_API: #ifdef HAVE_VG - return eglBindAPI(EGL_OPENVG_API); + return egl_bind_api(EGL_OPENVG_API); #endif default: break;