提交 f238ac30 编写于 作者: T Thomas Zimmermann

drm/format-helper: Flip src/dst-format branches in blit helper

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: NThomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: NJavier Martinez Canillas <javierm@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230102112927.26565-7-tzimmermann@suse.de
上级 4db88a90
...@@ -653,41 +653,37 @@ int drm_fb_blit(struct iosys_map *dst, const unsigned int *dst_pitch, uint32_t d ...@@ -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) if (dst_format == DRM_FORMAT_ARGB2101010)
dst_format = DRM_FORMAT_XRGB2101010; dst_format = DRM_FORMAT_XRGB2101010;
if (dst_format == fb_format) { if (fb_format == dst_format) {
drm_fb_memcpy(dst, dst_pitch, src, fb, clip); drm_fb_memcpy(dst, dst_pitch, src, fb, clip);
return 0; return 0;
} else if (fb_format == (dst_format | DRM_FORMAT_BIG_ENDIAN)) {
} else if (dst_format == DRM_FORMAT_RGB565) { drm_fb_swab(dst, dst_pitch, src, fb, clip, false);
if (fb_format == DRM_FORMAT_XRGB8888) { 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); drm_fb_xrgb8888_to_rgb565(dst, dst_pitch, src, fb, clip, false);
return 0; return 0;
} } else if (dst_format == DRM_FORMAT_RGB888) {
} 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) {
drm_fb_xrgb8888_to_rgb888(dst, dst_pitch, src, fb, clip); drm_fb_xrgb8888_to_rgb888(dst, dst_pitch, src, fb, clip);
return 0; return 0;
} } else if (dst_format == DRM_FORMAT_XRGB2101010) {
} else if (dst_format == DRM_FORMAT_XRGB8888) { drm_fb_xrgb8888_to_xrgb2101010(dst, dst_pitch, src, fb, clip);
if (fb_format == DRM_FORMAT_RGB888) {
drm_fb_rgb888_to_xrgb8888(dst, dst_pitch, src, fb, clip);
return 0; return 0;
} else if (fb_format == DRM_FORMAT_RGB565) { } else if (dst_format == DRM_FORMAT_BGRX8888) {
drm_fb_rgb565_to_xrgb8888(dst, dst_pitch, src, fb, clip); drm_fb_swab(dst, dst_pitch, src, fb, clip, false);
return 0; return 0;
} }
} else if (dst_format == DRM_FORMAT_XRGB2101010) { } else if (fb_format == DRM_FORMAT_RGB888) {
if (fb_format == DRM_FORMAT_XRGB8888) { if (dst_format == DRM_FORMAT_XRGB8888) {
drm_fb_xrgb8888_to_xrgb2101010(dst, dst_pitch, src, fb, clip); drm_fb_rgb888_to_xrgb8888(dst, dst_pitch, src, fb, clip);
return 0; return 0;
} }
} else if (dst_format == DRM_FORMAT_BGRX8888) { } else if (fb_format == DRM_FORMAT_RGB565) {
if (fb_format == DRM_FORMAT_XRGB8888) { if (dst_format == DRM_FORMAT_XRGB8888) {
drm_fb_swab(dst, dst_pitch, src, fb, clip, false); drm_fb_rgb565_to_xrgb8888(dst, dst_pitch, src, fb, clip);
return 0; return 0;
} }
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册