mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 06:48:06 +02:00
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:
parent
487016796b
commit
630fda2492
6 changed files with 16 additions and 41 deletions
|
|
@ -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]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue