glx: Implement GLX_EXT_create_context_es2_profile
This patch builds on the infrastucture put in place for GLX_ARB_create_context_profile. If GLX_CONTEXT_ES2_PROFILE_BIT_EXT is specified and the requested version is 2.0, create a context with the __DRI_API_GLES2 API. This change assumes that any DRI2 driver can handle (possibly by saying "no seeing an API setting other than __DRI_API_OPENGL or __DRI_API_OPENGL_CORE. This allows enabling the extension any time GLX_ARB_create_context (and GLX_ARB_create_context_profile) is enabled. v2: Clean up some comments. Note that our behavior for GLX_CONTEXT_ES2_PROFILE_BIT_EXT w/version != 2.0 matches NVIDIA's. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Dave Airlie <airlied@redhat.com> Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
cef0b808d3
commit
41d5120eaf
|
@ -229,6 +229,32 @@ __glXDisp_CreateContextAttribsARB(__GLXclientState * cl, GLbyte * pc)
|
|||
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);
|
||||
}
|
||||
|
|
|
@ -72,6 +72,7 @@ static const struct extension_info known_glx_extensions[] = {
|
|||
{ GLX(ARB_create_context_profile), VER(0,0), N, },
|
||||
{ GLX(ARB_multisample), VER(1,4), Y, },
|
||||
|
||||
{ GLX(EXT_create_context_es2_profile), VER(0,0), N, },
|
||||
{ GLX(EXT_import_context), VER(0,0), Y, },
|
||||
{ GLX(EXT_texture_from_pixmap), VER(0,0), Y, },
|
||||
{ GLX(EXT_visual_info), VER(0,0), Y, },
|
||||
|
|
|
@ -39,6 +39,7 @@ enum {
|
|||
ARB_create_context_bit = 0,
|
||||
ARB_create_context_profile_bit,
|
||||
ARB_multisample_bit,
|
||||
EXT_create_context_es2_profile_bit,
|
||||
EXT_import_context_bit,
|
||||
EXT_texture_from_pixmap_bit,
|
||||
EXT_visual_info_bit,
|
||||
|
|
|
@ -417,6 +417,9 @@ 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;
|
||||
default:
|
||||
*error = __glXError(GLXBadProfileARB);
|
||||
return False;
|
||||
|
@ -812,8 +815,12 @@ 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_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");
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in New Issue