struct drm_framebuffer *fb = plane_state->fb;
        struct drm_device *dev = plane->dev;
        struct simpledrm_device *sdev = simpledrm_device_of_dev(dev);
-       struct iosys_map dst = IOSYS_MAP_INIT_VADDR(sdev->screen_base);
-       struct drm_rect src_clip, dst_clip;
+       struct drm_atomic_helper_damage_iter iter;
+       struct drm_rect damage;
        int idx;
 
-       if (!drm_atomic_helper_damage_merged(old_plane_state, plane_state, &src_clip))
+       if (!drm_dev_enter(dev, &idx))
                return;
 
-       dst_clip = plane_state->dst;
-       if (!drm_rect_intersect(&dst_clip, &src_clip))
-               return;
+       drm_atomic_helper_damage_iter_init(&iter, old_plane_state, plane_state);
+       drm_atomic_for_each_plane_damage(&iter, &damage) {
+               struct iosys_map dst = IOSYS_MAP_INIT_VADDR(sdev->screen_base);
+               struct drm_rect dst_clip = plane_state->dst;
 
-       if (!drm_dev_enter(dev, &idx))
-               return;
+               if (!drm_rect_intersect(&dst_clip, &damage))
+                       continue;
 
-       iosys_map_incr(&dst, drm_fb_clip_offset(sdev->pitch, sdev->format, &dst_clip));
-       drm_fb_blit(&dst, &sdev->pitch, sdev->format->format, shadow_plane_state->data, fb,
-                   &src_clip);
+               iosys_map_incr(&dst, drm_fb_clip_offset(sdev->pitch, sdev->format, &dst_clip));
+               drm_fb_blit(&dst, &sdev->pitch, sdev->format->format, shadow_plane_state->data, fb,
+                           &damage);
+       }
 
        drm_dev_exit(idx);
 }