On Tue 20 Jun 2017, Emil Velikov wrote: > On 17 June 2017 at 03:37, 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. > > --- > > 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 fcf29bce713..c294691f291 100644 > > --- a/src/egl/drivers/dri2/platform_android.c > > +++ b/src/egl/drivers/dri2/platform_android.c > > @@ -1039,23 +1039,41 @@ droid_add_configs_for_visuals(_EGLDriver *drv, > > _EGLDisplay *dpy) > > unsigned int format_count[ARRAY_SIZE(visuals)] = { 0 }; > > int config_count = 0; > > > > - for (int i = 0; dri2_dpy->driver_configs[i]; i++) { > > - for (int j = 0; j < ARRAY_SIZE(visuals); 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. > > + * > > + * As a workaround, we generate EGLConfigs 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. > > Huge thanks for the extensive comment Chad. At the same time - how > unfortunate. > I doubt that you/others will have a chance to address the said bugs?
There is a chance to fix these bugs in the core Android codebase. But many buggy apps, of course, are out of our control. > Humble request - can we please make this 1/5 and Cc mesa-stable? Sure, I will re-order the series to place this patch first. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev