[Mesa-dev] [PATCH 2/7] egl/drm: introduce drm_add_configs_for_visuals() helper
Eric Engestrom
eric at engestrom.ch
Thu Aug 25 21:33:09 UTC 2016
On Thu, Aug 25, 2016 at 05:23:41PM +0100, Emil Velikov wrote:
> From: Emil Velikov <emil.velikov at collabora.com>
>
> Factor out and rework the existing code so that it prints a debug
> message if we have zero configs for any visual.
>
> As a nice side effect we now provide a correct (sequential ID) when
> creating a config (via dri2_add_config).
>
> Signed-off-by: Emil Velikov <emil.velikov at collabora.com>
> ---
> src/egl/drivers/dri2/platform_drm.c | 89 +++++++++++++++++++++++++------------
> 1 file changed, 61 insertions(+), 28 deletions(-)
>
> diff --git a/src/egl/drivers/dri2/platform_drm.c b/src/egl/drivers/dri2/platform_drm.c
> index 55dddd7..aa9a186 100644
> --- a/src/egl/drivers/dri2/platform_drm.c
> +++ b/src/egl/drivers/dri2/platform_drm.c
> @@ -575,6 +575,64 @@ swrast_get_image(__DRIdrawable *driDrawable,
> gbm_dri_bo_unmap_dumb(bo);
> }
>
> +static EGLBoolean
> +drm_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *disp)
> +{
> + struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
> + static const struct {
> + int format;
> + unsigned int red_mask;
> + unsigned int alpha_mask;
> + } visuals[] = {
> + { GBM_FORMAT_XRGB2101010, 0x3ff00000, 0x00000000 },
> + { GBM_FORMAT_ARGB2101010, 0x3ff00000, 0xc0000000 },
> + { GBM_FORMAT_XRGB8888, 0x00ff0000, 0x00000000 },
> + { GBM_FORMAT_ARGB8888, 0x00ff0000, 0xff000000 },
> + { GBM_FORMAT_RGB565, 0x0000f800, 0x00000000 },
> + };
> + EGLint attr_list[] = {
> + EGL_NATIVE_VISUAL_ID, 0,
> + EGL_NONE,
> + };
> + unsigned int format_count[ARRAY_SIZE(visuals)] = {};
> + unsigned int count, i, j;
> +
> + count = 0;
> + for (i = 0; dri2_dpy->driver_configs[i]; i++) {
> + unsigned int red, alpha;
> +
> + dri2_dpy->core->getConfigAttrib(dri2_dpy->driver_configs[i],
> + __DRI_ATTRIB_RED_MASK, &red);
> + dri2_dpy->core->getConfigAttrib(dri2_dpy->driver_configs[i],
> + __DRI_ATTRIB_ALPHA_MASK, &alpha);
> +
> + for (j = 0; ARRAY_SIZE(visuals); j++) {
j < ARRAY_SIZE(visuals);
> + struct dri2_egl_config *dri2_conf;
> +
> + if (visuals[j].red_mask != red || visuals[j].alpha_mask != alpha)
> + continue;
> +
> + attr_list[1] = visuals[j].format;
> +
> + dri2_conf = dri2_add_config(disp, dri2_dpy->driver_configs[i],
> + count + 1, EGL_WINDOW_BIT, attr_list, NULL);
> + if (dri2_conf) {
> + count++;
> + format_count[j]++;
> + }
> + }
> + }
> +
> + for (i = 0; ARRAY_SIZE(format_count); i++) {
Same here.
The rest looks good, so with that fixed:
Reviewed-by: Eric Engestrom <eric at engestrom.ch>
> + if (!format_count[i]) {
> + _eglLog(_EGL_DEBUG, "No DRI config supports native format 0x%x",
> + visuals[i].format);
> + }
> + }
> +
> + return (count != 0);
> +}
> +
> static struct dri2_egl_display_vtbl dri2_drm_display_vtbl = {
> .authenticate = dri2_drm_authenticate,
> .create_window_surface = dri2_drm_create_window_surface,
> @@ -600,7 +658,6 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp)
> struct dri2_egl_display *dri2_dpy;
> struct gbm_device *gbm;
> int fd = -1;
> - int i;
>
> loader_set_logger(_eglLog);
>
> @@ -663,33 +720,9 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp)
>
> dri2_setup_screen(disp);
>
> - for (i = 0; dri2_dpy->driver_configs[i]; i++) {
> - EGLint format, attr_list[3];
> - unsigned int red, alpha;
> -
> - dri2_dpy->core->getConfigAttrib(dri2_dpy->driver_configs[i],
> - __DRI_ATTRIB_RED_MASK, &red);
> - dri2_dpy->core->getConfigAttrib(dri2_dpy->driver_configs[i],
> - __DRI_ATTRIB_ALPHA_MASK, &alpha);
> - if (red == 0x3ff00000 && alpha == 0x00000000)
> - format = GBM_FORMAT_XRGB2101010;
> - else if (red == 0x3ff00000 && alpha == 0xc0000000)
> - format = GBM_FORMAT_ARGB2101010;
> - else if (red == 0x00ff0000 && alpha == 0x00000000)
> - format = GBM_FORMAT_XRGB8888;
> - else if (red == 0x00ff0000 && alpha == 0xff000000)
> - format = GBM_FORMAT_ARGB8888;
> - else if (red == 0xf800)
> - format = GBM_FORMAT_RGB565;
> - else
> - continue;
> -
> - attr_list[0] = EGL_NATIVE_VISUAL_ID;
> - attr_list[1] = format;
> - attr_list[2] = EGL_NONE;
> -
> - dri2_add_config(disp, dri2_dpy->driver_configs[i],
> - i + 1, EGL_WINDOW_BIT, attr_list, NULL);
> + if (!drm_add_configs_for_visuals(drv, disp)) {
> + _eglError(EGL_NOT_INITIALIZED, "DRI2: failed to add configs");
> + goto cleanup;
> }
>
> disp->Extensions.KHR_image_pixmap = EGL_TRUE;
> --
> 2.9.0
More information about the mesa-dev
mailing list