diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 7e9663fd3ac..fc15959f42d 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -790,6 +790,8 @@ dri2_setup_screen(_EGLDisplay *disp) disp->Extensions.KHR_gl_colorspace = EGL_TRUE; } + disp->Extensions.EXT_config_select_group = EGL_TRUE; + disp->Extensions.EXT_create_context_robustness = get_screen_param(disp, PIPE_CAP_DEVICE_RESET_STATUS_QUERY); disp->RobustBufferAccess = diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c index 109e8b7d0ee..f10f5f04e58 100644 --- a/src/egl/main/eglapi.c +++ b/src/egl/main/eglapi.c @@ -547,6 +547,7 @@ _eglCreateExtensionsString(_EGLDisplay *disp) _EGL_CHECK_EXTENSION(ANGLE_sync_control_rate); _EGL_CHECK_EXTENSION(EXT_buffer_age); + _EGL_CHECK_EXTENSION(EXT_config_select_group); _EGL_CHECK_EXTENSION(EXT_create_context_robustness); _EGL_CHECK_EXTENSION(EXT_image_dma_buf_import); _EGL_CHECK_EXTENSION(EXT_image_dma_buf_import_modifiers); diff --git a/src/egl/main/eglconfig.c b/src/egl/main/eglconfig.c index add805bfd8f..b7e8bf8efd9 100644 --- a/src/egl/main/eglconfig.c +++ b/src/egl/main/eglconfig.c @@ -249,6 +249,9 @@ static const struct { { EGL_COLOR_COMPONENT_TYPE_EXT, ATTRIB_TYPE_ENUM, ATTRIB_CRITERION_EXACT, EGL_COLOR_COMPONENT_TYPE_FIXED_EXT }, + { EGL_CONFIG_SELECT_GROUP_EXT, ATTRIB_TYPE_INTEGER, + ATTRIB_CRITERION_IGNORE, + 0 }, /* clang-format on */ }; @@ -287,6 +290,8 @@ _eglValidateConfig(const _EGLConfig *conf, EGLBoolean for_matching) if (val > 1 || val < 0) valid = EGL_FALSE; break; + case EGL_CONFIG_SELECT_GROUP_EXT: + break; default: if (val < 0) valid = EGL_FALSE; @@ -587,6 +592,10 @@ _eglCompareConfigs(const _EGLConfig *conf1, const _EGLConfig *conf2, if (conf1 == conf2) return 0; + val1 = conf1->ConfigSelectGroup - conf2->ConfigSelectGroup; + if (val1) + return val1; + /* the enum values have the desired ordering */ STATIC_ASSERT(EGL_NONE < EGL_SLOW_CONFIG); STATIC_ASSERT(EGL_SLOW_CONFIG < EGL_NON_CONFORMANT_CONFIG); diff --git a/src/egl/main/eglconfig.h b/src/egl/main/eglconfig.h index 15a91d13e5f..f7ba0385ef2 100644 --- a/src/egl/main/eglconfig.h +++ b/src/egl/main/eglconfig.h @@ -84,6 +84,7 @@ struct _egl_config { EGLint FramebufferTargetAndroid; EGLint RecordableAndroid; EGLint ComponentType; + EGLint ConfigSelectGroup; }; /** @@ -135,6 +136,7 @@ _eglOffsetOfConfig(EGLint attr) ATTRIB_MAP(EGL_FRAMEBUFFER_TARGET_ANDROID, FramebufferTargetAndroid); ATTRIB_MAP(EGL_RECORDABLE_ANDROID, RecordableAndroid); ATTRIB_MAP(EGL_COLOR_COMPONENT_TYPE_EXT, ComponentType); + ATTRIB_MAP(EGL_CONFIG_SELECT_GROUP_EXT, ConfigSelectGroup); #undef ATTRIB_MAP default: return -1; diff --git a/src/egl/main/egldisplay.h b/src/egl/main/egldisplay.h index 38aef531a68..4a07166cd01 100644 --- a/src/egl/main/egldisplay.h +++ b/src/egl/main/egldisplay.h @@ -102,6 +102,7 @@ struct _egl_extensions { EGLBoolean CHROMIUM_sync_control; EGLBoolean EXT_buffer_age; + EGLBoolean EXT_config_select_group; EGLBoolean EXT_create_context_robustness; EGLBoolean EXT_image_dma_buf_import; EGLBoolean EXT_image_dma_buf_import_modifiers;