* [igt-dev] [PATCH i-g-t 1/3] lib: Add igt_plane_has_format() etc. for pre-blobifier drivers
@ 2018-03-16 17:47 Ville Syrjala
2018-03-16 17:47 ` [igt-dev] [PATCH i-g-t 2/3] tests/kms_plane: Add validate-in-formats subtest Ville Syrjala
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Ville Syrjala @ 2018-03-16 17:47 UTC (permalink / raw)
To: igt-dev; +Cc: Ulrich Hecht
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
For drivers that don't support the IN_FORMATS blob we should just
consult the format list returned by getplane. Let's add a few helpers
to check a specific format against that list, and also let's make
the format+modifier use the same list. Since we can't tell which
modifiers are supported without IN_FORMATS we'll just assume that
linear should work, and everything else should not.
Cc: Ulrich Hecht <ulrich.hecht+renesas@gmail.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
lib/igt_kms.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
lib/igt_kms.h | 2 ++
2 files changed, 46 insertions(+)
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index cf6389f2474c..d894585fa6ba 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -3901,11 +3901,31 @@ static void igt_fill_plane_format_mod(igt_display_t *display, igt_plane_t *plane
igt_assert_eq(idx, plane->format_mod_count);
}
+bool igt_plane_has_format(igt_plane_t *plane, uint32_t format)
+{
+ drmModePlanePtr p = plane->drm_plane;
+
+ for (int i = 0; i < p->count_formats; i++) {
+ if (p->formats[i] == format)
+ return true;
+ }
+
+ return false;
+}
+
bool igt_plane_has_format_mod(igt_plane_t *plane, uint32_t format,
uint64_t modifier)
{
int i;
+ if (plane->format_mod_count == 0) {
+ /* we can't tell what's supported so assume only linear */
+ if (modifier != DRM_FORMAT_MOD_LINEAR)
+ return false;
+
+ return igt_plane_has_format(plane, format);
+ }
+
for (i = 0; i < plane->format_mod_count; i++) {
if (plane->formats[i] == format &&
plane->modifiers[i] == modifier)
@@ -3977,11 +3997,35 @@ static void igt_fill_display_format_mod(igt_display_t *display)
}
}
+bool igt_display_has_format(igt_display_t *display, uint32_t format)
+{
+ enum pipe pipe;
+
+ for_each_pipe(display, pipe) {
+ igt_plane_t *plane;
+
+ for_each_plane_on_pipe(display, pipe, plane) {
+ if (igt_plane_has_format(plane, format))
+ return true;
+ }
+ }
+
+ return false;
+}
+
bool igt_display_has_format_mod(igt_display_t *display, uint32_t format,
uint64_t modifier)
{
int i;
+ if (display->format_mod_count == 0) {
+ /* we can't tell what's supported so assume only linear */
+ if (modifier != DRM_FORMAT_MOD_LINEAR)
+ return false;
+
+ return igt_display_has_format(display, format);
+ }
+
for (i = 0; i < display->format_mod_count; i++) {
if (display->formats[i] == format &&
display->modifiers[i] == modifier)
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index 1ea3be991509..a59f80474ddd 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -680,7 +680,9 @@ bool igt_hotplug_detected(struct udev_monitor *mon,
void igt_flush_hotplugs(struct udev_monitor *mon);
void igt_cleanup_hotplug(struct udev_monitor *mon);
+bool igt_display_has_format(igt_display_t *display, uint32_t format);
bool igt_display_has_format_mod(igt_display_t *display, uint32_t format, uint64_t modifier);
+bool igt_plane_has_format(igt_plane_t *plane, uint32_t format);
bool igt_plane_has_format_mod(igt_plane_t *plane, uint32_t format, uint64_t modifier);
#endif /* __IGT_KMS_H__ */
--
2.16.1
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [igt-dev] [PATCH i-g-t 2/3] tests/kms_plane: Add validate-in-formats subtest
2018-03-16 17:47 [igt-dev] [PATCH i-g-t 1/3] lib: Add igt_plane_has_format() etc. for pre-blobifier drivers Ville Syrjala
@ 2018-03-16 17:47 ` Ville Syrjala
2018-03-16 17:47 ` [igt-dev] [PATCH i-g-t v2 3/3] tests/kms_addfb_basic: Check that addfb2 accepts/rejects the expected formats Ville Syrjala
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Ville Syrjala @ 2018-03-16 17:47 UTC (permalink / raw)
To: igt-dev; +Cc: Ulrich Hecht
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cross check the format list in the IN_FORMATS blob vs. the
format list returned by getplane.
Cc: Ulrich Hecht <ulrich.hecht+renesas@gmail.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
tests/kms_plane.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 50 insertions(+)
diff --git a/tests/kms_plane.c b/tests/kms_plane.c
index 23173b966eab..076e6ecdd629 100644
--- a/tests/kms_plane.c
+++ b/tests/kms_plane.c
@@ -366,6 +366,53 @@ test_plane_panning(data_t *data, enum pipe pipe, unsigned int flags)
igt_skip_on(connected_outs == 0);
}
+static void validate_plane_in_formats(igt_plane_t *plane)
+{
+ drmModePlanePtr drm_plane = plane->drm_plane;
+
+ igt_require(plane->format_mod_count);
+
+ /*
+ * Make sure every format in the IN_FORMATS blob
+ * also appears in the getplane formats.
+ */
+ for (int i = 0; i < plane->format_mod_count; i++) {
+ int j;
+
+ for (j = 0; i < drm_plane->count_formats; j++) {
+ if (plane->formats[i] == drm_plane->formats[j])
+ break;
+ }
+ igt_assert_lt(j, drm_plane->count_formats);
+ }
+
+ /*
+ * Make sure every format in getplane also
+ * appears in the IN_FORMATS blob.
+ */
+ for (int i = 0; i < drm_plane->count_formats; i++) {
+ int j;
+
+ for (j = 0; i < plane->format_mod_count; j++) {
+ if (drm_plane->formats[i] == plane->formats[i])
+ break;
+ }
+ igt_assert_lt(j, plane->format_mod_count);
+ }
+}
+
+static void validate_in_formats(data_t *data)
+{
+ enum pipe pipe;
+
+ for_each_pipe(&data->display, pipe) {
+ igt_plane_t *plane;
+
+ for_each_plane_on_pipe(&data->display, pipe, plane)
+ validate_plane_in_formats(plane);
+ }
+}
+
static void test_format_plane(data_t *data, enum pipe pipe,
igt_output_t *output, igt_plane_t *plane)
{
@@ -506,6 +553,9 @@ igt_main
igt_display_init(&data.display, data.drm_fd);
}
+ igt_subtest_f("validate-in-formats")
+ validate_in_formats(&data);
+
for_each_pipe_static(pipe)
run_tests_for_pipe_plane(&data, pipe);
--
2.16.1
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [igt-dev] [PATCH i-g-t v2 3/3] tests/kms_addfb_basic: Check that addfb2 accepts/rejects the expected formats
2018-03-16 17:47 [igt-dev] [PATCH i-g-t 1/3] lib: Add igt_plane_has_format() etc. for pre-blobifier drivers Ville Syrjala
2018-03-16 17:47 ` [igt-dev] [PATCH i-g-t 2/3] tests/kms_plane: Add validate-in-formats subtest Ville Syrjala
@ 2018-03-16 17:47 ` Ville Syrjala
2018-03-16 19:18 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/3] lib: Add igt_plane_has_format() etc. for pre-blobifier drivers Patchwork
2018-03-17 0:17 ` [igt-dev] ✗ Fi.CI.IGT: warning " Patchwork
3 siblings, 0 replies; 5+ messages in thread
From: Ville Syrjala @ 2018-03-16 17:47 UTC (permalink / raw)
To: igt-dev; +Cc: Ulrich Hecht
From: Ville Syrjälä <ville.syrjala@linux.intel.com>
Try to create a bunch of fbs with different formats/modfifiers and
make sure sure addfb2 accepts/rejects them in accordance with what
the plane IN_FORMATS blobifiers are advertizing.
We only check "easy" formats (ie. RGB/C8, no YUV/planar etc.). We
also assume that one can always create a 64x64 fb with stride of
64*8 bytes.
v2: Skip when blobifiers aren't supported
Cc: Ulrich Hecht <ulrich.hecht+renesas@gmail.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
tests/kms_addfb_basic.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 97 insertions(+), 3 deletions(-)
diff --git a/tests/kms_addfb_basic.c b/tests/kms_addfb_basic.c
index 7d8852f02003..376bc3c9c49b 100644
--- a/tests/kms_addfb_basic.c
+++ b/tests/kms_addfb_basic.c
@@ -41,6 +41,90 @@
uint32_t gem_bo;
uint32_t gem_bo_small;
+static uint64_t modifiers[] = {
+ DRM_FORMAT_MOD_LINEAR,
+ I915_FORMAT_MOD_X_TILED,
+ I915_FORMAT_MOD_Y_TILED,
+ I915_FORMAT_MOD_Yf_TILED,
+ I915_FORMAT_MOD_Y_TILED_CCS,
+ I915_FORMAT_MOD_Yf_TILED_CCS,
+};
+
+static const uint32_t formats[] = {
+ DRM_FORMAT_C8,
+
+ DRM_FORMAT_RGB565,
+ DRM_FORMAT_BGR565,
+
+ DRM_FORMAT_RGB888,
+ DRM_FORMAT_BGR888,
+
+ DRM_FORMAT_XRGB8888,
+ DRM_FORMAT_XBGR8888,
+ DRM_FORMAT_RGBX8888,
+ DRM_FORMAT_BGRX8888,
+ DRM_FORMAT_ARGB8888,
+ DRM_FORMAT_ABGR8888,
+ DRM_FORMAT_RGBA8888,
+ DRM_FORMAT_BGRA8888,
+
+ DRM_FORMAT_XRGB2101010,
+ DRM_FORMAT_XBGR2101010,
+ DRM_FORMAT_RGBX1010102,
+ DRM_FORMAT_BGRX1010102,
+ DRM_FORMAT_ARGB2101010,
+ DRM_FORMAT_ABGR2101010,
+ DRM_FORMAT_RGBA1010102,
+ DRM_FORMAT_BGRA1010102,
+};
+
+/*
+ * make sure addfb2 accepts/rejects every format/modifier
+ * in accordance with the plane IN_FORMATS properties.
+ */
+static void expected_formats(igt_display_t *display)
+{
+ int fd = display->drm_fd;
+ uint32_t handle;
+
+ igt_require(display->format_mod_count);
+
+ handle = gem_create(fd, 64*8*64);
+ igt_assert(handle);
+
+ for (int i = 0; i < ARRAY_SIZE(formats); i++) {
+ uint32_t format = formats[i];
+
+ for (int j = 0; j < ARRAY_SIZE(modifiers); j++) {
+ uint64_t modifier = modifiers[j];
+ struct drm_mode_fb_cmd2 f = {
+ .width = 64,
+ .height = 64,
+ .pixel_format = format,
+ .handles[0] = handle,
+ .pitches[0] = 64 * 8,
+ .modifier[0] = modifier,
+ .flags = DRM_MODE_FB_MODIFIERS,
+ };
+ int ret;
+
+ ret = drmIoctl(fd, DRM_IOCTL_MODE_ADDFB2, &f);
+
+ if (igt_display_has_format_mod(display, format, modifier)) {
+ igt_assert_eq(ret, 0);
+ igt_assert_neq(f.fb_id, 0);
+ } else {
+ igt_assert_neq(ret, 0);
+ igt_assert_eq(f.fb_id, 0);
+ }
+
+ drmIoctl(fd, DRM_IOCTL_MODE_RMFB, &f.fb_id);
+ }
+ }
+
+ gem_close(fd, handle);
+}
+
static void invalid_tests(int fd)
{
struct local_drm_mode_fb_cmd2 f = {};
@@ -539,13 +623,17 @@ static void prop_tests(int fd)
}
-int fd;
+static igt_display_t display;
+static int fd;
igt_main
{
- igt_fixture
+ igt_fixture {
fd = drm_open_driver_master(DRIVER_ANY);
+ igt_display_init(&display, fd);
+ }
+
invalid_tests(fd);
pitch_tests(fd);
@@ -560,6 +648,12 @@ igt_main
prop_tests(fd);
- igt_fixture
+ igt_subtest("expected-formats")
+ expected_formats(&display);
+
+ igt_fixture {
+ igt_display_fini(&display);
+
close(fd);
+ }
}
--
2.16.1
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/3] lib: Add igt_plane_has_format() etc. for pre-blobifier drivers
2018-03-16 17:47 [igt-dev] [PATCH i-g-t 1/3] lib: Add igt_plane_has_format() etc. for pre-blobifier drivers Ville Syrjala
2018-03-16 17:47 ` [igt-dev] [PATCH i-g-t 2/3] tests/kms_plane: Add validate-in-formats subtest Ville Syrjala
2018-03-16 17:47 ` [igt-dev] [PATCH i-g-t v2 3/3] tests/kms_addfb_basic: Check that addfb2 accepts/rejects the expected formats Ville Syrjala
@ 2018-03-16 19:18 ` Patchwork
2018-03-17 0:17 ` [igt-dev] ✗ Fi.CI.IGT: warning " Patchwork
3 siblings, 0 replies; 5+ messages in thread
From: Patchwork @ 2018-03-16 19:18 UTC (permalink / raw)
To: Ville Syrjala; +Cc: igt-dev
== Series Details ==
Series: series starting with [i-g-t,1/3] lib: Add igt_plane_has_format() etc. for pre-blobifier drivers
URL : https://patchwork.freedesktop.org/series/40113/
State : success
== Summary ==
IGT patchset tested on top of latest successful build
98f7614bd725afaae48f7b70d18329149075661b lib: Parse plane IN_FORMATS blobifiers into a nicer form
with latest DRM-Tip kernel build CI_DRM_3942
66a3be2efe09 drm-tip: 2018y-03m-16d-16h-32m-51s UTC integration manifest
Testlist changes:
+igt@kms_addfb_basic@expected-formats
+igt@kms_plane@validate-in-formats
---- Known issues:
Test gem_mmap_gtt:
Subgroup basic-small-bo-tiledx:
pass -> FAIL (fi-gdg-551) fdo#102575
Test kms_pipe_crc_basic:
Subgroup suspend-read-crc-pipe-b:
pass -> INCOMPLETE (fi-snb-2520m) fdo#103713
fdo#102575 https://bugs.freedesktop.org/show_bug.cgi?id=102575
fdo#103713 https://bugs.freedesktop.org/show_bug.cgi?id=103713
fi-bdw-5557u total:285 pass:264 dwarn:0 dfail:0 fail:0 skip:21 time:436s
fi-bdw-gvtdvm total:285 pass:261 dwarn:0 dfail:0 fail:0 skip:24 time:443s
fi-blb-e6850 total:285 pass:220 dwarn:1 dfail:0 fail:0 skip:64 time:382s
fi-bsw-n3050 total:285 pass:239 dwarn:0 dfail:0 fail:0 skip:46 time:544s
fi-bwr-2160 total:285 pass:180 dwarn:0 dfail:0 fail:0 skip:105 time:305s
fi-bxt-j4205 total:285 pass:256 dwarn:0 dfail:0 fail:0 skip:29 time:519s
fi-byt-j1900 total:285 pass:250 dwarn:0 dfail:0 fail:0 skip:35 time:524s
fi-byt-n2820 total:285 pass:246 dwarn:0 dfail:0 fail:0 skip:39 time:515s
fi-cfl-8700k total:285 pass:257 dwarn:0 dfail:0 fail:0 skip:28 time:409s
fi-cfl-s2 total:285 pass:259 dwarn:0 dfail:0 fail:0 skip:26 time:588s
fi-cfl-u total:285 pass:259 dwarn:0 dfail:0 fail:0 skip:26 time:512s
fi-cnl-drrs total:285 pass:254 dwarn:3 dfail:0 fail:0 skip:28 time:535s
fi-cnl-y3 total:285 pass:259 dwarn:0 dfail:0 fail:0 skip:26 time:597s
fi-elk-e7500 total:285 pass:225 dwarn:1 dfail:0 fail:0 skip:59 time:433s
fi-gdg-551 total:285 pass:176 dwarn:0 dfail:0 fail:1 skip:108 time:326s
fi-glk-1 total:285 pass:257 dwarn:0 dfail:0 fail:0 skip:28 time:540s
fi-hsw-4770 total:285 pass:258 dwarn:0 dfail:0 fail:0 skip:27 time:405s
fi-ilk-650 total:285 pass:225 dwarn:0 dfail:0 fail:0 skip:60 time:421s
fi-ivb-3520m total:285 pass:256 dwarn:0 dfail:0 fail:0 skip:29 time:479s
fi-ivb-3770 total:285 pass:252 dwarn:0 dfail:0 fail:0 skip:33 time:434s
fi-kbl-7500u total:285 pass:260 dwarn:1 dfail:0 fail:0 skip:24 time:478s
fi-kbl-7567u total:285 pass:265 dwarn:0 dfail:0 fail:0 skip:20 time:472s
fi-kbl-r total:285 pass:258 dwarn:0 dfail:0 fail:0 skip:27 time:525s
fi-pnv-d510 total:285 pass:219 dwarn:1 dfail:0 fail:0 skip:65 time:666s
fi-skl-6260u total:285 pass:265 dwarn:0 dfail:0 fail:0 skip:20 time:447s
fi-skl-6600u total:285 pass:258 dwarn:0 dfail:0 fail:0 skip:27 time:530s
fi-skl-6700hq total:285 pass:259 dwarn:0 dfail:0 fail:0 skip:26 time:541s
fi-skl-6700k2 total:285 pass:261 dwarn:0 dfail:0 fail:0 skip:24 time:503s
fi-skl-6770hq total:285 pass:265 dwarn:0 dfail:0 fail:0 skip:20 time:514s
fi-skl-guc total:285 pass:257 dwarn:0 dfail:0 fail:0 skip:28 time:431s
fi-skl-gvtdvm total:285 pass:262 dwarn:0 dfail:0 fail:0 skip:23 time:450s
fi-snb-2520m total:242 pass:208 dwarn:0 dfail:0 fail:0 skip:33
fi-snb-2600 total:285 pass:245 dwarn:0 dfail:0 fail:0 skip:40 time:407s
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1154/issues.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 5+ messages in thread
* [igt-dev] ✗ Fi.CI.IGT: warning for series starting with [i-g-t,1/3] lib: Add igt_plane_has_format() etc. for pre-blobifier drivers
2018-03-16 17:47 [igt-dev] [PATCH i-g-t 1/3] lib: Add igt_plane_has_format() etc. for pre-blobifier drivers Ville Syrjala
` (2 preceding siblings ...)
2018-03-16 19:18 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/3] lib: Add igt_plane_has_format() etc. for pre-blobifier drivers Patchwork
@ 2018-03-17 0:17 ` Patchwork
3 siblings, 0 replies; 5+ messages in thread
From: Patchwork @ 2018-03-17 0:17 UTC (permalink / raw)
To: Ville Syrjala; +Cc: igt-dev
== Series Details ==
Series: series starting with [i-g-t,1/3] lib: Add igt_plane_has_format() etc. for pre-blobifier drivers
URL : https://patchwork.freedesktop.org/series/40113/
State : warning
== Summary ==
---- Possible new issues:
Test kms_cursor_crc:
Subgroup cursor-128x128-suspend:
skip -> PASS (shard-snb)
Test pm_rc6_residency:
Subgroup rc6-accuracy:
pass -> SKIP (shard-snb)
---- Known issues:
Test kms_flip:
Subgroup flip-vs-absolute-wf_vblank-interruptible:
pass -> FAIL (shard-hsw) fdo#100368
Test kms_rotation_crc:
Subgroup sprite-rotation-90:
pass -> FAIL (shard-apl) fdo#105185 +1
Test kms_sysfs_edid_timing:
pass -> WARN (shard-apl) fdo#100047
Test perf:
Subgroup polling:
pass -> FAIL (shard-hsw) fdo#102252 +1
fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368
fdo#105185 https://bugs.freedesktop.org/show_bug.cgi?id=105185
fdo#100047 https://bugs.freedesktop.org/show_bug.cgi?id=100047
fdo#102252 https://bugs.freedesktop.org/show_bug.cgi?id=102252
shard-apl total:3406 pass:1793 dwarn:1 dfail:0 fail:9 skip:1601 time:12680s
shard-hsw total:3444 pass:1767 dwarn:1 dfail:0 fail:4 skip:1671 time:11894s
shard-snb total:3444 pass:1358 dwarn:1 dfail:0 fail:4 skip:2081 time:7259s
Blacklisted hosts:
shard-kbl total:3376 pass:1872 dwarn:30 dfail:0 fail:9 skip:1463 time:9422s
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1154/shards.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2018-03-17 0:17 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-16 17:47 [igt-dev] [PATCH i-g-t 1/3] lib: Add igt_plane_has_format() etc. for pre-blobifier drivers Ville Syrjala
2018-03-16 17:47 ` [igt-dev] [PATCH i-g-t 2/3] tests/kms_plane: Add validate-in-formats subtest Ville Syrjala
2018-03-16 17:47 ` [igt-dev] [PATCH i-g-t v2 3/3] tests/kms_addfb_basic: Check that addfb2 accepts/rejects the expected formats Ville Syrjala
2018-03-16 19:18 ` [igt-dev] ✓ Fi.CI.BAT: success for series starting with [i-g-t,1/3] lib: Add igt_plane_has_format() etc. for pre-blobifier drivers Patchwork
2018-03-17 0:17 ` [igt-dev] ✗ Fi.CI.IGT: warning " Patchwork
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.