On Mon, 9 Jul 2018 14:23:19 +0100 Daniel Stone <[email protected]> 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 <[email protected]> > Tested-by: Emre Ucan <[email protected]> > --- > libweston/compositor-drm.c | 21 +++++++++++++-------- > 1 file changed, 13 insertions(+), 8 deletions(-) Reviewed-by: Pekka Paalanen <[email protected]> Thanks, pq > > diff --git a/libweston/compositor-drm.c b/libweston/compositor-drm.c > index 0a3f524f5..b97872aa1 100644 > --- a/libweston/compositor-drm.c > +++ b/libweston/compositor-drm.c > @@ -1942,6 +1942,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; > @@ -1966,7 +1967,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; > } > @@ -1994,15 +1995,18 @@ drm_output_prepare_scanout_view(struct > drm_output_state *output_state, > if (!drm_plane_state_coords_for_view(state, ev)) > goto err; > > - /* 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 || > + if (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) > goto err; > > + /* The legacy API does not let us perform cropping or scaling. */ > + 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)) > + goto err; > + > if (mode == DRM_OUTPUT_PROPOSE_STATE_PLANES_ONLY) { > drm_plane_state_free(state_old, false); > return state; > @@ -3092,8 +3096,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; > }
pgpmfmWV6T4Dq.pgp
Description: OpenPGP digital signature
_______________________________________________ wayland-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/wayland-devel
