drm/format-helper: Flip src/dst-format branches in blit helper
authorThomas Zimmermann <tzimmermann@suse.de>
Mon, 2 Jan 2023 11:29:20 +0000 (12:29 +0100)
committerThomas Zimmermann <tzimmermann@suse.de>
Tue, 3 Jan 2023 13:24:52 +0000 (14:24 +0100)
Upcoming changes to the format conversion will mostly blit from
XRGB8888 to some other format. So put the source format in blit's
outer branches to make the code more readable. For cases where
a format only changes its endianness, such as XRGB565, introduce
dedicated branches that handle this for all formats.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230102112927.26565-7-tzimmermann@suse.de
drivers/gpu/drm/drm_format_helper.c

index f3f3b3809a3eadfade3a4db99e427b7d7f98e70d..36d2ca9d0f010a04c655a0d952a71fe256fe9191 100644 (file)
@@ -653,41 +653,37 @@ int drm_fb_blit(struct iosys_map *dst, const unsigned int *dst_pitch, uint32_t d
        if (dst_format == DRM_FORMAT_ARGB2101010)
                dst_format = DRM_FORMAT_XRGB2101010;
 
-       if (dst_format == fb_format) {
+       if (fb_format == dst_format) {
                drm_fb_memcpy(dst, dst_pitch, src, fb, clip);
                return 0;
-
-       } else if (dst_format == DRM_FORMAT_RGB565) {
-               if (fb_format == DRM_FORMAT_XRGB8888) {
+       } else if (fb_format == (dst_format | DRM_FORMAT_BIG_ENDIAN)) {
+               drm_fb_swab(dst, dst_pitch, src, fb, clip, false);
+               return 0;
+       } else if (fb_format == (dst_format & ~DRM_FORMAT_BIG_ENDIAN)) {
+               drm_fb_swab(dst, dst_pitch, src, fb, clip, false);
+               return 0;
+       } else if (fb_format == DRM_FORMAT_XRGB8888) {
+               if (dst_format == DRM_FORMAT_RGB565) {
                        drm_fb_xrgb8888_to_rgb565(dst, dst_pitch, src, fb, clip, false);
                        return 0;
-               }
-       } else if (dst_format == (DRM_FORMAT_RGB565 | DRM_FORMAT_BIG_ENDIAN)) {
-               if (fb_format == DRM_FORMAT_RGB565) {
-                       drm_fb_swab(dst, dst_pitch, src, fb, clip, false);
-                       return 0;
-               }
-       } else if (dst_format == DRM_FORMAT_RGB888) {
-               if (fb_format == DRM_FORMAT_XRGB8888) {
+               } else if (dst_format == DRM_FORMAT_RGB888) {
                        drm_fb_xrgb8888_to_rgb888(dst, dst_pitch, src, fb, clip);
                        return 0;
-               }
-       } else if (dst_format == DRM_FORMAT_XRGB8888) {
-               if (fb_format == DRM_FORMAT_RGB888) {
-                       drm_fb_rgb888_to_xrgb8888(dst, dst_pitch, src, fb, clip);
+               } else if (dst_format == DRM_FORMAT_XRGB2101010) {
+                       drm_fb_xrgb8888_to_xrgb2101010(dst, dst_pitch, src, fb, clip);
                        return 0;
-               } else if (fb_format == DRM_FORMAT_RGB565) {
-                       drm_fb_rgb565_to_xrgb8888(dst, dst_pitch, src, fb, clip);
+               } else if (dst_format == DRM_FORMAT_BGRX8888) {
+                       drm_fb_swab(dst, dst_pitch, src, fb, clip, false);
                        return 0;
                }
-       } else if (dst_format == DRM_FORMAT_XRGB2101010) {
-               if (fb_format == DRM_FORMAT_XRGB8888) {
-                       drm_fb_xrgb8888_to_xrgb2101010(dst, dst_pitch, src, fb, clip);
+       } else if (fb_format == DRM_FORMAT_RGB888) {
+               if (dst_format == DRM_FORMAT_XRGB8888) {
+                       drm_fb_rgb888_to_xrgb8888(dst, dst_pitch, src, fb, clip);
                        return 0;
                }
-       } else if (dst_format == DRM_FORMAT_BGRX8888) {
-               if (fb_format == DRM_FORMAT_XRGB8888) {
-                       drm_fb_swab(dst, dst_pitch, src, fb, clip, false);
+       } else if (fb_format == DRM_FORMAT_RGB565) {
+               if (dst_format == DRM_FORMAT_XRGB8888) {
+                       drm_fb_rgb565_to_xrgb8888(dst, dst_pitch, src, fb, clip);
                        return 0;
                }
        }