From 630fda2492f3c2e0d66c60e3543a9bd4350ac37b Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Wed, 9 Aug 2023 11:48:30 +0100 Subject: [PATCH] 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: --- src/egl/drivers/dri2/egl_dri2.c | 14 +++++--------- src/egl/drivers/dri2/egl_dri2.h | 2 +- src/egl/drivers/dri2/platform_android.c | 8 ++------ src/egl/drivers/dri2/platform_drm.c | 10 +++------- src/egl/drivers/dri2/platform_wayland.c | 5 +---- src/egl/drivers/dri2/platform_x11.c | 18 ++++-------------- 6 files changed, 16 insertions(+), 41 deletions(-) diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 0146f8e0a51..31650b150bf 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -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]++; - } } } diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h index 33fc32def88..76202772e5b 100644 --- a/src/egl/drivers/dri2/egl_dri2.h +++ b/src/egl/drivers/dri2/egl_dri2.h @@ -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); diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c index 9b3592e95e5..c1e305b1f0e 100644 --- a/src/egl/drivers/dri2/platform_android.c +++ b/src/egl/drivers/dri2/platform_android.c @@ -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; diff --git a/src/egl/drivers/dri2/platform_drm.c b/src/egl/drivers/dri2/platform_drm.c index 9923fbaa02d..3853076db3f 100644 --- a/src/egl/drivers/dri2/platform_drm.c +++ b/src/egl/drivers/dri2/platform_drm.c @@ -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++; - } } } diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index 72d14674212..72030eb6484 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -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) { diff --git a/src/egl/drivers/dri2/platform_x11.c b/src/egl/drivers/dri2/platform_x11.c index dbd32cf174a..ac6d310edd4 100644 --- a/src/egl/drivers/dri2/platform_x11.c +++ b/src/egl/drivers/dri2/platform_x11.c @@ -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); } } }