Re: [Intel-gfx] [PATCH i-g-t v3 8/8] tests/kms_plane_scaling: test for multi pipe with scaling, v3.

2018-01-17 Thread Maarten Lankhorst
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 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. :)
> 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.

2018-01-16 Thread 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 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.

2018-01-16 Thread Maarten Lankhorst
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.

2018-01-16 Thread 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.

> +
> + 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.

2018-01-15 Thread Maarten Lankhorst
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;
+
+   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