On Tue, Jun 20, 2017 at 5:03 PM, Chad Versace <chadvers...@chromium.org> wrote:
> Many Android apps (such as Google's official NDK GLES2 example app), and
> even portions the core framework code (such as SystemServiceManager in
> Nougat), incorrectly choose their EGLConfig.  They neglect to match the
> EGLConfig's EGL_NATIVE_VISUAL_ID against the window's native format, and
> instead choose the first EGLConfig whose channel sizes match those of
> the native window format while ignoring the channel *ordering*.
>
> We can detect such buggy clients in logcat when they call
> eglCreateSurface, by detecting the mismatch between the EGLConfig's
> format and the window's format.
>
> As a workaround, this patch changes the order of EGLConfig generation
> such that all EGLConfigs for HAL pixel format i precede those for HAL
> pixel format i+1. In my (chadversary) testing on Android Nougat, this
> was good enough to pacify the buggy clients.
>
> v2: Rebase to make patch cherry-pickable to stable.
>
> Cc: mesa-sta...@lists.freedesktop.org
> Cc: Tomasz Figa <tf...@chromium.org>
> Cc: Rob Herring <r...@kernel.org>
> Cc: Tapani Pälli <tapani.pa...@intel.com>
> Cc: Emil Velikov <emil.veli...@collabora.com>

Tested-by: Rob Herring <r...@kernel.org>

One question though...

>
> ---
>  src/egl/drivers/dri2/platform_android.c | 32 +++++++++++++++++++++++++-------
>  1 file changed, 25 insertions(+), 7 deletions(-)
>
> diff --git a/src/egl/drivers/dri2/platform_android.c 
> b/src/egl/drivers/dri2/platform_android.c
> index 5550f580a80..eaaeff4641c 100644
> --- a/src/egl/drivers/dri2/platform_android.c
> +++ b/src/egl/drivers/dri2/platform_android.c
> @@ -1049,20 +1049,38 @@ droid_add_configs_for_visuals(_EGLDriver *drv, 
> _EGLDisplay *dpy)
>     unsigned int format_count[ARRAY_SIZE(visuals)] = { 0 };
>     int count, i, j;
>
> +   /* The nesting of loops is significant here. Also significant is the order
> +    * of the HAL pixel formats. Many Android apps (such as Google's official
> +    * NDK GLES2 example app), and even portions the core framework code (such
> +    * as SystemServiceManager in Nougat), incorrectly choose their EGLConfig.
> +    * They neglect to match the EGLConfig's EGL_NATIVE_VISUAL_ID against the
> +    * window's native format, and instead choose the first EGLConfig whose
> +    * channel sizes match those of the native window format while ignoring 
> the
> +    * channel *ordering*.
> +    *
> +    * We can detect such buggy clients in logcat when they call
> +    * eglCreateSurface, by detecting the mismatch between the EGLConfig's
> +    * format and the window's format.

How do we find the buggy clients with this patch applied other than reverting?

Rob
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to