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
pgpdMz40sYj05.pgp
Description: OpenPGP digital signature
_______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/wayland-devel