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 <[email protected]>
> ---
> 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?
> 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:
> *
>
_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev