[Mesa-dev] [PATCH v2] glx: update to updated version of EXT_create_context_es2_profile

Ian Romanick idr at freedesktop.org
Thu Jan 21 10:43:46 PST 2016


On 01/21/2016 09:10 AM, Jose Fonseca wrote:
> FWIW see
> 
>   https://bugs.freedesktop.org/show_bug.cgi?id=92869
>   http://cgit.freedesktop.org/~jrfonseca/mesa/commit/?h=es2_profile
> 
> On 21/01/16 16:58, Ilia Mirkin wrote:
>> 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 at alum.mit.edu>
>> Reviewed-by: Matt Turner <mattst88 at gmail.com> (v1)
>>
>> v1 -> v2:
>>   - distinguish between DRI_API_GLES{,2,3}
>>   - add GLX_EXT_create_context_es_profile client-side support
>> ---
>>   src/glx/dri2_glx.c      | 11 ++++++++---
>>   src/glx/dri3_glx.c      |  7 ++++++-
>>   src/glx/dri_common.c    | 28 ++++++++++++----------------
>>   src/glx/drisw_glx.c     |  4 +++-
>>   src/glx/glxextensions.c |  1 +
>>   src/glx/glxextensions.h |  1 +
>>   6 files changed, 31 insertions(+), 21 deletions(-)
>>
>> diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c
>> index 651915a..97bf49c 100644
>> --- a/src/glx/dri2_glx.c
>> +++ b/src/glx/dri2_glx.c
>> @@ -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 |
>> +                         __DRI_API_GLES2 |
>> +                         __DRI_API_GLES3))) != 0) {
> 
> I recalled Ian Romanick's review saying that supporting GLES3 without
> GLES2 was not a good idea:

Well, it's kind of nonsense.  It's like saying you support OpenGL 2.0
but not 1.5.

Why didn't your patches land a year ago?

Something really should land soon... otherwise a third person will come
along and do it all again. :(

>  http://lists.freedesktop.org/archives/mesa-dev/2015-April/082010.html
> 
>> +         __glXEnableDirectExtension(&psc->base,
>> +                                   
>> "GLX_EXT_create_context_es_profile");
>> +         __glXEnableDirectExtension(&psc->base,
>> +                                   
>> "GLX_EXT_create_context_es2_profile");
>> +      }
>>      }
>>
>>      for (i = 0; extensions[i]; i++) {
>> diff --git a/src/glx/dri3_glx.c b/src/glx/dri3_glx.c
>> index 8bdbb9c..9952e7e 100644
>> --- a/src/glx/dri3_glx.c
>> +++ b/src/glx/dri3_glx.c
>> @@ -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 |
>> +                      __DRI_API_GLES2 |
>> +                      __DRI_API_GLES3))) != 0) {
> 
> Same here.
> 
> Everything else looks the same as my patch AFAICT.
> 
> Jose
> 
> 
>> +      __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
>> diff --git a/src/glx/dri_common.c b/src/glx/dri_common.c
>> index 8a56385..6728d38 100644
>> --- a/src/glx/dri_common.c
>> +++ b/src/glx/dri_common.c
>> @@ -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;
>>   }
>> diff --git a/src/glx/drisw_glx.c b/src/glx/drisw_glx.c
>> index 76cc321..241ac7f 100644
>> --- a/src/glx/drisw_glx.c
>> +++ b/src/glx/drisw_glx.c
>> @@ -623,9 +623,11 @@ 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");
>>      }
>>
>> diff --git a/src/glx/glxextensions.c b/src/glx/glxextensions.c
>> index 3b29aef..22b078c 100644
>> --- a/src/glx/glxextensions.c
>> +++ b/src/glx/glxextensions.c
>> @@ -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 },
>> diff --git a/src/glx/glxextensions.h b/src/glx/glxextensions.h
>> index 3a9bc82..906b3fc 100644
>> --- a/src/glx/glxextensions.h
>> +++ b/src/glx/glxextensions.h
>> @@ -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,
>>
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> 



More information about the mesa-dev mailing list