[Mesa-dev] [PATCH] egl: Add OpenGL_ES to API string regardless of GLES version

Ben Widawsky ben at bwidawsk.net
Tue May 17 16:59:01 UTC 2016


On Thu, May 12, 2016 at 06:21:38PM +0100, Plamena Manolova wrote:
> According to the EGL specifications eglQueryString(EGL_CLIENT_APIS)
> should return a string containing a combination of "OpenGL", "OpenGL_ES"
> and "OpenVG", any other values would be considered invalid. Due to this
> when the API string is constructed, the version of GLES should be
> disregarded and "OpenGL_ES" should be attached once instead of
> "OpenGL_ES2" and "OpenGL_ES3".

Adding Matt who originally authored this...

I think you misstated this. It's not invalid to have any other value. It's
invalid to not have one of the 3 values, which I suppose is technically possible
if you say support ES2, but not ES or GL (for example)

 "Returns a string describing which client rendering APIs are supported. The
  string contains a space-separate list of API names. The list must include at
  least one of OpenGL, OpenGL_ES, or OpenVG. These strings correspond
  respectively to values EGL_OPENGL_API, EGL_OPENGL_ES_API, and EGL_OPENVG_API
  of the eglBindAPI, api argument."

I am concerned by this change since I genuinely have no clue how EGL clients
might currently be depending on this, and as such could I request that you not
change the existing behavior (spit out when ES2 or ES3). At the bottom I put an
untested version of what i would have done.

This fixes a test apparently, in the future, could you please mention that in
the commit message?

> 
> Signed-off-by: Plamena Manolova <plamena.manolova at intel.com>
> ---
>  src/egl/main/eglapi.c | 11 ++++-------
>  1 file changed, 4 insertions(+), 7 deletions(-)
> 
> diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
> index eb612c0..be2c90f 100644
> --- a/src/egl/main/eglapi.c
> +++ b/src/egl/main/eglapi.c
> @@ -431,14 +431,11 @@ _eglCreateAPIsString(_EGLDisplay *dpy)
>     if (dpy->ClientAPIs & EGL_OPENGL_BIT)
>        strcat(dpy->ClientAPIsString, "OpenGL ");
>  
> -   if (dpy->ClientAPIs & EGL_OPENGL_ES_BIT)
> +   if (dpy->ClientAPIs & EGL_OPENGL_ES_BIT ||
> +       dpy->ClientAPIs & EGL_OPENGL_ES2_BIT ||
> +       dpy->ClientAPIs & EGL_OPENGL_ES3_BIT_KHR) {
>        strcat(dpy->ClientAPIsString, "OpenGL_ES ");
> -
> -   if (dpy->ClientAPIs & EGL_OPENGL_ES2_BIT)
> -      strcat(dpy->ClientAPIsString, "OpenGL_ES2 ");
> -
> -   if (dpy->ClientAPIs & EGL_OPENGL_ES3_BIT_KHR)
> -      strcat(dpy->ClientAPIsString, "OpenGL_ES3 ");
> +   }
>  
>     if (dpy->ClientAPIs & EGL_OPENVG_BIT)
>        strcat(dpy->ClientAPIsString, "OpenVG ");


diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
index eb612c0..8101840 100644
--- a/src/egl/main/eglapi.c
+++ b/src/egl/main/eglapi.c
@@ -431,8 +431,12 @@ _eglCreateAPIsString(_EGLDisplay *dpy)
    if (dpy->ClientAPIs & EGL_OPENGL_BIT)
       strcat(dpy->ClientAPIsString, "OpenGL ");
 
+   /* If any ES is supported, make sure we get that */
    if (dpy->ClientAPIs & EGL_OPENGL_ES_BIT)
       strcat(dpy->ClientAPIsString, "OpenGL_ES ");
+   else if (dpy->ClientAPIs & EGL_OPENGL_ES2_BIT ||
+            dpy->ClientAPIs & EGL_OPENGL_ES3_BIT_KHR)
+      strcat(dpy->ClientAPIsString, "OpenGL_ES ");
 
    if (dpy->ClientAPIs & EGL_OPENGL_ES2_BIT)
       strcat(dpy->ClientAPIsString, "OpenGL_ES2 ");


More information about the mesa-dev mailing list