Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ccc8dff7 authored by Alec Mouri's avatar Alec Mouri Committed by Android (Google) Code Review
Browse files

Merge "Remove EGL_KHR_image_gl_colorspace workaround for Android P" into main

parents d1886a2b 54774fdb
Loading
Loading
Loading
Loading
+0 −13
Original line number Diff line number Diff line
@@ -64,11 +64,6 @@ bool findExtension(const char* exts, const char* name, size_t nameLen) {
    return false;
}

bool needsAndroidPEglMitigation() {
    static const int32_t vndk_version = base::GetIntProperty("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;
@@ -365,14 +360,6 @@ EGLBoolean egl_display_t::initialize(EGLint* major, EGLint* minor) {
            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 + " ");
                }
+0 −1
Original line number Diff line number Diff line
@@ -39,7 +39,6 @@ class egl_context_t;
struct egl_connection_t;

bool findExtension(const char* exts, const char* name, size_t nameLen = 0);
bool needsAndroidPEglMitigation();

class EGLAPI egl_display_t { // marked as EGLAPI for testing purposes
    static std::map<EGLDisplay, std::unique_ptr<egl_display_t>> displayMap;
+1 −22
Original line number Diff line number Diff line
@@ -1644,26 +1644,6 @@ EGLImageKHR eglCreateImageTmpl(EGLDisplay dpy, EGLContext ctx, EGLenum target,
    const egl_display_t* dp = validate_display(dpy);
    if (!dp) return EGL_NO_IMAGE_KHR;

    std::vector<AttrType> strippedAttribs;
    if (needsAndroidPEglMitigation()) {
        // Mitigation for Android P vendor partitions: 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.
        for (const AttrType* 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;
                }
            }
            strippedAttribs.push_back(attr[0]);
            strippedAttribs.push_back(attr[1]);
        }
        strippedAttribs.push_back(EGL_NONE);
    }

    ContextRef _c(dp, ctx);
    egl_context_t* const c = _c.get();

@@ -1671,8 +1651,7 @@ EGLImageKHR eglCreateImageTmpl(EGLDisplay dpy, EGLContext ctx, EGLenum target,
    egl_connection_t* const cnx = &gEGLImpl;
    if (cnx->dso && eglCreateImageFunc) {
        result = eglCreateImageFunc(dp->disp.dpy, c ? c->context : EGL_NO_CONTEXT, target, buffer,
                                    needsAndroidPEglMitigation() ? strippedAttribs.data()
                                                                 : attrib_list);
                                    attrib_list);
    }
    return result;
}