[waffle] [PATCH] egl: Fix creation of compatibility contexts

Jordan Justen jljusten at gmail.com
Sat Mar 8 18:43:18 PST 2014


On Sat, Mar 8, 2014 at 9:39 AM, Chad Versace <chad at chad-versace.us> wrote:
> From: Chad Versace <chad at kiwitree.net>
>
> wegl_context_create() ignored wcore_config_attrs::context_profile and
> never set EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR. The default value of
> EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR is
> EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR. Therefore, for context versions
>>= 3.2,  wegl_context_create() always created a core context.
>
> This patch fixes wegl_context_create() to inspect
> wcore_config_attrs::context_profile and set
> EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR accordingly.
>
> (Whoo! Waffle has an issue tracker now, and the 'Fixes' tag below will
> automatically close the issue when patch hits master!)
>
> Fixes: https://github.com/waffle-gl/waffle/issues/1
> Reported-by: Jordan Justen <jordan.l.justen at intel.com>
> Signed-off-by: Chad Versace <chad.versace at linux.intel.com>
> ---
>
> Jordan, this patch is untested because I have access to no Linux computer this
> weekend.  When you validate the patch, I'll commit it.

Tested-by: Jordan Justen <jordan.l.justen at intel.com>

Should this be done only for OpenGL >= 3.2 like in  glx_context.c?

-Jordan

> The patch lives on my personal branch issues/1/fix-egl-compat-profile [1],
> exact commit at https://github.com/chadversary/waffle/commit/ba6e561.
>
> [1] https://github.com/chadversary/waffle/tree/issues/1/fix-egl-compat-profile
>
>  src/waffle/egl/wegl_context.c | 22 ++++++++++++++++++++++
>  1 file changed, 22 insertions(+)
>
> diff --git a/src/waffle/egl/wegl_context.c b/src/waffle/egl/wegl_context.c
> index 50b31c6..e189ffd 100644
> --- a/src/waffle/egl/wegl_context.c
> +++ b/src/waffle/egl/wegl_context.c
> @@ -70,6 +70,7 @@ create_real_context(struct wegl_config *config,
>      int32_t waffle_context_api = attrs->context_api;
>      EGLint attrib_list[64];
>      EGLint context_flags = 0;
> +    EGLint profile_mask = 0;
>      int i = 0;
>
>      if (attrs->context_debug) {
> @@ -118,6 +119,27 @@ create_real_context(struct wegl_config *config,
>              return EGL_NO_CONTEXT;
>      }
>
> +    switch (attrs->context_profile) {
> +        case WAFFLE_NONE:
> +            profile_mask = 0;
> +            break;
> +        case WAFFLE_CONTEXT_CORE_PROFILE:
> +            profile_mask = EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR;
> +            break;
> +        case WAFFLE_CONTEXT_COMPATIBILITY_PROFILE:
> +            profile_mask = EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR;
> +            break;
> +        default:
> +            wcore_error_internal("attrs->context_profile has bad value %#x",
> +                                 attrs->context_profile);
> +            return EGL_NO_CONTEXT;
> +    }
> +
> +    if (profile_mask != 0) {
> +        attrib_list[i++] = EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR;
> +        attrib_list[i++] = profile_mask;
> +    }
> +
>      if (context_flags != 0) {
>          attrib_list[i++] = EGL_CONTEXT_FLAGS_KHR;
>          attrib_list[i++] = context_flags;
> --
> 1.8.5.3
>


More information about the waffle mailing list