Lyude
2021-Mar-18 22:21 UTC
[Nouveau] [PATCH i-g-t v2 0/2] tests/kms_cursor_crc: Test 32x32 cursors
From: Lyude Paul <lyude at redhat.com> Older nvidia hardware only has 32x32 and 64x64 cursors, so we want to make sure to test 32x32 cursors. Cc: Martin Peres <martin.peres at free.fr> Cc: Ben Skeggs <bskeggs at redhat.com> Cc: Jeremy Cline <jcline at redhat.com> Lyude Paul (2): tests/kms_cursor_crc: Probe kernel for cursor size support tests/kms_cursor_crc: Test 32x32 cursors tests/kms_cursor_crc.c | 133 ++++++++++++++++++++++++----------------- 1 file changed, 77 insertions(+), 56 deletions(-) -- 2.29.2
Lyude
2021-Mar-18 22:21 UTC
[Nouveau] [PATCH i-g-t v2 1/2] tests/kms_cursor_crc: Probe kernel for cursor size support
From: Lyude Paul <lyude at redhat.com>
Currently we just assume that every cursor size up to data->cursor_max_w/h
will
be supported by the driver, and check for support of nonsquare cursors by
checking if we're running on u815 and if so, which variant of intel hardware
we're running on. This isn't really ideal as we're about to enable
32x32 cursor
size tests for nouveau, and Intel hardware doesn't support cursor sizes that
small.
So, fix this by removing has_nonsquare_cursors() and replacing it with a more
generic require_cursor_size() function which checks whether or not the driver
we're using supports a given cursor size by attempting a test-only atomic
commit.
Signed-off-by: Lyude Paul <lyude at redhat.com>
Cc: Martin Peres <martin.peres at free.fr>
Cc: Ben Skeggs <bskeggs at redhat.com>
Cc: Jeremy Cline <jcline at redhat.com>
---
tests/kms_cursor_crc.c | 131 ++++++++++++++++++++++++-----------------
1 file changed, 76 insertions(+), 55 deletions(-)
diff --git a/tests/kms_cursor_crc.c b/tests/kms_cursor_crc.c
index 3541ea06..b9c05472 100644
--- a/tests/kms_cursor_crc.c
+++ b/tests/kms_cursor_crc.c
@@ -523,26 +523,43 @@ static void create_cursor_fb(data_t *data, int cur_w, int
cur_h)
igt_put_cairo_ctx(cr);
}
-static bool has_nonsquare_cursors(data_t *data)
+static void require_cursor_size(data_t *data, int w, int h)
{
- uint32_t devid;
+ igt_fb_t primary_fb;
+ drmModeModeInfo *mode;
+ igt_display_t *display = &data->display;
+ igt_output_t *output = data->output;
+ igt_plane_t *primary, *cursor;
+ int ret;
- if (!is_i915_device(data->drm_fd))
- return false;
+ igt_output_set_pipe(output, data->pipe);
- devid = intel_get_drm_devid(data->drm_fd);
+ mode = igt_output_get_mode(output);
+ primary = igt_output_get_plane_type(output, DRM_PLANE_TYPE_PRIMARY);
+ cursor = igt_output_get_plane_type(output, DRM_PLANE_TYPE_CURSOR);
- /*
- * Test non-square cursors a bit on the platforms
- * that support such things.
- */
- if (devid == PCI_CHIP_845_G || devid == PCI_CHIP_I865_G)
- return true;
+ /* Create temporary primary fb for testing */
+ igt_assert(igt_create_fb(data->drm_fd, mode->hdisplay,
mode->vdisplay, DRM_FORMAT_XRGB8888,
+ LOCAL_DRM_FORMAT_MOD_NONE, &primary_fb));
- if (IS_VALLEYVIEW(devid) || IS_CHERRYVIEW(devid))
- return false;
+ igt_plane_set_fb(primary, &primary_fb);
+ igt_plane_set_fb(cursor, &data->fb);
+ igt_plane_set_size(cursor, w, h);
+ igt_fb_set_size(&data->fb, cursor, w, h);
+
+ /* Test if the kernel supports the given cursor size or not */
+ ret = igt_display_try_commit_atomic(display,
+ DRM_MODE_ATOMIC_TEST_ONLY |
+ DRM_MODE_ATOMIC_ALLOW_MODESET,
+ NULL);
+
+ igt_plane_set_fb(primary, NULL);
+ igt_plane_set_fb(cursor, NULL);
+
+ igt_remove_fb(data->drm_fd, &primary_fb);
+ igt_output_set_pipe(output, PIPE_NONE);
- return intel_gen(devid) >= 7;
+ igt_skip_on_f(ret, "Cursor size %dx%d not supported by driver\n", w,
h);
}
static void test_cursor_size(data_t *data)
@@ -697,27 +714,33 @@ static void run_tests_on_pipe(data_t *data, enum pipe
pipe)
create_cursor_fb(data, w, h);
}
- /* Using created cursor FBs to test cursor support */
- igt_describe("Check if a given-size cursor is well-positioned inside the
screen.");
- igt_subtest_f("pipe-%s-cursor-%dx%d-onscreen",
kmstest_pipe_name(pipe), w, h)
- run_test(data, test_crc_onscreen, w, h);
-
- igt_describe("Check if a given-size cursor is well-positioned outside
the screen.");
- igt_subtest_f("pipe-%s-cursor-%dx%d-offscreen",
kmstest_pipe_name(pipe), w, h)
- run_test(data, test_crc_offscreen, w, h);
-
- igt_describe("Check the smooth and pixel-by-pixel given-size cursor
movements on"
- "horizontal, vertical and diagonal.");
- igt_subtest_f("pipe-%s-cursor-%dx%d-sliding",
kmstest_pipe_name(pipe), w, h)
- run_test(data, test_crc_sliding, w, h);
-
- igt_describe("Check random placement of a cursor with given
size.");
- igt_subtest_f("pipe-%s-cursor-%dx%d-random",
kmstest_pipe_name(pipe), w, h)
- run_test(data, test_crc_random, w, h);
-
- igt_describe("Check the rapid update of given-size cursor
movements.");
- igt_subtest_f("pipe-%s-cursor-%dx%d-rapid-movement",
kmstest_pipe_name(pipe), w, h) {
- run_test(data, test_rapid_movement, w, h);
+ igt_subtest_group {
+ igt_fixture
+ require_cursor_size(data, w, h);
+
+ /* Using created cursor FBs to test cursor support */
+ igt_describe("Check if a given-size cursor is well-positioned inside
the "
+ "screen.");
+ igt_subtest_f("pipe-%s-cursor-%dx%d-onscreen",
kmstest_pipe_name(pipe), w, h)
+ run_test(data, test_crc_onscreen, w, h);
+
+ igt_describe("Check if a given-size cursor is well-positioned outside
the "
+ "screen.");
+ igt_subtest_f("pipe-%s-cursor-%dx%d-offscreen",
kmstest_pipe_name(pipe), w, h)
+ run_test(data, test_crc_offscreen, w, h);
+
+ igt_describe("Check the smooth and pixel-by-pixel given-size cursor
"
+ "movements on horizontal, vertical and diagonal.");
+ igt_subtest_f("pipe-%s-cursor-%dx%d-sliding",
kmstest_pipe_name(pipe), w, h)
+ run_test(data, test_crc_sliding, w, h);
+
+ igt_describe("Check random placement of a cursor with given
size.");
+ igt_subtest_f("pipe-%s-cursor-%dx%d-random",
kmstest_pipe_name(pipe), w, h)
+ run_test(data, test_crc_random, w, h);
+
+ igt_describe("Check the rapid update of given-size cursor
movements.");
+ igt_subtest_f("pipe-%s-cursor-%dx%d-rapid-movement",
kmstest_pipe_name(pipe), w, h)
+ run_test(data, test_rapid_movement, w, h);
}
igt_fixture
@@ -730,27 +753,25 @@ static void run_tests_on_pipe(data_t *data, enum pipe
pipe)
*/
h /= 3;
- igt_fixture {
- if (has_nonsquare_cursors(data))
- create_cursor_fb(data, w, h);
- }
+ igt_fixture
+ create_cursor_fb(data, w, h);
- /* Using created cursor FBs to test cursor support */
- igt_subtest_f("pipe-%s-cursor-%dx%d-onscreen",
kmstest_pipe_name(pipe), w, h) {
- igt_require(has_nonsquare_cursors(data));
- run_test(data, test_crc_onscreen, w, h);
- }
- igt_subtest_f("pipe-%s-cursor-%dx%d-offscreen",
kmstest_pipe_name(pipe), w, h) {
- igt_require(has_nonsquare_cursors(data));
- run_test(data, test_crc_offscreen, w, h);
- }
- igt_subtest_f("pipe-%s-cursor-%dx%d-sliding",
kmstest_pipe_name(pipe), w, h) {
- igt_require(has_nonsquare_cursors(data));
- run_test(data, test_crc_sliding, w, h);
- }
- igt_subtest_f("pipe-%s-cursor-%dx%d-random",
kmstest_pipe_name(pipe), w, h) {
- igt_require(has_nonsquare_cursors(data));
- run_test(data, test_crc_random, w, h);
+ igt_subtest_group {
+ igt_fixture
+ require_cursor_size(data, w, h);
+
+ /* Using created cursor FBs to test cursor support */
+ igt_subtest_f("pipe-%s-cursor-%dx%d-onscreen",
kmstest_pipe_name(pipe), w, h)
+ run_test(data, test_crc_onscreen, w, h);
+
+ igt_subtest_f("pipe-%s-cursor-%dx%d-offscreen",
kmstest_pipe_name(pipe), w, h)
+ run_test(data, test_crc_offscreen, w, h);
+
+ igt_subtest_f("pipe-%s-cursor-%dx%d-sliding",
kmstest_pipe_name(pipe), w, h)
+ run_test(data, test_crc_sliding, w, h);
+
+ igt_subtest_f("pipe-%s-cursor-%dx%d-random",
kmstest_pipe_name(pipe), w, h)
+ run_test(data, test_crc_random, w, h);
}
igt_fixture
--
2.29.2
Lyude
2021-Mar-18 22:21 UTC
[Nouveau] [PATCH i-g-t v2 2/2] tests/kms_cursor_crc: Test 32x32 cursors
From: Lyude Paul <lyude at redhat.com>
Since pre-nve4 only has two cursor sizes (32x32 and 64x64), we should at
least test both of them.
Signed-off-by: Lyude Paul <lyude at redhat.com>
Cc: Martin Peres <martin.peres at free.fr>
Cc: Ben Skeggs <bskeggs at redhat.com>
Cc: Jeremy Cline <jcline at redhat.com>
---
tests/kms_cursor_crc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/kms_cursor_crc.c b/tests/kms_cursor_crc.c
index b9c05472..754e1073 100644
--- a/tests/kms_cursor_crc.c
+++ b/tests/kms_cursor_crc.c
@@ -703,7 +703,7 @@ static void run_tests_on_pipe(data_t *data, enum pipe pipe)
igt_fixture
igt_remove_fb(data->drm_fd, &data->fb);
- for (cursor_size = 64; cursor_size <= 512; cursor_size *= 2) {
+ for (cursor_size = 32; cursor_size <= 512; cursor_size *= 2) {
int w = cursor_size;
int h = cursor_size;
--
2.29.2