glx: update to updated version of EXT_create_context_es2_profile
The EXT spec has been updated to: - logically combine the es2_profile and es_profile exts - allow any legal version to be requested dEQP tests request a specific ES version when using GLX, so this allows dEQP upstream to run against GLX with the appropriate X server patch (which had similar disabling logic). Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Matt Turner <mattst88@gmail.com> (v1) Reviewed-by: Adam Jackson <ajax@redhat.com> (v3) v1 -> v2: - distinguish between DRI_API_GLES{,2,3} - add GLX_EXT_create_context_es_profile client-side support v2 -> v3: - fix error in computing mask
This commit is contained in:
@@ -1102,9 +1102,14 @@ dri2BindExtensions(struct dri2_screen *psc, struct glx_display * priv,
|
||||
__glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context");
|
||||
__glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context_profile");
|
||||
|
||||
if ((mask & (1 << __DRI_API_GLES2)) != 0)
|
||||
__glXEnableDirectExtension(&psc->base,
|
||||
"GLX_EXT_create_context_es2_profile");
|
||||
if ((mask & ((1 << __DRI_API_GLES) |
|
||||
(1 << __DRI_API_GLES2) |
|
||||
(1 << __DRI_API_GLES3))) != 0) {
|
||||
__glXEnableDirectExtension(&psc->base,
|
||||
"GLX_EXT_create_context_es_profile");
|
||||
__glXEnableDirectExtension(&psc->base,
|
||||
"GLX_EXT_create_context_es2_profile");
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; extensions[i]; i++) {
|
||||
|
@@ -665,9 +665,14 @@ dri3_bind_extensions(struct dri3_screen *psc, struct glx_display * priv,
|
||||
__glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context");
|
||||
__glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context_profile");
|
||||
|
||||
if ((mask & (1 << __DRI_API_GLES2)) != 0)
|
||||
if ((mask & ((1 << __DRI_API_GLES) |
|
||||
(1 << __DRI_API_GLES2) |
|
||||
(1 << __DRI_API_GLES3))) != 0) {
|
||||
__glXEnableDirectExtension(&psc->base,
|
||||
"GLX_EXT_create_context_es_profile");
|
||||
__glXEnableDirectExtension(&psc->base,
|
||||
"GLX_EXT_create_context_es2_profile");
|
||||
}
|
||||
|
||||
for (i = 0; extensions[i]; i++) {
|
||||
/* when on a different gpu than the server, the server pixmaps
|
||||
|
@@ -547,9 +547,18 @@ dri2_convert_glx_attribs(unsigned num_attribs, const uint32_t *attribs,
|
||||
case GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB:
|
||||
*api = __DRI_API_OPENGL;
|
||||
break;
|
||||
case GLX_CONTEXT_ES2_PROFILE_BIT_EXT:
|
||||
*api = __DRI_API_GLES2;
|
||||
break;
|
||||
case GLX_CONTEXT_ES_PROFILE_BIT_EXT:
|
||||
if (*major_ver >= 3)
|
||||
*api = __DRI_API_GLES3;
|
||||
else if (*major_ver == 2 && *minor_ver == 0)
|
||||
*api = __DRI_API_GLES2;
|
||||
else if (*major_ver == 1 && *minor_ver < 2)
|
||||
*api = __DRI_API_GLES;
|
||||
else {
|
||||
*error = __DRI_CTX_ERROR_BAD_API;
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
*error = __DRI_CTX_ERROR_BAD_API;
|
||||
return false;
|
||||
@@ -580,19 +589,6 @@ dri2_convert_glx_attribs(unsigned num_attribs, const uint32_t *attribs,
|
||||
return false;
|
||||
}
|
||||
|
||||
/* The GLX_EXT_create_context_es2_profile spec says:
|
||||
*
|
||||
* "... If the version requested is 2.0, and the
|
||||
* GLX_CONTEXT_ES2_PROFILE_BIT_EXT bit is set in the
|
||||
* GLX_CONTEXT_PROFILE_MASK_ARB attribute (see below), then the context
|
||||
* returned will implement OpenGL ES 2.0. This is the only way in which
|
||||
* an implementation may request an OpenGL ES 2.0 context."
|
||||
*/
|
||||
if (*api == __DRI_API_GLES2 && (*major_ver != 2 || *minor_ver != 0)) {
|
||||
*error = __DRI_CTX_ERROR_BAD_API;
|
||||
return false;
|
||||
}
|
||||
|
||||
*error = __DRI_CTX_ERROR_SUCCESS;
|
||||
return true;
|
||||
}
|
||||
|
@@ -623,8 +623,10 @@ driswBindExtensions(struct drisw_screen *psc, const __DRIextension **extensions)
|
||||
__glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context");
|
||||
__glXEnableDirectExtension(&psc->base, "GLX_ARB_create_context_profile");
|
||||
|
||||
/* DRISW version >= 2 implies support for OpenGL ES 2.0.
|
||||
/* DRISW version >= 2 implies support for OpenGL ES.
|
||||
*/
|
||||
__glXEnableDirectExtension(&psc->base,
|
||||
"GLX_EXT_create_context_es_profile");
|
||||
__glXEnableDirectExtension(&psc->base,
|
||||
"GLX_EXT_create_context_es2_profile");
|
||||
}
|
||||
|
@@ -146,6 +146,7 @@ static const struct extension_info known_glx_extensions[] = {
|
||||
{ GLX(EXT_fbconfig_packed_float), VER(0,0), Y, Y, N, N },
|
||||
{ GLX(EXT_framebuffer_sRGB), VER(0,0), Y, Y, N, N },
|
||||
{ GLX(EXT_create_context_es2_profile), VER(0,0), Y, N, N, N },
|
||||
{ GLX(EXT_create_context_es_profile), VER(0,0), Y, N, N, N },
|
||||
{ GLX(MESA_copy_sub_buffer), VER(0,0), Y, N, N, N },
|
||||
{ GLX(MESA_multithread_makecurrent),VER(0,0), Y, N, Y, N },
|
||||
{ GLX(MESA_query_renderer), VER(0,0), Y, N, N, Y },
|
||||
|
@@ -45,6 +45,7 @@ enum
|
||||
EXT_import_context_bit,
|
||||
EXT_framebuffer_sRGB_bit,
|
||||
EXT_fbconfig_packed_float_bit,
|
||||
EXT_create_context_es_profile_bit,
|
||||
EXT_create_context_es2_profile_bit,
|
||||
MESA_copy_sub_buffer_bit,
|
||||
MESA_depth_float_bit,
|
||||
|
Reference in New Issue
Block a user