Re: [Intel-gfx] [PATCH i-g-t v3 8/8] tests/kms_plane_scaling: test for multi pipe with scaling, v3.
Op 16-01-18 om 14:56 schreef Mika Kahola: > On Tue, 2018-01-16 at 14:47 +0100, Maarten Lankhorst wrote: >> Op 16-01-18 om 14:46 schreef Mika Kahola: >>> On Mon, 2018-01-15 at 15:28 +0100, Maarten Lankhorst wrote: From: Jyoti YadavAdd 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 Signed-off-by: Mahesh Kumar Signed-off-by: Vidya Srinivas Signed-off-by: Maarten Lankhorst --- 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(>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 = >display; + igt_output_t *output1, *output2; + drmModeModeInfo *mode1, *mode2; + enum pipe pipe1, pipe2; + + cleanup_crtc(d); + + find_connected_pipe(display, false, , ); + find_connected_pipe(display, true, , ); + + 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. :) > yeah, you're absolutely right. Should have read more carefully :) > > You can bash my r-b. > > Reviewed-by: Mika Kahola Thanks for review, pushed. ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [Intel-gfx] [PATCH i-g-t v3 8/8] tests/kms_plane_scaling: test for multi pipe with scaling, v3.
On Tue, 2018-01-16 at 14:47 +0100, Maarten Lankhorst wrote: > 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> > > > > > 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 > > > Signed-off-by: Mahesh Kumar > > > Signed-off-by: Vidya Srinivas > > > Signed-off-by: Maarten Lankhorst > > om> > > > --- > > > 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(>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 = >display; > > > + igt_output_t *output1, *output2; > > > + drmModeModeInfo *mode1, *mode2; > > > + enum pipe pipe1, pipe2; > > > + > > > + cleanup_crtc(d); > > > + > > > + find_connected_pipe(display, false, , ); > > > + find_connected_pipe(display, true, , ); > > > + > > > + 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. :) yeah, you're absolutely right. Should have read more carefully :) You can bash my r-b. Reviewed-by: Mika Kahola > > ~Maarten -- Mika Kahola - Intel OTC ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [Intel-gfx] [PATCH i-g-t v3 8/8] tests/kms_plane_scaling: test for multi pipe with scaling, v3.
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>> >> 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 >> Signed-off-by: Mahesh Kumar >> Signed-off-by: Vidya Srinivas >> Signed-off-by: Maarten Lankhorst >> --- >> 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(>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 = >display; >> +igt_output_t *output1, *output2; >> +drmModeModeInfo *mode1, *mode2; >> +enum pipe pipe1, pipe2; >> + >> +cleanup_crtc(d); >> + >> +find_connected_pipe(display, false, , ); >> +find_connected_pipe(display, true, , ); >> + >> +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@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Re: [Intel-gfx] [PATCH i-g-t v3 8/8] tests/kms_plane_scaling: test for multi pipe with scaling, v3.
On Mon, 2018-01-15 at 15:28 +0100, Maarten Lankhorst wrote: > From: Jyoti Yadav> > 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 > Signed-off-by: Mahesh Kumar > Signed-off-by: Vidya Srinivas > Signed-off-by: Maarten Lankhorst > --- > 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(>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 = >display; > + igt_output_t *output1, *output2; > + drmModeModeInfo *mode1, *mode2; > + enum pipe pipe1, pipe2; > + > + cleanup_crtc(d); > + > + find_connected_pipe(display, false, , ); > + find_connected_pipe(display, true, , ); > + > + 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. > + > + mode1 = igt_output_get_mode(output1); > + mode2 = igt_output_get_mode(output2); > + > + igt_create_pattern_fb(d->drm_fd, 600, 600, > + DRM_FORMAT_XRGB, > + LOCAL_I915_FORMAT_MOD_Y_TILED, > >fb[0]); > + > + igt_create_pattern_fb(d->drm_fd, 500, 500, > + DRM_FORMAT_XRGB, > + LOCAL_I915_FORMAT_MOD_Y_TILED, > >fb[1]); > + > + igt_create_pattern_fb(d->drm_fd, 700, 700, > + DRM_FORMAT_XRGB, > + LOCAL_I915_FORMAT_MOD_Y_TILED, > >fb[2]); > + > + igt_create_pattern_fb(d->drm_fd, 400, 400, > + DRM_FORMAT_XRGB, > + LOCAL_I915_FORMAT_MOD_Y_TILED, > >fb[3]); > + > + igt_plane_set_fb(d->plane1, >fb[0]); > + if (d->plane2) > + igt_plane_set_fb(d->plane2, >fb[1]); > + igt_plane_set_fb(d->plane3, >fb[2]); > + if (d->plane4) > + igt_plane_set_fb(d->plane4, >fb[3]); > + igt_display_commit2(display, COMMIT_ATOMIC); > + > + /* Upscaling Primary */ > + igt_plane_set_size(d->plane1, mode1->hdisplay, mode1- > >vdisplay); > + igt_plane_set_size(d->plane3, mode2->hdisplay, mode2- > >vdisplay); > + igt_display_commit2(display, COMMIT_ATOMIC); > + > + /* Upscaling Sprites */ > + igt_plane_set_size(d->plane2 ?: d->plane1, mode1->hdisplay, > mode1->vdisplay); > + igt_plane_set_size(d->plane4 ?: d->plane3, mode2->hdisplay, > mode2->vdisplay); > +
[Intel-gfx] [PATCH i-g-t v3 8/8] tests/kms_plane_scaling: test for multi pipe with scaling, v3.
From: Jyoti YadavAdd 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 Signed-off-by: Mahesh Kumar Signed-off-by: Vidya Srinivas Signed-off-by: Maarten Lankhorst --- 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(>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 = >display; + igt_output_t *output1, *output2; + drmModeModeInfo *mode1, *mode2; + enum pipe pipe1, pipe2; + + cleanup_crtc(d); + + find_connected_pipe(display, false, , ); + find_connected_pipe(display, true, , ); + + 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; + + mode1 = igt_output_get_mode(output1); + mode2 = igt_output_get_mode(output2); + + igt_create_pattern_fb(d->drm_fd, 600, 600, + DRM_FORMAT_XRGB, + LOCAL_I915_FORMAT_MOD_Y_TILED, >fb[0]); + + igt_create_pattern_fb(d->drm_fd, 500, 500, + DRM_FORMAT_XRGB, + LOCAL_I915_FORMAT_MOD_Y_TILED, >fb[1]); + + igt_create_pattern_fb(d->drm_fd, 700, 700, + DRM_FORMAT_XRGB, + LOCAL_I915_FORMAT_MOD_Y_TILED, >fb[2]); + + igt_create_pattern_fb(d->drm_fd, 400, 400, + DRM_FORMAT_XRGB, + LOCAL_I915_FORMAT_MOD_Y_TILED, >fb[3]); + + igt_plane_set_fb(d->plane1, >fb[0]); + if (d->plane2) + igt_plane_set_fb(d->plane2, >fb[1]); + igt_plane_set_fb(d->plane3, >fb[2]); + if (d->plane4) + igt_plane_set_fb(d->plane4, >fb[3]); + igt_display_commit2(display, COMMIT_ATOMIC); + + /* Upscaling Primary */ + igt_plane_set_size(d->plane1, mode1->hdisplay, mode1->vdisplay); + igt_plane_set_size(d->plane3, mode2->hdisplay, mode2->vdisplay); + igt_display_commit2(display, COMMIT_ATOMIC); + + /* Upscaling Sprites */ + igt_plane_set_size(d->plane2 ?: d->plane1, mode1->hdisplay, mode1->vdisplay); + igt_plane_set_size(d->plane4 ?: d->plane3, mode2->hdisplay, mode2->vdisplay); + igt_display_commit2(display, COMMIT_ATOMIC); +} + igt_main { data_t data = {}; @@ -497,6 +585,9 @@ igt_main test_scaler_with_clipping_clamping_scenario(, pipe, output); } + igt_subtest_f("2x-scaler-multi-pipe") + test_scaler_with_multi_pipe_plane(); + igt_fixture