summaryrefslogtreecommitdiffstats
path: root/src/egl/drivers
diff options
context:
space:
mode:
authorEmil Velikov <emil.velikov@collabora.com>2016-08-25 00:16:01 +0100
committerEmil Velikov <emil.l.velikov@gmail.com>2016-10-14 12:45:24 +0100
commit38526bd4688a10385df1963458e8c6aded552653 (patch)
tree8c4fa857d049cf453da4852115dbc6692a00b3af /src/egl/drivers
parentebc68e38491b7bea61e964521d41ba6b2a127546 (diff)
downloadexternal_mesa3d-38526bd4688a10385df1963458e8c6aded552653.zip
external_mesa3d-38526bd4688a10385df1963458e8c6aded552653.tar.gz
external_mesa3d-38526bd4688a10385df1963458e8c6aded552653.tar.bz2
egl/dri2: add support for optional extensions in dri2_bind_extensions()
Will allow us to reuse the function for optional extensions and fold a bit of code. v2: Make dri2_bind_extensions::optional flag an argument to dri2_bind_extensions (Kristian). Cc: Rob Clark <robdclark@gmail.com> Signed-off-by: Emil Velikov <emil.velikov@collabora.com>
Diffstat (limited to 'src/egl/drivers')
-rw-r--r--src/egl/drivers/dri2/egl_dri2.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index 1de62db..4b7baaf 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -398,7 +398,8 @@ static struct dri2_extension_match swrast_core_extensions[] = {
static EGLBoolean
dri2_bind_extensions(struct dri2_egl_display *dri2_dpy,
struct dri2_extension_match *matches,
- const __DRIextension **extensions)
+ const __DRIextension **extensions,
+ bool optional)
{
int i, j, ret = EGL_TRUE;
void *field;
@@ -419,9 +420,14 @@ dri2_bind_extensions(struct dri2_egl_display *dri2_dpy,
for (j = 0; matches[j].name; j++) {
field = ((char *) dri2_dpy + matches[j].offset);
if (*(const __DRIextension **) field == NULL) {
- _eglLog(_EGL_WARNING, "did not find extension %s version %d",
- matches[j].name, matches[j].version);
- ret = EGL_FALSE;
+ if (optional) {
+ _eglLog(_EGL_DEBUG, "did not find optional extension %s version %d",
+ matches[j].name, matches[j].version);
+ } else {
+ _eglLog(_EGL_WARNING, "did not find extension %s version %d",
+ matches[j].name, matches[j].version);
+ ret = EGL_FALSE;
+ }
}
}
@@ -522,7 +528,7 @@ dri2_load_driver_dri3(_EGLDisplay *disp)
if (!extensions)
return EGL_FALSE;
- if (!dri2_bind_extensions(dri2_dpy, dri3_driver_extensions, extensions)) {
+ if (!dri2_bind_extensions(dri2_dpy, dri3_driver_extensions, extensions, false)) {
dlclose(dri2_dpy->driver);
return EGL_FALSE;
}
@@ -541,7 +547,7 @@ dri2_load_driver(_EGLDisplay *disp)
if (!extensions)
return EGL_FALSE;
- if (!dri2_bind_extensions(dri2_dpy, dri2_driver_extensions, extensions)) {
+ if (!dri2_bind_extensions(dri2_dpy, dri2_driver_extensions, extensions, false)) {
dlclose(dri2_dpy->driver);
return EGL_FALSE;
}
@@ -560,7 +566,7 @@ dri2_load_driver_swrast(_EGLDisplay *disp)
if (!extensions)
return EGL_FALSE;
- if (!dri2_bind_extensions(dri2_dpy, swrast_driver_extensions, extensions)) {
+ if (!dri2_bind_extensions(dri2_dpy, swrast_driver_extensions, extensions, false)) {
dlclose(dri2_dpy->driver);
return EGL_FALSE;
}
@@ -726,11 +732,11 @@ dri2_create_screen(_EGLDisplay *disp)
extensions = dri2_dpy->core->getExtensions(dri2_dpy->dri_screen);
if (dri2_dpy->image_driver || dri2_dpy->dri2) {
- if (!dri2_bind_extensions(dri2_dpy, dri2_core_extensions, extensions))
+ if (!dri2_bind_extensions(dri2_dpy, dri2_core_extensions, extensions, false))
goto cleanup_dri_screen;
} else {
assert(dri2_dpy->swrast);
- if (!dri2_bind_extensions(dri2_dpy, swrast_core_extensions, extensions))
+ if (!dri2_bind_extensions(dri2_dpy, swrast_core_extensions, extensions, false))
goto cleanup_dri_screen;
}