From 7a62a5bb91509cf54df6a07c48b986f0f16c5f24 Mon Sep 17 00:00:00 2001 From: Dave Stevenson Date: Tue, 15 Jul 2025 14:10:19 +0100 Subject: [PATCH] util: pattern: Add support to fill_simple_patterns for P01[016] and S01[026] Adds support to fill_simple_patterns for the P010, P012, and P016 2-plane YUV420 formats, and the S010, S012, and S016 3-plane YUV420 formats. Signed-off-by: Dave Stevenson --- tests/util/pattern.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/tests/util/pattern.c b/tests/util/pattern.c index fee20714..312b2f0f 100644 --- a/tests/util/pattern.c +++ b/tests/util/pattern.c @@ -2266,6 +2266,36 @@ static void insert_value_yuv_planar_10bpp(const struct util_format_info *info, 0xfffff << bit_start); } +static void insert_value_yuv_planar_16bpp(const struct util_format_info *info, + void *planes[3], unsigned int stride, + unsigned int x, unsigned int y, + const struct color_rgba* color) +{ + struct color_yuv val = MAKE_YUV_601(color->red, color->green, color->blue); + const struct util_yuv_info *yuv = &info->yuv; + unsigned int cs = yuv->chroma_stride; + unsigned int xsub = yuv->xsub; + unsigned int ysub = yuv->ysub; + unsigned int chroma_offset = y / ysub; + unsigned short *y_mem = planes[0] + (y * stride); + unsigned short *u_mem = planes[1] + (chroma_offset * (stride * cs / xsub)); + unsigned short *v_mem = planes[2] + (chroma_offset * (stride * cs / xsub)); + + switch(info->format) { + case DRM_FORMAT_P010: + case DRM_FORMAT_P012: + case DRM_FORMAT_P016: + v_mem = info->yuv.order & YUV_YCrCb ? u_mem : u_mem + 1; + u_mem = info->yuv.order & YUV_YCbCr ? u_mem : u_mem + 1; + break; + default: + break; + } + + y_mem[x] = val.y << yuv->shift; + u_mem[x/xsub*cs] = val.u << yuv->shift; + v_mem[x/xsub*cs] = val.v << yuv->shift; +} static void insert_value_rgb32(const struct util_format_info *info, void *planes[3], unsigned int stride, @@ -2324,6 +2354,14 @@ static void fill_simple_patterns(const struct util_format_info *info, case DRM_FORMAT_NV30: func_insert_value = &insert_value_yuv_planar_10bpp; break; + case DRM_FORMAT_P010: + case DRM_FORMAT_P012: + case DRM_FORMAT_P016: + case DRM_FORMAT_S010: + case DRM_FORMAT_S012: + case DRM_FORMAT_S016: + func_insert_value = &insert_value_yuv_planar_16bpp; + break; case DRM_FORMAT_ARGB8888: case DRM_FORMAT_XRGB8888: case DRM_FORMAT_ABGR8888: