]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/rect: Add drm_rect_overlap()
authorJocelyn Falempe <jfalempe@redhat.com>
Thu, 22 Aug 2024 07:33:55 +0000 (09:33 +0200)
committerJocelyn Falempe <jfalempe@redhat.com>
Fri, 23 Aug 2024 14:47:56 +0000 (16:47 +0200)
Check if two rectangles overlap.
It's a bit similar to drm_rect_intersect() but this won't modify
the rectangle.
Simplifies a bit drm_panic.

Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20240822073852.562286-3-jfalempe@redhat.com
drivers/gpu/drm/drm_panic.c
include/drm/drm_rect.h

index 0a047152f88b8e6b496b67857b64c26fcd58698e..59fba23e5fd7a2cd5f338902ba99350c9c7bb5cc 100644 (file)
@@ -529,8 +529,7 @@ static void draw_panic_static_user(struct drm_scanout_buffer *sb)
        /* Fill with the background color, and draw text on top */
        drm_panic_fill(sb, &r_screen, bg_color);
 
-       if ((r_msg.x1 >= logo_width || r_msg.y1 >= logo_height) &&
-           logo_width <= sb->width && logo_height <= sb->height) {
+       if (!drm_rect_overlap(&r_logo, &r_msg)) {
                if (logo_mono)
                        drm_panic_blit(sb, &r_logo, logo_mono->data, DIV_ROUND_UP(logo_width, 8),
                                       fg_color);
index 73fcb899a01da7e4b6e2da9560a9eeea169bb569..46f09cf68458c14f932570fbfdc9e45e7a19cf92 100644 (file)
@@ -238,6 +238,21 @@ static inline void drm_rect_fp_to_int(struct drm_rect *dst,
                      drm_rect_height(src) >> 16);
 }
 
+/**
+ * drm_rect_overlap - Check if two rectangles overlap
+ * @a: first rectangle
+ * @b: second rectangle
+ *
+ * RETURNS:
+ * %true if the rectangles overlap, %false otherwise.
+ */
+static inline bool drm_rect_overlap(const struct drm_rect *a,
+                                   const struct drm_rect *b)
+{
+       return (a->x2 > b->x1 && b->x2 > a->x1 &&
+               a->y2 > b->y1 && b->y2 > a->y1);
+}
+
 bool drm_rect_intersect(struct drm_rect *r, const struct drm_rect *clip);
 bool drm_rect_clip_scaled(struct drm_rect *src, struct drm_rect *dst,
                          const struct drm_rect *clip);