[PATCH weston 1/8] compositor: gather buffer_transform and _scale into a struct

Jason Ekstrand jason at jlekstrand.net
Thu Nov 28 06:40:11 PST 2013


This one is a nice cleanup.
--Jason Ekstrand

Kristian,
I would recommend pushing the first three right away as they will help with
removing weston_view.width/height.
--Jason Ekstrand

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
On Nov 26, 2013 11:20 AM, "Jonny Lamb" <jonny.lamb at collabora.co.uk> wrote:

> From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
>
> Gather the variables affecting the coordinate transformations between
> buffer and local coordinates into a new struct weston_buffer_viewport.
>
> This will be more useful later, when the crop & scale extension is
> implemented.
> ---
>  src/compositor-drm.c  | 11 ++++++-----
>  src/compositor.c      | 42 ++++++++++++++++++------------------------
>  src/compositor.h      | 19 +++++++++++--------
>  src/gl-renderer.c     |  2 +-
>  src/pixman-renderer.c | 10 +++++-----
>  src/shell.c           |  6 +++---
>  6 files changed, 44 insertions(+), 46 deletions(-)
>
> diff --git a/src/compositor-drm.c b/src/compositor-drm.c
> index a1d9d59..c34fc1c 100644
> --- a/src/compositor-drm.c
> +++ b/src/compositor-drm.c
> @@ -463,7 +463,7 @@ drm_output_prepare_scanout_view(struct weston_output
> *_output,
>             buffer == NULL || c->gbm == NULL ||
>             buffer->width != output->base.current_mode->width ||
>             buffer->height != output->base.current_mode->height ||
> -           output->base.transform != ev->surface->buffer_transform ||
> +           output->base.transform !=
> ev->surface->buffer_viewport.transform ||
>             ev->transform.enabled)
>                 return NULL;
>
> @@ -818,10 +818,10 @@ drm_output_prepare_overlay_view(struct weston_output
> *output_base,
>         if (c->gbm == NULL)
>                 return NULL;
>
> -       if (ev->surface->buffer_transform != output_base->transform)
> +       if (ev->surface->buffer_viewport.transform !=
> output_base->transform)
>                 return NULL;
>
> -       if (ev->surface->buffer_scale != output_base->current_scale)
> +       if (ev->surface->buffer_viewport.scale !=
> output_base->current_scale)
>                 return NULL;
>
>         if (c->sprites_are_broken)
> @@ -931,8 +931,9 @@ drm_output_prepare_overlay_view(struct weston_output
> *output_base,
>
>         tbox =
> weston_transformed_rect(wl_fixed_from_int(ev->geometry.width),
>
>  wl_fixed_from_int(ev->geometry.height),
> -                                      ev->surface->buffer_transform,
> -                                      ev->surface->buffer_scale, tbox);
> +
>  ev->surface->buffer_viewport.transform,
> +                                      ev->surface->buffer_viewport.scale,
> +                                      tbox);
>
>         s->src_x = tbox.x1 << 8;
>         s->src_y = tbox.y1 << 8;
> diff --git a/src/compositor.c b/src/compositor.c
> index cfcb273..b6f2966 100644
> --- a/src/compositor.c
> +++ b/src/compositor.c
> @@ -400,10 +400,9 @@ weston_surface_create(struct weston_compositor
> *compositor)
>         surface->compositor = compositor;
>         surface->ref_count = 1;
>
> -       surface->buffer_transform = WL_OUTPUT_TRANSFORM_NORMAL;
> -       surface->buffer_scale = 1;
> -       surface->pending.buffer_transform = surface->buffer_transform;
> -       surface->pending.buffer_scale = surface->buffer_scale;
> +       surface->buffer_viewport.transform = WL_OUTPUT_TRANSFORM_NORMAL;
> +       surface->buffer_viewport.scale = 1;
> +       surface->pending.buffer_viewport = surface->buffer_viewport;
>         surface->output = NULL;
>         surface->pending.newly_attached = 0;
>
> @@ -639,8 +638,8 @@ weston_surface_to_buffer_float(struct weston_surface
> *surface,
>  {
>         weston_transformed_coord(surface->width,
>                                  surface->height,
> -                                surface->buffer_transform,
> -                                surface->buffer_scale,
> +                                surface->buffer_viewport.transform,
> +                                surface->buffer_viewport.scale,
>                                  sx, sy, bx, by);
>  }
>
> @@ -652,8 +651,8 @@ weston_surface_to_buffer(struct weston_surface
> *surface,
>
>         weston_transformed_coord(surface->width,
>                                  surface->height,
> -                                surface->buffer_transform,
> -                                surface->buffer_scale,
> +                                surface->buffer_viewport.transform,
> +                                surface->buffer_viewport.scale,
>                                  sx, sy, &bxf, &byf);
>         *bx = floorf(bxf);
>         *by = floorf(byf);
> @@ -665,8 +664,8 @@ weston_surface_to_buffer_rect(struct weston_surface
> *surface,
>  {
>         return weston_transformed_rect(surface->width,
>                                        surface->height,
> -                                      surface->buffer_transform,
> -                                      surface->buffer_scale,
> +                                      surface->buffer_viewport.transform,
> +                                      surface->buffer_viewport.scale,
>                                        rect);
>  }
>
> @@ -1146,7 +1145,7 @@ WL_EXPORT int32_t
>  weston_surface_buffer_width(struct weston_surface *surface)
>  {
>         int32_t width;
> -       switch (surface->buffer_transform) {
> +       switch (surface->buffer_viewport.transform) {
>         case WL_OUTPUT_TRANSFORM_90:
>         case WL_OUTPUT_TRANSFORM_270:
>         case WL_OUTPUT_TRANSFORM_FLIPPED_90:
> @@ -1157,14 +1156,14 @@ weston_surface_buffer_width(struct weston_surface
> *surface)
>                 width = surface->buffer_ref.buffer->width;
>                  break;
>         }
> -       return width / surface->buffer_scale;
> +       return width / surface->buffer_viewport.scale;
>  }
>
>  WL_EXPORT int32_t
>  weston_surface_buffer_height(struct weston_surface *surface)
>  {
>         int32_t height;
> -       switch (surface->buffer_transform) {
> +       switch (surface->buffer_viewport.transform) {
>         case WL_OUTPUT_TRANSFORM_90:
>         case WL_OUTPUT_TRANSFORM_270:
>         case WL_OUTPUT_TRANSFORM_FLIPPED_90:
> @@ -1175,7 +1174,7 @@ weston_surface_buffer_height(struct weston_surface
> *surface)
>                 height = surface->buffer_ref.buffer->height;
>                  break;
>         }
> -       return height / surface->buffer_scale;
> +       return height / surface->buffer_viewport.scale;
>  }
>
>  WL_EXPORT uint32_t
> @@ -1964,10 +1963,8 @@ weston_surface_commit(struct weston_surface
> *surface)
>         pixman_region32_t opaque;
>
>         /* wl_surface.set_buffer_transform */
> -       surface->buffer_transform = surface->pending.buffer_transform;
> -
>         /* wl_surface.set_buffer_scale */
> -       surface->buffer_scale = surface->pending.buffer_scale;
> +       surface->buffer_viewport = surface->pending.buffer_viewport;
>
>         /* wl_surface.attach */
>         if (surface->pending.buffer || surface->pending.newly_attached)
> @@ -2067,7 +2064,7 @@ surface_set_buffer_transform(struct wl_client
> *client,
>  {
>         struct weston_surface *surface =
> wl_resource_get_user_data(resource);
>
> -       surface->pending.buffer_transform = transform;
> +       surface->pending.buffer_viewport.transform = transform;
>  }
>
>  static void
> @@ -2077,7 +2074,7 @@ surface_set_buffer_scale(struct wl_client *client,
>  {
>         struct weston_surface *surface =
> wl_resource_get_user_data(resource);
>
> -       surface->pending.buffer_scale = scale;
> +       surface->pending.buffer_viewport.scale = scale;
>  }
>
>  static const struct wl_surface_interface surface_interface = {
> @@ -2198,10 +2195,8 @@ weston_subsurface_commit_from_cache(struct
> weston_subsurface *sub)
>         pixman_region32_t opaque;
>
>         /* wl_surface.set_buffer_transform */
> -       surface->buffer_transform = sub->cached.buffer_transform;
> -
>         /* wl_surface.set_buffer_scale */
> -       surface->buffer_scale = sub->cached.buffer_scale;
> +       surface->buffer_viewport = sub->cached.buffer_viewport;
>
>         /* wl_surface.attach */
>         if (sub->cached.buffer_ref.buffer || sub->cached.newly_attached)
> @@ -2294,8 +2289,7 @@ weston_subsurface_commit_to_cache(struct
> weston_subsurface *sub)
>         surface->pending.sy = 0;
>         surface->pending.newly_attached = 0;
>
> -       sub->cached.buffer_transform = surface->pending.buffer_transform;
> -       sub->cached.buffer_scale = surface->pending.buffer_scale;
> +       sub->cached.buffer_viewport = surface->pending.buffer_viewport;
>
>         pixman_region32_copy(&sub->cached.opaque,
> &surface->pending.opaque);
>
> diff --git a/src/compositor.h b/src/compositor.h
> index 8c19619..e445dc3 100644
> --- a/src/compositor.h
> +++ b/src/compositor.h
> @@ -647,6 +647,14 @@ struct weston_buffer_reference {
>         struct wl_listener destroy_listener;
>  };
>
> +struct weston_buffer_viewport {
> +       /* wl_surface.set_buffer_transform */
> +       uint32_t transform;
> +
> +       /* wl_surface.set_scaling_factor */
> +       int32_t scale;
> +};
> +
>  struct weston_region {
>         struct wl_resource *resource;
>         pixman_region32_t region;
> @@ -693,10 +701,8 @@ struct weston_subsurface {
>                 struct wl_list frame_callback_list;
>
>                 /* wl_surface.set_buffer_transform */
> -               uint32_t buffer_transform;
> -
>                 /* wl_surface.set_buffer_scale */
> -               int32_t buffer_scale;
> +               struct weston_buffer_viewport buffer_viewport;
>         } cached;
>
>         int synchronized;
> @@ -835,8 +841,7 @@ struct weston_surface {
>         struct wl_list frame_callback_list;
>
>         struct weston_buffer_reference buffer_ref;
> -       uint32_t buffer_transform;
> -       int32_t buffer_scale;
> +       struct weston_buffer_viewport buffer_viewport;
>         int keep_buffer; /* bool for backends to prevent early release */
>
>         /* All the pending state, that wl_surface.commit will apply. */
> @@ -861,10 +866,8 @@ struct weston_surface {
>                 struct wl_list frame_callback_list;
>
>                 /* wl_surface.set_buffer_transform */
> -               uint32_t buffer_transform;
> -
>                 /* wl_surface.set_scaling_factor */
> -               int32_t buffer_scale;
> +               struct weston_buffer_viewport buffer_viewport;
>         } pending;
>
>         /*
> diff --git a/src/gl-renderer.c b/src/gl-renderer.c
> index 218fca4..799fba1 100644
> --- a/src/gl-renderer.c
> +++ b/src/gl-renderer.c
> @@ -536,7 +536,7 @@ draw_view(struct weston_view *ev, struct weston_output
> *output,
>         shader_uniforms(gs->shader, ev, output);
>
>         if (ev->transform.enabled || output->zoom.active ||
> -           output->current_scale != ev->surface->buffer_scale)
> +           output->current_scale != ev->surface->buffer_viewport.scale)
>                 filter = GL_LINEAR;
>         else
>                 filter = GL_NEAREST;
> diff --git a/src/pixman-renderer.c b/src/pixman-renderer.c
> index b719829..5961965 100644
> --- a/src/pixman-renderer.c
> +++ b/src/pixman-renderer.c
> @@ -260,7 +260,7 @@ repaint_region(struct weston_view *ev, struct
> weston_output *output,
>         fw = pixman_int_to_fixed(ev->geometry.width);
>         fh = pixman_int_to_fixed(ev->geometry.height);
>
> -       switch (ev->surface->buffer_transform) {
> +       switch (ev->surface->buffer_viewport.transform) {
>         case WL_OUTPUT_TRANSFORM_FLIPPED:
>         case WL_OUTPUT_TRANSFORM_FLIPPED_90:
>         case WL_OUTPUT_TRANSFORM_FLIPPED_180:
> @@ -272,7 +272,7 @@ repaint_region(struct weston_view *ev, struct
> weston_output *output,
>                 break;
>         }
>
> -       switch (ev->surface->buffer_transform) {
> +       switch (ev->surface->buffer_viewport.transform) {
>         default:
>         case WL_OUTPUT_TRANSFORM_NORMAL:
>         case WL_OUTPUT_TRANSFORM_FLIPPED:
> @@ -295,12 +295,12 @@ repaint_region(struct weston_view *ev, struct
> weston_output *output,
>         }
>
>         pixman_transform_scale(&transform, NULL,
> -                              pixman_double_to_fixed
> ((double)ev->surface->buffer_scale),
> -                              pixman_double_to_fixed
> ((double)ev->surface->buffer_scale));
> +                              pixman_double_to_fixed
> ((double)ev->surface->buffer_viewport.scale),
> +                              pixman_double_to_fixed
> ((double)ev->surface->buffer_viewport.scale));
>
>         pixman_image_set_transform(ps->image, &transform);
>
> -       if (ev->transform.enabled || output->current_scale !=
> ev->surface->buffer_scale)
> +       if (ev->transform.enabled || output->current_scale !=
> ev->surface->buffer_viewport.scale)
>                 pixman_image_set_filter(ps->image, PIXMAN_FILTER_BILINEAR,
> NULL, 0);
>         else
>                 pixman_image_set_filter(ps->image, PIXMAN_FILTER_NEAREST,
> NULL, 0);
> diff --git a/src/shell.c b/src/shell.c
> index f102e9a..5227cbe 100644
> --- a/src/shell.c
> +++ b/src/shell.c
> @@ -2330,11 +2330,11 @@ shell_configure_fullscreen(struct shell_surface
> *shsurf)
>         case WL_SHELL_SURFACE_FULLSCREEN_METHOD_DRIVER:
>                 if (shell_surface_is_top_fullscreen(shsurf)) {
>                         struct weston_mode mode = {0,
> -                               surf_width * surface->buffer_scale,
> -                               surf_height * surface->buffer_scale,
> +                               surf_width *
> surface->buffer_viewport.scale,
> +                               surf_height *
> surface->buffer_viewport.scale,
>                                 shsurf->fullscreen.framerate};
>
> -                       if (weston_output_switch_mode(output, &mode,
> surface->buffer_scale,
> +                       if (weston_output_switch_mode(output, &mode,
> surface->buffer_viewport.scale,
>                                         WESTON_MODE_SWITCH_SET_TEMPORARY)
> == 0) {
>                                 weston_view_set_position(shsurf->view,
>                                                          output->x -
> surf_x,
> --
> 1.8.4.2
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20131128/431f3a35/attachment-0001.html>


More information about the wayland-devel mailing list