mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-27 22:51:31 +00:00
drm/amd/display: Multiplane cursor position incorrect when plane rotated
[Why] When video plane is rotate the cursor position is incorrect and not matching the desktop location. [How] When a plane is rotated 90 or 270 degrees, the src_rect.width and height should be swapped when determining the scaling factor compared to the dst_rect. Signed-off-by: Aric Cyr <aric.cyr@amd.com> Reviewed-by: Jun Lei <Jun.Lei@amd.com> Acked-by: Bindu Ramamurthy <bindu.r@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
962f2f1ae2
commit
d9b20b45ec
1 changed files with 11 additions and 4 deletions
|
@ -3245,10 +3245,17 @@ void dcn10_set_cursor_position(struct pipe_ctx *pipe_ctx)
|
|||
* about the actual size being incorrect, that's a limitation of
|
||||
* the hardware.
|
||||
*/
|
||||
x_pos = (x_pos - x_plane) * pipe_ctx->plane_state->src_rect.width /
|
||||
pipe_ctx->plane_state->dst_rect.width;
|
||||
y_pos = (y_pos - y_plane) * pipe_ctx->plane_state->src_rect.height /
|
||||
pipe_ctx->plane_state->dst_rect.height;
|
||||
if (param.rotation == ROTATION_ANGLE_90 || param.rotation == ROTATION_ANGLE_270) {
|
||||
x_pos = (x_pos - x_plane) * pipe_ctx->plane_state->src_rect.height /
|
||||
pipe_ctx->plane_state->dst_rect.width;
|
||||
y_pos = (y_pos - y_plane) * pipe_ctx->plane_state->src_rect.width /
|
||||
pipe_ctx->plane_state->dst_rect.height;
|
||||
} else {
|
||||
x_pos = (x_pos - x_plane) * pipe_ctx->plane_state->src_rect.width /
|
||||
pipe_ctx->plane_state->dst_rect.width;
|
||||
y_pos = (y_pos - y_plane) * pipe_ctx->plane_state->src_rect.height /
|
||||
pipe_ctx->plane_state->dst_rect.height;
|
||||
}
|
||||
|
||||
/**
|
||||
* If the cursor's source viewport is clipped then we need to
|
||||
|
|
Loading…
Reference in a new issue