[Mesa-dev] [PATCH 2/2] egl: improve attribute checking for eglCreateContext

Matt Turner mattst88 at gmail.com
Wed Aug 12 10:53:36 PDT 2015


On Wed, Aug 12, 2015 at 8:36 AM, Frank Binns <frank.binns at imgtec.com> wrote:
> The EGL 1.4 spec states for eglCreateContext:
>
>         "attribute EGL_CONTEXT_CLIENT_VERSION is only valid when the current
>          rendering API is EGL_OPENGL_ES_API"
>
> Additionally, if the EGL_KHR_create_context EGL extension is supported
> (this is mandatory in EGL 1.5) then the EGL_CONTEXT_MAJOR_VERSION_KHR,
> which is an alias for EGL_CONTEXT_CLIENT_VERSION, and
> EGL_CONTEXT_MINOR_VERSION_KHR attributes are also accepted by
> eglCreateContext with the extension spec stating:
>
>         "The values for attributes EGL_CONTEXT_MAJOR_VERSION_KHR and
>          EGL_CONTEXT_MINOR_VERSION_KHR specify the requested client API
>          version. They are only meaningful for OpenGL and OpenGL ES
>          contexts, and specifying them for other types of contexts will
>          generate an error."
>
> Add the necessary checks against the extension and rendering APIs when
> validating these attributes as part of eglCreateContext.
>
> Signed-off-by: Frank Binns <frank.binns at imgtec.com>
> ---
>  src/egl/main/eglcontext.c | 30 +++++++++++++++++++++++++++++-
>  1 file changed, 29 insertions(+), 1 deletion(-)
>
> diff --git a/src/egl/main/eglcontext.c b/src/egl/main/eglcontext.c
> index e767f4b..01781a9 100644
> --- a/src/egl/main/eglcontext.c
> +++ b/src/egl/main/eglcontext.c
> @@ -101,11 +101,39 @@ _eglParseContextAttribList(_EGLContext *ctx, _EGLDisplay *dpy,
>
>        switch (attr) {
>        case EGL_CONTEXT_CLIENT_VERSION:
> +         /* The EGL 1.4 spec says:

I'd put a  new line here.

> +          *     "attribute EGL_CONTEXT_CLIENT_VERSION is only valid when the
> +          *      current rendering API is EGL_OPENGL_ES_API"
> +          *
> +          * The EGL_KHR_create_context spec says:

here

> +          *     "EGL_CONTEXT_MAJOR_VERSION_KHR           0x3098
> +          *      (this token is an alias for EGL_CONTEXT_CLIENT_VERSION)"
> +          *
> +          *     "The values for attributes EGL_CONTEXT_MAJOR_VERSION_KHR and
> +          *      EGL_CONTEXT_MINOR_VERSION_KHR specify the requested client API
> +          *      version. They are only meaningful for OpenGL and OpenGL ES
> +          *      contexts, and specifying them for other types of contexts will
> +          *      generate an error."
> +          */
> +         if ((api != EGL_OPENGL_ES_API &&
> +             (!dpy->Extensions.KHR_create_context || api != EGL_OPENGL_API))) {
> +               err = EGL_BAD_ATTRIBUTE;
> +               break;
> +         }
> +
>           ctx->ClientMajorVersion = val;
>           break;
>
>        case EGL_CONTEXT_MINOR_VERSION_KHR:
> -         if (!dpy->Extensions.KHR_create_context) {
> +         /* The EGL_KHR_create_context spec says:

and here.

> +          *     "The values for attributes EGL_CONTEXT_MAJOR_VERSION_KHR and
> +          *      EGL_CONTEXT_MINOR_VERSION_KHR specify the requested client API
> +          *      version. They are only meaningful for OpenGL and OpenGL ES
> +          *      contexts, and specifying them for other types of contexts will
> +          *      generate an error."
> +          */
> +         if (!dpy->Extensions.KHR_create_context ||
> +             (api != EGL_OPENGL_ES_API && api != EGL_OPENGL_API)) {
>              err = EGL_BAD_ATTRIBUTE;
>              break;
>           }
> --

But I can do that myself before pushing.

Reviewed-by: Matt Turner <mattst88 at gmail.com>


More information about the mesa-dev mailing list