[waffle] [PATCH] egl: Support robust access contexts with EGL 1.5.
Bas Nieuwenhuizen
bas at basnieuwenhuizen.nl
Fri Apr 15 21:04:59 UTC 2016
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 <bas at 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
More information about the waffle
mailing list