egl: Automatically set EGLConfig ID

There's no reason to make the users go through and count all their
configs; just set it ourselves in the core.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27709>
This commit is contained in:
Daniel Stone 2023-08-09 11:48:30 +01:00 committed by Marge Bot
parent 487016796b
commit 630fda2492
6 changed files with 16 additions and 41 deletions

View file

@ -396,7 +396,7 @@ dri2_image_format_for_pbuffer_config(struct dri2_egl_display *dri2_dpy,
}
struct dri2_egl_config *
dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id,
dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config,
EGLint surface_type, const EGLint *attr_list,
const int *rgba_shifts, const unsigned int *rgba_sizes)
{
@ -412,7 +412,7 @@ dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id,
EGLint num_configs = 0;
EGLint config_id;
_eglInitConfig(&base, disp, id);
_eglInitConfig(&base, disp, _eglGetArraySize(disp->Configs) + 1);
double_buffer = 0;
bind_to_texture_rgb = 0;
@ -579,7 +579,7 @@ dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id,
base.MaxSwapInterval = dri2_dpy->max_swap_interval;
if (!_eglValidateConfig(&base, EGL_FALSE)) {
_eglLog(_EGL_DEBUG, "DRI2: failed to validate config %d", id);
_eglLog(_EGL_DEBUG, "DRI2: failed to validate config %d", base.ConfigID);
return NULL;
}
@ -624,22 +624,18 @@ dri2_add_pbuffer_configs_for_visuals(_EGLDisplay *disp)
{
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
unsigned int format_count[ARRAY_SIZE(dri2_pbuffer_visuals)] = {0};
unsigned int config_count = 0;
for (unsigned i = 0; dri2_dpy->driver_configs[i] != NULL; i++) {
for (unsigned j = 0; j < ARRAY_SIZE(dri2_pbuffer_visuals); j++) {
struct dri2_egl_config *dri2_conf;
dri2_conf = dri2_add_config(disp, dri2_dpy->driver_configs[i],
config_count + 1, EGL_PBUFFER_BIT, NULL,
EGL_PBUFFER_BIT, NULL,
dri2_pbuffer_visuals[j].rgba_shifts,
dri2_pbuffer_visuals[j].rgba_sizes);
if (dri2_conf) {
if (dri2_conf->base.ConfigID == config_count + 1)
config_count++;
if (dri2_conf)
format_count[j]++;
}
}
}

View file

@ -520,7 +520,7 @@ dri2_image_format_for_pbuffer_config(struct dri2_egl_display *dri2_dpy,
const __DRIconfig *config);
struct dri2_egl_config *
dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config, int id,
dri2_add_config(_EGLDisplay *disp, const __DRIconfig *dri_config,
EGLint surface_type, const EGLint *attr_list,
const int *rgba_shifts, const unsigned int *rgba_sizes);

View file

@ -808,7 +808,6 @@ droid_add_configs_for_visuals(_EGLDisplay *disp)
};
unsigned int format_count[ARRAY_SIZE(visuals)] = {0};
int config_count = 0;
/* The nesting of loops is significant here. Also significant is the order
* of the HAL pixel formats. Many Android apps (such as Google's official
@ -851,13 +850,10 @@ droid_add_configs_for_visuals(_EGLDisplay *disp)
};
struct dri2_egl_config *dri2_conf = dri2_add_config(
disp, dri2_dpy->driver_configs[j], config_count + 1, surface_type,
disp, dri2_dpy->driver_configs[j], surface_type,
config_attrs, visuals[i].rgba_shifts, visuals[i].rgba_sizes);
if (dri2_conf) {
if (dri2_conf)
format_count[i]++;
if (dri2_conf->base.ConfigID == config_count + 1)
config_count++;
}
}
if (visuals[i].format == HAL_PIXEL_FORMAT_RGBA_8888 && format_count[i])
has_rgba = true;

View file

@ -499,7 +499,6 @@ drm_add_configs_for_visuals(_EGLDisplay *disp)
const struct gbm_dri_visual *visuals = dri2_dpy->gbm_dri->visual_table;
int num_visuals = dri2_dpy->gbm_dri->num_visuals;
unsigned int format_count[num_visuals];
unsigned int config_count = 0;
memset(format_count, 0, num_visuals * sizeof(unsigned int));
@ -534,13 +533,10 @@ drm_add_configs_for_visuals(_EGLDisplay *disp)
};
dri2_conf =
dri2_add_config(disp, dri2_dpy->driver_configs[i], config_count + 1,
EGL_WINDOW_BIT, attr_list, NULL, NULL);
if (dri2_conf) {
dri2_add_config(disp, dri2_dpy->driver_configs[i], EGL_WINDOW_BIT,
attr_list, NULL, NULL);
if (dri2_conf)
format_count[j]++;
if (dri2_conf->base.ConfigID == config_count + 1)
config_count++;
}
}
}

View file

@ -1965,7 +1965,6 @@ dri2_wl_add_configs_for_visuals(_EGLDisplay *disp)
{
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
unsigned int format_count[ARRAY_SIZE(dri2_wl_visuals)] = {0};
unsigned int count = 0;
/* Try to create an EGLConfig for every config the driver declares */
for (unsigned i = 0; dri2_dpy->driver_configs[i]; i++) {
@ -1992,12 +1991,10 @@ dri2_wl_add_configs_for_visuals(_EGLDisplay *disp)
/* The format is supported one way or another; add the EGLConfig */
dri2_conf = dri2_add_config(disp, dri2_dpy->driver_configs[i],
count + 1, EGL_WINDOW_BIT, NULL, NULL, NULL);
EGL_WINDOW_BIT, NULL, NULL, NULL);
if (!dri2_conf)
continue;
if (dri2_conf->base.ConfigID == count + 1)
count++;
format_count[idx]++;
if (conversion && format_count[idx] == 1) {

View file

@ -779,7 +779,6 @@ dri2_x11_add_configs_for_visuals(struct dri2_egl_display *dri2_dpy,
{
xcb_depth_iterator_t d;
xcb_visualtype_t *visuals;
int config_count = 0;
EGLint surface_type;
d = xcb_screen_allowed_depths_iterator(dri2_dpy->screen);
@ -803,7 +802,6 @@ dri2_x11_add_configs_for_visuals(struct dri2_egl_display *dri2_dpy,
class_added[visuals[i]._class] = EGL_TRUE;
for (int j = 0; dri2_dpy->driver_configs[j]; j++) {
struct dri2_egl_config *dri2_conf;
const __DRIconfig *config = dri2_dpy->driver_configs[j];
const EGLint config_attrs[] = {
@ -828,12 +826,8 @@ dri2_x11_add_configs_for_visuals(struct dri2_egl_display *dri2_dpy,
0,
};
dri2_conf =
dri2_add_config(disp, config, config_count + 1, surface_type,
config_attrs, rgba_shifts, rgba_sizes);
if (dri2_conf)
if (dri2_conf->base.ConfigID == config_count + 1)
config_count++;
dri2_add_config(disp, config, surface_type, config_attrs,
rgba_shifts, rgba_sizes);
/* Allow a 24-bit RGB visual to match a 32-bit RGBA EGLConfig.
* Ditto for 30-bit RGB visuals to match a 32-bit RGBA EGLConfig.
@ -849,12 +843,8 @@ dri2_x11_add_configs_for_visuals(struct dri2_egl_display *dri2_dpy,
visuals[i].blue_mask);
rgba_shifts[3] = ffs(rgba_mask) - 1;
rgba_sizes[3] = util_bitcount(rgba_mask);
dri2_conf =
dri2_add_config(disp, config, config_count + 1, surface_type,
config_attrs, rgba_shifts, rgba_sizes);
if (dri2_conf)
if (dri2_conf->base.ConfigID == config_count + 1)
config_count++;
dri2_add_config(disp, config, surface_type, config_attrs,
rgba_shifts, rgba_sizes);
}
}
}