]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
drm: Remove plane hsub/vsub alignment requirement for core helpers
authorCarlos Eduardo Gallo Filho <gcarlos@disroot.org>
Tue, 26 Sep 2023 14:15:18 +0000 (11:15 -0300)
committerThomas Zimmermann <tzimmermann@suse.de>
Thu, 12 Oct 2023 07:51:19 +0000 (09:51 +0200)
The drm_format_info_plane_{height,width} functions was implemented using
regular division for the plane size calculation, which cause issues [1][2]
when used on contexts where the dimensions are misaligned with relation
to the subsampling factors. So, replace the regular division by the
DIV_ROUND_UP macro.

This allows these functions to be used in more drivers, making further
work to bring more core presence on them possible.

[1] http://patchwork.freedesktop.org/patch/msgid/20170321181218.10042-3-ville.syrjala@linux.intel.com
[2] https://patchwork.freedesktop.org/patch/msgid/20211026225105.2783797-2-imre.deak@intel.com

Signed-off-by: Carlos Eduardo Gallo Filho <gcarlos@disroot.org>
Reviewed-by: André Almeida <andrealmeid@igalia.com>
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20230926141519.9315-2-gcarlos@disroot.org
include/drm/drm_fourcc.h

index 532ae78ca747e6c42bcb7c9621cb290f21655bea..ccf91daa4307027b3be2a474a892d0a8e7a4ce71 100644 (file)
@@ -22,6 +22,7 @@
 #ifndef __DRM_FOURCC_H__
 #define __DRM_FOURCC_H__
 
+#include <linux/math.h>
 #include <linux/types.h>
 #include <uapi/drm/drm_fourcc.h>
 
@@ -279,7 +280,7 @@ int drm_format_info_plane_width(const struct drm_format_info *info, int width,
        if (plane == 0)
                return width;
 
-       return width / info->hsub;
+       return DIV_ROUND_UP(width, info->hsub);
 }
 
 /**
@@ -301,7 +302,7 @@ int drm_format_info_plane_height(const struct drm_format_info *info, int height,
        if (plane == 0)
                return height;
 
-       return height / info->vsub;
+       return DIV_ROUND_UP(height, info->vsub);
 }
 
 const struct drm_format_info *__drm_format_info(u32 format);