From 792c8dc009bd3a0c44eb39e757a95e099c03b54c Mon Sep 17 00:00:00 2001 From: Chih-Wei Huang Date: Fri, 28 Jul 2017 19:44:57 +0800 Subject: [PATCH] RenderEngine: support non-RGBA_8888 format Some of our GPUs (e.g., radeon) don't support RGBA_8888 well. To workaround it, just get the EGL config by a simpler query. This patch should be reverted once all of our GPUs support RGBA_8888. --- services/surfaceflinger/RenderEngine/RenderEngine.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/services/surfaceflinger/RenderEngine/RenderEngine.cpp b/services/surfaceflinger/RenderEngine/RenderEngine.cpp index 56e9ac07ad..ceba9f7dfd 100644 --- a/services/surfaceflinger/RenderEngine/RenderEngine.cpp +++ b/services/surfaceflinger/RenderEngine/RenderEngine.cpp @@ -140,7 +140,7 @@ RenderEngine* RenderEngine::create(EGLDisplay display, int hwcFormat, uint32_t f } engine->setEGLHandles(config, ctxt); - ALOGI("OpenGL ES informations:"); + ALOGI("OpenGL ES informations: format=0x%x", hwcFormat); ALOGI("vendor : %s", extensions.getVendor()); ALOGI("renderer : %s", extensions.getRenderer()); ALOGI("version : %s", extensions.getVersion()); @@ -411,9 +411,14 @@ EGLConfig RenderEngine::chooseEglConfig(EGLDisplay display, int format, status_t err; EGLConfig config; - // First try to get an ES2 config - err = selectEGLConfig(display, format, EGL_OPENGL_ES2_BIT, &config); - if (err != NO_ERROR) { + // Only try to get an ES2 config if format is RGBA_8888 + if (format != HAL_PIXEL_FORMAT_RGBA_8888) { + ALOGI("Trying a simpler query for non-RGBA_8888"); + err = selectEGLConfig(display, format, 0, &config); + if (err != NO_ERROR) { + LOG_ALWAYS_FATAL("no suitable EGLConfig found, giving up"); + } + } else if ((err = selectEGLConfig(display, format, EGL_OPENGL_ES2_BIT, &config)) != NO_ERROR) { // If ES2 fails, try ES1 err = selectEGLConfig(display, format, EGL_OPENGL_ES_BIT, &config); if (err != NO_ERROR) { @@ -435,7 +440,7 @@ EGLConfig RenderEngine::chooseEglConfig(EGLDisplay display, int format, eglGetConfigAttrib(display, config, EGL_GREEN_SIZE, &g); eglGetConfigAttrib(display, config, EGL_BLUE_SIZE, &b); eglGetConfigAttrib(display, config, EGL_ALPHA_SIZE, &a); - ALOGI("EGL information:"); + ALOGI("EGL information: format=0x%x", format); ALOGI("vendor : %s", eglQueryString(display, EGL_VENDOR)); ALOGI("version : %s", eglQueryString(display, EGL_VERSION)); ALOGI("extensions: %s", eglQueryString(display, EGL_EXTENSIONS)); -- 2.11.0