From 188dbb1679b391abe6322e5b3e74bed2522756e2 Mon Sep 17 00:00:00 2001 From: Eric Engestrom Date: Sat, 22 Jun 2019 21:55:03 +0100 Subject: [PATCH] Revert "egl: drop empty eglfallbacks.c" and "egl: move fallback calls to eglapi.c" This reverts commits cc4b68a80193e2a132cb62309292984a9428f2bb and b27fb3eacab906ec06cd61b7d01e3425c3b3cbfc. These caused a bunch of EGLSync tests to crash when they were previously failing. I have a hunch the tests are doing something wrong, like using extensions without checking for they support, but until the issue is investigated I'm just reverting these commits. Signed-off-by: Eric Engestrom --- src/egl/Makefile.sources | 1 + src/egl/main/eglapi.c | 48 +++++++------------------------ src/egl/main/egldriver.c | 1 + src/egl/main/egldriver.h | 5 ++++ src/egl/main/eglfallbacks.c | 57 +++++++++++++++++++++++++++++++++++++ src/egl/meson.build | 1 + 6 files changed, 75 insertions(+), 38 deletions(-) create mode 100644 src/egl/main/eglfallbacks.c diff --git a/src/egl/Makefile.sources b/src/egl/Makefile.sources index 5efdb337836..0cc5f1bbfef 100644 --- a/src/egl/Makefile.sources +++ b/src/egl/Makefile.sources @@ -16,6 +16,7 @@ LIBEGL_C_FILES := \ main/egldisplay.h \ main/egldriver.c \ main/egldriver.h \ + main/eglfallbacks.c \ main/eglglobals.c \ main/eglglobals.h \ main/eglimage.c \ diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c index 60f59bb165a..93c1da9aac0 100644 --- a/src/egl/main/eglapi.c +++ b/src/egl/main/eglapi.c @@ -725,10 +725,7 @@ eglGetConfigs(EGLDisplay dpy, EGLConfig *configs, if (!num_config) RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); - if (drv->API.GetConfigs) - ret = drv->API.GetConfigs(drv, disp, configs, config_size, num_config); - else - ret = _eglGetConfigs(drv, disp, configs, config_size, num_config); + ret = drv->API.GetConfigs(drv, disp, configs, config_size, num_config); RETURN_EGL_EVAL(disp, ret); } @@ -749,12 +746,8 @@ eglChooseConfig(EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, if (!num_config) RETURN_EGL_ERROR(disp, EGL_BAD_PARAMETER, EGL_FALSE); - if (drv->API.ChooseConfig) - ret = drv->API.ChooseConfig(drv, disp, attrib_list, configs, - config_size, num_config); - else - ret = _eglChooseConfig(drv, disp, attrib_list, configs, - config_size, num_config); + ret = drv->API.ChooseConfig(drv, disp, attrib_list, configs, + config_size, num_config); RETURN_EGL_EVAL(disp, ret); } @@ -772,11 +765,7 @@ eglGetConfigAttrib(EGLDisplay dpy, EGLConfig config, _EGL_FUNC_START(disp, EGL_OBJECT_DISPLAY_KHR, NULL, EGL_FALSE); _EGL_CHECK_CONFIG(disp, conf, EGL_FALSE, drv); - - if (drv->API.GetConfigAttrib) - ret = drv->API.GetConfigAttrib(drv, disp, conf, attribute, value); - else - ret = _eglGetConfigAttrib(drv, disp, conf, attribute, value); + ret = drv->API.GetConfigAttrib(drv, disp, conf, attribute, value); RETURN_EGL_EVAL(disp, ret); } @@ -900,11 +889,7 @@ eglQueryContext(EGLDisplay dpy, EGLContext ctx, _EGL_FUNC_START(disp, EGL_OBJECT_CONTEXT_KHR, context, EGL_FALSE); _EGL_CHECK_CONTEXT(disp, context, EGL_FALSE, drv); - - if (drv->API.QueryContext) - ret = drv->API.QueryContext(drv, disp, context, attribute, value); - else - ret = _eglQueryContext(drv, disp, context, attribute, value); + ret = drv->API.QueryContext(drv, disp, context, attribute, value); RETURN_EGL_EVAL(disp, ret); } @@ -1208,11 +1193,7 @@ eglQuerySurface(EGLDisplay dpy, EGLSurface surface, _EGL_FUNC_START(disp, EGL_OBJECT_SURFACE_KHR, surf, EGL_FALSE); _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); - - if (drv->API.QuerySurface) - ret = drv->API.QuerySurface(drv, disp, surf, attribute, value); - else - ret = _eglQuerySurface(drv, disp, surf, attribute, value); + ret = drv->API.QuerySurface(drv, disp, surf, attribute, value); RETURN_EGL_EVAL(disp, ret); } @@ -1228,11 +1209,7 @@ eglSurfaceAttrib(EGLDisplay dpy, EGLSurface surface, _EGL_FUNC_START(disp, EGL_OBJECT_SURFACE_KHR, surf, EGL_FALSE); _EGL_CHECK_SURFACE(disp, surf, EGL_FALSE, drv); - - if (drv->API.SurfaceAttrib) - ret = drv->API.SurfaceAttrib(drv, disp, surf, attribute, value); - else - ret = _eglSurfaceAttrib(drv, disp, surf, attribute, value); + ret = drv->API.SurfaceAttrib(drv, disp, surf, attribute, value); RETURN_EGL_EVAL(disp, ret); } @@ -1296,15 +1273,10 @@ eglSwapInterval(EGLDisplay dpy, EGLint interval) surf->Config->MinSwapInterval, surf->Config->MaxSwapInterval); - if (surf->SwapInterval != interval) { - if (drv->API.SwapInterval) - ret = drv->API.SwapInterval(drv, disp, surf, interval); - else - ret = _eglSwapInterval(drv, disp, surf, interval); - } - else { + if (surf->SwapInterval != interval) + ret = drv->API.SwapInterval(drv, disp, surf, interval); + else ret = EGL_TRUE; - } if (ret) surf->SwapInterval = interval; diff --git a/src/egl/main/egldriver.c b/src/egl/main/egldriver.c index e719b19a63f..4dc46b35e95 100644 --- a/src/egl/main/egldriver.c +++ b/src/egl/main/egldriver.c @@ -58,6 +58,7 @@ _eglGetDriver(void) _eglDriver = calloc(1, sizeof(*_eglDriver)); if (!_eglDriver) return NULL; + _eglInitDriverFallbacks(_eglDriver); _eglInitDriver(_eglDriver); } diff --git a/src/egl/main/egldriver.h b/src/egl/main/egldriver.h index 1a5238af298..59bc894e519 100644 --- a/src/egl/main/egldriver.h +++ b/src/egl/main/egldriver.h @@ -95,6 +95,11 @@ extern void _eglUnloadDrivers(void); +/* defined in eglfallbacks.c */ +extern void +_eglInitDriverFallbacks(_EGLDriver *drv); + + extern void _eglSearchPathForEach(EGLBoolean (*callback)(const char *, size_t, void *), void *callback_data); diff --git a/src/egl/main/eglfallbacks.c b/src/egl/main/eglfallbacks.c new file mode 100644 index 00000000000..08ffab3072c --- /dev/null +++ b/src/egl/main/eglfallbacks.c @@ -0,0 +1,57 @@ +/************************************************************************** + * + * Copyright 2010 LunarG, Inc. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + **************************************************************************/ + + +#include +#include "egltypedefs.h" +#include "egldriver.h" +#include "eglconfig.h" +#include "eglcontext.h" +#include "eglsurface.h" +#include "eglsync.h" + + +/** + * Plug all the available fallback routines into the given driver's + * dispatch table. + */ +void +_eglInitDriverFallbacks(_EGLDriver *drv) +{ + drv->API.GetConfigs = _eglGetConfigs; + drv->API.ChooseConfig = _eglChooseConfig; + drv->API.GetConfigAttrib = _eglGetConfigAttrib; + + drv->API.QueryContext = _eglQueryContext; + + drv->API.QuerySurface = _eglQuerySurface; + drv->API.SurfaceAttrib = _eglSurfaceAttrib; + + drv->API.SwapInterval = _eglSwapInterval; + + drv->API.GetSyncAttrib = _eglGetSyncAttrib; +} diff --git a/src/egl/meson.build b/src/egl/meson.build index 97d79823b66..443693091b4 100644 --- a/src/egl/meson.build +++ b/src/egl/meson.build @@ -44,6 +44,7 @@ files_egl = files( 'main/egldisplay.h', 'main/egldriver.c', 'main/egldriver.h', + 'main/eglfallbacks.c', 'main/eglglobals.c', 'main/eglglobals.h', 'main/eglimage.c', -- 2.30.2