[PATCH weston 4/7] compositor-drm: Delay egl initialization until all outputs are created

John Kåre Alsaker john.kare.alsaker at gmail.com
Tue Jan 22 08:52:46 PST 2013


What's the reason for this change and where is EGL initialized for
outputs created on the fly?

On Tue, Jan 22, 2013 at 5:07 PM, Ander Conselvan de Oliveira
<ander.conselvan.de.oliveira at intel.com> wrote:
> ---
>  src/compositor-drm.c |   30 ++++++++++++++++++------------
>  1 file changed, 18 insertions(+), 12 deletions(-)
>
> diff --git a/src/compositor-drm.c b/src/compositor-drm.c
> index 449106e..0f455ba 100644
> --- a/src/compositor-drm.c
> +++ b/src/compositor-drm.c
> @@ -1047,8 +1047,13 @@ init_drm(struct drm_compositor *ec, struct udev_device *device)
>  }
>
>  static int
> +drm_output_init_egl(struct drm_output *output, struct drm_compositor *ec);
> +
> +static int
>  init_egl(struct drm_compositor *ec)
>  {
> +       struct drm_output *output;
> +
>         ec->gbm = gbm_create_device(ec->drm.fd);
>
>         if (gl_renderer_create(&ec->base, ec->gbm, gl_renderer_opaque_attribs,
> @@ -1057,6 +1062,14 @@ init_egl(struct drm_compositor *ec)
>                 return -1;
>         }
>
> +       wl_list_for_each(output, &ec->base.output_list, base.link)
> +               if (drm_output_init_egl(output, ec) < 0) {
> +                       weston_log("Failed to init egl state for output %s\n",
> +                                  output->name);
> +                       weston_output_destroy(&output->base);
> +                       wl_list_remove(&output->base.link);
> +               }
> +
>         return 0;
>  }
>
> @@ -1421,11 +1434,6 @@ create_output_for_connector(struct drm_compositor *ec,
>                            connector->mmWidth, connector->mmHeight,
>                            o ? o->transform : WL_OUTPUT_TRANSFORM_NORMAL);
>
> -       if (drm_output_init_egl(output, ec) < 0) {
> -               weston_log("Failed to init output gl state\n");
> -               goto err_output;
> -       }
> -
>         output->backlight = backlight_init(drm_device,
>                                            connector->connector_type);
>         if (output->backlight) {
> @@ -1459,8 +1467,6 @@ create_output_for_connector(struct drm_compositor *ec,
>
>         return 0;
>
> -err_output:
> -       weston_output_destroy(&output->base);
>  err_free:
>         wl_list_for_each_safe(drm_mode, next, &output->base.mode_list,
>                                                         base.link) {
> @@ -2249,11 +2255,6 @@ drm_compositor_create(struct wl_display *display,
>                 goto err_udev_dev;
>         }
>
> -       if (init_egl(ec) < 0) {
> -               weston_log("failed to initialize egl\n");
> -               goto err_udev_dev;
> -       }
> -
>         ec->base.destroy = drm_destroy;
>         ec->base.restore = drm_restore;
>
> @@ -2274,6 +2275,11 @@ drm_compositor_create(struct wl_display *display,
>                 goto err_sprite;
>         }
>
> +       if (init_egl(ec) < 0) {
> +               weston_log("failed to initialize egl\n");
> +               goto err_udev_dev;
> +       }
> +
>         path = NULL;
>
>         evdev_input_create(&ec->base, ec->udev, seat);
> --
> 1.7.10.4
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel


More information about the wayland-devel mailing list