Refactor color space attribute processing.
getColorSpaceAttribute and stripAttributes have closely related purpose.
Merge them into a single processAttribute function.
This also adjusts which color space attributes are passed to the driver,
based on the EGL extension specifications.
Bug: 78247539
Test: cts-tradefed run singleCommand cts-dev -m CtsDeqpTestCases \
--module-arg CtsDeqpTestCases:include-filter:dEQP-EGL.functional.* \
--skip-preconditions
Change-Id: I79650e0066e54ae92033b280d75f17b4060114bd
diff --git a/opengl/libs/EGL/egl_display.cpp b/opengl/libs/EGL/egl_display.cpp
index 74ddd1c..a56890a 100644
--- a/opengl/libs/EGL/egl_display.cpp
+++ b/opengl/libs/EGL/egl_display.cpp
@@ -206,12 +206,16 @@
mExtensionString = gBuiltinExtensionString;
+ hasColorSpaceSupport = findExtension(disp.queryString.extensions, "EGL_KHR_gl_colorspace");
+
+ // Note: CDD requires that devices supporting wide color and/or HDR color also support
+ // the EGL_KHR_gl_colorspace extension.
bool wideColorBoardConfig =
getBool<ISurfaceFlingerConfigs, &ISurfaceFlingerConfigs::hasWideColorDisplay>(
false);
// Add wide-color extensions if device can support wide-color
- if (wideColorBoardConfig) {
+ if (wideColorBoardConfig && hasColorSpaceSupport) {
mExtensionString.append(
"EGL_EXT_gl_colorspace_scrgb EGL_EXT_gl_colorspace_scrgb_linear "
"EGL_EXT_gl_colorspace_display_p3_linear EGL_EXT_gl_colorspace_display_p3 ");
@@ -220,7 +224,7 @@
bool hasHdrBoardConfig =
getBool<ISurfaceFlingerConfigs, &ISurfaceFlingerConfigs::hasHDRDisplay>(false);
- if (hasHdrBoardConfig) {
+ if (hasHdrBoardConfig && hasColorSpaceSupport) {
// hasHDRBoardConfig indicates the system is capable of supporting HDR content.
// Typically that means there is an HDR capable display attached, but could be
// support for attaching an HDR display. In either case, advertise support for