* [PATCH 1/5] drm/fourcc: Add is_yuv field to drm_format_info to denote if the format is yuv @ 2018-07-17 17:13 Ayan Kumar Halder 2018-07-17 17:13 ` [PATCH 2/5] drm/i915: Substitute intel_format_is_yuv() with format->is_yuv Ayan Kumar Halder ` (4 more replies) 0 siblings, 5 replies; 11+ messages in thread From: Ayan Kumar Halder @ 2018-07-17 17:13 UTC (permalink / raw) To: ayan.halder, liviu.dudau, brian.starkey, gustavo, maarten.lankhorst, seanpaul, airlied, jani.nikula, joonas.lahtinen, rodrigo.vivi, intel-gfx, hjc, heiko, linux-arm-kernel, linux-rockchip, linux-kernel, tomi.valkeinen, laurent.pinchart, sre, bparrot, peter.ujfalusi, afd, dri-devel, maxime.ripard, wens, malidp Cc: nd A lot of drivers duplicate the function to check if a format is yuv or not. If we add a field (to denote whether the format is yuv or not) in the drm_format_info table, all the drivers can use this field and it will prevent duplication of similar logic. Signed-off-by: Ayan Kumar halder <ayan.halder@arm.com> --- drivers/gpu/drm/drm_fourcc.c | 42 +++++++++++++++++++++--------------------- include/drm/drm_fourcc.h | 2 ++ 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c index 5ca6395..35c1e27 100644 --- a/drivers/gpu/drm/drm_fourcc.c +++ b/drivers/gpu/drm/drm_fourcc.c @@ -152,27 +152,27 @@ const struct drm_format_info *__drm_format_info(u32 format) { .format = DRM_FORMAT_XBGR8888_A8, .depth = 32, .num_planes = 2, .cpp = { 4, 1, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true }, { .format = DRM_FORMAT_RGBX8888_A8, .depth = 32, .num_planes = 2, .cpp = { 4, 1, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true }, { .format = DRM_FORMAT_BGRX8888_A8, .depth = 32, .num_planes = 2, .cpp = { 4, 1, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true }, - { .format = DRM_FORMAT_YUV410, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 4 }, - { .format = DRM_FORMAT_YVU410, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 4 }, - { .format = DRM_FORMAT_YUV411, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 1 }, - { .format = DRM_FORMAT_YVU411, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 1 }, - { .format = DRM_FORMAT_YUV420, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 2 }, - { .format = DRM_FORMAT_YVU420, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 2 }, - { .format = DRM_FORMAT_YUV422, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 1 }, - { .format = DRM_FORMAT_YVU422, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 1 }, - { .format = DRM_FORMAT_YUV444, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 1, .vsub = 1 }, - { .format = DRM_FORMAT_YVU444, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 1, .vsub = 1 }, - { .format = DRM_FORMAT_NV12, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 2 }, - { .format = DRM_FORMAT_NV21, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 2 }, - { .format = DRM_FORMAT_NV16, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 1 }, - { .format = DRM_FORMAT_NV61, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 1 }, - { .format = DRM_FORMAT_NV24, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 1, .vsub = 1 }, - { .format = DRM_FORMAT_NV42, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 1, .vsub = 1 }, - { .format = DRM_FORMAT_YUYV, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1 }, - { .format = DRM_FORMAT_YVYU, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1 }, - { .format = DRM_FORMAT_UYVY, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1 }, - { .format = DRM_FORMAT_VYUY, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1 }, - { .format = DRM_FORMAT_AYUV, .depth = 0, .num_planes = 1, .cpp = { 4, 0, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true }, + { .format = DRM_FORMAT_YUV410, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 4, .is_yuv = true }, + { .format = DRM_FORMAT_YVU410, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 4, .is_yuv = true }, + { .format = DRM_FORMAT_YUV411, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 1, .is_yuv = true }, + { .format = DRM_FORMAT_YVU411, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 1, .is_yuv = true }, + { .format = DRM_FORMAT_YUV420, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 2, .is_yuv = true }, + { .format = DRM_FORMAT_YVU420, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 2, .is_yuv = true }, + { .format = DRM_FORMAT_YUV422, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 1, .is_yuv = true }, + { .format = DRM_FORMAT_YVU422, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 1, .is_yuv = true }, + { .format = DRM_FORMAT_YUV444, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 1, .vsub = 1, .is_yuv = true }, + { .format = DRM_FORMAT_YVU444, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 1, .vsub = 1, .is_yuv = true }, + { .format = DRM_FORMAT_NV12, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 2, .is_yuv = true }, + { .format = DRM_FORMAT_NV21, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 2, .is_yuv = true }, + { .format = DRM_FORMAT_NV16, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true }, + { .format = DRM_FORMAT_NV61, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true }, + { .format = DRM_FORMAT_NV24, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 1, .vsub = 1, .is_yuv = true }, + { .format = DRM_FORMAT_NV42, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 1, .vsub = 1, .is_yuv = true }, + { .format = DRM_FORMAT_YUYV, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true }, + { .format = DRM_FORMAT_YVYU, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true }, + { .format = DRM_FORMAT_UYVY, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true }, + { .format = DRM_FORMAT_VYUY, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true }, + { .format = DRM_FORMAT_AYUV, .depth = 0, .num_planes = 1, .cpp = { 4, 0, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true, .is_yuv = true }, }; unsigned int i; diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h index 3e86408..f9c1584 100644 --- a/include/drm/drm_fourcc.h +++ b/include/drm/drm_fourcc.h @@ -39,6 +39,7 @@ struct drm_mode_fb_cmd2; * @hsub: Horizontal chroma subsampling factor * @vsub: Vertical chroma subsampling factor * @has_alpha: Does the format embeds an alpha component? + * @is_yuv: Is it a YUV format? */ struct drm_format_info { u32 format; @@ -48,6 +49,7 @@ struct drm_format_info { u8 hsub; u8 vsub; bool has_alpha; + bool is_yuv; }; /** -- 2.7.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/5] drm/i915: Substitute intel_format_is_yuv() with format->is_yuv 2018-07-17 17:13 [PATCH 1/5] drm/fourcc: Add is_yuv field to drm_format_info to denote if the format is yuv Ayan Kumar Halder @ 2018-07-17 17:13 ` Ayan Kumar Halder 2018-07-17 17:13 ` [PATCH 3/5] drm/rockchip: Substitute is_yuv_support() " Ayan Kumar Halder ` (3 subsequent siblings) 4 siblings, 0 replies; 11+ messages in thread From: Ayan Kumar Halder @ 2018-07-17 17:13 UTC (permalink / raw) To: ayan.halder, liviu.dudau, brian.starkey, gustavo, maarten.lankhorst, seanpaul, airlied, jani.nikula, joonas.lahtinen, rodrigo.vivi, intel-gfx, hjc, heiko, linux-arm-kernel, linux-rockchip, linux-kernel, tomi.valkeinen, laurent.pinchart, sre, bparrot, peter.ujfalusi, afd, dri-devel, maxime.ripard, wens, malidp Cc: nd drm_format_info table has a field 'is_yuv' to denote if the format is yuv or not. The driver is expected to use this instead of having a function for the same purpose. Signed-off-by: Ayan Kumar halder <ayan.halder@arm.com> --- drivers/gpu/drm/i915/intel_display.c | 2 +- drivers/gpu/drm/i915/intel_drv.h | 2 -- drivers/gpu/drm/i915/intel_sprite.c | 20 +++----------------- 3 files changed, 4 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index fbe5a65..cf09012 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -3657,7 +3657,7 @@ u32 glk_plane_color_ctl(const struct intel_crtc_state *crtc_state, plane_color_ctl |= PLANE_COLOR_PLANE_GAMMA_DISABLE; plane_color_ctl |= glk_plane_color_ctl_alpha(fb->format->format); - if (intel_format_is_yuv(fb->format->format)) { + if (fb->format->is_yuv) { if (plane_state->base.color_encoding == DRM_COLOR_YCBCR_BT709) plane_color_ctl |= PLANE_COLOR_CSC_MODE_YUV709_TO_RGB709; else diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 0c3ac0e..64111ea 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h @@ -2069,7 +2069,6 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv, /* intel_sprite.c */ -bool intel_format_is_yuv(u32 format); int intel_usecs_to_scanlines(const struct drm_display_mode *adjusted_mode, int usecs); struct intel_plane *intel_sprite_plane_create(struct drm_i915_private *dev_priv, @@ -2085,7 +2084,6 @@ void skl_disable_plane(struct intel_plane *plane, struct intel_crtc *crtc); bool skl_plane_get_hw_state(struct intel_plane *plane, enum pipe *pipe); bool skl_plane_has_ccs(struct drm_i915_private *dev_priv, enum pipe pipe, enum plane_id plane_id); -bool intel_format_is_yuv(uint32_t format); bool skl_plane_has_planar(struct drm_i915_private *dev_priv, enum pipe pipe, enum plane_id plane_id); diff --git a/drivers/gpu/drm/i915/intel_sprite.c b/drivers/gpu/drm/i915/intel_sprite.c index 344c0e7..1bb7bc3 100644 --- a/drivers/gpu/drm/i915/intel_sprite.c +++ b/drivers/gpu/drm/i915/intel_sprite.c @@ -41,20 +41,6 @@ #include <drm/i915_drm.h> #include "i915_drv.h" -bool intel_format_is_yuv(u32 format) -{ - switch (format) { - case DRM_FORMAT_YUYV: - case DRM_FORMAT_UYVY: - case DRM_FORMAT_VYUY: - case DRM_FORMAT_YVYU: - case DRM_FORMAT_NV12: - return true; - default: - return false; - } -} - int intel_usecs_to_scanlines(const struct drm_display_mode *adjusted_mode, int usecs) { @@ -404,7 +390,7 @@ chv_update_csc(const struct intel_plane_state *plane_state) const s16 *csc = csc_matrix[plane_state->base.color_encoding]; /* Seems RGB data bypasses the CSC always */ - if (!intel_format_is_yuv(fb->format->format)) + if (!fb->format->is_yuv) return; I915_WRITE_FW(SPCSCYGOFF(plane_id), SPCSC_OOFF(0) | SPCSC_IOFF(0)); @@ -439,7 +425,7 @@ vlv_update_clrc(const struct intel_plane_state *plane_state) enum plane_id plane_id = plane->id; int contrast, brightness, sh_scale, sh_sin, sh_cos; - if (intel_format_is_yuv(fb->format->format) && + if (fb->format->is_yuv && plane_state->base.color_range == DRM_COLOR_YCBCR_LIMITED_RANGE) { /* * Expand limited range to full range: @@ -1040,7 +1026,7 @@ intel_check_sprite_plane(struct intel_plane *plane, src->y1 = src_y << 16; src->y2 = (src_y + src_h) << 16; - if (intel_format_is_yuv(fb->format->format) && + if (fb->format->is_yuv && fb->format->format != DRM_FORMAT_NV12 && (src_x % 2 || src_w % 2)) { DRM_DEBUG_KMS("src x/w (%u, %u) must be a multiple of 2 for YUV planes\n", -- 2.7.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/5] drm/rockchip: Substitute is_yuv_support() with format->is_yuv 2018-07-17 17:13 [PATCH 1/5] drm/fourcc: Add is_yuv field to drm_format_info to denote if the format is yuv Ayan Kumar Halder 2018-07-17 17:13 ` [PATCH 2/5] drm/i915: Substitute intel_format_is_yuv() with format->is_yuv Ayan Kumar Halder @ 2018-07-17 17:13 ` Ayan Kumar Halder 2018-07-17 17:13 ` [PATCH 4/5] drm/omapdrm: Substitute format_is_yuv() " Ayan Kumar Halder ` (2 subsequent siblings) 4 siblings, 0 replies; 11+ messages in thread From: Ayan Kumar Halder @ 2018-07-17 17:13 UTC (permalink / raw) To: ayan.halder, liviu.dudau, brian.starkey, gustavo, maarten.lankhorst, seanpaul, airlied, jani.nikula, joonas.lahtinen, rodrigo.vivi, intel-gfx, hjc, heiko, linux-arm-kernel, linux-rockchip, linux-kernel, tomi.valkeinen, laurent.pinchart, sre, bparrot, peter.ujfalusi, afd, dri-devel, maxime.ripard, wens, malidp Cc: nd drm_format_info table has a field 'is_yuv' to denote if the format is yuv or not. The driver is expected to use this instead of having a function for the same purpose. Signed-off-by: Ayan Kumar halder <ayan.halder@arm.com> --- drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c index effecbe..1359e5c 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c @@ -243,18 +243,6 @@ static enum vop_data_format vop_convert_format(uint32_t format) } } -static bool is_yuv_support(uint32_t format) -{ - switch (format) { - case DRM_FORMAT_NV12: - case DRM_FORMAT_NV16: - case DRM_FORMAT_NV24: - return true; - default: - return false; - } -} - static uint16_t scl_vop_cal_scale(enum scale_mode mode, uint32_t src, uint32_t dst, bool is_horizontal, int vsu_mode, int *vskiplines) @@ -298,7 +286,8 @@ static void scl_vop_cal_scl_fac(struct vop *vop, const struct vop_win_data *win, uint16_t cbcr_ver_scl_mode = SCALE_NONE; int hsub = drm_format_horz_chroma_subsampling(pixel_format); int vsub = drm_format_vert_chroma_subsampling(pixel_format); - bool is_yuv = is_yuv_support(pixel_format); + const struct drm_format_info *info; + bool is_yuv = false; uint16_t cbcr_src_w = src_w / hsub; uint16_t cbcr_src_h = src_h / vsub; uint16_t vsu_mode; @@ -306,6 +295,11 @@ static void scl_vop_cal_scl_fac(struct vop *vop, const struct vop_win_data *win, uint32_t val; int vskiplines; + info = drm_format_info(pixel_format); + + if (info->is_yuv) + is_yuv = true; + if (dst_w > 3840) { DRM_DEV_ERROR(vop->dev, "Maximum dst width (3840) exceeded\n"); return; @@ -680,7 +674,7 @@ static int vop_plane_atomic_check(struct drm_plane *plane, * Src.x1 can be odd when do clip, but yuv plane start point * need align with 2 pixel. */ - if (is_yuv_support(fb->format->format) && ((state->src.x1 >> 16) % 2)) { + if (fb->format->is_yuv && ((state->src.x1 >> 16) % 2)) { DRM_ERROR("Invalid Source: Yuv format not support odd xpos\n"); return -EINVAL; } @@ -767,7 +761,7 @@ static void vop_plane_atomic_update(struct drm_plane *plane, VOP_WIN_SET(vop, win, format, format); VOP_WIN_SET(vop, win, yrgb_vir, DIV_ROUND_UP(fb->pitches[0], 4)); VOP_WIN_SET(vop, win, yrgb_mst, dma_addr); - if (is_yuv_support(fb->format->format)) { + if (fb->format->is_yuv) { int hsub = drm_format_horz_chroma_subsampling(fb->format->format); int vsub = drm_format_vert_chroma_subsampling(fb->format->format); int bpp = fb->format->cpp[1]; -- 2.7.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 4/5] drm/omapdrm: Substitute format_is_yuv() with format->is_yuv 2018-07-17 17:13 [PATCH 1/5] drm/fourcc: Add is_yuv field to drm_format_info to denote if the format is yuv Ayan Kumar Halder 2018-07-17 17:13 ` [PATCH 2/5] drm/i915: Substitute intel_format_is_yuv() with format->is_yuv Ayan Kumar Halder 2018-07-17 17:13 ` [PATCH 3/5] drm/rockchip: Substitute is_yuv_support() " Ayan Kumar Halder @ 2018-07-17 17:13 ` Ayan Kumar Halder 2018-07-18 10:17 ` [Intel-gfx] " Ville Syrjälä 2018-07-17 17:13 ` [PATCH 5/5] drm/sun4i: Substitute sun4i_backend_format_is_yuv() " Ayan Kumar Halder 2018-07-18 9:12 ` [PATCH 1/5] drm/fourcc: Add is_yuv field to drm_format_info to denote if the format is yuv Brian Starkey 4 siblings, 1 reply; 11+ messages in thread From: Ayan Kumar Halder @ 2018-07-17 17:13 UTC (permalink / raw) To: ayan.halder, liviu.dudau, brian.starkey, gustavo, maarten.lankhorst, seanpaul, airlied, jani.nikula, joonas.lahtinen, rodrigo.vivi, intel-gfx, hjc, heiko, linux-arm-kernel, linux-rockchip, linux-kernel, tomi.valkeinen, laurent.pinchart, sre, bparrot, peter.ujfalusi, afd, dri-devel, maxime.ripard, wens, malidp Cc: nd drm_format_info table has a field 'is_yuv' to denote if the format is yuv or not. The driver is expected to use this instead of having a function for the same purpose. Signed-off-by: Ayan Kumar halder <ayan.halder@arm.com> --- drivers/gpu/drm/omapdrm/dss/dispc.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c b/drivers/gpu/drm/omapdrm/dss/dispc.c index 84f274c..8d2d7a4 100644 --- a/drivers/gpu/drm/omapdrm/dss/dispc.c +++ b/drivers/gpu/drm/omapdrm/dss/dispc.c @@ -1140,18 +1140,6 @@ static void dispc_ovl_set_color_mode(struct dispc_device *dispc, REG_FLD_MOD(dispc, DISPC_OVL_ATTRIBUTES(plane), m, 4, 1); } -static bool format_is_yuv(u32 fourcc) -{ - switch (fourcc) { - case DRM_FORMAT_YUYV: - case DRM_FORMAT_UYVY: - case DRM_FORMAT_NV12: - return true; - default: - return false; - } -} - static void dispc_ovl_configure_burst_type(struct dispc_device *dispc, enum omap_plane_id plane, enum omap_dss_rotation_type rotation) @@ -1910,11 +1898,14 @@ static void dispc_ovl_set_scaling_uv(struct dispc_device *dispc, int scale_x = out_width != orig_width; int scale_y = out_height != orig_height; bool chroma_upscale = plane != OMAP_DSS_WB; + const struct drm_format_info *info; + + info = drm_format_info(fourcc); if (!dispc_has_feature(dispc, FEAT_HANDLE_UV_SEPARATE)) return; - if (!format_is_yuv(fourcc)) { + if (!info->is_yuv) { /* reset chroma resampling for RGB formats */ if (plane != OMAP_DSS_WB) REG_FLD_MOD(dispc, DISPC_OVL_ATTRIBUTES2(plane), @@ -2632,6 +2623,9 @@ static int dispc_ovl_setup_common(struct dispc_device *dispc, bool ilace = !!(vm->flags & DISPLAY_FLAGS_INTERLACED); unsigned long pclk = dispc_plane_pclk_rate(dispc, plane); unsigned long lclk = dispc_plane_lclk_rate(dispc, plane); + const struct drm_format_info *info; + + info = drm_format_info(fourcc); /* when setting up WB, dispc_plane_pclk_rate() returns 0 */ if (plane == OMAP_DSS_WB) @@ -2640,7 +2634,7 @@ static int dispc_ovl_setup_common(struct dispc_device *dispc, if (paddr == 0 && rotation_type != OMAP_DSS_ROT_TILER) return -EINVAL; - if (format_is_yuv(fourcc) && (in_width & 1)) { + if (info->is_yuv && (in_width & 1)) { DSSERR("input width %d is not even for YUV format\n", in_width); return -EINVAL; } @@ -2680,7 +2674,7 @@ static int dispc_ovl_setup_common(struct dispc_device *dispc, DSSDBG("predecimation %d x %x, new input size %d x %d\n", x_predecim, y_predecim, in_width, in_height); - if (format_is_yuv(fourcc) && (in_width & 1)) { + if (info->is_yuv && (in_width & 1)) { DSSDBG("predecimated input width is not even for YUV format\n"); DSSDBG("adjusting input width %d -> %d\n", in_width, in_width & ~1); @@ -2688,7 +2682,7 @@ static int dispc_ovl_setup_common(struct dispc_device *dispc, in_width &= ~1; } - if (format_is_yuv(fourcc)) + if (info->is_yuv) cconv = 1; if (ilace && !fieldmode) { -- 2.7.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [Intel-gfx] [PATCH 4/5] drm/omapdrm: Substitute format_is_yuv() with format->is_yuv 2018-07-17 17:13 ` [PATCH 4/5] drm/omapdrm: Substitute format_is_yuv() " Ayan Kumar Halder @ 2018-07-18 10:17 ` Ville Syrjälä 2018-09-26 9:30 ` Tomi Valkeinen 0 siblings, 1 reply; 11+ messages in thread From: Ville Syrjälä @ 2018-07-18 10:17 UTC (permalink / raw) To: Ayan Kumar Halder Cc: liviu.dudau, brian.starkey, gustavo, maarten.lankhorst, seanpaul, airlied, jani.nikula, joonas.lahtinen, rodrigo.vivi, intel-gfx, hjc, heiko, linux-arm-kernel, linux-rockchip, linux-kernel, tomi.valkeinen, laurent.pinchart, sre, bparrot, peter.ujfalusi, afd, dri-devel, maxime.ripard, wens, malidp, nd On Tue, Jul 17, 2018 at 06:13:45PM +0100, Ayan Kumar Halder wrote: > drm_format_info table has a field 'is_yuv' to denote if the format > is yuv or not. The driver is expected to use this instead of > having a function for the same purpose. > > Signed-off-by: Ayan Kumar halder <ayan.halder@arm.com> > --- > drivers/gpu/drm/omapdrm/dss/dispc.c | 26 ++++++++++---------------- > 1 file changed, 10 insertions(+), 16 deletions(-) > > diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c b/drivers/gpu/drm/omapdrm/dss/dispc.c > index 84f274c..8d2d7a4 100644 > --- a/drivers/gpu/drm/omapdrm/dss/dispc.c > +++ b/drivers/gpu/drm/omapdrm/dss/dispc.c > @@ -1140,18 +1140,6 @@ static void dispc_ovl_set_color_mode(struct dispc_device *dispc, > REG_FLD_MOD(dispc, DISPC_OVL_ATTRIBUTES(plane), m, 4, 1); > } > > -static bool format_is_yuv(u32 fourcc) > -{ > - switch (fourcc) { > - case DRM_FORMAT_YUYV: > - case DRM_FORMAT_UYVY: > - case DRM_FORMAT_NV12: > - return true; > - default: > - return false; > - } > -} > - > static void dispc_ovl_configure_burst_type(struct dispc_device *dispc, > enum omap_plane_id plane, > enum omap_dss_rotation_type rotation) > @@ -1910,11 +1898,14 @@ static void dispc_ovl_set_scaling_uv(struct dispc_device *dispc, > int scale_x = out_width != orig_width; > int scale_y = out_height != orig_height; > bool chroma_upscale = plane != OMAP_DSS_WB; > + const struct drm_format_info *info; > + > + info = drm_format_info(fourcc); Not sure Tomi wants drm usage (apart from the fourccs) inside the dss code. > > if (!dispc_has_feature(dispc, FEAT_HANDLE_UV_SEPARATE)) > return; > > - if (!format_is_yuv(fourcc)) { > + if (!info->is_yuv) { > /* reset chroma resampling for RGB formats */ > if (plane != OMAP_DSS_WB) > REG_FLD_MOD(dispc, DISPC_OVL_ATTRIBUTES2(plane), > @@ -2632,6 +2623,9 @@ static int dispc_ovl_setup_common(struct dispc_device *dispc, > bool ilace = !!(vm->flags & DISPLAY_FLAGS_INTERLACED); > unsigned long pclk = dispc_plane_pclk_rate(dispc, plane); > unsigned long lclk = dispc_plane_lclk_rate(dispc, plane); > + const struct drm_format_info *info; > + > + info = drm_format_info(fourcc); > > /* when setting up WB, dispc_plane_pclk_rate() returns 0 */ > if (plane == OMAP_DSS_WB) > @@ -2640,7 +2634,7 @@ static int dispc_ovl_setup_common(struct dispc_device *dispc, > if (paddr == 0 && rotation_type != OMAP_DSS_ROT_TILER) > return -EINVAL; > > - if (format_is_yuv(fourcc) && (in_width & 1)) { > + if (info->is_yuv && (in_width & 1)) { > DSSERR("input width %d is not even for YUV format\n", in_width); > return -EINVAL; > } > @@ -2680,7 +2674,7 @@ static int dispc_ovl_setup_common(struct dispc_device *dispc, > DSSDBG("predecimation %d x %x, new input size %d x %d\n", > x_predecim, y_predecim, in_width, in_height); > > - if (format_is_yuv(fourcc) && (in_width & 1)) { > + if (info->is_yuv && (in_width & 1)) { > DSSDBG("predecimated input width is not even for YUV format\n"); > DSSDBG("adjusting input width %d -> %d\n", > in_width, in_width & ~1); > @@ -2688,7 +2682,7 @@ static int dispc_ovl_setup_common(struct dispc_device *dispc, > in_width &= ~1; > } > > - if (format_is_yuv(fourcc)) > + if (info->is_yuv) > cconv = 1; > > if (ilace && !fieldmode) { > -- > 2.7.4 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Ville Syrjälä Intel ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Intel-gfx] [PATCH 4/5] drm/omapdrm: Substitute format_is_yuv() with format->is_yuv 2018-07-18 10:17 ` [Intel-gfx] " Ville Syrjälä @ 2018-09-26 9:30 ` Tomi Valkeinen 0 siblings, 0 replies; 11+ messages in thread From: Tomi Valkeinen @ 2018-09-26 9:30 UTC (permalink / raw) To: Ville Syrjälä, Ayan Kumar Halder Cc: liviu.dudau, brian.starkey, gustavo, maarten.lankhorst, seanpaul, airlied, jani.nikula, joonas.lahtinen, rodrigo.vivi, intel-gfx, hjc, heiko, linux-arm-kernel, linux-rockchip, linux-kernel, laurent.pinchart, sre, bparrot, peter.ujfalusi, afd, dri-devel, maxime.ripard, wens, malidp, nd Hi, On 18/07/18 13:17, Ville Syrjälä wrote: > On Tue, Jul 17, 2018 at 06:13:45PM +0100, Ayan Kumar Halder wrote: >> drm_format_info table has a field 'is_yuv' to denote if the format >> is yuv or not. The driver is expected to use this instead of >> having a function for the same purpose. >> >> Signed-off-by: Ayan Kumar halder <ayan.halder@arm.com> >> --- >> drivers/gpu/drm/omapdrm/dss/dispc.c | 26 ++++++++++---------------- >> 1 file changed, 10 insertions(+), 16 deletions(-) >> >> diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c b/drivers/gpu/drm/omapdrm/dss/dispc.c >> index 84f274c..8d2d7a4 100644 >> --- a/drivers/gpu/drm/omapdrm/dss/dispc.c >> +++ b/drivers/gpu/drm/omapdrm/dss/dispc.c >> @@ -1140,18 +1140,6 @@ static void dispc_ovl_set_color_mode(struct dispc_device *dispc, >> REG_FLD_MOD(dispc, DISPC_OVL_ATTRIBUTES(plane), m, 4, 1); >> } >> >> -static bool format_is_yuv(u32 fourcc) >> -{ >> - switch (fourcc) { >> - case DRM_FORMAT_YUYV: >> - case DRM_FORMAT_UYVY: >> - case DRM_FORMAT_NV12: >> - return true; >> - default: >> - return false; >> - } >> -} >> - >> static void dispc_ovl_configure_burst_type(struct dispc_device *dispc, >> enum omap_plane_id plane, >> enum omap_dss_rotation_type rotation) >> @@ -1910,11 +1898,14 @@ static void dispc_ovl_set_scaling_uv(struct dispc_device *dispc, >> int scale_x = out_width != orig_width; >> int scale_y = out_height != orig_height; >> bool chroma_upscale = plane != OMAP_DSS_WB; >> + const struct drm_format_info *info; >> + >> + info = drm_format_info(fourcc); > > Not sure Tomi wants drm usage (apart from the fourccs) inside the > dss code. Seems like I have missed this. No, I don't have anything against drm usage inside dss. That's the way we've been moving after we managed to get rid of omapfb links. I'll pick this up. Tomi -- Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki ^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 5/5] drm/sun4i: Substitute sun4i_backend_format_is_yuv() with format->is_yuv 2018-07-17 17:13 [PATCH 1/5] drm/fourcc: Add is_yuv field to drm_format_info to denote if the format is yuv Ayan Kumar Halder ` (2 preceding siblings ...) 2018-07-17 17:13 ` [PATCH 4/5] drm/omapdrm: Substitute format_is_yuv() " Ayan Kumar Halder @ 2018-07-17 17:13 ` Ayan Kumar Halder 2018-07-18 10:15 ` [Intel-gfx] " Ville Syrjälä 2018-07-18 9:12 ` [PATCH 1/5] drm/fourcc: Add is_yuv field to drm_format_info to denote if the format is yuv Brian Starkey 4 siblings, 1 reply; 11+ messages in thread From: Ayan Kumar Halder @ 2018-07-17 17:13 UTC (permalink / raw) To: ayan.halder, liviu.dudau, brian.starkey, gustavo, maarten.lankhorst, seanpaul, airlied, jani.nikula, joonas.lahtinen, rodrigo.vivi, intel-gfx, hjc, heiko, linux-arm-kernel, linux-rockchip, linux-kernel, tomi.valkeinen, laurent.pinchart, sre, bparrot, peter.ujfalusi, afd, dri-devel, maxime.ripard, wens, malidp Cc: nd drm_format_info table has a field 'is_yuv' to denote if the format is yuv or not. The driver is expected to use this instead of having a function for the same purpose. Signed-off-by: Ayan Kumar halder <ayan.halder@arm.com> --- drivers/gpu/drm/sun4i/sun4i_backend.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun4i_backend.c b/drivers/gpu/drm/sun4i/sun4i_backend.c index de0a76d..d7950b5 100644 --- a/drivers/gpu/drm/sun4i/sun4i_backend.c +++ b/drivers/gpu/drm/sun4i/sun4i_backend.c @@ -86,12 +86,6 @@ static inline bool sun4i_backend_format_is_packed_yuv422(uint32_t format) } } -static inline bool sun4i_backend_format_is_yuv(uint32_t format) -{ - return sun4i_backend_format_is_planar_yuv(format) || - sun4i_backend_format_is_packed_yuv422(format); -} - static void sun4i_backend_apply_color_correction(struct sunxi_engine *engine) { int i; @@ -304,7 +298,7 @@ int sun4i_backend_update_layer_formats(struct sun4i_backend *backend, SUN4I_BACKEND_ATTCTL_REG0_LAY_GLBALPHA_EN, val); - if (sun4i_backend_format_is_yuv(fb->format->format)) + if (fb->format->is_yuv) return sun4i_backend_update_yuv_format(backend, layer, plane); ret = sun4i_backend_drm_format_to_layer(fb->format->format, &val); @@ -384,7 +378,7 @@ int sun4i_backend_update_layer_buffer(struct sun4i_backend *backend, */ paddr -= PHYS_OFFSET; - if (sun4i_backend_format_is_yuv(fb->format->format)) + if (fb->format->is_yuv) return sun4i_backend_update_yuv_buffer(backend, fb, paddr); /* Write the 32 lower bits of the address (in bits) */ @@ -502,7 +496,7 @@ static int sun4i_backend_atomic_check(struct sunxi_engine *engine, if (fb->format->has_alpha || (plane_state->alpha != DRM_BLEND_ALPHA_OPAQUE)) num_alpha_planes++; - if (sun4i_backend_format_is_yuv(fb->format->format)) { + if (fb->format->is_yuv) { DRM_DEBUG_DRIVER("Plane FB format is YUV\n"); num_yuv_planes++; } -- 2.7.4 ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [Intel-gfx] [PATCH 5/5] drm/sun4i: Substitute sun4i_backend_format_is_yuv() with format->is_yuv 2018-07-17 17:13 ` [PATCH 5/5] drm/sun4i: Substitute sun4i_backend_format_is_yuv() " Ayan Kumar Halder @ 2018-07-18 10:15 ` Ville Syrjälä 2018-07-18 14:40 ` Ayan Halder 0 siblings, 1 reply; 11+ messages in thread From: Ville Syrjälä @ 2018-07-18 10:15 UTC (permalink / raw) To: Ayan Kumar Halder Cc: liviu.dudau, brian.starkey, gustavo, maarten.lankhorst, seanpaul, airlied, jani.nikula, joonas.lahtinen, rodrigo.vivi, intel-gfx, hjc, heiko, linux-arm-kernel, linux-rockchip, linux-kernel, tomi.valkeinen, laurent.pinchart, sre, bparrot, peter.ujfalusi, afd, dri-devel, maxime.ripard, wens, malidp, nd On Tue, Jul 17, 2018 at 06:13:46PM +0100, Ayan Kumar Halder wrote: > drm_format_info table has a field 'is_yuv' to denote if the format > is yuv or not. The driver is expected to use this instead of > having a function for the same purpose. > > Signed-off-by: Ayan Kumar halder <ayan.halder@arm.com> > --- > drivers/gpu/drm/sun4i/sun4i_backend.c | 12 +++--------- > 1 file changed, 3 insertions(+), 9 deletions(-) > > diff --git a/drivers/gpu/drm/sun4i/sun4i_backend.c b/drivers/gpu/drm/sun4i/sun4i_backend.c > index de0a76d..d7950b5 100644 > --- a/drivers/gpu/drm/sun4i/sun4i_backend.c > +++ b/drivers/gpu/drm/sun4i/sun4i_backend.c > @@ -86,12 +86,6 @@ static inline bool sun4i_backend_format_is_packed_yuv422(uint32_t format) > } > } > > -static inline bool sun4i_backend_format_is_yuv(uint32_t format) > -{ > - return sun4i_backend_format_is_planar_yuv(format) || > - sun4i_backend_format_is_packed_yuv422(format); > -} sun4i_backend_format_is_planar_yuv() is now unused so could be nuked. Also the one remaining use of sun4i_backend_format_is_packed_yuv422() could be replaced with 'is_yuv && num_planes == 1', so that one could be easily killed off ass well. > - > static void sun4i_backend_apply_color_correction(struct sunxi_engine *engine) > { > int i; > @@ -304,7 +298,7 @@ int sun4i_backend_update_layer_formats(struct sun4i_backend *backend, > SUN4I_BACKEND_ATTCTL_REG0_LAY_GLBALPHA_EN, > val); > > - if (sun4i_backend_format_is_yuv(fb->format->format)) > + if (fb->format->is_yuv) > return sun4i_backend_update_yuv_format(backend, layer, plane); > > ret = sun4i_backend_drm_format_to_layer(fb->format->format, &val); > @@ -384,7 +378,7 @@ int sun4i_backend_update_layer_buffer(struct sun4i_backend *backend, > */ > paddr -= PHYS_OFFSET; > > - if (sun4i_backend_format_is_yuv(fb->format->format)) > + if (fb->format->is_yuv) > return sun4i_backend_update_yuv_buffer(backend, fb, paddr); > > /* Write the 32 lower bits of the address (in bits) */ > @@ -502,7 +496,7 @@ static int sun4i_backend_atomic_check(struct sunxi_engine *engine, > if (fb->format->has_alpha || (plane_state->alpha != DRM_BLEND_ALPHA_OPAQUE)) > num_alpha_planes++; > > - if (sun4i_backend_format_is_yuv(fb->format->format)) { > + if (fb->format->is_yuv) { > DRM_DEBUG_DRIVER("Plane FB format is YUV\n"); > num_yuv_planes++; > } > -- > 2.7.4 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Ville Syrjälä Intel ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Intel-gfx] [PATCH 5/5] drm/sun4i: Substitute sun4i_backend_format_is_yuv() with format->is_yuv 2018-07-18 10:15 ` [Intel-gfx] " Ville Syrjälä @ 2018-07-18 14:40 ` Ayan Halder 0 siblings, 0 replies; 11+ messages in thread From: Ayan Halder @ 2018-07-18 14:40 UTC (permalink / raw) To: Ville Syrj?l? Cc: liviu.dudau, brian.starkey, gustavo, maarten.lankhorst, seanpaul, airlied, jani.nikula, joonas.lahtinen, rodrigo.vivi, intel-gfx, hjc, heiko, linux-arm-kernel, linux-rockchip, linux-kernel, tomi.valkeinen, laurent.pinchart, sre, bparrot, peter.ujfalusi, afd, dri-devel, maxime.ripard, wens, malidp, nd On Wed, Jul 18, 2018 at 01:15:40PM +0300, Ville Syrj?l? wrote: Hi Ville, > On Tue, Jul 17, 2018 at 06:13:46PM +0100, Ayan Kumar Halder wrote: > > drm_format_info table has a field 'is_yuv' to denote if the format > > is yuv or not. The driver is expected to use this instead of > > having a function for the same purpose. > > > > Signed-off-by: Ayan Kumar halder <ayan.halder@arm.com> > > --- > > drivers/gpu/drm/sun4i/sun4i_backend.c | 12 +++--------- > > 1 file changed, 3 insertions(+), 9 deletions(-) > > > > diff --git a/drivers/gpu/drm/sun4i/sun4i_backend.c b/drivers/gpu/drm/sun4i/sun4i_backend.c > > index de0a76d..d7950b5 100644 > > --- a/drivers/gpu/drm/sun4i/sun4i_backend.c > > +++ b/drivers/gpu/drm/sun4i/sun4i_backend.c > > @@ -86,12 +86,6 @@ static inline bool sun4i_backend_format_is_packed_yuv422(uint32_t format) > > } > > } > > > > -static inline bool sun4i_backend_format_is_yuv(uint32_t format) > > -{ > > - return sun4i_backend_format_is_planar_yuv(format) || > > - sun4i_backend_format_is_packed_yuv422(format); > > -} > > sun4i_backend_format_is_planar_yuv() is now unused so could be nuked. > Also the one remaining use of sun4i_backend_format_is_packed_yuv422() > could be replaced with 'is_yuv && num_planes == 1', so that one could > be easily killed off ass well. I will have this in a separate patch. > > - > > static void sun4i_backend_apply_color_correction(struct sunxi_engine *engine) > > { > > int i; > > @@ -304,7 +298,7 @@ int sun4i_backend_update_layer_formats(struct sun4i_backend *backend, > > SUN4I_BACKEND_ATTCTL_REG0_LAY_GLBALPHA_EN, > > val); > > > > - if (sun4i_backend_format_is_yuv(fb->format->format)) > > + if (fb->format->is_yuv) > > return sun4i_backend_update_yuv_format(backend, layer, plane); > > > > ret = sun4i_backend_drm_format_to_layer(fb->format->format, &val); > > @@ -384,7 +378,7 @@ int sun4i_backend_update_layer_buffer(struct sun4i_backend *backend, > > */ > > paddr -= PHYS_OFFSET; > > > > - if (sun4i_backend_format_is_yuv(fb->format->format)) > > + if (fb->format->is_yuv) > > return sun4i_backend_update_yuv_buffer(backend, fb, paddr); > > > > /* Write the 32 lower bits of the address (in bits) */ > > @@ -502,7 +496,7 @@ static int sun4i_backend_atomic_check(struct sunxi_engine *engine, > > if (fb->format->has_alpha || (plane_state->alpha != DRM_BLEND_ALPHA_OPAQUE)) > > num_alpha_planes++; > > > > - if (sun4i_backend_format_is_yuv(fb->format->format)) { > > + if (fb->format->is_yuv) { > > DRM_DEBUG_DRIVER("Plane FB format is YUV\n"); > > num_yuv_planes++; > > } > > -- > > 2.7.4 > > > > _______________________________________________ > > Intel-gfx mailing list > > Intel-gfx@lists.freedesktop.org > > https://lists.freedesktop.org/mailman/listinfo/intel-gfx > > -- > Ville Syrj?l? > Intel ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/5] drm/fourcc: Add is_yuv field to drm_format_info to denote if the format is yuv 2018-07-17 17:13 [PATCH 1/5] drm/fourcc: Add is_yuv field to drm_format_info to denote if the format is yuv Ayan Kumar Halder ` (3 preceding siblings ...) 2018-07-17 17:13 ` [PATCH 5/5] drm/sun4i: Substitute sun4i_backend_format_is_yuv() " Ayan Kumar Halder @ 2018-07-18 9:12 ` Brian Starkey 2018-07-18 10:21 ` Ville Syrjälä 4 siblings, 1 reply; 11+ messages in thread From: Brian Starkey @ 2018-07-18 9:12 UTC (permalink / raw) To: Ayan Kumar Halder Cc: liviu.dudau, gustavo, maarten.lankhorst, seanpaul, airlied, jani.nikula, joonas.lahtinen, rodrigo.vivi, intel-gfx, hjc, heiko, linux-arm-kernel, linux-rockchip, linux-kernel, tomi.valkeinen, laurent.pinchart, sre, bparrot, peter.ujfalusi, afd, dri-devel, maxime.ripard, wens, malidp, nd Hi Ayan, On Tue, Jul 17, 2018 at 06:13:42PM +0100, Ayan Kumar Halder wrote: >A lot of drivers duplicate the function to check if a format is yuv or not. >If we add a field (to denote whether the format is yuv or not) in the >drm_format_info table, all the drivers can use this field and it will >prevent duplication of similar logic. This looks like a good idea to me. I wonder if the two "has_alpha" and "is_yuv" bools should be bitfields to reduce the footprint (not sure what the general DRM attitude to bitfields is), but either way: Reviewed-by: Brian Starkey <brian.starkey@arm.com> > >Signed-off-by: Ayan Kumar halder <ayan.halder@arm.com> >--- > drivers/gpu/drm/drm_fourcc.c | 42 +++++++++++++++++++++--------------------- > include/drm/drm_fourcc.h | 2 ++ > 2 files changed, 23 insertions(+), 21 deletions(-) > >diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c >index 5ca6395..35c1e27 100644 >--- a/drivers/gpu/drm/drm_fourcc.c >+++ b/drivers/gpu/drm/drm_fourcc.c >@@ -152,27 +152,27 @@ const struct drm_format_info *__drm_format_info(u32 format) > { .format = DRM_FORMAT_XBGR8888_A8, .depth = 32, .num_planes = 2, .cpp = { 4, 1, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true }, > { .format = DRM_FORMAT_RGBX8888_A8, .depth = 32, .num_planes = 2, .cpp = { 4, 1, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true }, > { .format = DRM_FORMAT_BGRX8888_A8, .depth = 32, .num_planes = 2, .cpp = { 4, 1, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true }, >- { .format = DRM_FORMAT_YUV410, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 4 }, >- { .format = DRM_FORMAT_YVU410, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 4 }, >- { .format = DRM_FORMAT_YUV411, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 1 }, >- { .format = DRM_FORMAT_YVU411, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 1 }, >- { .format = DRM_FORMAT_YUV420, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 2 }, >- { .format = DRM_FORMAT_YVU420, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 2 }, >- { .format = DRM_FORMAT_YUV422, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 1 }, >- { .format = DRM_FORMAT_YVU422, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 1 }, >- { .format = DRM_FORMAT_YUV444, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 1, .vsub = 1 }, >- { .format = DRM_FORMAT_YVU444, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 1, .vsub = 1 }, >- { .format = DRM_FORMAT_NV12, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 2 }, >- { .format = DRM_FORMAT_NV21, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 2 }, >- { .format = DRM_FORMAT_NV16, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 1 }, >- { .format = DRM_FORMAT_NV61, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 1 }, >- { .format = DRM_FORMAT_NV24, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 1, .vsub = 1 }, >- { .format = DRM_FORMAT_NV42, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 1, .vsub = 1 }, >- { .format = DRM_FORMAT_YUYV, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1 }, >- { .format = DRM_FORMAT_YVYU, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1 }, >- { .format = DRM_FORMAT_UYVY, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1 }, >- { .format = DRM_FORMAT_VYUY, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1 }, >- { .format = DRM_FORMAT_AYUV, .depth = 0, .num_planes = 1, .cpp = { 4, 0, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true }, >+ { .format = DRM_FORMAT_YUV410, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 4, .is_yuv = true }, >+ { .format = DRM_FORMAT_YVU410, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 4, .is_yuv = true }, >+ { .format = DRM_FORMAT_YUV411, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 1, .is_yuv = true }, >+ { .format = DRM_FORMAT_YVU411, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 1, .is_yuv = true }, >+ { .format = DRM_FORMAT_YUV420, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 2, .is_yuv = true }, >+ { .format = DRM_FORMAT_YVU420, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 2, .is_yuv = true }, >+ { .format = DRM_FORMAT_YUV422, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 1, .is_yuv = true }, >+ { .format = DRM_FORMAT_YVU422, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 1, .is_yuv = true }, >+ { .format = DRM_FORMAT_YUV444, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 1, .vsub = 1, .is_yuv = true }, >+ { .format = DRM_FORMAT_YVU444, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 1, .vsub = 1, .is_yuv = true }, >+ { .format = DRM_FORMAT_NV12, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 2, .is_yuv = true }, >+ { .format = DRM_FORMAT_NV21, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 2, .is_yuv = true }, >+ { .format = DRM_FORMAT_NV16, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true }, >+ { .format = DRM_FORMAT_NV61, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true }, >+ { .format = DRM_FORMAT_NV24, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 1, .vsub = 1, .is_yuv = true }, >+ { .format = DRM_FORMAT_NV42, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 1, .vsub = 1, .is_yuv = true }, >+ { .format = DRM_FORMAT_YUYV, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true }, >+ { .format = DRM_FORMAT_YVYU, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true }, >+ { .format = DRM_FORMAT_UYVY, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true }, >+ { .format = DRM_FORMAT_VYUY, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true }, >+ { .format = DRM_FORMAT_AYUV, .depth = 0, .num_planes = 1, .cpp = { 4, 0, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true, .is_yuv = true }, > }; > > unsigned int i; >diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h >index 3e86408..f9c1584 100644 >--- a/include/drm/drm_fourcc.h >+++ b/include/drm/drm_fourcc.h >@@ -39,6 +39,7 @@ struct drm_mode_fb_cmd2; > * @hsub: Horizontal chroma subsampling factor > * @vsub: Vertical chroma subsampling factor > * @has_alpha: Does the format embeds an alpha component? >+ * @is_yuv: Is it a YUV format? > */ > struct drm_format_info { > u32 format; >@@ -48,6 +49,7 @@ struct drm_format_info { > u8 hsub; > u8 vsub; > bool has_alpha; >+ bool is_yuv; > }; > > /** >-- >2.7.4 > ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/5] drm/fourcc: Add is_yuv field to drm_format_info to denote if the format is yuv 2018-07-18 9:12 ` [PATCH 1/5] drm/fourcc: Add is_yuv field to drm_format_info to denote if the format is yuv Brian Starkey @ 2018-07-18 10:21 ` Ville Syrjälä 0 siblings, 0 replies; 11+ messages in thread From: Ville Syrjälä @ 2018-07-18 10:21 UTC (permalink / raw) To: Brian Starkey Cc: Ayan Kumar Halder, airlied, liviu.dudau, dri-devel, peter.ujfalusi, laurent.pinchart, afd, maxime.ripard, linux-rockchip, wens, tomi.valkeinen, malidp, intel-gfx, rodrigo.vivi, nd, linux-arm-kernel, sre, linux-kernel On Wed, Jul 18, 2018 at 10:12:02AM +0100, Brian Starkey wrote: > Hi Ayan, > > On Tue, Jul 17, 2018 at 06:13:42PM +0100, Ayan Kumar Halder wrote: > >A lot of drivers duplicate the function to check if a format is yuv or not. > >If we add a field (to denote whether the format is yuv or not) in the > >drm_format_info table, all the drivers can use this field and it will > >prevent duplication of similar logic. > > This looks like a good idea to me. > > I wonder if the two "has_alpha" and "is_yuv" bools should be bitfields > to reduce the footprint (not sure what the general DRM attitude to > bitfields is), but either way: There are quite a few of these so tighter packing (of the other fields as well perhaps) might be a decent idea. For the series (except for the omapdrm patch which I'll leave for Tomi): Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> > > Reviewed-by: Brian Starkey <brian.starkey@arm.com> > > > > >Signed-off-by: Ayan Kumar halder <ayan.halder@arm.com> > >--- > > drivers/gpu/drm/drm_fourcc.c | 42 +++++++++++++++++++++--------------------- > > include/drm/drm_fourcc.h | 2 ++ > > 2 files changed, 23 insertions(+), 21 deletions(-) > > > >diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c > >index 5ca6395..35c1e27 100644 > >--- a/drivers/gpu/drm/drm_fourcc.c > >+++ b/drivers/gpu/drm/drm_fourcc.c > >@@ -152,27 +152,27 @@ const struct drm_format_info *__drm_format_info(u32 format) > > { .format = DRM_FORMAT_XBGR8888_A8, .depth = 32, .num_planes = 2, .cpp = { 4, 1, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true }, > > { .format = DRM_FORMAT_RGBX8888_A8, .depth = 32, .num_planes = 2, .cpp = { 4, 1, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true }, > > { .format = DRM_FORMAT_BGRX8888_A8, .depth = 32, .num_planes = 2, .cpp = { 4, 1, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true }, > >- { .format = DRM_FORMAT_YUV410, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 4 }, > >- { .format = DRM_FORMAT_YVU410, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 4 }, > >- { .format = DRM_FORMAT_YUV411, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 1 }, > >- { .format = DRM_FORMAT_YVU411, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 1 }, > >- { .format = DRM_FORMAT_YUV420, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 2 }, > >- { .format = DRM_FORMAT_YVU420, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 2 }, > >- { .format = DRM_FORMAT_YUV422, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 1 }, > >- { .format = DRM_FORMAT_YVU422, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 1 }, > >- { .format = DRM_FORMAT_YUV444, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 1, .vsub = 1 }, > >- { .format = DRM_FORMAT_YVU444, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 1, .vsub = 1 }, > >- { .format = DRM_FORMAT_NV12, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 2 }, > >- { .format = DRM_FORMAT_NV21, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 2 }, > >- { .format = DRM_FORMAT_NV16, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 1 }, > >- { .format = DRM_FORMAT_NV61, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 1 }, > >- { .format = DRM_FORMAT_NV24, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 1, .vsub = 1 }, > >- { .format = DRM_FORMAT_NV42, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 1, .vsub = 1 }, > >- { .format = DRM_FORMAT_YUYV, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1 }, > >- { .format = DRM_FORMAT_YVYU, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1 }, > >- { .format = DRM_FORMAT_UYVY, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1 }, > >- { .format = DRM_FORMAT_VYUY, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1 }, > >- { .format = DRM_FORMAT_AYUV, .depth = 0, .num_planes = 1, .cpp = { 4, 0, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true }, > >+ { .format = DRM_FORMAT_YUV410, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 4, .is_yuv = true }, > >+ { .format = DRM_FORMAT_YVU410, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 4, .is_yuv = true }, > >+ { .format = DRM_FORMAT_YUV411, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 1, .is_yuv = true }, > >+ { .format = DRM_FORMAT_YVU411, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 4, .vsub = 1, .is_yuv = true }, > >+ { .format = DRM_FORMAT_YUV420, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 2, .is_yuv = true }, > >+ { .format = DRM_FORMAT_YVU420, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 2, .is_yuv = true }, > >+ { .format = DRM_FORMAT_YUV422, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 1, .is_yuv = true }, > >+ { .format = DRM_FORMAT_YVU422, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 2, .vsub = 1, .is_yuv = true }, > >+ { .format = DRM_FORMAT_YUV444, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 1, .vsub = 1, .is_yuv = true }, > >+ { .format = DRM_FORMAT_YVU444, .depth = 0, .num_planes = 3, .cpp = { 1, 1, 1 }, .hsub = 1, .vsub = 1, .is_yuv = true }, > >+ { .format = DRM_FORMAT_NV12, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 2, .is_yuv = true }, > >+ { .format = DRM_FORMAT_NV21, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 2, .is_yuv = true }, > >+ { .format = DRM_FORMAT_NV16, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true }, > >+ { .format = DRM_FORMAT_NV61, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true }, > >+ { .format = DRM_FORMAT_NV24, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 1, .vsub = 1, .is_yuv = true }, > >+ { .format = DRM_FORMAT_NV42, .depth = 0, .num_planes = 2, .cpp = { 1, 2, 0 }, .hsub = 1, .vsub = 1, .is_yuv = true }, > >+ { .format = DRM_FORMAT_YUYV, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true }, > >+ { .format = DRM_FORMAT_YVYU, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true }, > >+ { .format = DRM_FORMAT_UYVY, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true }, > >+ { .format = DRM_FORMAT_VYUY, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1, .is_yuv = true }, > >+ { .format = DRM_FORMAT_AYUV, .depth = 0, .num_planes = 1, .cpp = { 4, 0, 0 }, .hsub = 1, .vsub = 1, .has_alpha = true, .is_yuv = true }, > > }; > > > > unsigned int i; > >diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h > >index 3e86408..f9c1584 100644 > >--- a/include/drm/drm_fourcc.h > >+++ b/include/drm/drm_fourcc.h > >@@ -39,6 +39,7 @@ struct drm_mode_fb_cmd2; > > * @hsub: Horizontal chroma subsampling factor > > * @vsub: Vertical chroma subsampling factor > > * @has_alpha: Does the format embeds an alpha component? > >+ * @is_yuv: Is it a YUV format? > > */ > > struct drm_format_info { > > u32 format; > >@@ -48,6 +49,7 @@ struct drm_format_info { > > u8 hsub; > > u8 vsub; > > bool has_alpha; > >+ bool is_yuv; > > }; > > > > /** > >-- > >2.7.4 > > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Ville Syrjälä Intel ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2018-09-26 9:31 UTC | newest] Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2018-07-17 17:13 [PATCH 1/5] drm/fourcc: Add is_yuv field to drm_format_info to denote if the format is yuv Ayan Kumar Halder 2018-07-17 17:13 ` [PATCH 2/5] drm/i915: Substitute intel_format_is_yuv() with format->is_yuv Ayan Kumar Halder 2018-07-17 17:13 ` [PATCH 3/5] drm/rockchip: Substitute is_yuv_support() " Ayan Kumar Halder 2018-07-17 17:13 ` [PATCH 4/5] drm/omapdrm: Substitute format_is_yuv() " Ayan Kumar Halder 2018-07-18 10:17 ` [Intel-gfx] " Ville Syrjälä 2018-09-26 9:30 ` Tomi Valkeinen 2018-07-17 17:13 ` [PATCH 5/5] drm/sun4i: Substitute sun4i_backend_format_is_yuv() " Ayan Kumar Halder 2018-07-18 10:15 ` [Intel-gfx] " Ville Syrjälä 2018-07-18 14:40 ` Ayan Halder 2018-07-18 9:12 ` [PATCH 1/5] drm/fourcc: Add is_yuv field to drm_format_info to denote if the format is yuv Brian Starkey 2018-07-18 10:21 ` Ville Syrjälä
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).