static EGLBoolean dri2_match_config(const _EGLConfig *conf, const _EGLConfig *criteria) { if (_eglCompareConfigs(conf, criteria, NULL, EGL_FALSE) != 0) return EGL_FALSE; if (!_eglMatchConfig(conf, criteria)) return EGL_FALSE; return EGL_TRUE; }
static EGLBoolean egl_g3d_match_config(const _EGLConfig *conf, void *priv_data) { struct egl_g3d_choose_config_data *data = (struct egl_g3d_choose_config_data *) priv_data; struct egl_g3d_config *gconf = egl_g3d_config(conf); if (data->format != PIPE_FORMAT_NONE && data->format != gconf->native->color_format) return EGL_FALSE; return _eglMatchConfig(conf, &data->criteria); }
/** * Typical fallback routine for eglChooseConfig */ EGLBoolean _eglChooseConfig(_EGLDriver *drv, _EGLDisplay *disp, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_configs) { _EGLConfig **configList, criteria; EGLint i, count; if (!num_configs) return _eglError(EGL_BAD_PARAMETER, "eglChooseConfigs"); _eglInitConfig(&criteria, disp, 0); if (!_eglParseConfigAttribList(&criteria, attrib_list)) return _eglError(EGL_BAD_ATTRIBUTE, "eglChooseConfig"); /* allocate array of config pointers */ configList = (_EGLConfig **) malloc(disp->NumConfigs * sizeof(_EGLConfig *)); if (!configList) return _eglError(EGL_BAD_ALLOC, "eglChooseConfig(out of memory)"); /* perform selection of configs */ count = 0; for (i = 0; i < disp->NumConfigs; i++) { if (_eglMatchConfig(disp->Configs[i], &criteria)) configList[count++] = disp->Configs[i]; } /* perform sorting of configs */ if (configs && count) { _eglSortConfigs((const _EGLConfig **) configList, count, _eglFallbackCompare, (void *) &criteria); count = MIN2(count, config_size); for (i = 0; i < count; i++) configs[i] = _eglGetConfigHandle(configList[i]); } free(configList); *num_configs = count; return EGL_TRUE; }
static EGLBoolean _eglFallbackMatch(const _EGLConfig *conf, void *priv_data) { return _eglMatchConfig(conf, (const _EGLConfig *) priv_data); }