mirror of
https://github.com/torvalds/linux.git
synced 2024-11-13 15:41:39 +00:00
drm/tests: Add KUnit tests for drm_fb_build_fourcc_list()
Insert parameterized test for the drm_fb_build_fourcc_list() to ensure correctness and prevent future regressions. Signed-off-by: Arthur Grillo <arthurgrillo@riseup.net> Signed-off-by: Maíra Canal <mairacanal@riseup.net> Link: https://patchwork.freedesktop.org/patch/msgid/20230814-gsoc-drm-format-test-v2-v3-4-bd3e9f9bc2fb@riseup.net
This commit is contained in:
parent
c6099d7ed3
commit
371e0b186a
@ -3,11 +3,13 @@
|
||||
#include <kunit/test.h>
|
||||
|
||||
#include <drm/drm_device.h>
|
||||
#include <drm/drm_drv.h>
|
||||
#include <drm/drm_file.h>
|
||||
#include <drm/drm_format_helper.h>
|
||||
#include <drm/drm_fourcc.h>
|
||||
#include <drm/drm_framebuffer.h>
|
||||
#include <drm/drm_gem_framebuffer_helper.h>
|
||||
#include <drm/drm_kunit_helpers.h>
|
||||
#include <drm/drm_mode.h>
|
||||
#include <drm/drm_print.h>
|
||||
#include <drm/drm_rect.h>
|
||||
@ -1041,6 +1043,147 @@ static void drm_test_fb_clip_offset(struct kunit *test)
|
||||
KUNIT_EXPECT_EQ(test, offset, params->expected_offset);
|
||||
}
|
||||
|
||||
struct fb_build_fourcc_list_case {
|
||||
const char *name;
|
||||
u32 native_fourccs[TEST_BUF_SIZE];
|
||||
size_t native_fourccs_size;
|
||||
u32 expected[TEST_BUF_SIZE];
|
||||
size_t expected_fourccs_size;
|
||||
};
|
||||
|
||||
static struct fb_build_fourcc_list_case fb_build_fourcc_list_cases[] = {
|
||||
{
|
||||
.name = "no native formats",
|
||||
.native_fourccs = { },
|
||||
.native_fourccs_size = 0,
|
||||
.expected = { DRM_FORMAT_XRGB8888 },
|
||||
.expected_fourccs_size = 1,
|
||||
},
|
||||
{
|
||||
.name = "XRGB8888 as native format",
|
||||
.native_fourccs = { DRM_FORMAT_XRGB8888 },
|
||||
.native_fourccs_size = 1,
|
||||
.expected = { DRM_FORMAT_XRGB8888 },
|
||||
.expected_fourccs_size = 1,
|
||||
},
|
||||
{
|
||||
.name = "remove duplicates",
|
||||
.native_fourccs = {
|
||||
DRM_FORMAT_XRGB8888,
|
||||
DRM_FORMAT_XRGB8888,
|
||||
DRM_FORMAT_RGB888,
|
||||
DRM_FORMAT_RGB888,
|
||||
DRM_FORMAT_RGB888,
|
||||
DRM_FORMAT_XRGB8888,
|
||||
DRM_FORMAT_RGB888,
|
||||
DRM_FORMAT_RGB565,
|
||||
DRM_FORMAT_RGB888,
|
||||
DRM_FORMAT_XRGB8888,
|
||||
DRM_FORMAT_RGB565,
|
||||
DRM_FORMAT_RGB565,
|
||||
DRM_FORMAT_XRGB8888,
|
||||
},
|
||||
.native_fourccs_size = 11,
|
||||
.expected = {
|
||||
DRM_FORMAT_XRGB8888,
|
||||
DRM_FORMAT_RGB888,
|
||||
DRM_FORMAT_RGB565,
|
||||
},
|
||||
.expected_fourccs_size = 3,
|
||||
},
|
||||
{
|
||||
.name = "convert alpha formats",
|
||||
.native_fourccs = {
|
||||
DRM_FORMAT_ARGB1555,
|
||||
DRM_FORMAT_ABGR1555,
|
||||
DRM_FORMAT_RGBA5551,
|
||||
DRM_FORMAT_BGRA5551,
|
||||
DRM_FORMAT_ARGB8888,
|
||||
DRM_FORMAT_ABGR8888,
|
||||
DRM_FORMAT_RGBA8888,
|
||||
DRM_FORMAT_BGRA8888,
|
||||
DRM_FORMAT_ARGB2101010,
|
||||
DRM_FORMAT_ABGR2101010,
|
||||
DRM_FORMAT_RGBA1010102,
|
||||
DRM_FORMAT_BGRA1010102,
|
||||
},
|
||||
.native_fourccs_size = 12,
|
||||
.expected = {
|
||||
DRM_FORMAT_XRGB1555,
|
||||
DRM_FORMAT_XBGR1555,
|
||||
DRM_FORMAT_RGBX5551,
|
||||
DRM_FORMAT_BGRX5551,
|
||||
DRM_FORMAT_XRGB8888,
|
||||
DRM_FORMAT_XBGR8888,
|
||||
DRM_FORMAT_RGBX8888,
|
||||
DRM_FORMAT_BGRX8888,
|
||||
DRM_FORMAT_XRGB2101010,
|
||||
DRM_FORMAT_XBGR2101010,
|
||||
DRM_FORMAT_RGBX1010102,
|
||||
DRM_FORMAT_BGRX1010102,
|
||||
},
|
||||
.expected_fourccs_size = 12,
|
||||
},
|
||||
{
|
||||
.name = "random formats",
|
||||
.native_fourccs = {
|
||||
DRM_FORMAT_Y212,
|
||||
DRM_FORMAT_ARGB1555,
|
||||
DRM_FORMAT_ABGR16161616F,
|
||||
DRM_FORMAT_C8,
|
||||
DRM_FORMAT_BGR888,
|
||||
DRM_FORMAT_XRGB1555,
|
||||
DRM_FORMAT_RGBA5551,
|
||||
DRM_FORMAT_BGR565_A8,
|
||||
DRM_FORMAT_R10,
|
||||
DRM_FORMAT_XYUV8888,
|
||||
},
|
||||
.native_fourccs_size = 10,
|
||||
.expected = {
|
||||
DRM_FORMAT_Y212,
|
||||
DRM_FORMAT_XRGB1555,
|
||||
DRM_FORMAT_ABGR16161616F,
|
||||
DRM_FORMAT_C8,
|
||||
DRM_FORMAT_BGR888,
|
||||
DRM_FORMAT_RGBX5551,
|
||||
DRM_FORMAT_BGR565_A8,
|
||||
DRM_FORMAT_R10,
|
||||
DRM_FORMAT_XYUV8888,
|
||||
DRM_FORMAT_XRGB8888,
|
||||
},
|
||||
.expected_fourccs_size = 10,
|
||||
},
|
||||
};
|
||||
|
||||
static void fb_build_fourcc_list_case_desc(struct fb_build_fourcc_list_case *t, char *desc)
|
||||
{
|
||||
strscpy(desc, t->name, KUNIT_PARAM_DESC_SIZE);
|
||||
}
|
||||
|
||||
KUNIT_ARRAY_PARAM(fb_build_fourcc_list, fb_build_fourcc_list_cases, fb_build_fourcc_list_case_desc);
|
||||
|
||||
static void drm_test_fb_build_fourcc_list(struct kunit *test)
|
||||
{
|
||||
const struct fb_build_fourcc_list_case *params = test->param_value;
|
||||
u32 fourccs_out[TEST_BUF_SIZE];
|
||||
size_t nfourccs_out;
|
||||
struct drm_device *drm;
|
||||
struct device *dev;
|
||||
|
||||
dev = drm_kunit_helper_alloc_device(test);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, dev);
|
||||
|
||||
drm = __drm_kunit_helper_alloc_drm_device(test, dev, sizeof(*drm), 0, DRIVER_MODESET);
|
||||
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, drm);
|
||||
|
||||
nfourccs_out = drm_fb_build_fourcc_list(drm, params->native_fourccs,
|
||||
params->native_fourccs_size,
|
||||
fourccs_out, TEST_BUF_SIZE);
|
||||
|
||||
KUNIT_EXPECT_EQ(test, nfourccs_out, params->expected_fourccs_size);
|
||||
KUNIT_EXPECT_MEMEQ(test, fourccs_out, params->expected, TEST_BUF_SIZE);
|
||||
}
|
||||
|
||||
static struct kunit_case drm_format_helper_test_cases[] = {
|
||||
KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_gray8, convert_xrgb8888_gen_params),
|
||||
KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_rgb332, convert_xrgb8888_gen_params),
|
||||
@ -1055,6 +1198,7 @@ static struct kunit_case drm_format_helper_test_cases[] = {
|
||||
KUNIT_CASE_PARAM(drm_test_fb_xrgb8888_to_mono, convert_xrgb8888_gen_params),
|
||||
KUNIT_CASE_PARAM(drm_test_fb_swab, convert_xrgb8888_gen_params),
|
||||
KUNIT_CASE_PARAM(drm_test_fb_clip_offset, clip_offset_gen_params),
|
||||
KUNIT_CASE_PARAM(drm_test_fb_build_fourcc_list, fb_build_fourcc_list_gen_params),
|
||||
{}
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user