EGL 1.5 also supports the EGL_CONTEXT_OPENGL_ROBUST_ACCESS attribute without any extensions for both ES and non-ES.
Signed-off-by: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl> --- src/waffle/egl/wegl_config.c | 9 ++++++--- src/waffle/egl/wegl_context.c | 9 +++++++-- src/waffle/egl/wegl_display.c | 3 +-- src/waffle/egl/wegl_display.h | 2 ++ 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/waffle/egl/wegl_config.c b/src/waffle/egl/wegl_config.c index 1c3f416..08e06fb 100644 --- a/src/waffle/egl/wegl_config.c +++ b/src/waffle/egl/wegl_config.c @@ -56,17 +56,20 @@ check_context_attrs(struct wegl_display *dpy, } if (attrs->context_robust && !dpy->EXT_create_context_robustness && + dpy->major_version == 1 && dpy->minor_version < 5 && attrs->context_api != WAFFLE_CONTEXT_OPENGL) { wcore_errorf(WAFFLE_ERROR_UNSUPPORTED_ON_PLATFORM, - "EGL_EXT_create_context_robustness is required in order to " - "request a robust access context for OpenGL ES"); + "EGL_EXT_create_context_robustness or EGL 1.5 is " + "required in order to request a robust access context " + "for OpenGL ES"); return false; } if (attrs->context_robust && !dpy->KHR_create_context && + dpy->major_version == 1 && dpy->minor_version < 5 && attrs->context_api == WAFFLE_CONTEXT_OPENGL) { wcore_errorf(WAFFLE_ERROR_UNSUPPORTED_ON_PLATFORM, - "EGL_KHR_create_context is required in order to " + "EGL_KHR_create_context or EGL 1.5 is required in order to " "request a robust access context for OpenGL"); return false; } diff --git a/src/waffle/egl/wegl_context.c b/src/waffle/egl/wegl_context.c index 67cbc04..4b208fa 100644 --- a/src/waffle/egl/wegl_context.c +++ b/src/waffle/egl/wegl_context.c @@ -96,8 +96,13 @@ create_real_context(struct wegl_config *config, } if (attrs->context_robust) { - assert(dpy->KHR_create_context); - context_flags |= EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR; + if (dpy->major_version > 1 || dpy->minor_version >= 5) { + attrib_list[i++] = EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT; + attrib_list[i++] = EGL_TRUE; + } else { + assert(dpy->KHR_create_context); + context_flags |= EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR; + } } if (wcore_config_attrs_version_ge(attrs, 32)) { diff --git a/src/waffle/egl/wegl_display.c b/src/waffle/egl/wegl_display.c index 16af142..a5e3429 100644 --- a/src/waffle/egl/wegl_display.c +++ b/src/waffle/egl/wegl_display.c @@ -64,7 +64,6 @@ wegl_display_init(struct wegl_display *dpy, { struct wegl_platform *plat = wegl_platform(wc_plat); bool ok; - EGLint major, minor; ok = wcore_display_init(&dpy->wcore, wc_plat); if (!ok) @@ -76,7 +75,7 @@ wegl_display_init(struct wegl_display *dpy, goto fail; } - ok = plat->eglInitialize(dpy->egl, &major, &minor); + ok = plat->eglInitialize(dpy->egl, &dpy->major_version, &dpy->minor_version); if (!ok) { wegl_emit_error(plat, "eglInitialize"); goto fail; diff --git a/src/waffle/egl/wegl_display.h b/src/waffle/egl/wegl_display.h index b82a2ec..0d03ec8 100644 --- a/src/waffle/egl/wegl_display.h +++ b/src/waffle/egl/wegl_display.h @@ -39,6 +39,8 @@ struct wegl_display { EGLDisplay egl; bool EXT_create_context_robustness; bool KHR_create_context; + EGLint major_version; + EGLint minor_version; }; DEFINE_CONTAINER_CAST_FUNC(wegl_display, -- 2.8.0 _______________________________________________ waffle mailing list waffle@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/waffle