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>
This commit is contained in:
parent
5f6bee49ed
commit
47e3d1e481
@ -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 *scanout_plane = output->scanout_plane;
|
||||||
struct drm_plane_state *state;
|
struct drm_plane_state *state;
|
||||||
struct drm_fb *fb;
|
struct drm_fb *fb;
|
||||||
pixman_box32_t *extents;
|
|
||||||
|
|
||||||
assert(!b->sprites_are_broken);
|
assert(!b->sprites_are_broken);
|
||||||
assert(b->atomic_modeset);
|
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
|
/* Check the view spans exactly the output size, calculated in the
|
||||||
* logical co-ordinate space. */
|
* logical co-ordinate space. */
|
||||||
extents = pixman_region32_extents(&ev->transform.boundingbox);
|
if (!weston_view_matches_output_entirely(ev, &output->base))
|
||||||
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)
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
/* If the surface buffer has an in-fence fd, but the plane doesn't
|
/* 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;
|
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
|
/* Check if a surface has a view assigned to it
|
||||||
*
|
*
|
||||||
* The indicator is set manually when mapping
|
* The indicator is set manually when mapping
|
||||||
|
@ -290,6 +290,9 @@ weston_view_is_opaque(struct weston_view *ev, pixman_region32_t *region);
|
|||||||
bool
|
bool
|
||||||
weston_view_has_valid_buffer(struct weston_view *ev);
|
weston_view_has_valid_buffer(struct weston_view *ev);
|
||||||
|
|
||||||
|
bool
|
||||||
|
weston_view_matches_output_entirely(struct weston_view *ev,
|
||||||
|
struct weston_output *output);
|
||||||
void
|
void
|
||||||
weston_view_move_to_plane(struct weston_view *view,
|
weston_view_move_to_plane(struct weston_view *view,
|
||||||
struct weston_plane *plane);
|
struct weston_plane *plane);
|
||||||
|
Loading…
Reference in New Issue
Block a user