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 <tzimmerm...@suse.de>
> Reviewed-by: Javier Martinez Canillas <javi...@redhat.com>
> ---
>  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 = 
> &params->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, &params->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, 
> &params->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);

Reply via email to