<div dir="ltr">"You removed the early return here...<br>...which means this check may be accessing NULL extensions, no?"<br><br>You are right ! Sorry for that, did not even look at the #ifdef, will rework this part.<br><br>"You do want to keep the -1 return as fatal here. gl_renderer_supports() should already return 0 meaning "maybe" if client extensions cannot be queried. The supports function is very nicely documented."<br><br>Well, I have here a pratical case of a Ubuntu 14.04 laptop (Intel GPU, i915 driver, will let you know the hardware, Mesa and libs versions soon when I get my hands on it), where the supports() function is able to find an "*extensions" strings, but then fails to locate these precise extensions, and thus returns -1. It prevents the X11 and DRM compositors to run, but it works nicely when removing this check. Does it make sense to you ? (regarding the purpose of the function, is that when building EGL with X11 support, it will always report X11 as a supported platform ? Maybe there are versions of Mesa which do not honor this. Will check.)<br></div><div class="gmail_extra"><br><div class="gmail_quote">2015-03-30 14:40 GMT+02:00 Pekka Paalanen <span dir="ltr"><<a href="mailto:ppaalanen@gmail.com" target="_blank">ppaalanen@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Sun, 29 Mar 2015 05:03:09 +0200<br>
Manuel Bachmann <<a href="mailto:manuel.bachmann@open.eurogiciel.org">manuel.bachmann@open.eurogiciel.org</a>> wrote:<br>
<br>
> From: Manuel Bachmann <<a href="mailto:manuel.bachmann@open.eurogiciel.org">manuel.bachmann@open.eurogiciel.org</a>><br>
><br>
> We should not prevent gl-renderer to initalize if client<br>
> extensions were not found. Practically, this prevented<br>
> Weston from running with GL on i915 DRI platforms.<br>
><br>
> Some DRI drivers, including VMware vmwgfx, do not support<br>
> calling eglQueryString() with a EGL_NO_DISPLAY parameter.<br>
> Just as we do in gl_renderer_supports(), which returns 0<br>
> but does not fail in this case, do not fail in<br>
> gl_renderer_setup_egl_extensions().<br>
> ---<br>
>  src/gl-renderer.c | 18 +++++++-----------<br>
>  1 file changed, 7 insertions(+), 11 deletions(-)<br>
><br>
> diff --git a/src/gl-renderer.c b/src/gl-renderer.c<br>
> index b3b2364..28ecc63 100644<br>
> --- a/src/gl-renderer.c<br>
> +++ b/src/gl-renderer.c<br>
> @@ -2136,15 +2136,14 @@ gl_renderer_setup_egl_extensions(struct weston_compositor *ec)<br>
>               (const char *) eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);<br>
>       if (!extensions) {<br>
>               weston_log("Retrieving EGL client extension string failed.\n");<br>
> -             return -1;<br>
> +     } else {<br>
> +             if (strstr(extensions, "EGL_EXT_platform_base"))<br>
> +                     gr->create_platform_window =<br>
> +                             (void *) eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT");<br>
> +             else<br>
> +                     weston_log("warning: EGL_EXT_platform_base not supported.\n");<br>
>       }<br>
<br>
</div></div>You removed the early return here...<br>
<span class=""><br>
><br>
> -     if (strstr(extensions, "EGL_EXT_platform_base"))<br>
> -             gr->create_platform_window =<br>
> -                     (void *) eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT");<br>
> -     else<br>
> -             weston_log("warning: EGL_EXT_platform_base not supported.\n");<br>
> -<br>
>  #ifdef EGL_MESA_configless_context<br>
>       if (strstr(extensions, "EGL_MESA_configless_context"))<br>
>               gr->has_configless_context = 1;<br>
<br>
</span>...which means this check may be accessing NULL extensions, no?<br>
<br>
Hmm, I wonder if the configless context check is looking at the right<br>
extensions string here.<br>
<span class=""><br>
> @@ -2256,12 +2255,9 @@ gl_renderer_create(struct weston_compositor *ec, EGLenum platform,<br>
>       EGLint major, minor;<br>
>       int supports = 0;<br>
><br>
> -     if (platform) {<br>
> +     if (platform)<br>
>               supports = gl_renderer_supports(<br>
>                       ec, platform_to_extension(platform));<br>
> -             if (supports < 0)<br>
> -                     return -1;<br>
> -     }<br>
<br>
</span>Just make sure that if EXT_platform_base exists, but the specific<br>
platform we are looking for does not, we fail this function.<br>
<br>
You do want to keep the -1 return as fatal here. gl_renderer_supports()<br>
should already return 0 meaning "maybe" if client extensions cannot be<br>
queried. The supports function is very nicely documented.<br>
<span class=""><br>
><br>
>       gr = zalloc(sizeof *gr);<br>
>       if (gr == NULL)<br>
<br>
<br>
</span>Thanks,<br>
pq<br>
</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature"><div dir="ltr"><font>Regards,<br>
<br>
<i><b>Manuel BACHMANN</b><br>
Tizen Project<br>
VANNES-FR</i><br>
</font></div></div>
</div>