On Thu, Nov 20, 2014 at 10:32 AM, Chad Versace
<[email protected]> wrote:
> On Mali EGL 1.4, you can't obtain non-extension functions (including
> OpenGL ES 3.0 functions) with eglGetProcAddress. You must use dlsym.
>
> This patch carefully avoids breaking glGetStringi on other platforms,
> which may expose glGetStringi dynamically (as in eglGetProcAddress) but
> not statically (as in dlsym).
>
> Fixes #20: https://github.com/waffle-gl/waffle/pull/20
> Fixes: chromium:428061 
> [https://code.google.com/p/chromium/issues/detail?id=428061]
> See: https://github.com/anholt/libepoxy/issues/21
> Reported-by: Frank Henigman <[email protected]>
> Cc: Daniel Kurtz <[email protected]>
> Signed-off-by: Chad Versace <[email protected]>

Works for me and looks good too.  Take your pick:

Tested-by: Daniel Kurtz <[email protected]>
Reviewed-by: Daniel Kurtz <[email protected]>

> ---
>
> Frank or Daniel, could you please validate this patch on Mali? I tested on
> Fedora with Mesa i965.
>
>
>
>
>  src/utils/wflinfo.c | 23 ++++++++++++++++++++++-
>  1 file changed, 22 insertions(+), 1 deletion(-)
>
> diff --git a/src/utils/wflinfo.c b/src/utils/wflinfo.c
> index 0b03e55..0907b4b 100644
> --- a/src/utils/wflinfo.c
> +++ b/src/utils/wflinfo.c
> @@ -1037,7 +1037,28 @@ main(int argc, char **argv)
>      if (!glGetString)
>          error_get_gl_symbol("glGetString");
>
> -    glGetStringi = waffle_get_proc_address("glGetStringi");
> +    // Retrieving GL functions is tricky. When glGetStringi is supported, 
> here
> +    // are some boggling variations as of 2014-11-19:
> +    //   - Mali drivers on EGL 1.4 expose glGetStringi statically from
> +    //     libGLESv2 but not dynamically from eglGetProcAddress. The EGL 1.4 
> spec
> +    //     permits this behavior.
> +    //   - EGL 1.5 requires that eglGetStringi be exposed dynamically through
> +    //     eglGetProcAddress. Exposing statically with dlsym is optional.
> +    //   - Windows requires that glGetStringi be exposed dynamically from
> +    //     wglGetProcAddress. Exposing statically from GetProcAddress 
> (Window's
> +    //     dlsym equivalent) is optional.
> +    //   - Mesa drivers expose glGetStringi statically from libGL and 
> libGLESv2
> +    //     and dynamically from eglGetProcAddress and glxGetProcAddress.
> +    //   - Mac exposes glGetStringi only statically.
> +    //
> +    // Try waffle_dl_sym before waffle_get_proc_address because
> +    // (1) egl/glXProcAddress can return invalid non-null pointers for
> +    // unsupported functions and (2) dlsym returns non-null if and only if 
> the
> +    // library exposes the symbol.
> +    glGetStringi = waffle_dl_sym(opts.dl, "glGetStringi");
> +    if (!glGetStringi) {
> +        glGetStringi = waffle_get_proc_address("glGetStringi");
> +    }
>
>      const struct wflinfo_config_attrs config_attrs = {
>          .api = opts.context_api,
> --
> 2.1.2.1.g5433a3e
>
_______________________________________________
waffle mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/waffle

Reply via email to