diff options
author | Lepton Wu <[email protected]> | 2019-09-12 06:38:59 +0000 |
---|---|---|
committer | Eric Engestrom <[email protected]> | 2019-09-12 06:38:59 +0000 |
commit | 8b1912c20bb0056937fab5af301c073d1d2c3421 (patch) | |
tree | 87e1dbdaefb2df3b2b101df641e90d38674efac8 /src/egl | |
parent | e2485bb02392f81cb9e24d8a3466cd6a2ba8d73a (diff) |
egl/android: Only keep BGRA EGL configs as fallback
Stock Android code actually doesn't support BGRA format EGL
configs. It's hard coded to use RGBA_8888 as window format
for BGRA EGL configs here:
https://android.googlesource.com/platform/frameworks/native/+/1eb32e2/opengl/libs/EGL/eglApi.cpp#608
So just remove it from EGL configs if RGBA is supported.
Signed-off-by: Lepton Wu <[email protected]>
Reviewed-by: Tapani Pälli <[email protected]>
Diffstat (limited to 'src/egl')
-rw-r--r-- | src/egl/drivers/dri2/platform_android.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c index 3eb588f4061..0c341c6ac78 100644 --- a/src/egl/drivers/dri2/platform_android.c +++ b/src/egl/drivers/dri2/platform_android.c @@ -1165,6 +1165,9 @@ droid_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *disp) { HAL_PIXEL_FORMAT_RGBA_8888, { 0, 8, 16, 24 }, { 8, 8, 8, 8 } }, { HAL_PIXEL_FORMAT_RGBX_8888, { 0, 8, 16, -1 }, { 8, 8, 8, 0 } }, { HAL_PIXEL_FORMAT_RGB_565, { 11, 5, 0, -1 }, { 5, 6, 5, 0 } }, + /* This must be after HAL_PIXEL_FORMAT_RGBA_8888, we only keep BGRA + * visual if it turns out RGBA visual is not available. + */ { HAL_PIXEL_FORMAT_BGRA_8888, { 16, 8, 0, 24 }, { 8, 8, 8, 8 } }, }; @@ -1189,7 +1192,13 @@ droid_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *disp) * (chadversary) testing on Android Nougat, this was good enough to pacify * the buggy clients. */ + bool has_rgba = false; for (int i = 0; i < ARRAY_SIZE(visuals); i++) { + /* Only enable BGRA configs when RGBA is not available. BGRA configs are + * buggy on stock Android. + */ + if (visuals[i].format == HAL_PIXEL_FORMAT_BGRA_8888 && has_rgba) + continue; for (int j = 0; dri2_dpy->driver_configs[j]; j++) { const EGLint surface_type = EGL_WINDOW_BIT | EGL_PBUFFER_BIT; @@ -1211,6 +1220,8 @@ droid_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *disp) format_count[i]++; } } + if (visuals[i].format == HAL_PIXEL_FORMAT_RGBA_8888 && format_count[i]) + has_rgba = true; } for (int i = 0; i < ARRAY_SIZE(format_count); i++) { |