0001
0002
0003
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 }