On 12/20/22 13:11, Thomas Zimmermann wrote: > Add dedicated helper to convert from XRGB8888 to ARGB8888. Sets > all alpha bits to make pixels fully opaque. > > v2: > * use cpubuf_to_le32() > * type fixes > > Signed-off-by: Thomas Zimmermann <tzimmermann@xxxxxxx> > Reviewed-by: Javier Martinez Canillas <javierm@xxxxxxxxxx> > --- > drivers/gpu/drm/drm_format_helper.c | 53 +++++++++++++++- > .../gpu/drm/tests/drm_format_helper_test.c | 63 +++++++++++++++++++ > include/drm/drm_format_helper.h | 3 + > 3 files changed, 117 insertions(+), 2 deletions(-) > [...] > > +static void drm_test_fb_xrgb8888_to_argb8888(struct kunit *test) > +{ > + const struct convert_xrgb8888_case *params = test->param_value; > + const struct convert_to_argb8888_result *result = ¶ms->argb8888_result; > + size_t dst_size; > + u32 *buf = NULL; > + __le32 *xrgb8888 = NULL; > + struct iosys_map dst, src; > + > + struct drm_framebuffer fb = { > + .format = drm_format_info(DRM_FORMAT_XRGB8888), > + .pitches = { params->pitch, 0, 0 }, > + }; > + > + dst_size = conversion_buf_size(DRM_FORMAT_ARGB8888, > + result->dst_pitch, ¶ms->clip); > + KUNIT_ASSERT_GT(test, dst_size, 0); > + > + buf = kunit_kzalloc(test, dst_size, GFP_KERNEL); > + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf); > + iosys_map_set_vaddr(&dst, buf); > + > + xrgb8888 = cpubuf_to_le32(test, params->xrgb8888, TEST_BUF_SIZE); > + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xrgb8888); > + iosys_map_set_vaddr(&src, xrgb8888); > + > + drm_fb_xrgb8888_to_argb8888(&dst, &result->dst_pitch, &src, &fb, ¶ms->clip); > + buf = le32buf_to_cpu(test, (__force const __le32 *)buf, dst_size / sizeof(u32)); > + KUNIT_EXPECT_EQ(test, memcmp(buf, result->expected, dst_size), 0); For this test and the tests from patches 08/13 and 09/13, it would be nice to use the KUNIT_EXPECT_MEMEQ macro instead of the KUNIT_EXPECT_EQ, as can be seen in [1]. I guess drm-misc-next was not rebased yet to support KUNIT_EXPECT_MEMEQ, as it was introduced in the current merge window, but it is good to keep this in mind. [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a52a5451f43bb76743c51dd46788008837243f29 Best Regards, - Maíra Canal > +} > + > static void drm_test_fb_xrgb8888_to_xrgb2101010(struct kunit *test) > { > const struct convert_xrgb8888_case *params = test->param_value; > @@ -484,6 +546,7 @@ static struct kunit_case drm_format_helper_test_cases[] = { > KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_rgb332, convert_xrgb8888_gen_params), > KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_rgb565, convert_xrgb8888_gen_params), > KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_rgb888, convert_xrgb8888_gen_params), > + KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_argb8888, convert_xrgb8888_gen_params), > KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_xrgb2101010, convert_xrgb8888_gen_params), > {} > }; > diff --git a/include/drm/drm_format_helper.h b/include/drm/drm_format_helper.h > index eb5c98cf82b8..3ce8129dfe43 100644 > --- a/include/drm/drm_format_helper.h > +++ b/include/drm/drm_format_helper.h > @@ -33,6 +33,9 @@ void drm_fb_xrgb8888_to_rgb565(struct iosys_map *dst, const unsigned int *dst_pi > void drm_fb_xrgb8888_to_rgb888(struct iosys_map *dst, const unsigned int *dst_pitch, > const struct iosys_map *src, const struct drm_framebuffer *fb, > const struct drm_rect *clip); > +void drm_fb_xrgb8888_to_argb8888(struct iosys_map *dst, const unsigned int *dst_pitch, > + const struct iosys_map *src, const struct drm_framebuffer *fb, > + const struct drm_rect *clip); > void drm_fb_xrgb8888_to_xrgb2101010(struct iosys_map *dst, const unsigned int *dst_pitch, > const struct iosys_map *src, const struct drm_framebuffer *fb, > const struct drm_rect *clip);