[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