mirror of
https://github.com/torvalds/linux.git
synced 2026-09-13 06:23:02 +02:00
drm/amd/display: Fix cursor disable with horizontally split planes
[WHY] resource_can_pipe_disable_cursor() disables the hardware cursor on a pipe when a higher layer fully covers that pipe's recout, to avoid double-cursor and scaling artifacts. When merging pipe-split halves of the same overlay layer, the inner loop walks every pipe above the current one and looks for siblings sharing test_pipe's layer_index. Because test_pipe itself satisfies that condition, it can be treated as its own split partner. That incorrectly doubles r2.width and makes the covering check succeed even when the overlay does not fully contain the underlying pipe. On horizontally split or multi-quadrant layouts this causes the cursor to disappear over overlay regions while input/coordinate mapping remains correct. [HOW] Skip test_pipe when searching for a pipe-split sibling on the same layer, so only the other half of the split plane is merged into r2. Signed-off-by: Yuling Li <yulingli@amd.com> Reviewed-by: Leo Li <sunpeng.li@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> (cherry picked from commit 85ccd2c39cca9351d4db393e24acea8bf943d350)
This commit is contained in:
parent
8b4a4193f3
commit
6293f2e143
|
|
@ -1797,7 +1797,11 @@ bool resource_can_pipe_disable_cursor(struct pipe_ctx *pipe_ctx)
|
|||
* pipe-split, merge together per same height.
|
||||
*/
|
||||
for (split_pipe = pipe_ctx->top_pipe; split_pipe;
|
||||
split_pipe = split_pipe->top_pipe)
|
||||
split_pipe = split_pipe->top_pipe) {
|
||||
|
||||
if (split_pipe == test_pipe)
|
||||
continue;
|
||||
|
||||
if (split_pipe->plane_state->layer_index == test_pipe->plane_state->layer_index) {
|
||||
struct rect r2_half;
|
||||
|
||||
|
|
@ -1809,6 +1813,7 @@ bool resource_can_pipe_disable_cursor(struct pipe_ctx *pipe_ctx)
|
|||
r2_bottom = min(r2_bottom, r2_half.y + r2_half.height);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (r1.x >= r2.x && r1.y >= r2.y && r1_right <= r2_right && r1_bottom <= r2_bottom)
|
||||
return true;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user