[Mesa-dev] [PATCH 1/2] st/xlib: Honour request of 3.1 contexts through core profile where available.

Brian Paul brianp at vmware.com
Thu Apr 24 08:46:10 PDT 2014


On 04/24/2014 08:24 AM, jfonseca at vmware.com wrote:
> From: José Fonseca <jfonseca at vmware.com>
>
> The GLX_ARB_create_context_profile spec says:
>
>      "If version 3.1 is requested, the context returned may implement
>      any of the following versions:
>
>        * Version 3.1. The GL_ARB_compatibility extension may or may not
>          be implemented, as determined by the implementation.
>
>        * The core profile of version 3.2 or greater."
>
> Mesa does not support GL_ARB_compatibility, and there are no plans to
> ever support it, therefore the only chance to honour a 3.1 context is
> through core profile, i.e, the 2nd alternative from the spec.
>
> This change does that.  And with it piglit tests that require 3.1
> contexts no longer skip.
>
> Assuming there is no objection with this change, src/glx/dri_common.c
> and src/gallium/state_trackers/wgl/stw_context.c should also be updated
> accordingly, given they have the same logic.
> ---
>   src/gallium/state_trackers/glx/xlib/xm_api.c | 17 +++++++++++++++--
>   1 file changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/state_trackers/glx/xlib/xm_api.c b/src/gallium/state_trackers/glx/xlib/xm_api.c
> index bb2dd8e..7836c61 100644
> --- a/src/gallium/state_trackers/glx/xlib/xm_api.c
> +++ b/src/gallium/state_trackers/glx/xlib/xm_api.c
> @@ -899,10 +899,23 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list,
>       *
>       *     "The default value for GLX_CONTEXT_PROFILE_MASK_ARB is
>       *     GLX_CONTEXT_CORE_PROFILE_BIT_ARB."
> +    *
> +    * The spec also says:
> +    *
> +    *     "If version 3.1 is requested, the context returned may implement
> +    *     any of the following versions:
> +    *
> +    *       * Version 3.1. The GL_ARB_compatibility extension may or may not
> +    *         be implemented, as determined by the implementation.
> +    *       * The core profile of version 3.2 or greater."
> +    *
> +    * and because Mesa doesn't support GL_ARB_compatibility, the only chance to
> +    * honour a 3.1 context is through core profile.
>       */
>      attribs.profile = ST_PROFILE_DEFAULT;
> -   if ((major > 3 || (major == 3 && minor >= 2))
> -       && ((profileMask & GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB) == 0))
> +   if (((major > 3 || (major == 3 && minor >= 2))
> +        && ((profileMask & GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB) == 0)) ||
> +       (major == 3 && minor == 1))
>         attribs.profile = ST_PROFILE_OPENGL_CORE;
>
>      c->st = stapi->create_context(stapi, xmdpy->smapi, &attribs,
>

Looks OK to me.  But I find that version comparison logic is a bit 
easier with something like:

version = major * 10 + minor;

if ((version >= 32) && ((profileMask & 
GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB) == 0)) ||
       (version == 31))

Either way is OK.

Reviewed-by: Brian Paul <brianp at vmware.com>




More information about the mesa-dev mailing list