Re: [PATCH v4 9/9] drm/selftests: Add tests for drm_format_info* helpers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Oct 12, 2018 at 05:36:00PM +0100, Alexandru Gheorghe wrote:
> Add selftests for the following newly added functions:
> - drm_format_info_block_width
> - drm_format_info_block_height
> - drm_format_info_min_pitch
> 
> Signed-off-by: Alexandru Gheorghe <alexandru-cosmin.gheorghe@xxxxxxx>

There's a bit a bikeshed going on with this, see:

https://lists.freedesktop.org/archives/dri-devel/2018-October/193214.html

I think would be good to add this as a new test-drm_format.c, so we have a
bit of proper code organization.

Also, I think just one kms_selftest wrapper for all of this would be good.

Can you pls reply in that other thread with ack (or comments) so we can
get some alignment about all the different efforts going on in parallel
right now?

Thanks, Daniel

> ---
>  .../gpu/drm/selftests/drm_helper_selftests.h  |   3 +
>  drivers/gpu/drm/selftests/test-drm-helper.c   | 277 ++++++++++++++++++
>  2 files changed, 280 insertions(+)
> 
> diff --git a/drivers/gpu/drm/selftests/drm_helper_selftests.h b/drivers/gpu/drm/selftests/drm_helper_selftests.h
> index 9771290ed228..4e203ac8c134 100644
> --- a/drivers/gpu/drm/selftests/drm_helper_selftests.h
> +++ b/drivers/gpu/drm/selftests/drm_helper_selftests.h
> @@ -7,3 +7,6 @@
>   * Tests are executed in order by igt/drm_selftests_helper
>   */
>  selftest(check_plane_state, igt_check_plane_state)
> +selftest(check_drm_format_block_width, igt_check_drm_format_block_width)
> +selftest(check_drm_format_block_height, igt_check_drm_format_block_height)
> +selftest(check_drm_format_min_pitch, igt_check_drm_format_min_pitch)
> diff --git a/drivers/gpu/drm/selftests/test-drm-helper.c b/drivers/gpu/drm/selftests/test-drm-helper.c
> index a6a1818fdafd..bea77f907d83 100644
> --- a/drivers/gpu/drm/selftests/test-drm-helper.c
> +++ b/drivers/gpu/drm/selftests/test-drm-helper.c
> @@ -7,6 +7,7 @@
>  #include <linux/module.h>
>  
>  #include <drm/drm_atomic_helper.h>
> +#include <drm/drm_fourcc.h>
>  #include <drm/drm_plane_helper.h>
>  #include <drm/drm_modes.h>
>  
> @@ -230,6 +231,282 @@ static int igt_check_plane_state(void *ignored)
>  	return 0;
>  }
>  
> +static int igt_check_drm_format_block_width(void *ignored)
> +{
> +	const struct drm_format_info *info = NULL;
> +
> +	/* Test invalid arguments */
> +	FAIL_ON(drm_format_info_block_width(info, 0) != 0);
> +	FAIL_ON(drm_format_info_block_width(info, -1) != 0);
> +	FAIL_ON(drm_format_info_block_width(info, 1) != 0);
> +
> +	/* Test 1 plane format */
> +	info = drm_format_info(DRM_FORMAT_XRGB4444);
> +	FAIL_ON(!info);
> +	FAIL_ON(drm_format_info_block_width(info, 0) != 1);
> +	FAIL_ON(drm_format_info_block_width(info, 1) != 0);
> +	FAIL_ON(drm_format_info_block_width(info, -1) != 0);
> +
> +	/* Test 2 planes format */
> +	info = drm_format_info(DRM_FORMAT_NV12);
> +	FAIL_ON(!info);
> +	FAIL_ON(drm_format_info_block_width(info, 0) != 1);
> +	FAIL_ON(drm_format_info_block_width(info, 1) != 1);
> +	FAIL_ON(drm_format_info_block_width(info, 2) != 0);
> +	FAIL_ON(drm_format_info_block_width(info, -1) != 0);
> +
> +	/* Test 3 planes format */
> +	info = drm_format_info(DRM_FORMAT_YUV422);
> +	FAIL_ON(!info);
> +	FAIL_ON(drm_format_info_block_width(info, 0) != 1);
> +	FAIL_ON(drm_format_info_block_width(info, 1) != 1);
> +	FAIL_ON(drm_format_info_block_width(info, 2) != 1);
> +	FAIL_ON(drm_format_info_block_width(info, 3) != 0);
> +	FAIL_ON(drm_format_info_block_width(info, -1) != 0);
> +
> +	/* Test a tiled format */
> +	info = drm_format_info(DRM_FORMAT_X0L0);
> +	FAIL_ON(!info);
> +	FAIL_ON(drm_format_info_block_width(info, 0) != 2);
> +	FAIL_ON(drm_format_info_block_width(info, 1) != 0);
> +	FAIL_ON(drm_format_info_block_width(info, -1) != 0);
> +
> +	return 0;
> +}
> +
> +static int igt_check_drm_format_block_height(void *ignored)
> +{
> +	const struct drm_format_info *info = NULL;
> +
> +	/* Test invalid arguments */
> +	FAIL_ON(drm_format_info_block_height(info, 0) != 0);
> +	FAIL_ON(drm_format_info_block_height(info, -1) != 0);
> +	FAIL_ON(drm_format_info_block_height(info, 1) != 0);
> +
> +	/* Test 1 plane format */
> +	info = drm_format_info(DRM_FORMAT_XRGB4444);
> +	FAIL_ON(!info);
> +	FAIL_ON(drm_format_info_block_height(info, 0) != 1);
> +	FAIL_ON(drm_format_info_block_height(info, 1) != 0);
> +	FAIL_ON(drm_format_info_block_height(info, -1) != 0);
> +
> +	/* Test 2 planes format */
> +	info = drm_format_info(DRM_FORMAT_NV12);
> +	FAIL_ON(!info);
> +	FAIL_ON(drm_format_info_block_height(info, 0) != 1);
> +	FAIL_ON(drm_format_info_block_height(info, 1) != 1);
> +	FAIL_ON(drm_format_info_block_height(info, 2) != 0);
> +	FAIL_ON(drm_format_info_block_height(info, -1) != 0);
> +
> +	/* Test 3 planes format */
> +	info = drm_format_info(DRM_FORMAT_YUV422);
> +	FAIL_ON(!info);
> +	FAIL_ON(drm_format_info_block_height(info, 0) != 1);
> +	FAIL_ON(drm_format_info_block_height(info, 1) != 1);
> +	FAIL_ON(drm_format_info_block_height(info, 2) != 1);
> +	FAIL_ON(drm_format_info_block_height(info, 3) != 0);
> +	FAIL_ON(drm_format_info_block_height(info, -1) != 0);
> +
> +	/* Test a tiled format */
> +	info = drm_format_info(DRM_FORMAT_X0L0);
> +	FAIL_ON(!info);
> +	FAIL_ON(drm_format_info_block_height(info, 0) != 2);
> +	FAIL_ON(drm_format_info_block_height(info, 1) != 0);
> +	FAIL_ON(drm_format_info_block_height(info, -1) != 0);
> +
> +	return 0;
> +}
> +
> +static int igt_check_drm_format_min_pitch(void *ignored)
> +{
> +	const struct drm_format_info *info = NULL;
> +
> +	/* Test invalid arguments */
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
> +
> +	/* Test 1 plane 8 bits per pixel format */
> +	info = drm_format_info(DRM_FORMAT_RGB332);
> +	FAIL_ON(!info);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
> +
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 1);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 2);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 640);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 1024);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 1920);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 4096);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 671);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
> +			(uint64_t)UINT_MAX);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, (UINT_MAX - 1)) !=
> +			(uint64_t)(UINT_MAX - 1));
> +
> +	/* Test 1 plane 16 bits per pixel format */
> +	info = drm_format_info(DRM_FORMAT_XRGB4444);
> +	FAIL_ON(!info);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
> +
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 2);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 4);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 1280);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 2048);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 3840);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 8192);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 1342);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
> +			(uint64_t)UINT_MAX * 2);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, (UINT_MAX - 1)) !=
> +			(uint64_t)(UINT_MAX - 1) * 2);
> +
> +	/* Test 1 plane 24 bits per pixel format */
> +	info = drm_format_info(DRM_FORMAT_RGB888);
> +	FAIL_ON(!info);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
> +
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 3);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 6);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 1920);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 3072);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 5760);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 12288);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 2013);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
> +			(uint64_t)UINT_MAX * 3);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX - 1) !=
> +			(uint64_t)(UINT_MAX - 1) * 3);
> +
> +	/* Test 1 plane 32 bits per pixel format */
> +	info = drm_format_info(DRM_FORMAT_ABGR8888);
> +	FAIL_ON(!info);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
> +
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 4);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 8);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 2560);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 4096);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 7680);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 16384);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 2684);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
> +			(uint64_t)UINT_MAX * 4);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX - 1) !=
> +			(uint64_t)(UINT_MAX - 1) * 4);
> +
> +	/* Test 2 planes format */
> +	info = drm_format_info(DRM_FORMAT_NV12);
> +	FAIL_ON(!info);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, 2, 0) != 0);
> +
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 1);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 1) != 2);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 2);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 1) != 2);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 640);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 320) != 640);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 1024);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 512) != 1024);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 1920);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 960) != 1920);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 4096);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 2048) != 4096);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 671);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 336) != 672);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
> +			(uint64_t)UINT_MAX);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, UINT_MAX / 2 + 1) !=
> +			(uint64_t)UINT_MAX + 1);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, (UINT_MAX - 1)) !=
> +			(uint64_t)(UINT_MAX - 1));
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, (UINT_MAX - 1) /  2) !=
> +			(uint64_t)(UINT_MAX - 1));
> +
> +	/* Test 3 planes 8 bits per pixel format */
> +	info = drm_format_info(DRM_FORMAT_YUV422);
> +	FAIL_ON(!info);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, 2, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, 3, 0) != 0);
> +
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 1);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 1) != 1);
> +	FAIL_ON(drm_format_info_min_pitch(info, 2, 1) != 1);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 2);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 2) != 2);
> +	FAIL_ON(drm_format_info_min_pitch(info, 2, 2) != 2);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 640);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 320) != 320);
> +	FAIL_ON(drm_format_info_min_pitch(info, 2, 320) != 320);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 1024);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 512) != 512);
> +	FAIL_ON(drm_format_info_min_pitch(info, 2, 512) != 512);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 1920);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 960) != 960);
> +	FAIL_ON(drm_format_info_min_pitch(info, 2, 960) != 960);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 4096);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 2048) != 2048);
> +	FAIL_ON(drm_format_info_min_pitch(info, 2, 2048) != 2048);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 671);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 336) != 336);
> +	FAIL_ON(drm_format_info_min_pitch(info, 2, 336) != 336);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
> +			(uint64_t)UINT_MAX);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, UINT_MAX / 2 + 1) !=
> +			(uint64_t)UINT_MAX / 2 + 1);
> +	FAIL_ON(drm_format_info_min_pitch(info, 2, UINT_MAX / 2 + 1) !=
> +			(uint64_t)UINT_MAX / 2 + 1);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, (UINT_MAX - 1) / 2) !=
> +			(uint64_t)(UINT_MAX - 1) / 2);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, (UINT_MAX - 1) / 2) !=
> +			(uint64_t)(UINT_MAX - 1) / 2);
> +	FAIL_ON(drm_format_info_min_pitch(info, 2, (UINT_MAX - 1) / 2) !=
> +			(uint64_t)(UINT_MAX - 1) / 2);
> +
> +	/* Test tiled format */
> +	info = drm_format_info(DRM_FORMAT_X0L2);
> +	FAIL_ON(!info);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
> +
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 2);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 4);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 1280);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 2048);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 3840);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 8192);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 1342);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
> +			(uint64_t)UINT_MAX * 2);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX - 1) !=
> +			(uint64_t)(UINT_MAX - 1) * 2);
> +
> +	/* Test format with cpp/char_per_block 0 */
> +	info = drm_format_info(DRM_FORMAT_VUY101010);
> +	FAIL_ON(!info);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
> +
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 0);
> +	FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) != 0);
> +
> +	return 0;
> +}
>  #include "drm_selftest.c"
>  
>  static int __init test_drm_helper_init(void)
> -- 
> 2.18.0
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux