[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