On Wed, 20 Dec 2017 12:26:55 +0000
Daniel Stone <dani...@collabora.com> wrote:

> Since we now incrementally test atomic state as we build it, we can
> loosen restrictions on what we can do with planes, and let the kernel
> tell us whether or not it's OK.
> 
> Signed-off-by: Daniel Stone <dani...@collabora.com>
> ---
>  libweston/compositor-drm.c | 18 +++++++++---------
>  1 file changed, 9 insertions(+), 9 deletions(-)
> 
> diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c
> index 340e27cb5..be5aab4e4 100644
> --- a/libweston/compositor-drm.c
> +++ b/libweston/compositor-drm.c
> @@ -1779,6 +1779,7 @@ drm_output_prepare_scanout_view(struct drm_output_state 
> *output_state,
>                               enum drm_output_propose_state_mode mode)
>  {
>       struct drm_output *output = output_state->output;
> +     struct drm_backend *b = to_drm_backend(output->base.compositor);
>       struct drm_plane *scanout_plane = output->scanout_plane;
>       struct drm_plane_state *state;
>       struct drm_plane_state *state_old = NULL;
> @@ -1790,7 +1791,7 @@ drm_output_prepare_scanout_view(struct drm_output_state 
> *output_state,
>               return NULL;
>  
>       /* Can't change formats with just a pageflip */
> -     if (fb->format->format != output->gbm_format) {
> +     if (!b->atomic_modeset && fb->format->format != output->gbm_format) {
>               drm_fb_unref(fb);
>               return NULL;
>       }
> @@ -1818,12 +1819,10 @@ drm_output_prepare_scanout_view(struct 
> drm_output_state *output_state,
>       drm_plane_state_coords_for_view(state, ev);
>  
>       /* The legacy API does not let us perform cropping or scaling. */
> -     if (state->src_x != 0 || state->src_y != 0 ||
> -         state->src_w != state->dest_w << 16 ||
> -         state->src_h != state->dest_h << 16 ||
> -         state->dest_x != 0 || state->dest_y != 0 ||
> -         state->dest_w != (unsigned) output->base.current_mode->width ||
> -         state->dest_h != (unsigned) output->base.current_mode->height)
> +     if (!b->atomic_modeset &&
> +         (state->src_x != 0 || state->src_y != 0 ||
> +          state->src_w != state->dest_w << 16 ||
> +          state->src_h != state->dest_h << 16))

Where did the mode size checks go?

>               goto err;
>  
>       if (mode == DRM_OUTPUT_PROPOSE_STATE_PLANES_ONLY) {
> @@ -2895,8 +2894,9 @@ drm_output_prepare_overlay_view(struct drm_output_state 
> *output_state,
>               state->ev = ev;
>               state->output = output;
>               drm_plane_state_coords_for_view(state, ev);
> -             if (state->src_w != state->dest_w << 16 ||
> -                 state->src_h != state->dest_h << 16) {
> +             if (!b->atomic_modeset &&
> +                 (state->src_w != state->dest_w << 16 ||
> +                  state->src_h != state->dest_h << 16)) {
>                       drm_plane_state_put_back(state);
>                       continue;
>               }

Otherwise seems fine.


Thanks,
pq

Attachment: pgpdMz40sYj05.pgp
Description: OpenPGP digital signature

_______________________________________________
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to