summaryrefslogtreecommitdiff
path: root/tests/kms_plane.c
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2018-07-18 22:46:50 +0300
committerVille Syrjälä <ville.syrjala@linux.intel.com>2019-03-29 22:20:35 +0200
commit368a073932559c451d78a16075de9c4b7080d9cf (patch)
treebb4b3c0568c6815a1a6abb338d7cc889fba8410d /tests/kms_plane.c
parent887d89cc1dbab454d36095182d6e460331bcf199 (diff)
tests/kms_plane: Test all modifiers as well
Instead of just testing each pixel format let's test every format+modifier combo. Obviously testing with solid filled fbs isn't the most effective way to detect tiling problems, but we can't really do much more if we want to keep comparing YUV vs. RGB results (unless we start to render the RGB content in a way that matches the YUV subsampling behaviour of the hardware). Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Diffstat (limited to 'tests/kms_plane.c')
-rw-r--r--tests/kms_plane.c32
1 files changed, 20 insertions, 12 deletions
diff --git a/tests/kms_plane.c b/tests/kms_plane.c
index 3f14dbf8..33e2905a 100644
--- a/tests/kms_plane.c
+++ b/tests/kms_plane.c
@@ -392,7 +392,8 @@ static void set_legacy_lut(data_t *data, enum pipe pipe,
static void test_format_plane_color(data_t *data, enum pipe pipe,
igt_plane_t *plane,
- uint32_t format, int width, int height,
+ uint32_t format, uint64_t modifier,
+ int width, int height,
int color, igt_crc_t *crc, struct igt_fb *fb)
{
const color_t *c = &colors[color];
@@ -400,7 +401,7 @@ static void test_format_plane_color(data_t *data, enum pipe pipe,
if (data->crop == 0 || format == DRM_FORMAT_XRGB8888) {
igt_create_color_fb(data->drm_fd, width, height,
- format, DRM_FORMAT_MOD_NONE,
+ format, modifier,
c->red, c->green, c->blue, fb);
} else {
/*
@@ -412,7 +413,7 @@ static void test_format_plane_color(data_t *data, enum pipe pipe,
igt_create_fb(data->drm_fd,
width + data->crop * 2,
height + data->crop * 2,
- format, DRM_FORMAT_MOD_NONE, fb);
+ format, modifier, fb);
cr = igt_get_cairo_ctx(data->drm_fd, fb);
@@ -450,6 +451,7 @@ static bool test_format_plane(data_t *data, enum pipe pipe,
struct igt_fb fb = {};
drmModeModeInfo *mode;
uint32_t format, ref_format;
+ uint64_t modifier, ref_modifier;
uint64_t width, height;
igt_crc_t ref_crc[ARRAY_SIZE(colors)];
bool result = true;
@@ -465,6 +467,7 @@ static bool test_format_plane(data_t *data, enum pipe pipe,
width = mode->hdisplay;
height = mode->vdisplay;
ref_format = format = DRM_FORMAT_XRGB8888;
+ ref_modifier = modifier = DRM_FORMAT_MOD_NONE;
} else {
if (!plane->drm_plane) {
igt_debug("Only legacy cursor ioctl supported, skipping cursor plane\n");
@@ -473,6 +476,7 @@ static bool test_format_plane(data_t *data, enum pipe pipe,
do_or_die(drmGetCap(data->drm_fd, DRM_CAP_CURSOR_WIDTH, &width));
do_or_die(drmGetCap(data->drm_fd, DRM_CAP_CURSOR_HEIGHT, &height));
ref_format = format = DRM_FORMAT_ARGB8888;
+ ref_modifier = modifier = DRM_FORMAT_MOD_NONE;
}
igt_debug("Testing connector %s on %s plane %s.%u\n",
@@ -481,8 +485,8 @@ static bool test_format_plane(data_t *data, enum pipe pipe,
igt_pipe_crc_start(data->pipe_crc);
- igt_info("Testing format " IGT_FORMAT_FMT " on %s.%u\n",
- IGT_FORMAT_ARGS(format),
+ igt_info("Testing format " IGT_FORMAT_FMT " / modifier 0x%" PRIx64 " on %s.%u\n",
+ IGT_FORMAT_ARGS(format), modifier,
kmstest_pipe_name(pipe), plane->index);
if (data->display.is_atomic) {
@@ -508,30 +512,34 @@ static bool test_format_plane(data_t *data, enum pipe pipe,
for (int i = 0; i < ARRAY_SIZE(colors); i++) {
test_format_plane_color(data, pipe, plane,
- format, width, height,
+ format, modifier,
+ width, height,
i, &ref_crc[i], &fb);
}
- for (int i = 0; i < plane->drm_plane->count_formats; i++) {
+ for (int i = 0; i < plane->format_mod_count; i++) {
int crc_mismatch_count = 0;
int crc_mismatch_mask = 0;
igt_crc_t crc;
- format = plane->drm_plane->formats[i];
+ format = plane->formats[i];
+ modifier = plane->modifiers[i];
- if (format == ref_format)
+ if (format == ref_format &&
+ modifier == ref_modifier)
continue;
if (!igt_fb_supported_format(format))
continue;
- igt_info("Testing format " IGT_FORMAT_FMT " on %s.%u\n",
- IGT_FORMAT_ARGS(format),
+ igt_info("Testing format " IGT_FORMAT_FMT " / modifier 0x%" PRIx64 " on %s.%u\n",
+ IGT_FORMAT_ARGS(format), modifier,
kmstest_pipe_name(pipe), plane->index);
for (int j = 0; j < ARRAY_SIZE(colors); j++) {
test_format_plane_color(data, pipe, plane,
- format, width, height,
+ format, modifier,
+ width, height,
j, &crc, &fb);
if (!igt_check_crc_equal(&crc, &ref_crc[j])) {