On 24/08/14 03:36, Ian Romanick wrote: > On 08/21/2014 03:02 AM, Matthew Waters wrote: >> 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. >> >> Signed-off-by: Matthew Waters <ystree...@gmail.com> >> --- >> src/egl/main/eglcontext.c | 50 >> ++++++++++++++++++++++++++++++---- >> src/mesa/drivers/dri/common/dri_util.c | 17 ------------ >> 2 files changed, 44 insertions(+), 23 deletions(-) >> >> diff --git a/src/egl/main/eglcontext.c b/src/egl/main/eglcontext.c >> index 514b91a..8fe006f 100644 >> --- a/src/egl/main/eglcontext.c >> +++ b/src/egl/main/eglcontext.c >> @@ -121,12 +121,50 @@ _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 (api != EGL_OPENGL_API && api != EGL_OPENGL_ES_API >> + && (val & EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR)) { >> + 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 (api != EGL_OPENGL_API >> + && !dpy->Extensions.EXT_create_context_robustness) { >> err = EGL_BAD_ATTRIBUTE; >> break; >> } >> @@ -194,7 +232,7 @@ _eglParseContextAttribList(_EGLContext *ctx, _EGLDisplay >> *dpy, >> break; >> } >> >> - ctx->Flags = EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR; >> + ctx->Flags &= EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR; > It seems like this should be |= > > Are there any piglit tests for this?
There seem to be something along similar lines in /tests/egl/spec/egl_khr_create_context/ specifically invalid-*.c and valid-flag-debug.c >> break; >> >> default: >> diff --git a/src/mesa/drivers/dri/common/dri_util.c >> b/src/mesa/drivers/dri/common/dri_util.c >> index 6c78928..7a953ba 100644 >> --- a/src/mesa/drivers/dri/common/dri_util.c >> +++ b/src/mesa/drivers/dri/common/dri_util.c >> @@ -376,23 +376,6 @@ driCreateContextAttribs(__DRIscreen *screen, int api, >> return NULL; >> } >> >> - /* 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." >> - * >> - * The GLX_EXT_create_context_es2_profile specification doesn't say >> - * anything specific about this case. However, none of the known flags >> - * have any meaning in an ES context, so this seems safe. >> - */ >> - if (mesa_api != API_OPENGL_COMPAT >> - && mesa_api != API_OPENGL_CORE >> - && flags != 0) { >> - *error = __DRI_CTX_ERROR_BAD_FLAG; >> - return NULL; >> - } >> - >> /* There are no forward-compatible contexts before OpenGL 3.0. The >> * GLX_ARB_create_context spec says: >> * >> >>
signature.asc
Description: OpenPGP digital signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev