[PATCH v2 07/13] drm/format-helper: Add conversion from XRGB8888 to ARGB8888

Thomas Zimmermann tzimmermann at suse.de
Mon Jan 2 10:00:56 UTC 2023


Hi

Am 21.12.22 um 21:07 schrieb Maíra Canal:
> 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 at suse.de>
>> Reviewed-by: Javier Martinez Canillas <javierm at 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.

I see. I'll try to get it backmerged into drm-misc-next soon. Thanks for 
reviewing.

Best regards
Thomas

> 
> [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);

-- 
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Ivo Totev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20230102/f4135a95/attachment-0001.sig>


More information about the dri-devel mailing list