From: Harry Wentland <harry.wentland@amd.com>
To: Louis Li <Ching-shih.Li@amd.com>
Cc: ching-li@amd.com, "Leo Li" <sunpeng.li@amd.com>,
"Alex Deucher" <alexander.deucher@amd.com>,
"Christian König" <christian.koenig@amd.com>,
"David (ChunMing) Zhou" <David1.Zhou@amd.com>,
"David Airlie" <airlied@linux.ie>,
"Daniel Vetter" <daniel@ffwll.ch>,
"Nicholas Kazlauskas" <Nicholas.Kazlauskas@amd.com>,
"Ikshwaku Chauhan" <ikshwaku.chauhan@amd.corp-partner.google.com>,
"Aric Cyr" <aric.cyr@amd.com>, "hersen wu" <hersenxs.wu@amd.com>,
"Stéphane Marchesin" <marcheu@chromium.org>,
amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] drm/amd/display: dual cursors are seen if scaling is enabled
Date: Mon, 29 Mar 2021 13:33:39 -0400 [thread overview]
Message-ID: <bd4ec0cf-eb7b-4323-08f0-43f95ea75d64@amd.com> (raw)
In-Reply-To: <20210329075411.501760-1-Ching-shih.Li@amd.com>
On 2021-03-29 3:54 a.m., Louis Li wrote:
> [Why]
> This issue is found when scaling is not equal to one from src to dest.
> When issue happens, there are offsets in both axis x and y between
> two cursors. Users cannot control APP under such a condition.
>
What's the use case? I don't think we support two cursors on a screen.
Does this pass IGT cursor tests?
Nick, I thought we don't allow cursor on anything but the top, unscaled
pipe.
Harry
> [How]
> For dual cursors, cursor should be disabled if there is a visible pipe
> on top of the current pipe at the current cursor position.
> For offsets between two cursors, need translate cursor position from
> stream space to plane space with scaling into consideration.
>
> Tested-by: Louis Li <Ching-shih.Li@amd.com>
> Signed-off-by: Louis Li <Ching-shih.Li@amd.com>
> Change-Id: Ic19e4f3b9225736f037f5ade10b68e8afe5f9ab7
> ---
> .../amd/display/dc/dcn10/dcn10_hw_sequencer.c | 40 ++++++++++++++-----
> 1 file changed, 30 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
> index 83212ea40077..1ce5e58e3a9e 100644
> --- a/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
> +++ b/drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c
> @@ -2999,6 +2999,10 @@ static bool dcn10_can_pipe_disable_cursor(struct pipe_ctx *pipe_ctx)
> const struct rect *r1 = &pipe_ctx->plane_res.scl_data.recout, *r2;
> int r1_r = r1->x + r1->width, r1_b = r1->y + r1->height, r2_r, r2_b;
>
> + struct dc_cursor_position pos_cpy = pipe_ctx->stream->cursor_position;
> + int cp_x = pos_cpy.x;
> + int cp_y = pos_cpy.y;
> +
> /**
> * Disable the cursor if there's another pipe above this with a
> * plane that contains this pipe's viewport to prevent double cursor
> @@ -3013,7 +3017,8 @@ static bool dcn10_can_pipe_disable_cursor(struct pipe_ctx *pipe_ctx)
> r2_r = r2->x + r2->width;
> r2_b = r2->y + r2->height;
>
> - if (r1->x >= r2->x && r1->y >= r2->y && r1_r <= r2_r && r1_b <= r2_b)
> + if ((cp_x >= r1->x && cp_y >= r1->y && cp_x <= r1_r && cp_y <= r1_b)
> + && (cp_x >= r2->x && cp_y >= r2->y && cp_x <= r2_r && cp_y <= r2_b))
> return true;
> }
>
> @@ -3034,15 +3039,30 @@ static void dcn10_set_cursor_position(struct pipe_ctx *pipe_ctx)
> .rotation = pipe_ctx->plane_state->rotation,
> .mirror = pipe_ctx->plane_state->horizontal_mirror
> };
> - uint32_t x_plane = pipe_ctx->plane_state->dst_rect.x;
> - uint32_t y_plane = pipe_ctx->plane_state->dst_rect.y;
> - uint32_t x_offset = min(x_plane, pos_cpy.x);
> - uint32_t y_offset = min(y_plane, pos_cpy.y);
> -
> - pos_cpy.x -= x_offset;
> - pos_cpy.y -= y_offset;
> - pos_cpy.x_hotspot += (x_plane - x_offset);
> - pos_cpy.y_hotspot += (y_plane - y_offset);
> +
> + int x_plane = pipe_ctx->plane_state->dst_rect.x;
> + int y_plane = pipe_ctx->plane_state->dst_rect.y;
> + int x_pos = pos_cpy.x;
> + int y_pos = pos_cpy.y;
> +
> + // translate cursor from stream space to plane space
> + 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 (x_pos < 0) {
> + pos_cpy.x_hotspot -= x_pos;
> + x_pos = 0;
> + }
> +
> + if (y_pos < 0) {
> + pos_cpy.y_hotspot -= y_pos;
> + y_pos = 0;
> + }
> +
> + pos_cpy.x = (uint32_t)x_pos;
> + pos_cpy.y = (uint32_t)y_pos;
>
> if (pipe_ctx->plane_state->address.type
> == PLN_ADDR_TYPE_VIDEO_PROGRESSIVE)
>
prev parent reply other threads:[~2021-03-29 17:34 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-29 7:54 Louis Li
2021-03-29 17:33 ` Harry Wentland [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=bd4ec0cf-eb7b-4323-08f0-43f95ea75d64@amd.com \
--to=harry.wentland@amd.com \
--cc=Ching-shih.Li@amd.com \
--cc=David1.Zhou@amd.com \
--cc=Nicholas.Kazlauskas@amd.com \
--cc=airlied@linux.ie \
--cc=alexander.deucher@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=aric.cyr@amd.com \
--cc=ching-li@amd.com \
--cc=christian.koenig@amd.com \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=hersenxs.wu@amd.com \
--cc=ikshwaku.chauhan@amd.corp-partner.google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=marcheu@chromium.org \
--cc=sunpeng.li@amd.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®