[Mesa-dev] [PATCH 01/20] st-api: Clean-up OpenGL profile handling

Chia-I Wu olvaffe at gmail.com
Wed Dec 21 22:31:33 PST 2011


On Wed, Dec 21, 2011 at 6:50 AM, Brian Paul <brianp at vmware.com> wrote:
> On 12/20/2011 01:31 PM, Ian Romanick wrote:
>>
>> From: Ian Romanick<ian.d.romanick at intel.com>
>>
>> There seems to have been two different ways to communicate the
>> profile.  There were flags and there were profiles.  I've opted to
>> remove the profile flags and use ST_PROFILE_DEFAULT (compatibility
>> profile) and ST_PROFILE_OPENGL_CORE (core profile) consistently
>> instead.
>>
>> Also change the values of the ST_CONTEXT_FLAG_DEBUG and
>> ST_CONTEXT_FLAG_FORWARD_COMPATIBLE flags to match the WGL and GLX
>> values.
>>
>> Signed-off-by: Ian Romanick<ian.d.romanick at intel.com>
>> ---
>>  src/gallium/include/state_tracker/st_api.h   |   19 ++++++++++---------
>>  src/gallium/state_trackers/glx/xlib/xm_api.c |   22
>> +++++++++++++++++-----
>>  src/gallium/state_trackers/wgl/stw_context.c |   22
>> +++++++++++++++++-----
>>  3 files changed, 44 insertions(+), 19 deletions(-)
>>
>> diff --git a/src/gallium/include/state_tracker/st_api.h
>> b/src/gallium/include/state_tracker/st_api.h
>> index f7cc243..3267cb2 100644
>> --- a/src/gallium/include/state_tracker/st_api.h
>> +++ b/src/gallium/include/state_tracker/st_api.h
>> @@ -57,10 +57,10 @@ enum st_api_type {
>>   */
>>  enum st_profile_type
>>  {
>> -   ST_PROFILE_DEFAULT,
>> -   ST_PROFILE_OPENGL_CORE,
>> -   ST_PROFILE_OPENGL_ES1,
>> -   ST_PROFILE_OPENGL_ES2
>> +   ST_PROFILE_DEFAULT,                 /**<  OpenGL compatibility profile
>> */
>> +   ST_PROFILE_OPENGL_CORE,             /**<  OpenGL 3.2+ core profile */
>> +   ST_PROFILE_OPENGL_ES1,              /**<  OpenGL ES 1.x */
>> +   ST_PROFILE_OPENGL_ES2               /**<  OpenGL ES 2.0 */
>>  };
>>
>>  /* for profile_mask in st_api */
>> @@ -71,12 +71,13 @@ enum st_profile_type
>>
>>  /**
>>   * New context flags for GL 3.0 and beyond.
>> + *
>> + * Profile information (core vs. compatibilty for OpenGL 3.2+) is
>> communicated
>> + * through the \c st_profile_type, not through flags.
>>   */
>> -#define ST_CONTEXT_FLAG_CORE_PROFILE        (1<<  0)
>> -#define ST_CONTEXT_FLAG_COMPATIBLE_PROFILE  (1<<  1)
>> -#define ST_CONTEXT_FLAG_FORWARD_COMPATIBLE  (1<<  2)
>> -#define ST_CONTEXT_FLAG_DEBUG               (1<<  3)
>> -#define ST_CONTEXT_FLAG_ROBUST_ACCESS       (1<<  4)
>> +#define ST_CONTEXT_FLAG_DEBUG               (1<<  0)
>> +#define ST_CONTEXT_FLAG_FORWARD_COMPATIBLE  (1<<  1)
>> +#define ST_CONTEXT_FLAG_ROBUST_ACCESS       (1<<  2)
>>
>>  /**
>>   * Used in st_context_iface->teximage.
>> diff --git a/src/gallium/state_trackers/glx/xlib/xm_api.c
>> b/src/gallium/state_trackers/glx/xlib/xm_api.c
>> index 75e9e11..5d99e5f 100644
>> --- a/src/gallium/state_trackers/glx/xlib/xm_api.c
>> +++ b/src/gallium/state_trackers/glx/xlib/xm_api.c
>> @@ -878,7 +878,6 @@ XMesaContext XMesaCreateContext( XMesaVisual v,
>> XMesaContext share_list,
>>     c->xm_read_buffer = NULL;
>>
>>     memset(&attribs, 0, sizeof(attribs));
>> -   attribs.profile = ST_PROFILE_DEFAULT;
>>     attribs.visual = v->stvis;
>>     attribs.major = major;
>>     attribs.minor = minor;
>> @@ -888,10 +887,23 @@ XMesaContext XMesaCreateContext( XMesaVisual v,
>> XMesaContext share_list,
>>        attribs.flags |= ST_CONTEXT_FLAG_DEBUG;
>>     if (contextFlags&  GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB)
>>        attribs.flags |= ST_CONTEXT_FLAG_ROBUST_ACCESS;
>> -   if (profileMask&  GLX_CONTEXT_CORE_PROFILE_BIT_ARB)
>> -      attribs.flags |= ST_CONTEXT_FLAG_CORE_PROFILE;
>> -   if (profileMask&  GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB)
>>
>> -      attribs.flags |= ST_CONTEXT_FLAG_COMPATIBLE_PROFILE;
>> +
>> +   /* There are no profiles before OpenGL 3.2.  The
>> +    * GLX_ARB_create_context_profile spec says:
>> +    *
>> +    *     "If the requested OpenGL version is less than 3.2,
>> +    *     GLX_CONTEXT_PROFILE_MASK_ARB is ignored and the functionality
>> of the
>> +    *     context is determined solely by the requested version."
>> +    *
>> +    * The spec also says:
>> +    *
>> +    *     "The default value for GLX_CONTEXT_PROFILE_MASK_ARB is
>> +    *     GLX_CONTEXT_CORE_PROFILE_BIT_ARB."
>> +    */
>> +   attribs.profile = ST_PROFILE_DEFAULT;
>> +   if ((major>  3 || (major == 3&&  minor>= 2))
>> +&&  ((profileMask&  GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB) == 0))
>>
>> +      attribs.profile = ST_PROFILE_OPENGL_CORE;
>>
>>     c->st = stapi->create_context(stapi, xmdpy->smapi,
>>           &attribs, (share_list) ? share_list->st : NULL);
>> diff --git a/src/gallium/state_trackers/wgl/stw_context.c
>> b/src/gallium/state_trackers/wgl/stw_context.c
>> index 6cc8a83..2c4fb0e 100644
>> --- a/src/gallium/state_trackers/wgl/stw_context.c
>> +++ b/src/gallium/state_trackers/wgl/stw_context.c
>> @@ -169,7 +169,6 @@ stw_create_context_attribs(
>>     ctx->iPixelFormat = iPixelFormat;
>>
>>     memset(&attribs, 0, sizeof(attribs));
>> -   attribs.profile = ST_PROFILE_DEFAULT;
>>     attribs.visual = pfi->stvis;
>>     attribs.major = majorVersion;
>>     attribs.minor = minorVersion;
>> @@ -177,10 +176,23 @@ stw_create_context_attribs(
>>        attribs.flags |= ST_CONTEXT_FLAG_FORWARD_COMPATIBLE;
>>     if (contextFlags&  WGL_CONTEXT_DEBUG_BIT_ARB)
>>        attribs.flags |= ST_CONTEXT_FLAG_DEBUG;
>> -   if (profileMask&  WGL_CONTEXT_CORE_PROFILE_BIT_ARB)
>> -      attribs.flags |= ST_CONTEXT_FLAG_CORE_PROFILE;
>> -   if (profileMask&  WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB)
>>
>> -      attribs.flags |= ST_CONTEXT_FLAG_COMPATIBLE_PROFILE;
>> +
>> +   /* There are no profiles before OpenGL 3.2.  The
>> +    * WGL_ARB_create_context_profile spec says:
>> +    *
>> +    *     "If the requested OpenGL version is less than 3.2,
>> +    *     WGL_CONTEXT_PROFILE_MASK_ARB is ignored and the functionality
>> of the
>> +    *     context is determined solely by the requested version."
>> +    *
>> +    * The spec also says:
>> +    *
>> +    *     "The default value for WGL_CONTEXT_PROFILE_MASK_ARB is
>> +    *     WGL_CONTEXT_CORE_PROFILE_BIT_ARB."
>> +    */
>> +   attribs.profile = ST_PROFILE_DEFAULT;
>> +   if ((major>  3 || (major == 3&&  minor>= 2))
>> +&&  ((profileMask&  WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB) == 0))
>>
>> +      attribs.profile = ST_PROFILE_OPENGL_CORE;
>>
>>     ctx->st = stw_dev->stapi->create_context(stw_dev->stapi,
>>           stw_dev->smapi,&attribs, shareCtx ? shareCtx->st : NULL);
>
>
> Olv should probably double-check this, but LGTM.
>
> Reviewed-by: Brian Paul <brianp at vmware.com>
It looks good to me

  Reviewed-by: Chia-I Wu <olv at lunarg.com>
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev



-- 
olv at LunarG.com


More information about the xorg-devel mailing list