Work around CTS failure in eglCreateImageKHR.
Qualcomm driver does not accept EGL_GL_COLORSPACE_DEFAULT_EXT. However,
the meaning of this attribute is the same as not passing any colorspace
attribute at all, so we can simply strip it.
Bug: 78640230
Bug: 78660105
Test: Ran CtsVrTestCases on Pixel XL, passes.
Change-Id: I265fbb70366f81b5ab75d06343ea85e0524dd314
diff --git a/opengl/libs/EGL/eglApi.cpp b/opengl/libs/EGL/eglApi.cpp
index b022a20..3615577 100644
--- a/opengl/libs/EGL/eglApi.cpp
+++ b/opengl/libs/EGL/eglApi.cpp
@@ -1733,13 +1733,31 @@
ContextRef _c(dp.get(), ctx);
egl_context_t * const c = _c.get();
+ // Temporary hack: eglImageCreateKHR should accept EGL_GL_COLORSPACE_LINEAR_KHR,
+ // EGL_GL_COLORSPACE_SRGB_KHR and EGL_GL_COLORSPACE_DEFAULT_EXT if
+ // EGL_EXT_image_gl_colorspace is supported, but some drivers don't like
+ // the DEFAULT value and generate an error.
+ std::vector<EGLint> strippedAttribList;
+ for (const EGLint *attr = attrib_list; attr && attr[0] != EGL_NONE; attr += 2) {
+ if (attr[0] == EGL_GL_COLORSPACE_KHR &&
+ dp->haveExtension("EGL_EXT_image_gl_colorspace")) {
+ if (attr[1] != EGL_GL_COLORSPACE_LINEAR_KHR &&
+ attr[1] != EGL_GL_COLORSPACE_SRGB_KHR) {
+ continue;
+ }
+ }
+ strippedAttribList.push_back(attr[0]);
+ strippedAttribList.push_back(attr[1]);
+ }
+ strippedAttribList.push_back(EGL_NONE);
+
EGLImageKHR result = EGL_NO_IMAGE_KHR;
egl_connection_t* const cnx = &gEGLImpl;
if (cnx->dso && cnx->egl.eglCreateImageKHR) {
result = cnx->egl.eglCreateImageKHR(
dp->disp.dpy,
c ? c->context : EGL_NO_CONTEXT,
- target, buffer, attrib_list);
+ target, buffer, strippedAttribList.data());
}
return result;
}