From 0018b478471074bd38b63062dbb189885fdfbea7 Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Tue, 11 Jul 2017 09:48:28 -0700 Subject: [PATCH] Use EGL_EXT_gl_colorspace_scrgb instead of *_linear Since hwui output non-linear scRGB data in wide-gamut, use the scRGB-nl extension instead of scRGB. Bug: 62951776 Test: Manual, CtsGraphicsTestCases Change-Id: Ifdb288e777d12b790b93624ccea9b4f1f6966e52 (cherry picked from commit 26b6a64953f29bbe6b10a5e948d11f47bd0611d6) --- libs/hwui/renderthread/EglManager.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/libs/hwui/renderthread/EglManager.cpp b/libs/hwui/renderthread/EglManager.cpp index d6240e7064cfc..0e676ee4f9dba 100644 --- a/libs/hwui/renderthread/EglManager.cpp +++ b/libs/hwui/renderthread/EglManager.cpp @@ -79,6 +79,7 @@ static struct { bool noConfigContext = false; bool pixelFormatFloat = false; bool glColorSpace = false; + bool scRGB = false; } EglExtensions; EglManager::EglManager(RenderThread& thread) @@ -161,6 +162,11 @@ void EglManager::initExtensions() { EglExtensions.glColorSpace = extensions.has("EGL_KHR_gl_colorspace"); EglExtensions.noConfigContext = extensions.has("EGL_KHR_no_config_context"); EglExtensions.pixelFormatFloat = extensions.has("EGL_EXT_pixel_format_float"); +#ifdef ANDROID_ENABLE_LINEAR_BLENDING + EglExtensions.scRGB = extensions.has("EGL_EXT_gl_colorspace_scrgb_linear"); +#else + EglExtensions.scRGB = extensions.has("EGL_EXT_gl_colorspace_scrgb"); +#endif } bool EglManager::hasEglContext() { @@ -249,7 +255,7 @@ void EglManager::createPBufferSurface() { EGLSurface EglManager::createSurface(EGLNativeWindowType window, bool wideColorGamut) { initialize(); - wideColorGamut = wideColorGamut && EglExtensions.glColorSpace + wideColorGamut = wideColorGamut && EglExtensions.glColorSpace && EglExtensions.scRGB && EglExtensions.pixelFormatFloat && EglExtensions.noConfigContext; // The color space we want to use depends on whether linear blending is turned @@ -289,9 +295,7 @@ EGLSurface EglManager::createSurface(EGLNativeWindowType window, bool wideColorG } #else if (wideColorGamut) { - // TODO: this should be using scRGB-nl, not scRGB, we need an extension for this - // TODO: in the meantime SurfaceFlinger just assumes that scRGB is scRGB-nl - attribs[1] = EGL_GL_COLORSPACE_SCRGB_LINEAR_EXT; + attribs[1] = EGL_GL_COLORSPACE_SCRGB_EXT; } else { attribs[1] = EGL_GL_COLORSPACE_LINEAR_KHR; }