On Wed, Dec 21, 2011 at 6:50 AM, Brian Paul <bri...@vmware.com> wrote: > On 12/20/2011 01:31 PM, Ian Romanick wrote: >> >> From: Ian Romanick<ian.d.roman...@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.roman...@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 <bri...@vmware.com> It looks good to me
Reviewed-by: Chia-I Wu <o...@lunarg.com> > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev -- o...@lunarg.com _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev