Reintroduce EGL mitigations from Android P.
These mitigations are still necessary for GSI images with P vendor
partitions to pass Q CTS. This is essentially a revert of commit
30c1d90f1c08e2258f39e9328dcfa16fecbc9441 adjusted to match the changes
introduced in the meantime.
Bug: 124411631
Test: Pixel XL boots, CtsVrTestCases passes on Pixel 3 GSI+P
Change-Id: I38bddfddda411337f5ed77b7e4899b922386f331
diff --git a/opengl/libs/EGL/egl_display.cpp b/opengl/libs/EGL/egl_display.cpp
index eb970d9..8841a3b 100644
--- a/opengl/libs/EGL/egl_display.cpp
+++ b/opengl/libs/EGL/egl_display.cpp
@@ -71,6 +71,11 @@
return false;
}
+bool needsAndroidPEglMitigation() {
+ static const int32_t vndk_version = property_get_int32("ro.vndk.version", -1);
+ return vndk_version <= 28;
+}
+
int egl_get_init_count(EGLDisplay dpy) {
egl_display_t* eglDisplay = egl_display_t::get(dpy);
return eglDisplay ? eglDisplay->getRefsCount() : 0;
@@ -384,6 +389,13 @@
if (len) {
// NOTE: we could avoid the copy if we had strnstr.
const std::string ext(start, len);
+ // Mitigation for Android P vendor partitions: Adreno 530 driver shipped on
+ // some Android P vendor partitions this extension under the draft KHR name,
+ // but during Khronos review it was decided to demote it to EXT.
+ if (needsAndroidPEglMitigation() && ext == "EGL_EXT_image_gl_colorspace" &&
+ findExtension(disp.queryString.extensions, "EGL_KHR_image_gl_colorspace")) {
+ mExtensionString.append("EGL_EXT_image_gl_colorspace ");
+ }
if (findExtension(disp.queryString.extensions, ext.c_str(), len)) {
mExtensionString.append(ext + " ");
}