[waffle] [PATCH (maint-1.4)] wflinfo: Fix glGetStringi on Mali
Daniel Kurtz
djkurtz at chromium.org
Fri Nov 21 08:51:38 PST 2014
On Thu, Nov 20, 2014 at 10:32 AM, Chad Versace
<chad.versace at linux.intel.com> 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 <fjhenigman at chromium.org>
> Cc: Daniel Kurtz <djkurtz at chromium.org>
> Signed-off-by: Chad Versace <chad.versace at linux.intel.com>
Works for me and looks good too. Take your pick:
Tested-by: Daniel Kurtz <djkurtz at chromium.org>
Reviewed-by: Daniel Kurtz <djkurtz at chromium.org>
> ---
>
> 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
>
More information about the waffle
mailing list