libEGL: When driver doesn't understand P3, map sRGB-encoded P3 to sRGB

Even though the driver doesn't need to do anything else differently for
P3, it must know to apply the sRGB transfer function to framebuffer
writes.

Fixes:
	dEQP-EGL.functional.wide_color.pbuffer_8888_colorspace_p3
	dEQP-EGL.functional.wide_color.window_8888_colorspace_p3

Bug: b/117104367
Change-Id: I5a0199ad353cd52d421ce86e3dc967a72b3cba71
Merged-In: I5a0199ad353cd52d421ce86e3dc967a72b3cba71
diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp
index 42049a4..40adf8e 100644
--- a/opengl/libs/EGL/eglApi.cpp
+++ b/opengl/libs/EGL/eglApi.cpp
@@ -562,6 +562,15 @@
                     break;
                 }
             }
+
+            // If the driver doesn't understand it, we should map sRGB-encoded P3 to
+            // sRGB rather than just dropping the colorspace on the floor.
+            // For this format, the driver is expected to apply the sRGB
+            // transfer function during framebuffer operations.
+            if (!copyAttribute && attr[1] == EGL_GL_COLORSPACE_DISPLAY_P3_EXT) {
+                strippedAttribList->push_back(attr[0]);
+                strippedAttribList->push_back(EGL_GL_COLORSPACE_SRGB_KHR);
+            }
         }
         if (copyAttribute) {
             strippedAttribList->push_back(attr[0]);