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

Commit 89830089 authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change I0953c1d5 into eclair

* changes:
  fix [2153873] EGL-1.4 software implementation misses surface attributes
parents 89c515fa 0985f6a4
Loading
Loading
Loading
Loading
+18 −5
Original line number Original line Diff line number Diff line
@@ -953,12 +953,17 @@ static config_pair_t const config_base_attribute_list[] = {
        { EGL_BIND_TO_TEXTURE_RGB,        EGL_FALSE                         },
        { EGL_BIND_TO_TEXTURE_RGB,        EGL_FALSE                         },
        { EGL_MIN_SWAP_INTERVAL,          1                                 },
        { EGL_MIN_SWAP_INTERVAL,          1                                 },
        { EGL_MAX_SWAP_INTERVAL,          1                                 },
        { EGL_MAX_SWAP_INTERVAL,          1                                 },
        { EGL_LUMINANCE_SIZE,             0                                 },
        { EGL_ALPHA_MASK_SIZE,            0                                 },
        { EGL_COLOR_BUFFER_TYPE,          EGL_RGB_BUFFER                    },
        { EGL_RENDERABLE_TYPE,            EGL_OPENGL_ES_BIT                 },
        { EGL_RENDERABLE_TYPE,            EGL_OPENGL_ES_BIT                 },
        { EGL_CONFORMANT,                 0                                 }
};
};


// These configs can override the base attribute list
// These configs can override the base attribute list
// NOTE: when adding a config here, don't forget to update eglCreate*Surface()
// NOTE: when adding a config here, don't forget to update eglCreate*Surface()



static config_pair_t const config_0_attribute_list[] = {
static config_pair_t const config_0_attribute_list[] = {
        { EGL_BUFFER_SIZE,     16 },
        { EGL_BUFFER_SIZE,     16 },
        { EGL_ALPHA_SIZE,       0 },
        { EGL_ALPHA_SIZE,       0 },
@@ -1062,10 +1067,18 @@ static config_management_t const gConfigManagement[] = {
        { EGL_BIND_TO_TEXTURE_RGB,        config_management_t::exact   },
        { EGL_BIND_TO_TEXTURE_RGB,        config_management_t::exact   },
        { EGL_MIN_SWAP_INTERVAL,          config_management_t::exact   },
        { EGL_MIN_SWAP_INTERVAL,          config_management_t::exact   },
        { EGL_MAX_SWAP_INTERVAL,          config_management_t::exact   },
        { EGL_MAX_SWAP_INTERVAL,          config_management_t::exact   },
        { EGL_LUMINANCE_SIZE,             config_management_t::atLeast },
        { EGL_ALPHA_MASK_SIZE,            config_management_t::atLeast },
        { EGL_COLOR_BUFFER_TYPE,          config_management_t::exact   },
        { EGL_RENDERABLE_TYPE,            config_management_t::mask    },
        { EGL_CONFORMANT,                 config_management_t::mask    }
};
};



static config_pair_t const config_defaults[] = {
static config_pair_t const config_defaults[] = {
        { EGL_SURFACE_TYPE,        EGL_WINDOW_BIT },
    // attributes that are not specified are simply ignored, if a particular
    // one needs not be ignored, it must be specified here, eg:
    // { EGL_SURFACE_TYPE, EGL_WINDOW_BIT },
};
};


// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
@@ -1513,7 +1526,7 @@ EGLBoolean eglChooseConfig( EGLDisplay dpy, const EGLint *attrib_list,
        numAttributes++;
        numAttributes++;
        EGLint attr = *attrib_list++;
        EGLint attr = *attrib_list++;
        EGLint val  = *attrib_list++;
        EGLint val  = *attrib_list++;
        for (int i=0 ; i<numConfigs ; i++) {
        for (int i=0 ; possibleMatch && i<numConfigs ; i++) {
            if (!(possibleMatch & (1<<i)))
            if (!(possibleMatch & (1<<i)))
                continue;
                continue;
            if (isAttributeMatching(i, attr, val) == 0) {
            if (isAttributeMatching(i, attr, val) == 0) {
@@ -1523,15 +1536,15 @@ EGLBoolean eglChooseConfig( EGLDisplay dpy, const EGLint *attrib_list,
    }
    }


    // now, handle the attributes which have a useful default value
    // now, handle the attributes which have a useful default value
    for (size_t j=0 ; j<NELEM(config_defaults) ; j++) {
    for (size_t j=0 ; possibleMatch && j<NELEM(config_defaults) ; j++) {
        // see if this attribute was specified, if not apply its
        // see if this attribute was specified, if not, apply its
        // default value
        // default value
        if (binarySearch<config_pair_t>(
        if (binarySearch<config_pair_t>(
                (config_pair_t const*)attrib_list,
                (config_pair_t const*)attrib_list,
                0, numAttributes-1,
                0, numAttributes-1,
                config_defaults[j].key) < 0)
                config_defaults[j].key) < 0)
        {
        {
            for (int i=0 ; i<numConfigs ; i++) {
            for (int i=0 ; possibleMatch && i<numConfigs ; i++) {
                if (!(possibleMatch & (1<<i)))
                if (!(possibleMatch & (1<<i)))
                    continue;
                    continue;
                if (isAttributeMatching(i,
                if (isAttributeMatching(i,