libweston: Add a new helper to check if the view spawns the entire

output

Helpful to determine if the view can go through the scanout or not.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
dev
Marius Vlad 5 years ago committed by Daniel Stone
parent 5f6bee49ed
commit 47e3d1e481
  1. 7
      libweston/backend-drm/state-propose.c
  2. 23
      libweston/compositor.c
  3. 3
      libweston/libweston-internal.h

@ -381,7 +381,6 @@ drm_output_prepare_scanout_view(struct drm_output_state *output_state,
struct drm_plane *scanout_plane = output->scanout_plane;
struct drm_plane_state *state;
struct drm_fb *fb;
pixman_box32_t *extents;
assert(!b->sprites_are_broken);
assert(b->atomic_modeset);
@ -389,11 +388,7 @@ drm_output_prepare_scanout_view(struct drm_output_state *output_state,
/* Check the view spans exactly the output size, calculated in the
* logical co-ordinate space. */
extents = pixman_region32_extents(&ev->transform.boundingbox);
if (extents->x1 != output->base.x ||
extents->y1 != output->base.y ||
extents->x2 != output->base.x + output->base.width ||
extents->y2 != output->base.y + output->base.height)
if (!weston_view_matches_output_entirely(ev, &output->base))
return NULL;
/* If the surface buffer has an in-fence fd, but the plane doesn't

@ -1864,6 +1864,29 @@ weston_view_has_valid_buffer(struct weston_view *ev)
return ev->surface->buffer_ref.buffer != NULL;
}
/** Check if the view matches the entire output
*
* @param ev The view to check.
* @param output The output to check against.
*
* Returns true if the view does indeed matches the entire output.
*/
WL_EXPORT bool
weston_view_matches_output_entirely(struct weston_view *ev,
struct weston_output *output)
{
pixman_box32_t *extents =
pixman_region32_extents(&ev->transform.boundingbox);
if (extents->x1 != output->x ||
extents->y1 != output->y ||
extents->x2 != output->x + output->width ||
extents->y2 != output->y + output->height)
return false;
return true;
}
/* Check if a surface has a view assigned to it
*
* The indicator is set manually when mapping

@ -290,6 +290,9 @@ weston_view_is_opaque(struct weston_view *ev, pixman_region32_t *region);
bool
weston_view_has_valid_buffer(struct weston_view *ev);
bool
weston_view_matches_output_entirely(struct weston_view *ev,
struct weston_output *output);
void
weston_view_move_to_plane(struct weston_view *view,
struct weston_plane *plane);

Loading…
Cancel
Save