Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  1// SPDX-License-Identifier: GPL-2.0
  2/*
  3 * Test cases for the drm_format functions
  4 *
  5 * Copyright (c) 2022 MaĆ­ra Canal <mairacanal@riseup.net>
  6 */
  7
  8#include <kunit/test.h>
  9
 10#include <drm/drm_fourcc.h>
 11
 12static void drm_test_format_block_width_invalid(struct kunit *test)
 13{
 14	const struct drm_format_info *info = NULL;
 15
 16	KUNIT_EXPECT_EQ(test, drm_format_info_block_width(info, 0), 0);
 17	KUNIT_EXPECT_EQ(test, drm_format_info_block_width(info, -1), 0);
 18	KUNIT_EXPECT_EQ(test, drm_format_info_block_width(info, 1), 0);
 19}
 20
 21static void drm_test_format_block_width_one_plane(struct kunit *test)
 22{
 23	const struct drm_format_info *info = drm_format_info(DRM_FORMAT_XRGB4444);
 24
 25	KUNIT_ASSERT_NOT_NULL(test, info);
 26
 27	KUNIT_EXPECT_EQ(test, drm_format_info_block_width(info, 0), 1);
 28	KUNIT_EXPECT_EQ(test, drm_format_info_block_width(info, 1), 0);
 29	KUNIT_EXPECT_EQ(test, drm_format_info_block_width(info, -1), 0);
 30}
 31
 32static void drm_test_format_block_width_two_plane(struct kunit *test)
 33{
 34	const struct drm_format_info *info = drm_format_info(DRM_FORMAT_NV12);
 35
 36	KUNIT_ASSERT_NOT_NULL(test, info);
 37
 38	KUNIT_EXPECT_EQ(test, drm_format_info_block_width(info, 0), 1);
 39	KUNIT_EXPECT_EQ(test, drm_format_info_block_width(info, 1), 1);
 40	KUNIT_EXPECT_EQ(test, drm_format_info_block_width(info, 2), 0);
 41	KUNIT_EXPECT_EQ(test, drm_format_info_block_width(info, -1), 0);
 42}
 43
 44static void drm_test_format_block_width_three_plane(struct kunit *test)
 45{
 46	const struct drm_format_info *info = drm_format_info(DRM_FORMAT_YUV422);
 47
 48	KUNIT_ASSERT_NOT_NULL(test, info);
 49
 50	KUNIT_EXPECT_EQ(test, drm_format_info_block_width(info, 0), 1);
 51	KUNIT_EXPECT_EQ(test, drm_format_info_block_width(info, 1), 1);
 52	KUNIT_EXPECT_EQ(test, drm_format_info_block_width(info, 2), 1);
 53	KUNIT_EXPECT_EQ(test, drm_format_info_block_width(info, 3), 0);
 54	KUNIT_EXPECT_EQ(test, drm_format_info_block_width(info, -1), 0);
 55}
 56
 57static void drm_test_format_block_width_tiled(struct kunit *test)
 58{
 59	const struct drm_format_info *info = drm_format_info(DRM_FORMAT_X0L0);
 60
 61	KUNIT_ASSERT_NOT_NULL(test, info);
 62
 63	KUNIT_EXPECT_EQ(test, drm_format_info_block_width(info, 0), 2);
 64	KUNIT_EXPECT_EQ(test, drm_format_info_block_width(info, 1), 0);
 65	KUNIT_EXPECT_EQ(test, drm_format_info_block_width(info, -1), 0);
 66}
 67
 68static void drm_test_format_block_height_invalid(struct kunit *test)
 69{
 70	const struct drm_format_info *info = NULL;
 71
 72	KUNIT_EXPECT_EQ(test, drm_format_info_block_height(info, 0), 0);
 73	KUNIT_EXPECT_EQ(test, drm_format_info_block_height(info, -1), 0);
 74	KUNIT_EXPECT_EQ(test, drm_format_info_block_height(info, 1), 0);
 75}
 76
 77static void drm_test_format_block_height_one_plane(struct kunit *test)
 78{
 79	const struct drm_format_info *info = drm_format_info(DRM_FORMAT_XRGB4444);
 80
 81	KUNIT_ASSERT_NOT_NULL(test, info);
 82
 83	KUNIT_EXPECT_EQ(test, drm_format_info_block_height(info, 0), 1);
 84	KUNIT_EXPECT_EQ(test, drm_format_info_block_height(info, -1), 0);
 85	KUNIT_EXPECT_EQ(test, drm_format_info_block_height(info, 1), 0);
 86}
 87
 88static void drm_test_format_block_height_two_plane(struct kunit *test)
 89{
 90	const struct drm_format_info *info = drm_format_info(DRM_FORMAT_NV12);
 91
 92	KUNIT_ASSERT_NOT_NULL(test, info);
 93
 94	KUNIT_EXPECT_EQ(test, drm_format_info_block_height(info, 0), 1);
 95	KUNIT_EXPECT_EQ(test, drm_format_info_block_height(info, 1), 1);
 96	KUNIT_EXPECT_EQ(test, drm_format_info_block_height(info, 2), 0);
 97	KUNIT_EXPECT_EQ(test, drm_format_info_block_height(info, -1), 0);
 98}
 99
100static void drm_test_format_block_height_three_plane(struct kunit *test)
101{
102	const struct drm_format_info *info = drm_format_info(DRM_FORMAT_YUV422);
103
104	KUNIT_ASSERT_NOT_NULL(test, info);
105
106	KUNIT_EXPECT_EQ(test, drm_format_info_block_height(info, 0), 1);
107	KUNIT_EXPECT_EQ(test, drm_format_info_block_height(info, 1), 1);
108	KUNIT_EXPECT_EQ(test, drm_format_info_block_height(info, 2), 1);
109	KUNIT_EXPECT_EQ(test, drm_format_info_block_height(info, 3), 0);
110	KUNIT_EXPECT_EQ(test, drm_format_info_block_height(info, -1), 0);
111}
112
113static void drm_test_format_block_height_tiled(struct kunit *test)
114{
115	const struct drm_format_info *info = drm_format_info(DRM_FORMAT_X0L0);
116
117	KUNIT_ASSERT_NOT_NULL(test, info);
118
119	KUNIT_EXPECT_EQ(test, drm_format_info_block_height(info, 0), 2);
120	KUNIT_EXPECT_EQ(test, drm_format_info_block_height(info, 1), 0);
121	KUNIT_EXPECT_EQ(test, drm_format_info_block_height(info, -1), 0);
122}
123
124static void drm_test_format_min_pitch_invalid(struct kunit *test)
125{
126	const struct drm_format_info *info = NULL;
127
128	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 0), 0);
129	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, -1, 0), 0);
130	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 0), 0);
131}
132
133static void drm_test_format_min_pitch_one_plane_8bpp(struct kunit *test)
134{
135	const struct drm_format_info *info = drm_format_info(DRM_FORMAT_RGB332);
136
137	KUNIT_ASSERT_NOT_NULL(test, info);
138
139	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 0), 0);
140	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, -1, 0), 0);
141	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 0), 0);
142
143	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1), 1);
144	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 2), 2);
145	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 640), 640);
146	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1024), 1024);
147	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1920), 1920);
148	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 4096), 4096);
149	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 671), 671);
150	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, UINT_MAX),
151			(uint64_t)UINT_MAX);
152	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, (UINT_MAX - 1)),
153			(uint64_t)(UINT_MAX - 1));
154}
155
156static void drm_test_format_min_pitch_one_plane_16bpp(struct kunit *test)
157{
158	const struct drm_format_info *info = drm_format_info(DRM_FORMAT_XRGB4444);
159
160	KUNIT_ASSERT_NOT_NULL(test, info);
161
162	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 0), 0);
163	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, -1, 0), 0);
164	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 0), 0);
165
166	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1), 2);
167	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 2), 4);
168	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 640), 1280);
169	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1024), 2048);
170	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1920), 3840);
171	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 4096), 8192);
172	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 671), 1342);
173	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, UINT_MAX),
174			(uint64_t)UINT_MAX * 2);
175	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, (UINT_MAX - 1)),
176			(uint64_t)(UINT_MAX - 1) * 2);
177}
178
179static void drm_test_format_min_pitch_one_plane_24bpp(struct kunit *test)
180{
181	const struct drm_format_info *info = drm_format_info(DRM_FORMAT_RGB888);
182
183	KUNIT_ASSERT_NOT_NULL(test, info);
184
185	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 0), 0);
186	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, -1, 0), 0);
187	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 0), 0);
188
189	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1), 3);
190	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 2), 6);
191	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 640), 1920);
192	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1024), 3072);
193	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1920), 5760);
194	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 4096), 12288);
195	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 671), 2013);
196	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, UINT_MAX),
197			(uint64_t)UINT_MAX * 3);
198	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, UINT_MAX - 1),
199			(uint64_t)(UINT_MAX - 1) * 3);
200}
201
202static void drm_test_format_min_pitch_one_plane_32bpp(struct kunit *test)
203{
204	const struct drm_format_info *info = drm_format_info(DRM_FORMAT_ABGR8888);
205
206	KUNIT_ASSERT_NOT_NULL(test, info);
207
208	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 0), 0);
209	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, -1, 0), 0);
210	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 0), 0);
211
212	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1), 4);
213	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 2), 8);
214	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 640), 2560);
215	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1024), 4096);
216	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1920), 7680);
217	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 4096), 16384);
218	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 671), 2684);
219	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, UINT_MAX),
220			(uint64_t)UINT_MAX * 4);
221	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, UINT_MAX - 1),
222			(uint64_t)(UINT_MAX - 1) * 4);
223}
224
225static void drm_test_format_min_pitch_two_plane(struct kunit *test)
226{
227	const struct drm_format_info *info = drm_format_info(DRM_FORMAT_NV12);
228
229	KUNIT_ASSERT_NOT_NULL(test, info);
230
231	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 0), 0);
232	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 0), 0);
233	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, -1, 0), 0);
234	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 2, 0), 0);
235
236	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1), 1);
237	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 1), 2);
238	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 2), 2);
239	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 1), 2);
240	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 640), 640);
241	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 320), 640);
242	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1024), 1024);
243	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 512), 1024);
244	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1920), 1920);
245	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 960), 1920);
246	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 4096), 4096);
247	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 2048), 4096);
248	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 671), 671);
249	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 336), 672);
250	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, UINT_MAX),
251			(uint64_t)UINT_MAX);
252	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, UINT_MAX / 2 + 1),
253			(uint64_t)UINT_MAX + 1);
254	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, (UINT_MAX - 1)),
255			(uint64_t)(UINT_MAX - 1));
256	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, (UINT_MAX - 1) /  2),
257			(uint64_t)(UINT_MAX - 1));
258}
259
260static void drm_test_format_min_pitch_three_plane_8bpp(struct kunit *test)
261{
262	const struct drm_format_info *info = drm_format_info(DRM_FORMAT_YUV422);
263
264	KUNIT_ASSERT_NOT_NULL(test, info);
265
266	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 0), 0);
267	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 0), 0);
268	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 2, 0), 0);
269	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, -1, 0), 0);
270	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 3, 0), 0);
271
272	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1), 1);
273	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 1), 1);
274	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 2, 1), 1);
275	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 2), 2);
276	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 2), 2);
277	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 2, 2), 2);
278	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 640), 640);
279	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 320), 320);
280	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 2, 320), 320);
281	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1024), 1024);
282	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 512), 512);
283	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 2, 512), 512);
284	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1920), 1920);
285	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 960), 960);
286	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 2, 960), 960);
287	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 4096), 4096);
288	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 2048), 2048);
289	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 2, 2048), 2048);
290	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 671), 671);
291	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 336), 336);
292	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 2, 336), 336);
293	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, UINT_MAX),
294			(uint64_t)UINT_MAX);
295	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, UINT_MAX / 2 + 1),
296			(uint64_t)UINT_MAX / 2 + 1);
297	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 2, UINT_MAX / 2 + 1),
298			(uint64_t)UINT_MAX / 2 + 1);
299	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, (UINT_MAX - 1) / 2),
300			(uint64_t)(UINT_MAX - 1) / 2);
301	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, (UINT_MAX - 1) / 2),
302			(uint64_t)(UINT_MAX - 1) / 2);
303	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 2, (UINT_MAX - 1) / 2),
304			(uint64_t)(UINT_MAX - 1) / 2);
305}
306
307static void drm_test_format_min_pitch_tiled(struct kunit *test)
308{
309	const struct drm_format_info *info = drm_format_info(DRM_FORMAT_X0L2);
310
311	KUNIT_ASSERT_NOT_NULL(test, info);
312
313	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 0), 0);
314	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, -1, 0), 0);
315	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 1, 0), 0);
316
317	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1), 2);
318	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 2), 4);
319	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 640), 1280);
320	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1024), 2048);
321	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 1920), 3840);
322	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 4096), 8192);
323	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, 671), 1342);
324	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, UINT_MAX),
325			(uint64_t)UINT_MAX * 2);
326	KUNIT_EXPECT_EQ(test, drm_format_info_min_pitch(info, 0, UINT_MAX - 1),
327			(uint64_t)(UINT_MAX - 1) * 2);
328}
329
330static struct kunit_case drm_format_tests[] = {
331	KUNIT_CASE(drm_test_format_block_width_invalid),
332	KUNIT_CASE(drm_test_format_block_width_one_plane),
333	KUNIT_CASE(drm_test_format_block_width_two_plane),
334	KUNIT_CASE(drm_test_format_block_width_three_plane),
335	KUNIT_CASE(drm_test_format_block_width_tiled),
336	KUNIT_CASE(drm_test_format_block_height_invalid),
337	KUNIT_CASE(drm_test_format_block_height_one_plane),
338	KUNIT_CASE(drm_test_format_block_height_two_plane),
339	KUNIT_CASE(drm_test_format_block_height_three_plane),
340	KUNIT_CASE(drm_test_format_block_height_tiled),
341	KUNIT_CASE(drm_test_format_min_pitch_invalid),
342	KUNIT_CASE(drm_test_format_min_pitch_one_plane_8bpp),
343	KUNIT_CASE(drm_test_format_min_pitch_one_plane_16bpp),
344	KUNIT_CASE(drm_test_format_min_pitch_one_plane_24bpp),
345	KUNIT_CASE(drm_test_format_min_pitch_one_plane_32bpp),
346	KUNIT_CASE(drm_test_format_min_pitch_two_plane),
347	KUNIT_CASE(drm_test_format_min_pitch_three_plane_8bpp),
348	KUNIT_CASE(drm_test_format_min_pitch_tiled),
349	{}
350};
351
352static struct kunit_suite drm_format_test_suite = {
353	.name = "drm_format",
354	.test_cases = drm_format_tests,
355};
356
357kunit_test_suite(drm_format_test_suite);
358
359MODULE_LICENSE("GPL");