[PATCH v17 13/14] compositor-drm: Relax plane restrictions for atomic

Pekka Paalanen ppaalanen at gmail.com
Tue Jul 10 11:42:48 UTC 2018


On Mon,  9 Jul 2018 14:23:19 +0100
Daniel Stone <daniels at 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 <daniels at collabora.com>
> Tested-by: Emre Ucan <eucan at de.adit-jv.com>
> ---
>  libweston/compositor-drm.c | 21 +++++++++++++--------
>  1 file changed, 13 insertions(+), 8 deletions(-)

Reviewed-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>


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;
>  		}

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20180710/75de0e13/attachment-0001.sig>


More information about the wayland-devel mailing list