Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /*
0003  * Test cases for the drm_format functions
0004  */
0005 
0006 #define pr_fmt(fmt) "drm_format: " fmt
0007 
0008 #include <linux/errno.h>
0009 #include <linux/kernel.h>
0010 
0011 #include <drm/drm_fourcc.h>
0012 
0013 #include "test-drm_modeset_common.h"
0014 
0015 int igt_check_drm_format_block_width(void *ignored)
0016 {
0017     const struct drm_format_info *info = NULL;
0018 
0019     /* Test invalid arguments */
0020     FAIL_ON(drm_format_info_block_width(info, 0) != 0);
0021     FAIL_ON(drm_format_info_block_width(info, -1) != 0);
0022     FAIL_ON(drm_format_info_block_width(info, 1) != 0);
0023 
0024     /* Test 1 plane format */
0025     info = drm_format_info(DRM_FORMAT_XRGB4444);
0026     FAIL_ON(!info);
0027     FAIL_ON(drm_format_info_block_width(info, 0) != 1);
0028     FAIL_ON(drm_format_info_block_width(info, 1) != 0);
0029     FAIL_ON(drm_format_info_block_width(info, -1) != 0);
0030 
0031     /* Test 2 planes format */
0032     info = drm_format_info(DRM_FORMAT_NV12);
0033     FAIL_ON(!info);
0034     FAIL_ON(drm_format_info_block_width(info, 0) != 1);
0035     FAIL_ON(drm_format_info_block_width(info, 1) != 1);
0036     FAIL_ON(drm_format_info_block_width(info, 2) != 0);
0037     FAIL_ON(drm_format_info_block_width(info, -1) != 0);
0038 
0039     /* Test 3 planes format */
0040     info = drm_format_info(DRM_FORMAT_YUV422);
0041     FAIL_ON(!info);
0042     FAIL_ON(drm_format_info_block_width(info, 0) != 1);
0043     FAIL_ON(drm_format_info_block_width(info, 1) != 1);
0044     FAIL_ON(drm_format_info_block_width(info, 2) != 1);
0045     FAIL_ON(drm_format_info_block_width(info, 3) != 0);
0046     FAIL_ON(drm_format_info_block_width(info, -1) != 0);
0047 
0048     /* Test a tiled format */
0049     info = drm_format_info(DRM_FORMAT_X0L0);
0050     FAIL_ON(!info);
0051     FAIL_ON(drm_format_info_block_width(info, 0) != 2);
0052     FAIL_ON(drm_format_info_block_width(info, 1) != 0);
0053     FAIL_ON(drm_format_info_block_width(info, -1) != 0);
0054 
0055     return 0;
0056 }
0057 
0058 int igt_check_drm_format_block_height(void *ignored)
0059 {
0060     const struct drm_format_info *info = NULL;
0061 
0062     /* Test invalid arguments */
0063     FAIL_ON(drm_format_info_block_height(info, 0) != 0);
0064     FAIL_ON(drm_format_info_block_height(info, -1) != 0);
0065     FAIL_ON(drm_format_info_block_height(info, 1) != 0);
0066 
0067     /* Test 1 plane format */
0068     info = drm_format_info(DRM_FORMAT_XRGB4444);
0069     FAIL_ON(!info);
0070     FAIL_ON(drm_format_info_block_height(info, 0) != 1);
0071     FAIL_ON(drm_format_info_block_height(info, 1) != 0);
0072     FAIL_ON(drm_format_info_block_height(info, -1) != 0);
0073 
0074     /* Test 2 planes format */
0075     info = drm_format_info(DRM_FORMAT_NV12);
0076     FAIL_ON(!info);
0077     FAIL_ON(drm_format_info_block_height(info, 0) != 1);
0078     FAIL_ON(drm_format_info_block_height(info, 1) != 1);
0079     FAIL_ON(drm_format_info_block_height(info, 2) != 0);
0080     FAIL_ON(drm_format_info_block_height(info, -1) != 0);
0081 
0082     /* Test 3 planes format */
0083     info = drm_format_info(DRM_FORMAT_YUV422);
0084     FAIL_ON(!info);
0085     FAIL_ON(drm_format_info_block_height(info, 0) != 1);
0086     FAIL_ON(drm_format_info_block_height(info, 1) != 1);
0087     FAIL_ON(drm_format_info_block_height(info, 2) != 1);
0088     FAIL_ON(drm_format_info_block_height(info, 3) != 0);
0089     FAIL_ON(drm_format_info_block_height(info, -1) != 0);
0090 
0091     /* Test a tiled format */
0092     info = drm_format_info(DRM_FORMAT_X0L0);
0093     FAIL_ON(!info);
0094     FAIL_ON(drm_format_info_block_height(info, 0) != 2);
0095     FAIL_ON(drm_format_info_block_height(info, 1) != 0);
0096     FAIL_ON(drm_format_info_block_height(info, -1) != 0);
0097 
0098     return 0;
0099 }
0100 
0101 int igt_check_drm_format_min_pitch(void *ignored)
0102 {
0103     const struct drm_format_info *info = NULL;
0104 
0105     /* Test invalid arguments */
0106     FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
0107     FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
0108     FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
0109 
0110     /* Test 1 plane 8 bits per pixel format */
0111     info = drm_format_info(DRM_FORMAT_RGB332);
0112     FAIL_ON(!info);
0113     FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
0114     FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
0115     FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
0116 
0117     FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 1);
0118     FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 2);
0119     FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 640);
0120     FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 1024);
0121     FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 1920);
0122     FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 4096);
0123     FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 671);
0124     FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
0125             (uint64_t)UINT_MAX);
0126     FAIL_ON(drm_format_info_min_pitch(info, 0, (UINT_MAX - 1)) !=
0127             (uint64_t)(UINT_MAX - 1));
0128 
0129     /* Test 1 plane 16 bits per pixel format */
0130     info = drm_format_info(DRM_FORMAT_XRGB4444);
0131     FAIL_ON(!info);
0132     FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
0133     FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
0134     FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
0135 
0136     FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 2);
0137     FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 4);
0138     FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 1280);
0139     FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 2048);
0140     FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 3840);
0141     FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 8192);
0142     FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 1342);
0143     FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
0144             (uint64_t)UINT_MAX * 2);
0145     FAIL_ON(drm_format_info_min_pitch(info, 0, (UINT_MAX - 1)) !=
0146             (uint64_t)(UINT_MAX - 1) * 2);
0147 
0148     /* Test 1 plane 24 bits per pixel format */
0149     info = drm_format_info(DRM_FORMAT_RGB888);
0150     FAIL_ON(!info);
0151     FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
0152     FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
0153     FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
0154 
0155     FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 3);
0156     FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 6);
0157     FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 1920);
0158     FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 3072);
0159     FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 5760);
0160     FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 12288);
0161     FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 2013);
0162     FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
0163             (uint64_t)UINT_MAX * 3);
0164     FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX - 1) !=
0165             (uint64_t)(UINT_MAX - 1) * 3);
0166 
0167     /* Test 1 plane 32 bits per pixel format */
0168     info = drm_format_info(DRM_FORMAT_ABGR8888);
0169     FAIL_ON(!info);
0170     FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
0171     FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
0172     FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
0173 
0174     FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 4);
0175     FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 8);
0176     FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 2560);
0177     FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 4096);
0178     FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 7680);
0179     FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 16384);
0180     FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 2684);
0181     FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
0182             (uint64_t)UINT_MAX * 4);
0183     FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX - 1) !=
0184             (uint64_t)(UINT_MAX - 1) * 4);
0185 
0186     /* Test 2 planes format */
0187     info = drm_format_info(DRM_FORMAT_NV12);
0188     FAIL_ON(!info);
0189     FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
0190     FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
0191     FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
0192     FAIL_ON(drm_format_info_min_pitch(info, 2, 0) != 0);
0193 
0194     FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 1);
0195     FAIL_ON(drm_format_info_min_pitch(info, 1, 1) != 2);
0196     FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 2);
0197     FAIL_ON(drm_format_info_min_pitch(info, 1, 1) != 2);
0198     FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 640);
0199     FAIL_ON(drm_format_info_min_pitch(info, 1, 320) != 640);
0200     FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 1024);
0201     FAIL_ON(drm_format_info_min_pitch(info, 1, 512) != 1024);
0202     FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 1920);
0203     FAIL_ON(drm_format_info_min_pitch(info, 1, 960) != 1920);
0204     FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 4096);
0205     FAIL_ON(drm_format_info_min_pitch(info, 1, 2048) != 4096);
0206     FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 671);
0207     FAIL_ON(drm_format_info_min_pitch(info, 1, 336) != 672);
0208     FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
0209             (uint64_t)UINT_MAX);
0210     FAIL_ON(drm_format_info_min_pitch(info, 1, UINT_MAX / 2 + 1) !=
0211             (uint64_t)UINT_MAX + 1);
0212     FAIL_ON(drm_format_info_min_pitch(info, 0, (UINT_MAX - 1)) !=
0213             (uint64_t)(UINT_MAX - 1));
0214     FAIL_ON(drm_format_info_min_pitch(info, 1, (UINT_MAX - 1) /  2) !=
0215             (uint64_t)(UINT_MAX - 1));
0216 
0217     /* Test 3 planes 8 bits per pixel format */
0218     info = drm_format_info(DRM_FORMAT_YUV422);
0219     FAIL_ON(!info);
0220     FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
0221     FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
0222     FAIL_ON(drm_format_info_min_pitch(info, 2, 0) != 0);
0223     FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
0224     FAIL_ON(drm_format_info_min_pitch(info, 3, 0) != 0);
0225 
0226     FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 1);
0227     FAIL_ON(drm_format_info_min_pitch(info, 1, 1) != 1);
0228     FAIL_ON(drm_format_info_min_pitch(info, 2, 1) != 1);
0229     FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 2);
0230     FAIL_ON(drm_format_info_min_pitch(info, 1, 2) != 2);
0231     FAIL_ON(drm_format_info_min_pitch(info, 2, 2) != 2);
0232     FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 640);
0233     FAIL_ON(drm_format_info_min_pitch(info, 1, 320) != 320);
0234     FAIL_ON(drm_format_info_min_pitch(info, 2, 320) != 320);
0235     FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 1024);
0236     FAIL_ON(drm_format_info_min_pitch(info, 1, 512) != 512);
0237     FAIL_ON(drm_format_info_min_pitch(info, 2, 512) != 512);
0238     FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 1920);
0239     FAIL_ON(drm_format_info_min_pitch(info, 1, 960) != 960);
0240     FAIL_ON(drm_format_info_min_pitch(info, 2, 960) != 960);
0241     FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 4096);
0242     FAIL_ON(drm_format_info_min_pitch(info, 1, 2048) != 2048);
0243     FAIL_ON(drm_format_info_min_pitch(info, 2, 2048) != 2048);
0244     FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 671);
0245     FAIL_ON(drm_format_info_min_pitch(info, 1, 336) != 336);
0246     FAIL_ON(drm_format_info_min_pitch(info, 2, 336) != 336);
0247     FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
0248             (uint64_t)UINT_MAX);
0249     FAIL_ON(drm_format_info_min_pitch(info, 1, UINT_MAX / 2 + 1) !=
0250             (uint64_t)UINT_MAX / 2 + 1);
0251     FAIL_ON(drm_format_info_min_pitch(info, 2, UINT_MAX / 2 + 1) !=
0252             (uint64_t)UINT_MAX / 2 + 1);
0253     FAIL_ON(drm_format_info_min_pitch(info, 0, (UINT_MAX - 1) / 2) !=
0254             (uint64_t)(UINT_MAX - 1) / 2);
0255     FAIL_ON(drm_format_info_min_pitch(info, 1, (UINT_MAX - 1) / 2) !=
0256             (uint64_t)(UINT_MAX - 1) / 2);
0257     FAIL_ON(drm_format_info_min_pitch(info, 2, (UINT_MAX - 1) / 2) !=
0258             (uint64_t)(UINT_MAX - 1) / 2);
0259 
0260     /* Test tiled format */
0261     info = drm_format_info(DRM_FORMAT_X0L2);
0262     FAIL_ON(!info);
0263     FAIL_ON(drm_format_info_min_pitch(info, 0, 0) != 0);
0264     FAIL_ON(drm_format_info_min_pitch(info, -1, 0) != 0);
0265     FAIL_ON(drm_format_info_min_pitch(info, 1, 0) != 0);
0266 
0267     FAIL_ON(drm_format_info_min_pitch(info, 0, 1) != 2);
0268     FAIL_ON(drm_format_info_min_pitch(info, 0, 2) != 4);
0269     FAIL_ON(drm_format_info_min_pitch(info, 0, 640) != 1280);
0270     FAIL_ON(drm_format_info_min_pitch(info, 0, 1024) != 2048);
0271     FAIL_ON(drm_format_info_min_pitch(info, 0, 1920) != 3840);
0272     FAIL_ON(drm_format_info_min_pitch(info, 0, 4096) != 8192);
0273     FAIL_ON(drm_format_info_min_pitch(info, 0, 671) != 1342);
0274     FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX) !=
0275             (uint64_t)UINT_MAX * 2);
0276     FAIL_ON(drm_format_info_min_pitch(info, 0, UINT_MAX - 1) !=
0277             (uint64_t)(UINT_MAX - 1) * 2);
0278 
0279     return 0;
0280 }