glx: update to updated version of EXT_create_context_es2_profile
authorIlia Mirkin <imirkin@alum.mit.edu>
Tue, 19 Jan 2016 15:07:04 +0000 (10:07 -0500)
committerIlia Mirkin <imirkin@alum.mit.edu>
Wed, 3 Feb 2016 20:44:51 +0000 (15:44 -0500)
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

src/glx/dri2_glx.c
src/glx/dri3_glx.c
src/glx/dri_common.c
src/glx/drisw_glx.c
src/glx/glxextensions.c
src/glx/glxextensions.h

index 651915aed719fd4ba8194022764bce49a476ec52..77103492a4fa27486033a1d2b5a4bc20b28cd98e 100644 (file)
@@ -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++) {
index 8bdbb9caf560d4649b8416d595bc380d3dcda8c9..6054ffc3dc198e55c6289ff3bb1b4c071664d485 100644 (file)
@@ -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
index 8a56385c4bde92a08418d4c88baf622a949ee067..6728d38fa0a104b716bb9aeea9860b163c65ba85 100644 (file)
@@ -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;
 }
index 76cc3214b7bbefefa296e99f77705a1c9843f962..241ac7f6d2c6bd53eb2e1c47706dc31198e04585 100644 (file)
@@ -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");
    }
index 3b29aef1234735fefb3637d19d6966221f516f04..22b078ce4841bae6a737d5e8060bb3a0d70a1186 100644 (file)
@@ -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 },
index 3a9bc8230529d7c701cb4162bc22ec1a57a2a81b..906b3fc16c04fa1932d86ffda9d088076fae0f09 100644 (file)
@@ -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,