diff options
Diffstat (limited to 'src/egl/main')
-rw-r--r-- | src/egl/main/eglapi.c | 48 | ||||
-rw-r--r-- | src/egl/main/egldriver.c | 1 | ||||
-rw-r--r-- | src/egl/main/egldriver.h | 5 | ||||
-rw-r--r-- | src/egl/main/eglfallbacks.c | 57 |
4 files changed, 73 insertions, 38 deletions
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 <string.h> +#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; +} |