Why is this patch marked as rejected in patchwork? Something like this seems 
required for a Wayland compositor to use the HW cursor with rotated 
primary/overlay planes.


On 3/10/21 15:50, Simon Ser wrote:
> The commit 1347385fe187 ("drm/amd/display: don't expose rotation
> prop for cursor plane") removed the rotation property for the
> cursor plane, assuming the cursor would always be displayed without
> any rotation. However the rotation is inherited from the underlying
> plane.
> 
> As a result, if the primary plane is rotated, then the cursor plane
> will incorrectly be rotated as well even though it doesn't have a
> rotation property.
> 
> To fix this, re-introduce the cursor rotation property, and check
> that its value matches the underlying plane's.
> 
> Signed-off-by: Simon Ser <[email protected]>
> Cc: Alex Deucher <[email protected]>
> Cc: Harry Wentland <[email protected]>
> Cc: Nicholas Kazlauskas <[email protected]>
> ---
>  drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c 
> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index b4f6e2985b8a..36ee52104007 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -6897,8 +6897,7 @@ static int amdgpu_dm_plane_init(struct 
> amdgpu_display_manager *dm,
>               DRM_MODE_ROTATE_0 | DRM_MODE_ROTATE_90 |
>               DRM_MODE_ROTATE_180 | DRM_MODE_ROTATE_270;
>  
> -     if (dm->adev->asic_type >= CHIP_BONAIRE &&
> -         plane->type != DRM_PLANE_TYPE_CURSOR)
> +     if (dm->adev->asic_type >= CHIP_BONAIRE)
>               drm_plane_create_rotation_property(plane, DRM_MODE_ROTATE_0,
>                                                  supported_rotations);
>  
> @@ -9494,6 +9493,11 @@ static int dm_check_crtc_cursor(struct 
> drm_atomic_state *state,
>               return -EINVAL;
>       }
>  
> +     if (new_underlying_state->rotation != new_cursor_state->rotation) {
> +             drm_dbg_atomic(crtc->dev, "Cursor plane rotation doesn't match 
> underlying plane\n");
> +             return -EINVAL;
> +     }
> +
>       /* In theory we could probably support YUV cursors when the underlying
>        * plane uses a YUV format, but there's no use-case for it yet. */
>       if (new_underlying_state->fb->format->is_yuv) {


-- 
Earthling Michel Dänzer            |                  https://redhat.com
Libre software enthusiast          |         Mesa and Xwayland developer

Reply via email to