Op 16-01-18 om 14:46 schreef Mika Kahola: > On Mon, 2018-01-15 at 15:28 +0100, Maarten Lankhorst wrote: >> From: Jyoti Yadav <jyoti.r.yadav@xxxxxxxxx> >> >> Add a subtest to display primary and overlay planes on two >> connected pipes and runs scaling test on both pipes >> >> Changes since v1: >> - Commit first before trying any scaling. (Maarten) >> - Use the same logic as kms_cursor_legacy to find a pipe and output. >> (Maarten) >> - Rework test to work with how cleanup is handled. (Maarten) >> Changes since v2: >> - Use get_num_scalers() to only use 2 scalers if available. (Maarten) >> >> Signed-off-by: Jyoti Yadav <jyoti.r.yadav@xxxxxxxxx> >> Signed-off-by: Mahesh Kumar <mahesh1.kumar@xxxxxxxxx> >> Signed-off-by: Vidya Srinivas <vidya.srinivas@xxxxxxxxx> >> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@xxxxxxxxxxxxxxx> >> --- >> tests/kms_plane_scaling.c | 93 >> ++++++++++++++++++++++++++++++++++++++++++++++- >> 1 file changed, 92 insertions(+), 1 deletion(-) >> >> diff --git a/tests/kms_plane_scaling.c b/tests/kms_plane_scaling.c >> index 36a6a8ef042b..8dbacf67b0a0 100644 >> --- a/tests/kms_plane_scaling.c >> +++ b/tests/kms_plane_scaling.c >> @@ -38,10 +38,12 @@ typedef struct { >> int image_w; >> int image_h; >> >> - struct igt_fb fb[3]; >> + struct igt_fb fb[4]; >> + >> igt_plane_t *plane1; >> igt_plane_t *plane2; >> igt_plane_t *plane3; >> + igt_plane_t *plane4; >> } data_t; >> >> static int get_num_scalers(uint32_t devid, enum pipe pipe) >> @@ -456,6 +458,92 @@ >> test_scaler_with_clipping_clamping_scenario(data_t *d, enum pipe >> pipe, igt_outpu >> igt_display_commit2(&d->display, COMMIT_ATOMIC); >> } >> >> +static void find_connected_pipe(igt_display_t *display, bool second, >> enum pipe *pipe, igt_output_t **output) >> +{ >> + enum pipe first = PIPE_NONE; >> + igt_output_t *first_output = NULL; >> + bool found = false; >> + >> + for_each_pipe_with_valid_output(display, *pipe, *output) { >> + if (first == *pipe || *output == first_output) >> + continue; >> + >> + if (second) { >> + first = *pipe; >> + first_output = *output; >> + second = false; >> + continue; >> + } >> + >> + return; >> + } >> + >> + if (first_output) >> + igt_require_f(found, "No second valid output >> found\n"); >> + else >> + igt_require_f(found, "No valid outputs found\n"); >> +} >> + >> +static void test_scaler_with_multi_pipe_plane(data_t *d) >> +{ >> + igt_display_t *display = &d->display; >> + igt_output_t *output1, *output2; >> + drmModeModeInfo *mode1, *mode2; >> + enum pipe pipe1, pipe2; >> + >> + cleanup_crtc(d); >> + >> + find_connected_pipe(display, false, &pipe1, &output1); >> + find_connected_pipe(display, true, &pipe2, &output2); >> + >> + igt_skip_on(!output1 || !output2); >> + >> + igt_output_set_pipe(output1, pipe1); >> + igt_output_set_pipe(output2, pipe2); >> + >> + d->plane1 = igt_output_get_plane(output1, 0); >> + d->plane2 = get_num_scalers(d->devid, pipe1) >= 2 ? >> igt_output_get_plane(output1, 1) : NULL; >> + d->plane3 = igt_output_get_plane(output2, 0); >> + d->plane4 = get_num_scalers(d->devid, pipe2) >= 2 ? >> igt_output_get_plane(output2, 1) : NULL; > Maybe use DRM plane type definitions DRM_PLANE_TYPE_OVERLAY and > DRM_PLANE_TYPE_PRIMARY instead of 0 and 1 to better indicate what plane > we are referring to. igt_output_get_plane takes an index, igt_output_get_plane_type takes those definitions. I've been bit a few times by that as well. :) ~Maarten _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx