diff options
author | Matthew Waters <[email protected]> | 2015-09-14 18:35:45 +0100 |
---|---|---|
committer | Emil Velikov <[email protected]> | 2015-10-03 12:30:13 +0100 |
commit | 11cabc45b7124e51d5ead42db6dceb5a3755266b (patch) | |
tree | 93a411b2512841be810a2bcef59b6522e883a168 /src/egl/main/eglcontext.c | |
parent | 443d3bf3408984b11f99c1077d167d8331609007 (diff) |
egl: rework handling EGL_CONTEXT_FLAGS
As of version 15 of the EGL_KHR_create_context spec, debug contexts
are allowed for ES contexts. We should allow creation instead of
erroring.
While we're here provide a more comprehensive checking for the other two
flags - ROBUST_ACCESS_BIT_KHR and FORWARD_COMPATIBLE_BIT_KHR
v2 [Emil Velikov] Rebase. Minor tweak in commit message.
Cc: Boyan Ding <[email protected]>
Cc: Chad Versace <[email protected]>
Cc: "10.6 11.0" <[email protected]>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91044
Signed-off-by: Matthew Waters <[email protected]>
Signed-off-by: Emil Velikov <[email protected]>
Diffstat (limited to 'src/egl/main/eglcontext.c')
-rw-r--r-- | src/egl/main/eglcontext.c | 49 |
1 files changed, 44 insertions, 5 deletions
diff --git a/src/egl/main/eglcontext.c b/src/egl/main/eglcontext.c index 588f48921f2..ae19862bc59 100644 --- a/src/egl/main/eglcontext.c +++ b/src/egl/main/eglcontext.c @@ -152,12 +152,51 @@ _eglParseContextAttribList(_EGLContext *ctx, _EGLDisplay *dpy, /* The EGL_KHR_create_context spec says: * - * "Flags are only defined for OpenGL context creation, and - * specifying a flags value other than zero for other types of - * contexts, including OpenGL ES contexts, will generate an - * error." + * "If the EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR flag bit is set in + * EGL_CONTEXT_FLAGS_KHR, then a <debug context> will be created. + * [...] + * In some cases a debug context may be identical to a non-debug + * context. This bit is supported for OpenGL and OpenGL ES + * contexts." + */ + if ((val & EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR) && + (api != EGL_OPENGL_API && api != EGL_OPENGL_ES_API)) { + err = EGL_BAD_ATTRIBUTE; + break; + } + + /* The EGL_KHR_create_context spec says: + * + * "If the EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR flag bit + * is set in EGL_CONTEXT_FLAGS_KHR, then a <forward-compatible> + * context will be created. Forward-compatible contexts are + * defined only for OpenGL versions 3.0 and later. They must not + * support functionality marked as <deprecated> by that version of + * the API, while a non-forward-compatible context must support + * all functionality in that version, deprecated or not. This bit + * is supported for OpenGL contexts, and requesting a + * forward-compatible context for OpenGL versions less than 3.0 + * will generate an error." + */ + if ((val & EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR) && + (api != EGL_OPENGL_API || ctx->ClientMajorVersion < 3)) { + err = EGL_BAD_ATTRIBUTE; + break; + } + + /* The EGL_KHR_create_context_spec says: + * + * "If the EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR bit is set in + * EGL_CONTEXT_FLAGS_KHR, then a context supporting <robust buffer + * access> will be created. Robust buffer access is defined in the + * GL_ARB_robustness extension specification, and the resulting + * context must also support either the GL_ARB_robustness + * extension, or a version of OpenGL incorporating equivalent + * functionality. This bit is supported for OpenGL contexts. */ - if (api != EGL_OPENGL_API && val != 0) { + if ((val & EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR) && + (api != EGL_OPENGL_API || + !dpy->Extensions.EXT_create_context_robustness)) { err = EGL_BAD_ATTRIBUTE; break; } |