Re: [PATCH] drm/gud: Merge damage clips in full update mode

From: Thomas Zimmermann

Date: Tue Sep 08 2026 - 02:38:07 EST


Hi

Am 08.09.26 um 01:08 schrieb Sophie D:
When running in full update mode, previously small updates (such as
moving the mouse across the screen) would cause many full frames to be
generated. This would bog down the bus and lower the effective framerate
significantly - I was seeing a drop from 60 FPS to 2 FPS.

This patch fixes the bug by merging damage clips together.

Fixes: 73cfd166e045 ("drm/gud: Replace simple display pipe with DRM atomic helpers")
Cc: <stable@xxxxxxxxxxxxxxx> # 6.18.x
Signed-off-by: Sophie D <patches@xxxxxxxxx>
---
drivers/gpu/drm/gud/gud_pipe.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/gud/gud_pipe.c b/drivers/gpu/drm/gud/gud_pipe.c
index 5ef887d84..20418bf81 100644
--- a/drivers/gpu/drm/gud/gud_pipe.c
+++ b/drivers/gpu/drm/gud/gud_pipe.c
@@ -647,9 +647,14 @@ void gud_plane_atomic_update(struct drm_plane *plane,
if (ret)
goto out;
- drm_atomic_helper_damage_iter_init(&iter, old_state, new_state);
- drm_atomic_for_each_plane_damage(&iter, &damage)
- gud_fb_handle_damage(gdrm, fb, &shadow_plane_state->data[0], &damage);
+ if (gdrm->flags & GUD_DISPLAY_FLAG_FULL_UPDATE) {
+ if (drm_atomic_helper_damage_merged(old_state, new_state, &damage))
+ gud_fb_handle_damage(gdrm, fb, &shadow_plane_state->data[0], &damage);
+ } else {
+ drm_atomic_helper_damage_iter_init(&iter, old_state, new_state);
+ drm_atomic_for_each_plane_damage(&iter, &damage)
+ gud_fb_handle_damage(gdrm, fb, &shadow_plane_state->data[0], &damage);
+ }

Such state needs to be checked much earlier. Please set plane_state->ignore_damage_clips [1] at the end of gud_plane_atomic_check [2] if in full-update mode.  The damage iterator will then do the right thing.

[1] https://elixir.bootlin.com/linux/v7.2.2/source/include/drm/drm_plane.h#L207
[2] https://elixir.bootlin.com/linux/v7.2.2/source/drivers/gpu/drm/gud/gud_pipe.c#L569

Best regards
Thomas

drm_gem_fb_end_cpu_access(fb, DMA_FROM_DEVICE);

--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, (HRB 36809, AG Nürnberg)