diff --git a/glx/createcontext.c b/glx/createcontext.c index d06bc1f7f..9157e2fb8 100644 --- a/glx/createcontext.c +++ b/glx/createcontext.c @@ -254,36 +254,17 @@ __glXDisp_CreateContextAttribsARB(__GLXclientState * cl, GLbyte * pc) * GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB; has more than one of * these bits set; or if the implementation does not support the * requested profile, then GLXBadProfileARB is generated." + * + * The GLX_EXT_create_context_es2_profile spec doesn't exactly say what + * is supposed to happen if an invalid version is set, but it doesn't + * much matter as support for GLES contexts is only defined for direct + * contexts (at the moment anyway) so we can leave it up to the driver + * to validate. */ switch (profile) { case GLX_CONTEXT_CORE_PROFILE_BIT_ARB: case GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB: - break; case GLX_CONTEXT_ES2_PROFILE_BIT_EXT: - /* 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." - * - * It also says: - * - * "* If attribute GLX_CONTEXT_PROFILE_MASK_ARB has no bits set; - * has any bits set other than - * GLX_CONTEXT_CORE_PROFILE_BIT_ARB, - * GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB, or - * GLX_CONTEXT_ES2_PROFILE_BIT_EXT; has more than one of these - * bits set; or if the implementation does not supported the - * requested profile, then GLXBadProfileARB is generated." - * - * It does not specifically say what is supposed to happen if - * GLX_CONTEXT_ES2_PROFILE_BIT_EXT is set but the version requested is - * not 2.0. We choose to generate GLXBadProfileARB as this matches - * NVIDIA's behavior. - */ - if (major_version != 2 || minor_version != 0) - return __glXError(GLXBadProfileARB); break; default: return __glXError(GLXBadProfileARB); diff --git a/glx/extension_string.c b/glx/extension_string.c index e881d2109..cf9014609 100644 --- a/glx/extension_string.c +++ b/glx/extension_string.c @@ -80,6 +80,7 @@ static const struct extension_info known_glx_extensions[] = { { GLX(ARB_framebuffer_sRGB), VER(0,0), N, }, { GLX(ARB_multisample), VER(1,4), Y, }, + { GLX(EXT_create_context_es_profile), VER(0,0), N, }, { GLX(EXT_create_context_es2_profile), VER(0,0), N, }, { GLX(EXT_framebuffer_sRGB), VER(0,0), N, }, { GLX(EXT_import_context), VER(0,0), Y, }, diff --git a/glx/extension_string.h b/glx/extension_string.h index bac7b0624..ffaab073a 100644 --- a/glx/extension_string.h +++ b/glx/extension_string.h @@ -43,6 +43,7 @@ enum { ARB_fbconfig_float_bit, ARB_framebuffer_sRGB_bit, ARB_multisample_bit, + EXT_create_context_es_profile_bit, EXT_create_context_es2_profile_bit, EXT_import_context_bit, EXT_texture_from_pixmap_bit, diff --git a/glx/glxdri2.c b/glx/glxdri2.c index 6fb3d9278..89ad808c9 100644 --- a/glx/glxdri2.c +++ b/glx/glxdri2.c @@ -863,12 +863,14 @@ initializeExtensions(__GLXDRIscreen * screen) "GLX_ARB_create_context"); __glXEnableExtension(screen->glx_enable_bits, "GLX_ARB_create_context_profile"); + __glXEnableExtension(screen->glx_enable_bits, + "GLX_EXT_create_context_es_profile"); __glXEnableExtension(screen->glx_enable_bits, "GLX_EXT_create_context_es2_profile"); LogMessage(X_INFO, "AIGLX: enabled GLX_ARB_create_context\n"); LogMessage(X_INFO, "AIGLX: enabled GLX_ARB_create_context_profile\n"); LogMessage(X_INFO, - "AIGLX: enabled GLX_EXT_create_context_es2_profile\n"); + "AIGLX: enabled GLX_EXT_create_context_es{,2}_profile\n"); } if (DRI2HasSwapControl(pScreen)) { diff --git a/glx/glxdriswrast.c b/glx/glxdriswrast.c index e8e53bfdb..be00f5f06 100644 --- a/glx/glxdriswrast.c +++ b/glx/glxdriswrast.c @@ -404,6 +404,8 @@ initializeExtensions(__GLXDRIscreen * screen) "GLX_ARB_create_context"); __glXEnableExtension(screen->glx_enable_bits, "GLX_ARB_create_context_profile"); + __glXEnableExtension(screen->glx_enable_bits, + "GLX_EXT_create_context_es_profile"); __glXEnableExtension(screen->glx_enable_bits, "GLX_EXT_create_context_es2_profile"); }