All of lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests.
@ 2018-10-24 13:33 Juha-Pekka Heikkila
  2018-10-24 18:25 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork
                   ` (18 more replies)
  0 siblings, 19 replies; 28+ messages in thread
From: Juha-Pekka Heikkila @ 2018-10-24 13:33 UTC (permalink / raw)
  To: igt-dev

Add three new tests which try primary and sprite planes
next to each other with different plane formats, rotations
and tiling modes.

multiplane-rotation subtest run test through with both planes
fully visible.

multiplane-rotation-cropping-top will crop primary plane to
left/top corner and sprite plane to right/top corner while running
rotation tests.

multiplane-rotation-cropping-bottom will crop primary plane to
left/bottom corner and sprite plane to right/bottom corner while
running rotation tests.

Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
---
 tests/kms_rotation_crc.c | 243 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 243 insertions(+)

diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
index c233ef6..06a9a61 100644
--- a/tests/kms_rotation_crc.c
+++ b/tests/kms_rotation_crc.c
@@ -26,6 +26,25 @@
 #include <math.h>
 
 #define MAX_FENCES 32
+#define MAXMULTIPLANESAMOUNT 2
+
+struct p_struct {
+	igt_plane_t *plane;
+	struct igt_fb fb;
+};
+
+enum p_pointorigo {
+	p_top = 1 << 0,
+	p_bottom = 1 << 1,
+	p_left = 1 << 2,
+	p_right = 1 << 3
+};
+
+struct p_point{
+	enum p_pointorigo origo;
+	int32_t x;
+	int32_t y;
+};
 
 typedef struct {
 	int gfx_fd;
@@ -43,6 +62,9 @@ typedef struct {
 	uint32_t override_fmt;
 	uint64_t override_tiling;
 	int devid;
+
+	struct p_struct *multiplaneoldview;
+	struct p_point planepos[MAXMULTIPLANESAMOUNT];
 } data_t;
 
 typedef struct {
@@ -392,6 +414,191 @@ static void test_plane_rotation(data_t *data, int plane_type, bool test_bad_form
 	}
 }
 
+typedef struct {
+	int32_t x1, y1;
+	uint64_t width, height, tiling, planetype, format;
+	igt_rotation_t rotation_sw, rotation_hw;
+} planeinfos;
+
+static void get_multiplane_crc(data_t *data, igt_output_t *output,
+			       igt_crc_t *crc_output, planeinfos* planeinfo,
+			       int numplanes)
+{
+	uint32_t w, h;
+	igt_display_t *display = &data->display;
+	struct p_struct *planes, *oldplanes;
+	int c, ret;
+
+	oldplanes = data->multiplaneoldview;
+	planes = malloc(sizeof(*planes)*numplanes);
+
+	for (c = 0; c < numplanes; c++) {
+		planes[c].plane = igt_output_get_plane_type(output,
+							    planeinfo[c].planetype);
+
+		w = planeinfo[c].width;
+		h = planeinfo[c].height;
+
+		if ((planeinfo[c].rotation_hw|planeinfo[c].rotation_sw)
+		    &(IGT_ROTATION_90|IGT_ROTATION_270))
+			igt_swap(w, h);
+
+		igt_plane_set_size(planes[c].plane, w, h);
+
+		igt_create_fb(data->gfx_fd, w, h, planeinfo->format,
+			      planeinfo[c].tiling, &planes[c].fb);
+
+		paint_squares(data, planeinfo[c].rotation_sw, &planes[c].fb, 1.0f);
+		igt_plane_set_fb(planes[c].plane, &planes[c].fb);
+		igt_plane_set_position(planes[c].plane, planeinfo[c].x1, planeinfo[c].y1);
+		igt_plane_set_rotation(planes[c].plane, planeinfo[c].rotation_hw);
+	}
+
+	ret = igt_display_try_commit2(display, COMMIT_ATOMIC);
+	igt_assert_eq(ret, 0);
+
+	igt_pipe_crc_get_current(data->gfx_fd, data->pipe_crc, crc_output);
+
+	for (c = 0; c < numplanes && oldplanes; c++)
+		igt_remove_fb(data->gfx_fd, &oldplanes[c].fb);
+
+	free(oldplanes);
+	data->multiplaneoldview = (void*)planes;
+}
+
+static void pointlocation(data_t *data, planeinfos* p, drmModeModeInfo *mode,
+			  int c)
+{
+	p[c].x1 = data->planepos[c].x
+			+((data->planepos[c].origo&p_right)?mode->hdisplay:0);
+	p[c].y1 = data->planepos[c].y
+			+((data->planepos[c].origo&p_bottom)?mode->vdisplay:0);
+}
+
+/*
+ * Here is pipe parameter which is now used only for first pipe.
+ * It is left here if this test ever was wanted to be run on
+ * different pipes.
+ */
+static void test_multi_plane_rotation(data_t *data, enum pipe pipe)
+{
+	igt_display_t *display = &data->display;
+	igt_output_t *output;
+	igt_crc_t retcrc_sw, retcrc_hw;
+	planeinfos p[2];
+	int c;
+	struct p_struct *oldplanes;
+	drmModeModeInfo *mode;
+
+	const static struct {
+		igt_rotation_t	rotation;
+		uint64_t	width;
+		uint64_t	height;
+		uint64_t	tiling;
+	} planeconfigs[] = {
+	{IGT_ROTATION_0, 512, 512, LOCAL_DRM_FORMAT_MOD_NONE },
+	{IGT_ROTATION_0, 512, 512, LOCAL_I915_FORMAT_MOD_X_TILED },
+	{IGT_ROTATION_0, 512, 512, LOCAL_I915_FORMAT_MOD_Y_TILED },
+	{IGT_ROTATION_0, 512, 512, LOCAL_I915_FORMAT_MOD_Yf_TILED },
+	{IGT_ROTATION_90, 512, 512, LOCAL_I915_FORMAT_MOD_Y_TILED },
+	{IGT_ROTATION_90, 512, 512, LOCAL_I915_FORMAT_MOD_Yf_TILED },
+	{IGT_ROTATION_180, 512, 512, LOCAL_DRM_FORMAT_MOD_NONE },
+	{IGT_ROTATION_180, 512, 512, LOCAL_I915_FORMAT_MOD_X_TILED },
+	{IGT_ROTATION_180, 512, 512, LOCAL_I915_FORMAT_MOD_Y_TILED },
+	{IGT_ROTATION_180, 512, 512, LOCAL_I915_FORMAT_MOD_Yf_TILED },
+	{IGT_ROTATION_270, 512, 512, LOCAL_I915_FORMAT_MOD_Y_TILED },
+	{IGT_ROTATION_270, 512, 512, LOCAL_I915_FORMAT_MOD_Yf_TILED },
+	};
+
+	/*
+	* These are those modes which are tested. For testing feel interesting
+	* case with tiling are 2 byte wide and 4 byte wide.
+	*
+	* TODO:
+	* Built support for NV12 here.
+	*/
+	const static uint32_t  formatlist[] = {DRM_FORMAT_RGB565,
+					       DRM_FORMAT_XRGB8888};
+
+
+	for_each_valid_output_on_pipe(display, pipe, output) {
+		int i, j, k, l;
+		igt_output_set_pipe(output, pipe);
+
+		mode = igt_output_get_mode(output);
+
+		igt_display_require_output(display);
+		igt_display_commit2(display, COMMIT_ATOMIC);
+
+		data->pipe_crc = igt_pipe_crc_new(data->gfx_fd, pipe,
+						  INTEL_PIPE_CRC_SOURCE_AUTO);
+		igt_pipe_crc_start(data->pipe_crc);
+
+		for (i = 0; i < ARRAY_SIZE(planeconfigs); i++) {
+			p[0].planetype = DRM_PLANE_TYPE_PRIMARY;
+			p[0].width = planeconfigs[i].width;
+			p[0].height = planeconfigs[i].height;
+			p[0].tiling = planeconfigs[i].tiling;
+			pointlocation(data, &p, mode, 0);
+
+			for (k = 0; k < ARRAY_SIZE(formatlist); k++) {
+				p[0].format = formatlist[k];
+
+				for (j = 0; j < ARRAY_SIZE(planeconfigs); j++) {
+					p[1].planetype = DRM_PLANE_TYPE_OVERLAY;
+					p[1].width = planeconfigs[j].width;
+					p[1].height = planeconfigs[j].height;
+					p[1].tiling = planeconfigs[j].tiling;
+					pointlocation(data, &p, mode, 1);
+
+					for (l = 0; l < ARRAY_SIZE(formatlist); l++) {
+						p[1].format = formatlist[l];
+
+						/*
+						 * RGB565 90/270 degrees rotation is supported
+						 * from gen11 onwards.
+						 */
+						if ((p[0].format == DRM_FORMAT_RGB565||
+						     p[1].format == DRM_FORMAT_RGB565) &&
+						    ((planeconfigs[i].rotation|planeconfigs[j].rotation)
+						     &(IGT_ROTATION_90|IGT_ROTATION_270)) &&
+						    intel_gen(data->devid) < 11)
+							continue;
+
+						p[0].rotation_sw = planeconfigs[i].rotation;
+						p[0].rotation_hw = IGT_ROTATION_0;
+						p[1].rotation_sw = planeconfigs[j].rotation;
+						p[1].rotation_hw = IGT_ROTATION_0;
+						get_multiplane_crc(data, output, &retcrc_sw,
+								   (planeinfos*)&p, MAXMULTIPLANESAMOUNT);
+
+						igt_swap(p[0].rotation_sw, p[0].rotation_hw);
+						igt_swap(p[1].rotation_sw, p[1].rotation_hw);
+						get_multiplane_crc(data, output, &retcrc_hw,
+								   (planeinfos*)&p, MAXMULTIPLANESAMOUNT);
+
+						igt_assert_crc_equal(&retcrc_sw, &retcrc_hw);
+					}
+				}
+			}
+		}
+		igt_pipe_crc_stop(data->pipe_crc);
+		igt_pipe_crc_free(data->pipe_crc);
+	}
+
+	/*
+	* Old fbs are deleted only after new ones are set on planes.
+	* This is done to speed up the test
+	*/
+	oldplanes = data->multiplaneoldview;
+	for (c = 0; c < MAXMULTIPLANESAMOUNT && oldplanes; c++)
+		igt_remove_fb(data->gfx_fd, &oldplanes[c].fb);
+
+	free(oldplanes);
+	data->multiplaneoldview = NULL;
+	data->pipe_crc = NULL;
+}
+
 static void test_plane_rotation_exhaust_fences(data_t *data,
 					       enum pipe pipe,
 					       igt_output_t *output,
@@ -591,6 +798,42 @@ igt_main
 		}
 	}
 
+	igt_subtest_f("multiplane-rotation") {
+		igt_require(gen >= 9);
+		cleanup_crtc(&data);
+		data.planepos[0].origo = p_top|p_left;
+		data.planepos[0].x = 128;
+		data.planepos[0].y = 128;
+		data.planepos[1].origo = p_top|p_right;
+		data.planepos[1].x = -128-512;
+		data.planepos[1].y = 128;
+		test_multi_plane_rotation(&data, 0);
+	}
+
+	igt_subtest_f("multiplane-rotation-cropping-top") {
+		igt_require(gen >= 9);
+		cleanup_crtc(&data);
+		data.planepos[0].origo = p_top|p_left;
+		data.planepos[0].x = -128;
+		data.planepos[0].y = -128;
+		data.planepos[1].origo = p_top|p_right;
+		data.planepos[1].x = -512+128;
+		data.planepos[1].y = -128;
+		test_multi_plane_rotation(&data, 0);
+	}
+
+	igt_subtest_f("multiplane-rotation-cropping-bottom") {
+		igt_require(gen >= 9);
+		cleanup_crtc(&data);
+		data.planepos[0].origo = p_bottom|p_left;
+		data.planepos[0].x = -128;
+		data.planepos[0].y = -512+128;
+		data.planepos[1].origo = p_bottom|p_right;
+		data.planepos[1].x = -512+128;
+		data.planepos[1].y = -512+128;
+		test_multi_plane_rotation(&data, 0);
+	}
+
 	/*
 	 * exhaust-fences should be last test, if it fails we may OOM in
 	 * the following subtests otherwise.
-- 
2.7.4

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests.
  2018-10-24 13:33 [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests Juha-Pekka Heikkila
@ 2018-10-24 18:25 ` Patchwork
  2018-10-24 18:55 ` Patchwork
                   ` (17 subsequent siblings)
  18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2018-10-24 18:25 UTC (permalink / raw)
  To: Juha-Pekka Heikkila; +Cc: igt-dev

== Series Details ==

Series: tests/kms_rotation_crc: Add multi plane tests.
URL   : https://patchwork.freedesktop.org/series/51452/
State : success

== Summary ==

= CI Bug Log - changes from CI_DRM_5028 -> IGTPW_1986 =

== Summary - SUCCESS ==

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51452/revisions/1/mbox/

== Known issues ==

  Here are the changes found in IGTPW_1986 that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@kms_flip@basic-flip-vs-dpms:
      fi-skl-6700hq:      PASS -> DMESG-WARN (fdo#105998)

    igt@kms_pipe_crc_basic@nonblocking-crc-pipe-a:
      fi-byt-clapper:     PASS -> FAIL (fdo#107362)

    igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a:
      fi-byt-clapper:     PASS -> FAIL (fdo#107362, fdo#103191)

    
    ==== Possible fixes ====

    igt@pm_rpm@module-reload:
      fi-skl-6600u:       INCOMPLETE (fdo#107807) -> PASS

    
  fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
  fdo#105998 https://bugs.freedesktop.org/show_bug.cgi?id=105998
  fdo#107362 https://bugs.freedesktop.org/show_bug.cgi?id=107362
  fdo#107807 https://bugs.freedesktop.org/show_bug.cgi?id=107807


== Participating hosts (47 -> 41) ==

  Missing    (6): fi-ilk-m540 fi-hsw-peppy fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 fi-icl-u 


== Build changes ==

    * IGT: IGT_4689 -> IGTPW_1986

  CI_DRM_5028: 0d4b0d09075cb5334c622099724d7b3af605bed9 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_1986: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1986/
  IGT_4689: fce6109b879f720755399f37701eff30c646f89b @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools



== Testlist changes ==

+igt@kms_rotation_crc@multiplane-rotation
+igt@kms_rotation_crc@multiplane-rotation-cropping-bottom
+igt@kms_rotation_crc@multiplane-rotation-cropping-top

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1986/issues.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests.
  2018-10-24 13:33 [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests Juha-Pekka Heikkila
  2018-10-24 18:25 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork
@ 2018-10-24 18:55 ` Patchwork
  2018-10-24 23:17 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
                   ` (16 subsequent siblings)
  18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2018-10-24 18:55 UTC (permalink / raw)
  To: Juha-Pekka Heikkila; +Cc: igt-dev

== Series Details ==

Series: tests/kms_rotation_crc: Add multi plane tests.
URL   : https://patchwork.freedesktop.org/series/51452/
State : success

== Summary ==

= CI Bug Log - changes from CI_DRM_5028 -> IGTPW_1988 =

== Summary - SUCCESS ==

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51452/revisions/1/mbox/

== Known issues ==

  Here are the changes found in IGTPW_1988 that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@kms_flip@basic-flip-vs-dpms:
      fi-skl-6700hq:      PASS -> DMESG-WARN (fdo#105998)

    igt@kms_frontbuffer_tracking@basic:
      fi-byt-clapper:     PASS -> FAIL (fdo#103167)

    igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
      fi-icl-u:           PASS -> INCOMPLETE (fdo#107713)
      fi-blb-e6850:       PASS -> INCOMPLETE (fdo#107718)

    
    ==== Possible fixes ====

    igt@pm_rpm@module-reload:
      fi-skl-6600u:       INCOMPLETE (fdo#107807) -> PASS

    
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#105998 https://bugs.freedesktop.org/show_bug.cgi?id=105998
  fdo#107713 https://bugs.freedesktop.org/show_bug.cgi?id=107713
  fdo#107718 https://bugs.freedesktop.org/show_bug.cgi?id=107718
  fdo#107807 https://bugs.freedesktop.org/show_bug.cgi?id=107807


== Participating hosts (47 -> 43) ==

  Missing    (4): fi-ctg-p8600 fi-ilk-m540 fi-byt-squawks fi-bsw-cyan 


== Build changes ==

    * IGT: IGT_4689 -> IGTPW_1988

  CI_DRM_5028: 0d4b0d09075cb5334c622099724d7b3af605bed9 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_1988: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1988/
  IGT_4689: fce6109b879f720755399f37701eff30c646f89b @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools



== Testlist changes ==

+igt@kms_rotation_crc@multiplane-rotation
+igt@kms_rotation_crc@multiplane-rotation-cropping-bottom
+igt@kms_rotation_crc@multiplane-rotation-cropping-top

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1988/issues.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [igt-dev] ✓ Fi.CI.IGT: success for tests/kms_rotation_crc: Add multi plane tests.
  2018-10-24 13:33 [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests Juha-Pekka Heikkila
  2018-10-24 18:25 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork
  2018-10-24 18:55 ` Patchwork
@ 2018-10-24 23:17 ` Patchwork
  2018-10-25  0:12 ` Patchwork
                   ` (15 subsequent siblings)
  18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2018-10-24 23:17 UTC (permalink / raw)
  To: Juha-Pekka Heikkila; +Cc: igt-dev

== Series Details ==

Series: tests/kms_rotation_crc: Add multi plane tests.
URL   : https://patchwork.freedesktop.org/series/51452/
State : success

== Summary ==

= CI Bug Log - changes from IGT_4689_full -> IGTPW_1986_full =

== Summary - WARNING ==

  Minor unknown changes coming with IGTPW_1986_full need to be verified
  manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_1986_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51452/revisions/1/mbox/

== Possible new issues ==

  Here are the unknown changes that may have been introduced in IGTPW_1986_full:

  === IGT changes ===

    ==== Warnings ====

    igt@kms_plane_lowres@pipe-b-tiling-none:
      shard-apl:          SKIP -> PASS

    igt@pm_rc6_residency@rc6-accuracy:
      shard-snb:          SKIP -> PASS

    
== Known issues ==

  Here are the changes found in IGTPW_1986_full that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@kms_busy@extended-modeset-hang-newfb-render-b:
      shard-snb:          NOTRUN -> DMESG-WARN (fdo#107956) +1

    igt@kms_busy@extended-modeset-hang-newfb-with-reset-render-c:
      shard-kbl:          PASS -> DMESG-WARN (fdo#107956)

    igt@kms_ccs@pipe-b-crc-sprite-planes-basic:
      shard-kbl:          PASS -> FAIL (fdo#108145)

    igt@kms_cursor_crc@cursor-256x256-dpms:
      shard-kbl:          PASS -> FAIL (fdo#103232)

    igt@kms_cursor_crc@cursor-256x256-sliding:
      shard-apl:          PASS -> FAIL (fdo#103232)

    igt@kms_flip@flip-vs-panning-vs-hang:
      shard-kbl:          PASS -> DMESG-WARN (fdo#103558, fdo#105602) +9

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-move:
      shard-kbl:          PASS -> FAIL (fdo#103167)

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-cpu:
      shard-apl:          PASS -> FAIL (fdo#103167) +1

    igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-mmap-cpu:
      shard-glk:          PASS -> FAIL (fdo#103167) +1

    igt@kms_plane_alpha_blend@pipe-a-constant-alpha-max:
      shard-glk:          PASS -> FAIL (fdo#108145) +1

    igt@kms_plane_multiple@atomic-pipe-b-tiling-y:
      shard-glk:          PASS -> FAIL (fdo#103166)

    igt@kms_setmode@basic:
      shard-snb:          NOTRUN -> FAIL (fdo#99912)

    igt@kms_universal_plane@universal-plane-pipe-b-functional:
      shard-apl:          PASS -> FAIL (fdo#103166) +1

    igt@perf_pmu@idle-no-semaphores-vecs0:
      shard-snb:          SKIP -> INCOMPLETE (fdo#105411)

    
    ==== Possible fixes ====

    igt@kms_atomic_transition@plane-toggle-modeset-transition:
      shard-hsw:          DMESG-WARN (fdo#102614) -> PASS

    igt@kms_color@pipe-a-ctm-max:
      shard-kbl:          FAIL -> PASS
      shard-apl:          FAIL (fdo#108147) -> PASS

    igt@kms_cursor_crc@cursor-128x128-random:
      shard-apl:          FAIL (fdo#103232) -> PASS +6

    igt@kms_cursor_crc@cursor-128x128-suspend:
      shard-glk:          FAIL (fdo#103232) -> PASS +3

    igt@kms_cursor_crc@cursor-256x85-sliding:
      shard-kbl:          FAIL (fdo#103232) -> PASS

    igt@kms_cursor_crc@cursor-64x64-suspend:
      shard-apl:          FAIL (fdo#103232, fdo#103191) -> PASS
      shard-kbl:          FAIL (fdo#103232, fdo#103191) -> PASS

    igt@kms_flip@plain-flip-fb-recreate:
      shard-kbl:          FAIL (fdo#100368) -> PASS

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-blt:
      shard-snb:          INCOMPLETE (fdo#105411) -> PASS

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-gtt:
      shard-apl:          FAIL (fdo#103167) -> PASS +3
      shard-kbl:          FAIL (fdo#103167) -> PASS

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-fullscreen:
      shard-glk:          FAIL (fdo#103167) -> PASS +3

    igt@kms_plane@plane-position-covered-pipe-a-planes:
      shard-glk:          FAIL (fdo#103166) -> PASS +3

    igt@kms_plane_multiple@atomic-pipe-c-tiling-yf:
      shard-apl:          FAIL (fdo#103166) -> PASS +4
      shard-kbl:          FAIL (fdo#103166) -> PASS +1

    igt@kms_vblank@pipe-b-ts-continuation-dpms-suspend:
      shard-apl:          DMESG-WARN (fdo#103558, fdo#105602) -> PASS +1

    
  fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368
  fdo#102614 https://bugs.freedesktop.org/show_bug.cgi?id=102614
  fdo#103166 https://bugs.freedesktop.org/show_bug.cgi?id=103166
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
  fdo#103232 https://bugs.freedesktop.org/show_bug.cgi?id=103232
  fdo#103558 https://bugs.freedesktop.org/show_bug.cgi?id=103558
  fdo#105411 https://bugs.freedesktop.org/show_bug.cgi?id=105411
  fdo#105602 https://bugs.freedesktop.org/show_bug.cgi?id=105602
  fdo#107956 https://bugs.freedesktop.org/show_bug.cgi?id=107956
  fdo#108145 https://bugs.freedesktop.org/show_bug.cgi?id=108145
  fdo#108147 https://bugs.freedesktop.org/show_bug.cgi?id=108147
  fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912


== Participating hosts (6 -> 5) ==

  Missing    (1): shard-skl 


== Build changes ==

    * IGT: IGT_4689 -> IGTPW_1986
    * Linux: CI_DRM_5026 -> CI_DRM_5028

  CI_DRM_5026: f442c034e365463f506d73066b568c00e0d8bbc8 @ git://anongit.freedesktop.org/gfx-ci/linux
  CI_DRM_5028: 0d4b0d09075cb5334c622099724d7b3af605bed9 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_1986: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1986/
  IGT_4689: fce6109b879f720755399f37701eff30c646f89b @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1986/shards.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [igt-dev] ✓ Fi.CI.IGT: success for tests/kms_rotation_crc: Add multi plane tests.
  2018-10-24 13:33 [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests Juha-Pekka Heikkila
                   ` (2 preceding siblings ...)
  2018-10-24 23:17 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
@ 2018-10-25  0:12 ` Patchwork
  2018-10-25 13:26 ` [igt-dev] [PATCH i-g-t] " Juha-Pekka Heikkila
                   ` (14 subsequent siblings)
  18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2018-10-25  0:12 UTC (permalink / raw)
  To: Juha-Pekka Heikkila; +Cc: igt-dev

== Series Details ==

Series: tests/kms_rotation_crc: Add multi plane tests.
URL   : https://patchwork.freedesktop.org/series/51452/
State : success

== Summary ==

= CI Bug Log - changes from IGT_4689_full -> IGTPW_1988_full =

== Summary - WARNING ==

  Minor unknown changes coming with IGTPW_1988_full need to be verified
  manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_1988_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51452/revisions/1/mbox/

== Possible new issues ==

  Here are the unknown changes that may have been introduced in IGTPW_1988_full:

  === IGT changes ===

    ==== Possible regressions ====

    {igt@kms_rotation_crc@multiplane-rotation-cropping-top}:
      shard-glk:          NOTRUN -> FAIL

    
    ==== Warnings ====

    igt@kms_plane_lowres@pipe-b-tiling-none:
      shard-apl:          SKIP -> PASS

    igt@pm_rc6_residency@rc6-accuracy:
      shard-kbl:          PASS -> SKIP
      shard-snb:          SKIP -> PASS

    
== Known issues ==

  Here are the changes found in IGTPW_1988_full that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@gem_exec_nop@basic-sequential:
      shard-glk:          PASS -> INCOMPLETE (k.org#198133, fdo#103359)

    igt@gem_ppgtt@blt-vs-render-ctx0:
      shard-kbl:          PASS -> INCOMPLETE (fdo#103665, fdo#106023)

    igt@kms_available_modes_crc@available_mode_test_crc:
      shard-snb:          PASS -> FAIL (fdo#106641)

    igt@kms_busy@extended-modeset-hang-newfb-render-b:
      shard-snb:          NOTRUN -> DMESG-WARN (fdo#107956)

    igt@kms_busy@extended-modeset-hang-newfb-with-reset-render-c:
      shard-kbl:          PASS -> DMESG-WARN (fdo#107956)

    igt@kms_cursor_crc@cursor-128x128-dpms:
      shard-apl:          PASS -> FAIL (fdo#103232)

    igt@kms_cursor_crc@cursor-256x256-dpms:
      shard-glk:          PASS -> FAIL (fdo#103232) +3
      shard-kbl:          PASS -> FAIL (fdo#103232)

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-move:
      shard-apl:          PASS -> FAIL (fdo#103167)

    igt@kms_frontbuffer_tracking@fbc-1p-rte:
      shard-glk:          PASS -> FAIL (fdo#103167, fdo#105682)

    igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-onoff:
      shard-glk:          PASS -> FAIL (fdo#103167) +6

    igt@kms_plane_alpha_blend@pipe-a-constant-alpha-max:
      shard-glk:          PASS -> FAIL (fdo#108145)

    igt@kms_plane_multiple@atomic-pipe-b-tiling-y:
      shard-glk:          PASS -> FAIL (fdo#103166) +1

    igt@kms_plane_multiple@atomic-pipe-c-tiling-y:
      shard-apl:          PASS -> FAIL (fdo#103166) +1

    igt@kms_setmode@basic:
      shard-kbl:          PASS -> FAIL (fdo#99912)

    
    ==== Possible fixes ====

    igt@kms_atomic_transition@plane-toggle-modeset-transition:
      shard-hsw:          DMESG-WARN (fdo#102614) -> PASS

    igt@kms_available_modes_crc@available_mode_test_crc:
      shard-apl:          FAIL (fdo#106641) -> PASS

    igt@kms_color@pipe-a-ctm-max:
      shard-kbl:          FAIL -> PASS
      shard-apl:          FAIL (fdo#108147) -> PASS

    igt@kms_cursor_crc@cursor-128x128-random:
      shard-apl:          FAIL (fdo#103232) -> PASS +5

    igt@kms_cursor_crc@cursor-128x42-sliding:
      shard-glk:          FAIL (fdo#103232) -> PASS

    igt@kms_cursor_crc@cursor-256x85-sliding:
      shard-kbl:          FAIL (fdo#103232) -> PASS

    igt@kms_cursor_crc@cursor-64x64-suspend:
      shard-kbl:          FAIL (fdo#103191, fdo#103232) -> PASS

    igt@kms_flip@plain-flip-fb-recreate:
      shard-kbl:          FAIL (fdo#100368) -> PASS

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-blt:
      shard-snb:          INCOMPLETE (fdo#105411) -> PASS

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-blt:
      shard-kbl:          FAIL (fdo#103167) -> PASS +1

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-gtt:
      shard-apl:          FAIL (fdo#103167) -> PASS +4
      shard-glk:          FAIL (fdo#103167) -> PASS +2

    igt@kms_plane@plane-position-covered-pipe-a-planes:
      shard-kbl:          FAIL (fdo#103166) -> PASS

    igt@kms_plane_alpha_blend@pipe-c-constant-alpha-max:
      shard-glk:          FAIL (fdo#108145) -> PASS
      shard-kbl:          FAIL (fdo#108145) -> PASS
      shard-apl:          FAIL (fdo#108145) -> PASS

    igt@kms_plane_multiple@atomic-pipe-c-tiling-yf:
      shard-apl:          FAIL (fdo#103166) -> PASS +4

    igt@kms_setmode@basic:
      shard-apl:          FAIL (fdo#99912) -> PASS

    igt@kms_vblank@pipe-b-ts-continuation-dpms-suspend:
      shard-apl:          DMESG-WARN (fdo#105602, fdo#103558) -> PASS +1

    
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368
  fdo#102614 https://bugs.freedesktop.org/show_bug.cgi?id=102614
  fdo#103166 https://bugs.freedesktop.org/show_bug.cgi?id=103166
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
  fdo#103232 https://bugs.freedesktop.org/show_bug.cgi?id=103232
  fdo#103359 https://bugs.freedesktop.org/show_bug.cgi?id=103359
  fdo#103558 https://bugs.freedesktop.org/show_bug.cgi?id=103558
  fdo#103665 https://bugs.freedesktop.org/show_bug.cgi?id=103665
  fdo#105411 https://bugs.freedesktop.org/show_bug.cgi?id=105411
  fdo#105602 https://bugs.freedesktop.org/show_bug.cgi?id=105602
  fdo#105682 https://bugs.freedesktop.org/show_bug.cgi?id=105682
  fdo#106023 https://bugs.freedesktop.org/show_bug.cgi?id=106023
  fdo#106641 https://bugs.freedesktop.org/show_bug.cgi?id=106641
  fdo#107956 https://bugs.freedesktop.org/show_bug.cgi?id=107956
  fdo#108145 https://bugs.freedesktop.org/show_bug.cgi?id=108145
  fdo#108147 https://bugs.freedesktop.org/show_bug.cgi?id=108147
  fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912
  k.org#198133 https://bugzilla.kernel.org/show_bug.cgi?id=198133


== Participating hosts (6 -> 5) ==

  Missing    (1): shard-skl 


== Build changes ==

    * IGT: IGT_4689 -> IGTPW_1988
    * Linux: CI_DRM_5026 -> CI_DRM_5028

  CI_DRM_5026: f442c034e365463f506d73066b568c00e0d8bbc8 @ git://anongit.freedesktop.org/gfx-ci/linux
  CI_DRM_5028: 0d4b0d09075cb5334c622099724d7b3af605bed9 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_1988: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1988/
  IGT_4689: fce6109b879f720755399f37701eff30c646f89b @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1988/shards.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests.
  2018-10-24 13:33 [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests Juha-Pekka Heikkila
                   ` (3 preceding siblings ...)
  2018-10-25  0:12 ` Patchwork
@ 2018-10-25 13:26 ` Juha-Pekka Heikkila
  2018-10-26 12:58   ` Juha-Pekka Heikkila
  2018-10-25 14:42 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev2) Patchwork
                   ` (13 subsequent siblings)
  18 siblings, 1 reply; 28+ messages in thread
From: Juha-Pekka Heikkila @ 2018-10-25 13:26 UTC (permalink / raw)
  To: igt-dev

Add three new tests which try primary and sprite planes
next to each other with different plane formats, rotations
and tiling modes.

multiplane-rotation subtest run test through with both planes
fully visible.

multiplane-rotation-cropping-top will crop primary plane to
left/top corner and sprite plane to right/top corner while running
rotation tests.

multiplane-rotation-cropping-bottom will crop primary plane to
left/bottom corner and sprite plane to right/bottom corner while
running rotation tests.

Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
---
 tests/kms_rotation_crc.c | 248 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 248 insertions(+)

diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
index c233ef6..0282929 100644
--- a/tests/kms_rotation_crc.c
+++ b/tests/kms_rotation_crc.c
@@ -26,6 +26,25 @@
 #include <math.h>
 
 #define MAX_FENCES 32
+#define MAXMULTIPLANESAMOUNT 2
+
+struct p_struct {
+	igt_plane_t *plane;
+	struct igt_fb fb;
+};
+
+enum p_pointorigo {
+	p_top = 1 << 0,
+	p_bottom = 1 << 1,
+	p_left = 1 << 2,
+	p_right = 1 << 3
+};
+
+struct p_point{
+	enum p_pointorigo origo;
+	int32_t x;
+	int32_t y;
+};
 
 typedef struct {
 	int gfx_fd;
@@ -43,6 +62,9 @@ typedef struct {
 	uint32_t override_fmt;
 	uint64_t override_tiling;
 	int devid;
+
+	struct p_struct *multiplaneoldview;
+	struct p_point planepos[MAXMULTIPLANESAMOUNT];
 } data_t;
 
 typedef struct {
@@ -392,6 +414,196 @@ static void test_plane_rotation(data_t *data, int plane_type, bool test_bad_form
 	}
 }
 
+typedef struct {
+	int32_t x1, y1;
+	uint64_t width, height, tiling, planetype, format;
+	igt_rotation_t rotation_sw, rotation_hw;
+} planeinfos;
+
+static void get_multiplane_crc(data_t *data, igt_output_t *output,
+			       igt_crc_t *crc_output, planeinfos* planeinfo,
+			       int numplanes)
+{
+	uint32_t w, h;
+	igt_display_t *display = &data->display;
+	struct p_struct *planes, *oldplanes;
+	int c, ret;
+
+	oldplanes = data->multiplaneoldview;
+	planes = malloc(sizeof(*planes)*numplanes);
+
+	for (c = 0; c < numplanes; c++) {
+		planes[c].plane = igt_output_get_plane_type(output,
+							    planeinfo[c].planetype);
+
+		w = planeinfo[c].width;
+		h = planeinfo[c].height;
+
+		if ((planeinfo[c].rotation_hw|planeinfo[c].rotation_sw)
+		    &(IGT_ROTATION_90|IGT_ROTATION_270))
+			igt_swap(w, h);
+
+		igt_plane_set_size(planes[c].plane, w, h);
+
+		igt_create_fb(data->gfx_fd, w, h, planeinfo[c].format,
+			      planeinfo[c].tiling, &planes[c].fb);
+
+		paint_squares(data, planeinfo[c].rotation_sw, &planes[c].fb, 1.0f);
+		igt_plane_set_fb(planes[c].plane, &planes[c].fb);
+		igt_plane_set_position(planes[c].plane, planeinfo[c].x1, planeinfo[c].y1);
+		igt_plane_set_rotation(planes[c].plane, planeinfo[c].rotation_hw);
+	}
+
+	ret = igt_display_try_commit2(display, COMMIT_ATOMIC);
+	igt_assert_eq(ret, 0);
+
+	igt_pipe_crc_get_current(data->gfx_fd, data->pipe_crc, crc_output);
+
+	for (c = 0; c < numplanes && oldplanes; c++)
+		igt_remove_fb(data->gfx_fd, &oldplanes[c].fb);
+
+	free(oldplanes);
+	data->multiplaneoldview = (void*)planes;
+}
+
+static void pointlocation(data_t *data, planeinfos* p, drmModeModeInfo *mode,
+			  int c)
+{
+	p[c].x1 = data->planepos[c].x
+			+((data->planepos[c].origo&p_right)?mode->hdisplay:0);
+	p[c].y1 = data->planepos[c].y
+			+((data->planepos[c].origo&p_bottom)?mode->vdisplay:0);
+}
+
+/*
+ * Here is pipe parameter which is now used only for first pipe.
+ * It is left here if this test ever was wanted to be run on
+ * different pipes.
+ */
+static void test_multi_plane_rotation(data_t *data, enum pipe pipe)
+{
+	igt_display_t *display = &data->display;
+	igt_output_t *output;
+	igt_crc_t retcrc_sw, retcrc_hw;
+	planeinfos p[2];
+	int c;
+	struct p_struct *oldplanes;
+	drmModeModeInfo *mode;
+
+	const static struct {
+		igt_rotation_t	rotation;
+		uint64_t	width;
+		uint64_t	height;
+		uint64_t	tiling;
+	} planeconfigs[] = {
+	{IGT_ROTATION_0, 512, 512, LOCAL_DRM_FORMAT_MOD_NONE },
+	{IGT_ROTATION_0, 512, 512, LOCAL_I915_FORMAT_MOD_X_TILED },
+	{IGT_ROTATION_0, 512, 512, LOCAL_I915_FORMAT_MOD_Y_TILED },
+	{IGT_ROTATION_0, 512, 512, LOCAL_I915_FORMAT_MOD_Yf_TILED },
+	{IGT_ROTATION_90, 512, 512, LOCAL_I915_FORMAT_MOD_Y_TILED },
+	{IGT_ROTATION_90, 512, 512, LOCAL_I915_FORMAT_MOD_Yf_TILED },
+	{IGT_ROTATION_180, 512, 512, LOCAL_DRM_FORMAT_MOD_NONE },
+	{IGT_ROTATION_180, 512, 512, LOCAL_I915_FORMAT_MOD_X_TILED },
+	{IGT_ROTATION_180, 512, 512, LOCAL_I915_FORMAT_MOD_Y_TILED },
+	{IGT_ROTATION_180, 512, 512, LOCAL_I915_FORMAT_MOD_Yf_TILED },
+	{IGT_ROTATION_270, 512, 512, LOCAL_I915_FORMAT_MOD_Y_TILED },
+	{IGT_ROTATION_270, 512, 512, LOCAL_I915_FORMAT_MOD_Yf_TILED },
+	};
+
+	/*
+	* These are those modes which are tested. For testing feel interesting
+	* case with tiling are 2 byte wide and 4 byte wide.
+	*
+	* TODO:
+	* Built support for NV12 here.
+	*/
+	const static uint32_t  formatlist[] = {DRM_FORMAT_RGB565,
+					       DRM_FORMAT_XRGB8888};
+
+
+	for_each_valid_output_on_pipe(display, pipe, output) {
+		int i, j, k, l;
+		igt_output_set_pipe(output, pipe);
+
+		mode = igt_output_get_mode(output);
+
+		igt_display_require_output(display);
+		igt_display_commit2(display, COMMIT_ATOMIC);
+
+		data->pipe_crc = igt_pipe_crc_new(data->gfx_fd, pipe,
+						  INTEL_PIPE_CRC_SOURCE_AUTO);
+		igt_pipe_crc_start(data->pipe_crc);
+
+		for (i = 0; i < ARRAY_SIZE(planeconfigs); i++) {
+			p[0].planetype = DRM_PLANE_TYPE_PRIMARY;
+			p[0].width = planeconfigs[i].width;
+			p[0].height = planeconfigs[i].height;
+			p[0].tiling = planeconfigs[i].tiling;
+			pointlocation(data, (planeinfos*)&p, mode, 0);
+
+			for (k = 0; k < ARRAY_SIZE(formatlist); k++) {
+				p[0].format = formatlist[k];
+
+				for (j = 0; j < ARRAY_SIZE(planeconfigs); j++) {
+					p[1].planetype = DRM_PLANE_TYPE_OVERLAY;
+					p[1].width = planeconfigs[j].width;
+					p[1].height = planeconfigs[j].height;
+					p[1].tiling = planeconfigs[j].tiling;
+					pointlocation(data, (planeinfos*)&p,
+						      mode, 1);
+
+					for (l = 0; l < ARRAY_SIZE(formatlist); l++) {
+						p[1].format = formatlist[l];
+
+						/*
+						 * RGB565 90/270 degrees rotation is supported
+						 * from gen11 onwards.
+						 */
+						if (p[0].format == DRM_FORMAT_RGB565 &&
+						     (planeconfigs[i].rotation&(IGT_ROTATION_90|IGT_ROTATION_270))
+						     && intel_gen(data->devid) < 11)
+							continue;
+
+						if (p[1].format == DRM_FORMAT_RGB565 &&
+						     (planeconfigs[j].rotation&(IGT_ROTATION_90|IGT_ROTATION_270))
+						     && intel_gen(data->devid) < 11)
+							continue;
+
+
+						p[0].rotation_sw = planeconfigs[i].rotation;
+						p[0].rotation_hw = IGT_ROTATION_0;
+						p[1].rotation_sw = planeconfigs[j].rotation;
+						p[1].rotation_hw = IGT_ROTATION_0;
+						get_multiplane_crc(data, output, &retcrc_sw,
+								   (planeinfos*)&p, MAXMULTIPLANESAMOUNT);
+
+						igt_swap(p[0].rotation_sw, p[0].rotation_hw);
+						igt_swap(p[1].rotation_sw, p[1].rotation_hw);
+						get_multiplane_crc(data, output, &retcrc_hw,
+								   (planeinfos*)&p, MAXMULTIPLANESAMOUNT);
+
+						igt_assert_crc_equal(&retcrc_sw, &retcrc_hw);
+					}
+				}
+			}
+		}
+		igt_pipe_crc_stop(data->pipe_crc);
+		igt_pipe_crc_free(data->pipe_crc);
+	}
+
+	/*
+	* Old fbs are deleted only after new ones are set on planes.
+	* This is done to speed up the test
+	*/
+	oldplanes = data->multiplaneoldview;
+	for (c = 0; c < MAXMULTIPLANESAMOUNT && oldplanes; c++)
+		igt_remove_fb(data->gfx_fd, &oldplanes[c].fb);
+
+	free(oldplanes);
+	data->multiplaneoldview = NULL;
+	data->pipe_crc = NULL;
+}
+
 static void test_plane_rotation_exhaust_fences(data_t *data,
 					       enum pipe pipe,
 					       igt_output_t *output,
@@ -591,6 +803,42 @@ igt_main
 		}
 	}
 
+	igt_subtest_f("multiplane-rotation") {
+		igt_require(gen >= 9);
+		cleanup_crtc(&data);
+		data.planepos[0].origo = p_top|p_left;
+		data.planepos[0].x = 128;
+		data.planepos[0].y = 128;
+		data.planepos[1].origo = p_top|p_right;
+		data.planepos[1].x = -128-512;
+		data.planepos[1].y = 128;
+		test_multi_plane_rotation(&data, 0);
+	}
+
+	igt_subtest_f("multiplane-rotation-cropping-top") {
+		igt_require(gen >= 9);
+		cleanup_crtc(&data);
+		data.planepos[0].origo = p_top|p_left;
+		data.planepos[0].x = -128;
+		data.planepos[0].y = -128;
+		data.planepos[1].origo = p_top|p_right;
+		data.planepos[1].x = -512+128;
+		data.planepos[1].y = -128;
+		test_multi_plane_rotation(&data, 0);
+	}
+
+	igt_subtest_f("multiplane-rotation-cropping-bottom") {
+		igt_require(gen >= 9);
+		cleanup_crtc(&data);
+		data.planepos[0].origo = p_bottom|p_left;
+		data.planepos[0].x = -128;
+		data.planepos[0].y = -512+128;
+		data.planepos[1].origo = p_bottom|p_right;
+		data.planepos[1].x = -512+128;
+		data.planepos[1].y = -512+128;
+		test_multi_plane_rotation(&data, 0);
+	}
+
 	/*
 	 * exhaust-fences should be last test, if it fails we may OOM in
 	 * the following subtests otherwise.
-- 
2.7.4

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev2)
  2018-10-24 13:33 [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests Juha-Pekka Heikkila
                   ` (4 preceding siblings ...)
  2018-10-25 13:26 ` [igt-dev] [PATCH i-g-t] " Juha-Pekka Heikkila
@ 2018-10-25 14:42 ` Patchwork
  2018-10-26  6:10 ` Patchwork
                   ` (12 subsequent siblings)
  18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2018-10-25 14:42 UTC (permalink / raw)
  To: Juha-Pekka Heikkila; +Cc: igt-dev

== Series Details ==

Series: tests/kms_rotation_crc: Add multi plane tests. (rev2)
URL   : https://patchwork.freedesktop.org/series/51452/
State : success

== Summary ==

= CI Bug Log - changes from CI_DRM_5033 -> IGTPW_1994 =

== Summary - WARNING ==

  Minor unknown changes coming with IGTPW_1994 need to be verified
  manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_1994, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51452/revisions/2/mbox/

== Possible new issues ==

  Here are the unknown changes that may have been introduced in IGTPW_1994:

  === IGT changes ===

    ==== Warnings ====

    igt@pm_rpm@module-reload:
      fi-hsw-4770r:       SKIP -> PASS

    
== Known issues ==

  Here are the changes found in IGTPW_1994 that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@drv_module_reload@basic-reload:
      fi-glk-j4005:       PASS -> DMESG-WARN (fdo#106248, fdo#106725)

    igt@kms_busy@basic-flip-c:
      fi-glk-j4005:       PASS -> DMESG-WARN (fdo#106097)

    igt@kms_flip@basic-flip-vs-wf_vblank:
      fi-glk-j4005:       PASS -> FAIL (fdo#100368)

    igt@pm_rpm@module-reload:
      fi-glk-j4005:       PASS -> DMESG-WARN (fdo#106000, fdo#107726)

    
    ==== Possible fixes ====

    igt@drv_module_reload@basic-reload-inject:
      fi-hsw-4770r:       DMESG-WARN (fdo#107924, fdo#107425) -> PASS

    igt@drv_selftest@live_hangcheck:
      fi-kbl-7560u:       INCOMPLETE (fdo#108044) -> PASS

    igt@kms_flip@basic-flip-vs-dpms:
      fi-skl-6700hq:      DMESG-WARN (fdo#105998) -> PASS

    igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
      fi-icl-u:           INCOMPLETE (fdo#107713) -> PASS

    
  fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368
  fdo#105998 https://bugs.freedesktop.org/show_bug.cgi?id=105998
  fdo#106000 https://bugs.freedesktop.org/show_bug.cgi?id=106000
  fdo#106097 https://bugs.freedesktop.org/show_bug.cgi?id=106097
  fdo#106248 https://bugs.freedesktop.org/show_bug.cgi?id=106248
  fdo#106725 https://bugs.freedesktop.org/show_bug.cgi?id=106725
  fdo#107425 https://bugs.freedesktop.org/show_bug.cgi?id=107425
  fdo#107713 https://bugs.freedesktop.org/show_bug.cgi?id=107713
  fdo#107726 https://bugs.freedesktop.org/show_bug.cgi?id=107726
  fdo#107924 https://bugs.freedesktop.org/show_bug.cgi?id=107924
  fdo#108044 https://bugs.freedesktop.org/show_bug.cgi?id=108044


== Participating hosts (47 -> 43) ==

  Missing    (4): fi-ctg-p8600 fi-ilk-m540 fi-byt-squawks fi-bsw-cyan 


== Build changes ==

    * IGT: IGT_4691 -> IGTPW_1994

  CI_DRM_5033: f935e4c7634781e6ffef10bb8a1c93225ac42d90 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_1994: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1994/
  IGT_4691: d445be01f5edc7e7a324444c73e221c9ed75602e @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools



== Testlist changes ==

+igt@kms_rotation_crc@multiplane-rotation
+igt@kms_rotation_crc@multiplane-rotation-cropping-bottom
+igt@kms_rotation_crc@multiplane-rotation-cropping-top

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1994/issues.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev2)
  2018-10-24 13:33 [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests Juha-Pekka Heikkila
                   ` (5 preceding siblings ...)
  2018-10-25 14:42 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev2) Patchwork
@ 2018-10-26  6:10 ` Patchwork
  2018-10-26 12:21 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
                   ` (11 subsequent siblings)
  18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2018-10-26  6:10 UTC (permalink / raw)
  To: Juha-Pekka Heikkila; +Cc: igt-dev

== Series Details ==

Series: tests/kms_rotation_crc: Add multi plane tests. (rev2)
URL   : https://patchwork.freedesktop.org/series/51452/
State : success

== Summary ==

= CI Bug Log - changes from CI_DRM_5037 -> IGTPW_1996 =

== Summary - SUCCESS ==

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51452/revisions/2/mbox/

== Known issues ==

  Here are the changes found in IGTPW_1996 that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@gem_exec_suspend@basic-s3:
      fi-blb-e6850:       PASS -> INCOMPLETE (fdo#107718)

    igt@kms_pipe_crc_basic@nonblocking-crc-pipe-a-frame-sequence:
      fi-byt-clapper:     PASS -> FAIL (fdo#107362, fdo#103191)

    
    ==== Possible fixes ====

    igt@kms_flip@basic-flip-vs-dpms:
      fi-skl-6700hq:      DMESG-WARN (fdo#105998) -> PASS
      fi-glk-j4005:       DMESG-WARN (fdo#106000) -> PASS +1

    igt@kms_flip@basic-flip-vs-wf_vblank:
      fi-glk-j4005:       FAIL (fdo#100368) -> PASS

    igt@kms_frontbuffer_tracking@basic:
      fi-glk-j4005:       FAIL (fdo#103167) -> PASS

    igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
      fi-byt-clapper:     FAIL (fdo#107362, fdo#103191) -> PASS

    
  fdo#100368 https://bugs.freedesktop.org/show_bug.cgi?id=100368
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
  fdo#105998 https://bugs.freedesktop.org/show_bug.cgi?id=105998
  fdo#106000 https://bugs.freedesktop.org/show_bug.cgi?id=106000
  fdo#107362 https://bugs.freedesktop.org/show_bug.cgi?id=107362
  fdo#107718 https://bugs.freedesktop.org/show_bug.cgi?id=107718


== Participating hosts (46 -> 43) ==

  Additional (1): fi-icl-u 
  Missing    (4): fi-bsw-cyan fi-ilk-m540 fi-byt-squawks fi-icl-u2 


== Build changes ==

    * IGT: IGT_4694 -> IGTPW_1996

  CI_DRM_5037: e11750586cb6054bd319ad217cecd045febaacc5 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_1996: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1996/
  IGT_4694: ff8d1156723f235e82cb4fcfd2cd6e5a5bb211fa @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools



== Testlist changes ==

+igt@kms_rotation_crc@multiplane-rotation
+igt@kms_rotation_crc@multiplane-rotation-cropping-bottom
+igt@kms_rotation_crc@multiplane-rotation-cropping-top

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1996/issues.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [igt-dev] ✓ Fi.CI.IGT: success for tests/kms_rotation_crc: Add multi plane tests. (rev2)
  2018-10-24 13:33 [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests Juha-Pekka Heikkila
                   ` (6 preceding siblings ...)
  2018-10-26  6:10 ` Patchwork
@ 2018-10-26 12:21 ` Patchwork
  2018-10-26 14:23 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev3) Patchwork
                   ` (10 subsequent siblings)
  18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2018-10-26 12:21 UTC (permalink / raw)
  To: Juha-Pekka Heikkila; +Cc: igt-dev

== Series Details ==

Series: tests/kms_rotation_crc: Add multi plane tests. (rev2)
URL   : https://patchwork.freedesktop.org/series/51452/
State : success

== Summary ==

= CI Bug Log - changes from IGT_4694_full -> IGTPW_1996_full =

== Summary - WARNING ==

  Minor unknown changes coming with IGTPW_1996_full need to be verified
  manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_1996_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51452/revisions/2/mbox/

== Possible new issues ==

  Here are the unknown changes that may have been introduced in IGTPW_1996_full:

  === IGT changes ===

    ==== Possible regressions ====

    {igt@kms_rotation_crc@multiplane-rotation-cropping-bottom}:
      shard-glk:          NOTRUN -> FAIL +2

    
    ==== Warnings ====

    igt@kms_vblank@pipe-a-query-forked-hang:
      shard-snb:          SKIP -> PASS +1

    
== Known issues ==

  Here are the changes found in IGTPW_1996_full that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@drv_suspend@fence-restore-tiled2untiled:
      shard-snb:          PASS -> INCOMPLETE (fdo#105411) +1

    igt@gem_busy@close-race:
      shard-snb:          PASS -> DMESG-FAIL (fdo#108561)
      shard-hsw:          PASS -> DMESG-FAIL (fdo#108561)
      shard-kbl:          PASS -> DMESG-FAIL (fdo#108561)
      shard-apl:          PASS -> DMESG-FAIL (fdo#108561)

    igt@kms_atomic_transition@plane-all-transition-nonblocking-fencing:
      shard-snb:          PASS -> DMESG-WARN (fdo#107469)

    igt@kms_busy@extended-modeset-hang-newfb-with-reset-render-a:
      shard-glk:          NOTRUN -> DMESG-WARN (fdo#107956) +1

    igt@kms_busy@extended-pageflip-modeset-hang-oldfb-render-c:
      shard-kbl:          PASS -> DMESG-WARN (fdo#107956)

    igt@kms_color@pipe-a-legacy-gamma:
      shard-apl:          PASS -> FAIL (fdo#108145, fdo#104782)

    igt@kms_cursor_crc@cursor-128x128-sliding:
      shard-apl:          PASS -> FAIL (fdo#103232) +1

    igt@kms_cursor_crc@cursor-64x21-random:
      shard-kbl:          PASS -> FAIL (fdo#103232)
      shard-glk:          PASS -> FAIL (fdo#103232)

    igt@kms_cursor_crc@cursor-64x64-suspend:
      shard-kbl:          PASS -> DMESG-WARN (fdo#108550, fdo#108549)

    igt@kms_flip@2x-flip-vs-expired-vblank:
      shard-glk:          PASS -> FAIL (fdo#105363)

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-blt:
      shard-apl:          PASS -> FAIL (fdo#103167) +1

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-cpu:
      shard-kbl:          PASS -> FAIL (fdo#103167) +1

    igt@kms_frontbuffer_tracking@fbc-1p-rte:
      shard-apl:          PASS -> FAIL (fdo#105682, fdo#103167)

    igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-mmap-gtt:
      shard-glk:          NOTRUN -> FAIL (fdo#103167) +2

    igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-onoff:
      shard-glk:          PASS -> FAIL (fdo#103167) +5

    igt@kms_plane@plane-position-covered-pipe-b-planes:
      shard-glk:          NOTRUN -> FAIL (fdo#103166) +2

    igt@kms_plane_alpha_blend@pipe-b-constant-alpha-max:
      shard-glk:          NOTRUN -> FAIL (fdo#108145) +3

    igt@kms_plane_multiple@atomic-pipe-a-tiling-x:
      shard-apl:          PASS -> FAIL (fdo#103166) +1

    igt@kms_plane_multiple@atomic-pipe-b-tiling-x:
      shard-glk:          PASS -> FAIL (fdo#103166) +2

    igt@kms_plane_multiple@atomic-pipe-c-tiling-yf:
      shard-kbl:          PASS -> FAIL (fdo#103166) +1

    igt@kms_rotation_crc@bad-pixel-format:
      shard-apl:          PASS -> DMESG-WARN (fdo#108549) +19

    igt@kms_vblank@pipe-b-ts-continuation-modeset-rpm:
      shard-apl:          PASS -> DMESG-FAIL (fdo#108549)

    igt@kms_vblank@pipe-c-wait-forked:
      shard-kbl:          PASS -> DMESG-WARN (fdo#108550) +9

    igt@pm_rpm@fences:
      shard-apl:          PASS -> DMESG-WARN (fdo#105602, fdo#103558) +4

    
    ==== Possible fixes ====

    igt@gem_eio@wait-wedge-10ms:
      shard-glk:          FAIL (fdo#105957) -> PASS

    igt@gem_exec_await@wide-contexts:
      shard-kbl:          FAIL (fdo#106680) -> PASS

    igt@gem_userptr_blits@readonly-unsync:
      shard-apl:          INCOMPLETE (fdo#103927) -> PASS

    igt@kms_available_modes_crc@available_mode_test_crc:
      shard-apl:          FAIL (fdo#106641) -> PASS

    igt@kms_busy@extended-pageflip-hang-newfb-render-c:
      shard-glk:          DMESG-WARN (fdo#107956) -> PASS

    igt@kms_color@pipe-a-ctm-max:
      shard-apl:          FAIL (fdo#108147) -> PASS

    igt@kms_color@pipe-a-degamma:
      shard-apl:          FAIL (fdo#108145, fdo#104782) -> PASS

    igt@kms_color@pipe-b-degamma:
      shard-apl:          FAIL (fdo#104782) -> PASS

    igt@kms_color@pipe-b-gamma:
      shard-kbl:          DMESG-WARN (fdo#108550) -> PASS +15

    igt@kms_cursor_crc@cursor-128x128-suspend:
      shard-apl:          FAIL (fdo#103232, fdo#103191) -> PASS

    igt@kms_cursor_crc@cursor-256x256-suspend:
      shard-kbl:          INCOMPLETE (fdo#103665) -> PASS

    igt@kms_cursor_crc@cursor-64x21-sliding:
      shard-apl:          FAIL (fdo#103232) -> PASS +7

    igt@kms_cursor_crc@cursor-64x64-random:
      shard-glk:          FAIL (fdo#103232) -> PASS

    igt@kms_cursor_crc@cursor-64x64-sliding:
      shard-kbl:          FAIL (fdo#103232) -> PASS +1

    igt@kms_cursor_legacy@cursora-vs-flipa-toggle:
      shard-glk:          DMESG-WARN (fdo#106538, fdo#105763) -> PASS

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-gtt:
      shard-apl:          FAIL (fdo#103167) -> PASS +3

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-move:
      shard-kbl:          FAIL (fdo#103167) -> PASS

    igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-move:
      shard-glk:          FAIL (fdo#103167) -> PASS +6

    igt@kms_plane@plane-position-covered-pipe-c-planes:
      shard-apl:          FAIL (fdo#103166) -> PASS +2

    igt@kms_plane_multiple@atomic-pipe-b-tiling-yf:
      shard-kbl:          FAIL (fdo#103166) -> PASS +1
      shard-apl:          DMESG-FAIL (fdo#103166, fdo#108549) -> PASS
      shard-glk:          FAIL (fdo#103166) -> PASS

    igt@kms_setmode@basic:
      shard-kbl:          FAIL (fdo#99912) -> PASS

    igt@kms_universal_plane@universal-plane-pipe-c-functional:
      shard-snb:          INCOMPLETE (fdo#105411) -> SKIP

    igt@pm_rpm@gem-mmap-cpu:
      shard-apl:          DMESG-WARN (fdo#108549) -> PASS +42

    
    ==== Warnings ====

    igt@kms_cursor_crc@cursor-128x128-onscreen:
      shard-apl:          DMESG-WARN (fdo#108549) -> FAIL (fdo#103232)

    
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  fdo#103166 https://bugs.freedesktop.org/show_bug.cgi?id=103166
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
  fdo#103232 https://bugs.freedesktop.org/show_bug.cgi?id=103232
  fdo#103558 https://bugs.freedesktop.org/show_bug.cgi?id=103558
  fdo#103665 https://bugs.freedesktop.org/show_bug.cgi?id=103665
  fdo#103927 https://bugs.freedesktop.org/show_bug.cgi?id=103927
  fdo#104782 https://bugs.freedesktop.org/show_bug.cgi?id=104782
  fdo#105363 https://bugs.freedesktop.org/show_bug.cgi?id=105363
  fdo#105411 https://bugs.freedesktop.org/show_bug.cgi?id=105411
  fdo#105602 https://bugs.freedesktop.org/show_bug.cgi?id=105602
  fdo#105682 https://bugs.freedesktop.org/show_bug.cgi?id=105682
  fdo#105763 https://bugs.freedesktop.org/show_bug.cgi?id=105763
  fdo#105957 https://bugs.freedesktop.org/show_bug.cgi?id=105957
  fdo#106538 https://bugs.freedesktop.org/show_bug.cgi?id=106538
  fdo#106641 https://bugs.freedesktop.org/show_bug.cgi?id=106641
  fdo#106680 https://bugs.freedesktop.org/show_bug.cgi?id=106680
  fdo#107469 https://bugs.freedesktop.org/show_bug.cgi?id=107469
  fdo#107956 https://bugs.freedesktop.org/show_bug.cgi?id=107956
  fdo#108145 https://bugs.freedesktop.org/show_bug.cgi?id=108145
  fdo#108147 https://bugs.freedesktop.org/show_bug.cgi?id=108147
  fdo#108549 https://bugs.freedesktop.org/show_bug.cgi?id=108549
  fdo#108550 https://bugs.freedesktop.org/show_bug.cgi?id=108550
  fdo#108561 https://bugs.freedesktop.org/show_bug.cgi?id=108561
  fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912


== Participating hosts (6 -> 5) ==

  Missing    (1): shard-skl 


== Build changes ==

    * IGT: IGT_4694 -> IGTPW_1996
    * Linux: CI_DRM_5033 -> CI_DRM_5037

  CI_DRM_5033: f935e4c7634781e6ffef10bb8a1c93225ac42d90 @ git://anongit.freedesktop.org/gfx-ci/linux
  CI_DRM_5037: e11750586cb6054bd319ad217cecd045febaacc5 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_1996: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1996/
  IGT_4694: ff8d1156723f235e82cb4fcfd2cd6e5a5bb211fa @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1996/shards.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests.
  2018-10-25 13:26 ` [igt-dev] [PATCH i-g-t] " Juha-Pekka Heikkila
@ 2018-10-26 12:58   ` Juha-Pekka Heikkila
  2018-11-16 12:28     ` Nautiyal, Ankit K
  2018-11-19 11:59     ` Juha-Pekka Heikkila
  0 siblings, 2 replies; 28+ messages in thread
From: Juha-Pekka Heikkila @ 2018-10-26 12:58 UTC (permalink / raw)
  To: igt-dev

Add three new tests which try primary and sprite planes
next to each other with different plane formats, rotations
and tiling modes.

multiplane-rotation subtest run test through with both planes
fully visible.

multiplane-rotation-cropping-top will crop primary plane to
left/top corner and sprite plane to right/top corner while running
rotation tests.

multiplane-rotation-cropping-bottom will crop primary plane to
left/bottom corner and sprite plane to right/bottom corner while
running rotation tests.

Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
---
 tests/kms_rotation_crc.c | 249 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 249 insertions(+)

diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
index 366c254..df9ac91 100644
--- a/tests/kms_rotation_crc.c
+++ b/tests/kms_rotation_crc.c
@@ -26,6 +26,25 @@
 #include <math.h>
 
 #define MAX_FENCES 32
+#define MAXMULTIPLANESAMOUNT 2
+
+struct p_struct {
+	igt_plane_t *plane;
+	struct igt_fb fb;
+};
+
+enum p_pointorigo {
+	p_top = 1 << 0,
+	p_bottom = 1 << 1,
+	p_left = 1 << 2,
+	p_right = 1 << 3
+};
+
+struct p_point{
+	enum p_pointorigo origo;
+	int32_t x;
+	int32_t y;
+};
 
 typedef struct {
 	int gfx_fd;
@@ -43,6 +62,9 @@ typedef struct {
 	uint32_t override_fmt;
 	uint64_t override_tiling;
 	int devid;
+
+	struct p_struct *multiplaneoldview;
+	struct p_point planepos[MAXMULTIPLANESAMOUNT];
 } data_t;
 
 typedef struct {
@@ -395,6 +417,197 @@ static void test_plane_rotation(data_t *data, int plane_type, bool test_bad_form
 	}
 }
 
+typedef struct {
+	int32_t x1, y1;
+	uint64_t width, height, tiling, planetype, format;
+	igt_rotation_t rotation_sw, rotation_hw;
+} planeinfos;
+
+static void get_multiplane_crc(data_t *data, igt_output_t *output,
+			       igt_crc_t *crc_output, planeinfos* planeinfo,
+			       int numplanes)
+{
+	uint32_t w, h;
+	igt_display_t *display = &data->display;
+	struct p_struct *planes, *oldplanes;
+	int c, ret;
+
+	oldplanes = data->multiplaneoldview;
+	planes = malloc(sizeof(*planes)*numplanes);
+
+	for (c = 0; c < numplanes; c++) {
+		planes[c].plane = igt_output_get_plane_type(output,
+							    planeinfo[c].planetype);
+
+		w = planeinfo[c].width;
+		h = planeinfo[c].height;
+
+		if ((planeinfo[c].rotation_hw|planeinfo[c].rotation_sw)
+		    &(IGT_ROTATION_90|IGT_ROTATION_270))
+			igt_swap(w, h);
+
+		igt_plane_set_size(planes[c].plane, w, h);
+
+		igt_create_fb(data->gfx_fd, w, h, planeinfo[c].format,
+			      planeinfo[c].tiling, &planes[c].fb);
+
+		paint_squares(data, planeinfo[c].rotation_sw, &planes[c].fb, 1.0f);
+		igt_plane_set_fb(planes[c].plane, &planes[c].fb);
+		igt_plane_set_position(planes[c].plane, planeinfo[c].x1, planeinfo[c].y1);
+		igt_plane_set_rotation(planes[c].plane, planeinfo[c].rotation_hw);
+	}
+
+	ret = igt_display_try_commit2(display, COMMIT_ATOMIC);
+	igt_assert_eq(ret, 0);
+
+	igt_pipe_crc_get_current(data->gfx_fd, data->pipe_crc, crc_output);
+
+	for (c = 0; c < numplanes && oldplanes; c++)
+		igt_remove_fb(data->gfx_fd, &oldplanes[c].fb);
+
+	free(oldplanes);
+	data->multiplaneoldview = (void*)planes;
+}
+
+static void pointlocation(data_t *data, planeinfos* p, drmModeModeInfo *mode,
+			  int c)
+{
+	p[c].x1 = data->planepos[c].x
+			+((data->planepos[c].origo&p_right)?mode->hdisplay:0);
+	p[c].y1 = data->planepos[c].y
+			+((data->planepos[c].origo&p_bottom)?mode->vdisplay:0);
+}
+
+/*
+ * Here is pipe parameter which is now used only for first pipe.
+ * It is left here if this test ever was wanted to be run on
+ * different pipes.
+ */
+static void test_multi_plane_rotation(data_t *data, enum pipe pipe)
+{
+	igt_display_t *display = &data->display;
+	igt_output_t *output;
+	igt_crc_t retcrc_sw, retcrc_hw;
+	planeinfos p[2];
+	int c;
+	struct p_struct *oldplanes;
+	drmModeModeInfo *mode;
+
+	const static struct {
+		igt_rotation_t	rotation;
+		uint64_t	width;
+		uint64_t	height;
+		uint64_t	tiling;
+	} planeconfigs[] = {
+	{IGT_ROTATION_0, 512, 512, LOCAL_DRM_FORMAT_MOD_NONE },
+	{IGT_ROTATION_0, 512, 512, LOCAL_I915_FORMAT_MOD_X_TILED },
+	{IGT_ROTATION_0, 512, 512, LOCAL_I915_FORMAT_MOD_Y_TILED },
+	{IGT_ROTATION_0, 512, 512, LOCAL_I915_FORMAT_MOD_Yf_TILED },
+	{IGT_ROTATION_90, 512, 512, LOCAL_I915_FORMAT_MOD_Y_TILED },
+	{IGT_ROTATION_90, 512, 512, LOCAL_I915_FORMAT_MOD_Yf_TILED },
+	{IGT_ROTATION_180, 512, 512, LOCAL_DRM_FORMAT_MOD_NONE },
+	{IGT_ROTATION_180, 512, 512, LOCAL_I915_FORMAT_MOD_X_TILED },
+	{IGT_ROTATION_180, 512, 512, LOCAL_I915_FORMAT_MOD_Y_TILED },
+	{IGT_ROTATION_180, 512, 512, LOCAL_I915_FORMAT_MOD_Yf_TILED },
+	{IGT_ROTATION_270, 512, 512, LOCAL_I915_FORMAT_MOD_Y_TILED },
+	{IGT_ROTATION_270, 512, 512, LOCAL_I915_FORMAT_MOD_Yf_TILED },
+	};
+
+	/*
+	* These are those modes which are tested. For testing feel interesting
+	* case with tiling are 2 byte wide and 4 byte wide.
+	*
+	* TODO:
+	* Built support for NV12 here.
+	*/
+	const static uint32_t  formatlist[] = {DRM_FORMAT_RGB565,
+					       DRM_FORMAT_XRGB8888};
+
+
+	for_each_valid_output_on_pipe(display, pipe, output) {
+		int i, j, k, l;
+		igt_output_set_pipe(output, pipe);
+
+		mode = igt_output_get_mode(output);
+
+		igt_display_require_output(display);
+		igt_display_commit2(display, COMMIT_ATOMIC);
+
+		data->pipe_crc = igt_pipe_crc_new(data->gfx_fd, pipe,
+						  INTEL_PIPE_CRC_SOURCE_AUTO);
+		igt_pipe_crc_start(data->pipe_crc);
+
+		for (i = 0; i < ARRAY_SIZE(planeconfigs); i++) {
+			p[0].planetype = DRM_PLANE_TYPE_PRIMARY;
+			p[0].width = planeconfigs[i].width;
+			p[0].height = planeconfigs[i].height;
+			p[0].tiling = planeconfigs[i].tiling;
+			pointlocation(data, (planeinfos*)&p, mode, 0);
+
+			for (k = 0; k < ARRAY_SIZE(formatlist); k++) {
+				p[0].format = formatlist[k];
+
+				for (j = 0; j < ARRAY_SIZE(planeconfigs); j++) {
+					p[1].planetype = DRM_PLANE_TYPE_OVERLAY;
+					p[1].width = planeconfigs[j].width;
+					p[1].height = planeconfigs[j].height;
+					p[1].tiling = planeconfigs[j].tiling;
+					pointlocation(data, (planeinfos*)&p,
+						      mode, 1);
+
+					for (l = 0; l < ARRAY_SIZE(formatlist); l++) {
+						p[1].format = formatlist[l];
+
+						/*
+						 * RGB565 90/270 degrees rotation is supported
+						 * from gen11 onwards.
+						 */
+						if (p[0].format == DRM_FORMAT_RGB565 &&
+						     (planeconfigs[i].rotation&(IGT_ROTATION_90|IGT_ROTATION_270))
+						     && intel_gen(data->devid) < 11)
+							continue;
+
+						if (p[1].format == DRM_FORMAT_RGB565 &&
+						     (planeconfigs[j].rotation&(IGT_ROTATION_90|IGT_ROTATION_270))
+						     && intel_gen(data->devid) < 11)
+							continue;
+
+
+						p[0].rotation_sw = planeconfigs[i].rotation;
+						p[0].rotation_hw = IGT_ROTATION_0;
+						p[1].rotation_sw = planeconfigs[j].rotation;
+						p[1].rotation_hw = IGT_ROTATION_0;
+						get_multiplane_crc(data, output, &retcrc_sw,
+								   (planeinfos*)&p, MAXMULTIPLANESAMOUNT);
+
+						igt_swap(p[0].rotation_sw, p[0].rotation_hw);
+						igt_swap(p[1].rotation_sw, p[1].rotation_hw);
+						get_multiplane_crc(data, output, &retcrc_hw,
+								   (planeinfos*)&p, MAXMULTIPLANESAMOUNT);
+
+						igt_assert_crc_equal(&retcrc_sw, &retcrc_hw);
+					}
+				}
+			}
+		}
+		igt_pipe_crc_stop(data->pipe_crc);
+		igt_pipe_crc_free(data->pipe_crc);
+		igt_output_set_pipe(output, PIPE_ANY);
+	}
+
+	/*
+	* Old fbs are deleted only after new ones are set on planes.
+	* This is done to speed up the test
+	*/
+	oldplanes = data->multiplaneoldview;
+	for (c = 0; c < MAXMULTIPLANESAMOUNT && oldplanes; c++)
+		igt_remove_fb(data->gfx_fd, &oldplanes[c].fb);
+
+	free(oldplanes);
+	data->multiplaneoldview = NULL;
+	data->pipe_crc = NULL;
+}
+
 static void test_plane_rotation_exhaust_fences(data_t *data,
 					       enum pipe pipe,
 					       igt_output_t *output,
@@ -595,6 +808,42 @@ igt_main
 		}
 	}
 
+	igt_subtest_f("multiplane-rotation") {
+		igt_require(gen >= 9);
+		cleanup_crtc(&data);
+		data.planepos[0].origo = p_top|p_left;
+		data.planepos[0].x = 128;
+		data.planepos[0].y = 128;
+		data.planepos[1].origo = p_top|p_right;
+		data.planepos[1].x = -128-512;
+		data.planepos[1].y = 128;
+		test_multi_plane_rotation(&data, 0);
+	}
+
+	igt_subtest_f("multiplane-rotation-cropping-top") {
+		igt_require(gen >= 9);
+		cleanup_crtc(&data);
+		data.planepos[0].origo = p_top|p_left;
+		data.planepos[0].x = -128;
+		data.planepos[0].y = -128;
+		data.planepos[1].origo = p_top|p_right;
+		data.planepos[1].x = -512+128;
+		data.planepos[1].y = -128;
+		test_multi_plane_rotation(&data, 0);
+	}
+
+	igt_subtest_f("multiplane-rotation-cropping-bottom") {
+		igt_require(gen >= 9);
+		cleanup_crtc(&data);
+		data.planepos[0].origo = p_bottom|p_left;
+		data.planepos[0].x = -128;
+		data.planepos[0].y = -512+128;
+		data.planepos[1].origo = p_bottom|p_right;
+		data.planepos[1].x = -512+128;
+		data.planepos[1].y = -512+128;
+		test_multi_plane_rotation(&data, 0);
+	}
+
 	/*
 	 * exhaust-fences should be last test, if it fails we may OOM in
 	 * the following subtests otherwise.
-- 
2.7.4

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev3)
  2018-10-24 13:33 [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests Juha-Pekka Heikkila
                   ` (7 preceding siblings ...)
  2018-10-26 12:21 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
@ 2018-10-26 14:23 ` Patchwork
  2018-10-26 20:41 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
                   ` (9 subsequent siblings)
  18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2018-10-26 14:23 UTC (permalink / raw)
  To: Juha-Pekka Heikkila; +Cc: igt-dev

== Series Details ==

Series: tests/kms_rotation_crc: Add multi plane tests. (rev3)
URL   : https://patchwork.freedesktop.org/series/51452/
State : success

== Summary ==

= CI Bug Log - changes from CI_DRM_5042 -> IGTPW_1999 =

== Summary - SUCCESS ==

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51452/revisions/3/mbox/

== Known issues ==

  Here are the changes found in IGTPW_1999 that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@gem_exec_suspend@basic-s3:
      fi-icl-u:           PASS -> INCOMPLETE (fdo#107713)

    igt@kms_frontbuffer_tracking@basic:
      fi-byt-clapper:     PASS -> FAIL (fdo#103167)

    igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
      fi-byt-clapper:     PASS -> FAIL (fdo#107362, fdo#103191) +1

    igt@kms_setmode@basic-clone-single-crtc:
      fi-ilk-650:         PASS -> DMESG-WARN (fdo#106387)

    igt@pm_rpm@module-reload:
      fi-glk-j4005:       PASS -> DMESG-WARN (fdo#107726)

    
    ==== Possible fixes ====

    igt@drv_selftest@live_hangcheck:
      fi-kbl-7560u:       INCOMPLETE (fdo#108044) -> PASS

    
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
  fdo#106387 https://bugs.freedesktop.org/show_bug.cgi?id=106387
  fdo#107362 https://bugs.freedesktop.org/show_bug.cgi?id=107362
  fdo#107713 https://bugs.freedesktop.org/show_bug.cgi?id=107713
  fdo#107726 https://bugs.freedesktop.org/show_bug.cgi?id=107726
  fdo#108044 https://bugs.freedesktop.org/show_bug.cgi?id=108044


== Participating hosts (48 -> 43) ==

  Missing    (5): fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 


== Build changes ==

    * IGT: IGT_4696 -> IGTPW_1999

  CI_DRM_5042: 591c74093dc70bdceaa02441c494dd7090533564 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_1999: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1999/
  IGT_4696: ff2db94acb53543acd7ba4e2badff59807069365 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools



== Testlist changes ==

+igt@kms_rotation_crc@multiplane-rotation
+igt@kms_rotation_crc@multiplane-rotation-cropping-bottom
+igt@kms_rotation_crc@multiplane-rotation-cropping-top

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1999/issues.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [igt-dev] ✗ Fi.CI.IGT: failure for tests/kms_rotation_crc: Add multi plane tests. (rev3)
  2018-10-24 13:33 [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests Juha-Pekka Heikkila
                   ` (8 preceding siblings ...)
  2018-10-26 14:23 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev3) Patchwork
@ 2018-10-26 20:41 ` Patchwork
  2018-10-27  5:52 ` [igt-dev] ✓ Fi.CI.BAT: success " Patchwork
                   ` (8 subsequent siblings)
  18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2018-10-26 20:41 UTC (permalink / raw)
  To: Juha-Pekka Heikkila; +Cc: igt-dev

== Series Details ==

Series: tests/kms_rotation_crc: Add multi plane tests. (rev3)
URL   : https://patchwork.freedesktop.org/series/51452/
State : failure

== Summary ==

= CI Bug Log - changes from IGT_4696_full -> IGTPW_1999_full =

== Summary - FAILURE ==

  Serious unknown changes coming with IGTPW_1999_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_1999_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51452/revisions/3/mbox/

== Possible new issues ==

  Here are the unknown changes that may have been introduced in IGTPW_1999_full:

  === IGT changes ===

    ==== Possible regressions ====

    igt@pm_rpm@system-suspend:
      shard-apl:          PASS -> DMESG-WARN

    
    ==== Warnings ====

    igt@pm_rc6_residency@rc6-accuracy:
      shard-snb:          SKIP -> PASS

    
== Known issues ==

  Here are the changes found in IGTPW_1999_full that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@gem_workarounds@suspend-resume-fd:
      shard-kbl:          PASS -> INCOMPLETE (fdo#103665)

    igt@kms_atomic_transition@plane-all-modeset-transition-fencing:
      shard-apl:          PASS -> INCOMPLETE (fdo#103927)

    igt@kms_available_modes_crc@available_mode_test_crc:
      shard-apl:          PASS -> FAIL (fdo#106641)

    igt@kms_cursor_crc@cursor-128x128-suspend:
      shard-apl:          PASS -> FAIL (fdo#103232, fdo#103191) +1

    igt@kms_cursor_crc@cursor-256x256-onscreen:
      shard-kbl:          PASS -> FAIL (fdo#103232) +4

    igt@kms_cursor_crc@cursor-256x256-sliding:
      shard-glk:          PASS -> FAIL (fdo#103232) +5

    igt@kms_cursor_crc@cursor-64x21-sliding:
      shard-apl:          PASS -> FAIL (fdo#103232) +4

    igt@kms_cursor_crc@cursor-64x64-random:
      shard-kbl:          PASS -> DMESG-WARN (fdo#108550) +23

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-pwrite:
      shard-apl:          PASS -> FAIL (fdo#103167) +1

    igt@kms_frontbuffer_tracking@fbc-1p-rte:
      shard-apl:          PASS -> DMESG-WARN (fdo#108131, fdo#103558)

    igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-onoff:
      shard-glk:          PASS -> FAIL (fdo#103167) +8

    igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
      shard-kbl:          PASS -> DMESG-WARN (fdo#108550, fdo#108549)

    igt@kms_plane@plane-panning-bottom-right-pipe-c-planes:
      shard-apl:          NOTRUN -> DMESG-WARN (fdo#103558, fdo#105602)

    igt@kms_plane@plane-position-covered-pipe-b-planes:
      shard-glk:          PASS -> FAIL (fdo#103166) +3

    igt@kms_plane_alpha_blend@pipe-a-constant-alpha-max:
      shard-apl:          PASS -> FAIL (fdo#108145)

    igt@kms_plane_alpha_blend@pipe-c-constant-alpha-max:
      shard-glk:          PASS -> FAIL (fdo#108145) +1

    igt@kms_plane_multiple@atomic-pipe-c-tiling-y:
      shard-apl:          PASS -> FAIL (fdo#103166) +1

    igt@kms_rotation_crc@sprite-rotation-90-pos-100-0:
      shard-apl:          PASS -> DMESG-WARN (fdo#108549) +22

    igt@kms_vblank@pipe-a-ts-continuation-modeset:
      shard-apl:          PASS -> DMESG-FAIL (fdo#108549)

    igt@kms_vblank@pipe-b-query-idle-hang:
      shard-apl:          PASS -> DMESG-WARN (fdo#103558, fdo#105602) +9

    
    ==== Possible fixes ====

    igt@gem_ctx_isolation@vcs1-s3:
      shard-kbl:          DMESG-WARN (fdo#108549) -> PASS

    igt@kms_atomic_transition@plane-all-modeset-transition:
      shard-apl:          INCOMPLETE (fdo#103927) -> PASS

    igt@kms_busy@extended-modeset-hang-newfb-render-c:
      shard-kbl:          DMESG-WARN (fdo#107956) -> PASS

    igt@kms_busy@extended-pageflip-modeset-hang-oldfb-render-c:
      shard-apl:          DMESG-WARN (fdo#107956) -> PASS

    igt@kms_color@pipe-c-legacy-gamma:
      shard-kbl:          FAIL (fdo#104782) -> PASS
      shard-apl:          FAIL (fdo#104782) -> PASS

    igt@kms_cursor_crc@cursor-256x85-sliding:
      shard-apl:          FAIL (fdo#103232) -> PASS +2

    igt@kms_cursor_crc@cursor-64x64-sliding:
      shard-glk:          FAIL (fdo#103232) -> PASS +1

    igt@kms_flip@flip-vs-expired-vblank:
      shard-glk:          FAIL (fdo#105363) -> PASS

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-gtt:
      shard-apl:          FAIL (fdo#103167) -> PASS

    igt@kms_frontbuffer_tracking@fbc-rgb565-draw-mmap-gtt:
      shard-glk:          FAIL (fdo#103167) -> PASS +2

    igt@kms_pipe_crc_basic@hang-read-crc-pipe-c:
      shard-apl:          DMESG-WARN (fdo#108549) -> PASS +44

    igt@kms_plane@plane-panning-bottom-right-suspend-pipe-a-planes:
      shard-kbl:          DMESG-WARN (fdo#108550, fdo#108549) -> PASS +1

    igt@kms_plane_alpha_blend@pipe-c-alpha-7efc:
      shard-glk:          FAIL (fdo#108146) -> PASS +1

    igt@kms_plane_alpha_blend@pipe-c-coverage-7efc:
      shard-kbl:          FAIL (fdo#108146) -> PASS +1
      shard-apl:          FAIL (fdo#108146) -> PASS +1

    igt@kms_plane_multiple@atomic-pipe-b-tiling-y:
      shard-glk:          FAIL (fdo#103166) -> PASS +1
      shard-apl:          FAIL (fdo#103166) -> PASS

    igt@kms_vblank@pipe-b-query-busy-hang:
      shard-kbl:          DMESG-WARN (fdo#108550) -> PASS +7

    igt@kms_vblank@pipe-b-ts-continuation-modeset-hang:
      shard-apl:          DMESG-FAIL (fdo#108549) -> PASS +1

    igt@pm_rpm@modeset-stress-extra-wait:
      shard-glk:          INCOMPLETE (k.org#198133, fdo#103359) -> PASS

    
    ==== Warnings ====

    igt@kms_color@pipe-c-degamma:
      shard-apl:          DMESG-WARN (fdo#108549) -> FAIL (fdo#104782)

    igt@kms_cursor_crc@cursor-256x85-onscreen:
      shard-apl:          DMESG-WARN (fdo#108549) -> FAIL (fdo#103232)

    igt@kms_plane@plane-position-covered-pipe-b-planes:
      shard-apl:          DMESG-WARN (fdo#108549) -> FAIL (fdo#103166)

    igt@kms_plane_alpha_blend@pipe-b-alpha-transparant-fb:
      shard-apl:          DMESG-FAIL (fdo#108549, fdo#108145) -> FAIL (fdo#108145)

    
  fdo#103166 https://bugs.freedesktop.org/show_bug.cgi?id=103166
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
  fdo#103232 https://bugs.freedesktop.org/show_bug.cgi?id=103232
  fdo#103359 https://bugs.freedesktop.org/show_bug.cgi?id=103359
  fdo#103558 https://bugs.freedesktop.org/show_bug.cgi?id=103558
  fdo#103665 https://bugs.freedesktop.org/show_bug.cgi?id=103665
  fdo#103927 https://bugs.freedesktop.org/show_bug.cgi?id=103927
  fdo#104782 https://bugs.freedesktop.org/show_bug.cgi?id=104782
  fdo#105363 https://bugs.freedesktop.org/show_bug.cgi?id=105363
  fdo#105602 https://bugs.freedesktop.org/show_bug.cgi?id=105602
  fdo#106641 https://bugs.freedesktop.org/show_bug.cgi?id=106641
  fdo#107956 https://bugs.freedesktop.org/show_bug.cgi?id=107956
  fdo#108131 https://bugs.freedesktop.org/show_bug.cgi?id=108131
  fdo#108145 https://bugs.freedesktop.org/show_bug.cgi?id=108145
  fdo#108146 https://bugs.freedesktop.org/show_bug.cgi?id=108146
  fdo#108549 https://bugs.freedesktop.org/show_bug.cgi?id=108549
  fdo#108550 https://bugs.freedesktop.org/show_bug.cgi?id=108550
  k.org#198133 https://bugzilla.kernel.org/show_bug.cgi?id=198133


== Participating hosts (6 -> 5) ==

  Missing    (1): shard-skl 


== Build changes ==

    * IGT: IGT_4696 -> IGTPW_1999
    * Linux: CI_DRM_5041 -> CI_DRM_5042

  CI_DRM_5041: a45f611eae66546bb297a81c88e89bfd409bf199 @ git://anongit.freedesktop.org/gfx-ci/linux
  CI_DRM_5042: 591c74093dc70bdceaa02441c494dd7090533564 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_1999: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1999/
  IGT_4696: ff2db94acb53543acd7ba4e2badff59807069365 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_1999/shards.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev3)
  2018-10-24 13:33 [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests Juha-Pekka Heikkila
                   ` (9 preceding siblings ...)
  2018-10-26 20:41 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
@ 2018-10-27  5:52 ` Patchwork
  2018-10-27  9:25 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
                   ` (7 subsequent siblings)
  18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2018-10-27  5:52 UTC (permalink / raw)
  To: Juha-Pekka Heikkila; +Cc: igt-dev

== Series Details ==

Series: tests/kms_rotation_crc: Add multi plane tests. (rev3)
URL   : https://patchwork.freedesktop.org/series/51452/
State : success

== Summary ==

= CI Bug Log - changes from CI_DRM_5042 -> IGTPW_2002 =

== Summary - SUCCESS ==

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51452/revisions/3/mbox/

== Known issues ==

  Here are the changes found in IGTPW_2002 that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@debugfs_test@read_all_entries:
      fi-icl-u2:          NOTRUN -> DMESG-WARN (fdo#108070)

    igt@drv_selftest@live_contexts:
      fi-icl-u2:          NOTRUN -> DMESG-FAIL (fdo#108569)

    igt@drv_selftest@live_sanitycheck:
      fi-glk-j4005:       PASS -> DMESG-WARN (fdo#107726)

    igt@gem_exec_suspend@basic-s3:
      fi-icl-u2:          NOTRUN -> DMESG-WARN (fdo#106612)

    igt@gem_mmap_gtt@basic-small-copy:
      fi-glk-dsi:         PASS -> INCOMPLETE (k.org#198133, fdo#103359)

    igt@kms_chamelium@hdmi-hpd-fast:
      fi-icl-u2:          NOTRUN -> FAIL (fdo#108559) +3

    igt@kms_pipe_crc_basic@suspend-read-crc-pipe-a:
      fi-byt-clapper:     PASS -> FAIL (fdo#103191, fdo#107362)

    
    ==== Possible fixes ====

    igt@drv_selftest@live_hangcheck:
      fi-kbl-7560u:       INCOMPLETE (fdo#108044) -> PASS

    igt@kms_flip@basic-plain-flip:
      fi-glk-j4005:       DMESG-WARN (fdo#106097) -> PASS

    
  fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
  fdo#103359 https://bugs.freedesktop.org/show_bug.cgi?id=103359
  fdo#106097 https://bugs.freedesktop.org/show_bug.cgi?id=106097
  fdo#106612 https://bugs.freedesktop.org/show_bug.cgi?id=106612
  fdo#107362 https://bugs.freedesktop.org/show_bug.cgi?id=107362
  fdo#107726 https://bugs.freedesktop.org/show_bug.cgi?id=107726
  fdo#108044 https://bugs.freedesktop.org/show_bug.cgi?id=108044
  fdo#108070 https://bugs.freedesktop.org/show_bug.cgi?id=108070
  fdo#108559 https://bugs.freedesktop.org/show_bug.cgi?id=108559
  fdo#108569 https://bugs.freedesktop.org/show_bug.cgi?id=108569
  k.org#198133 https://bugzilla.kernel.org/show_bug.cgi?id=198133


== Participating hosts (48 -> 42) ==

  Additional (1): fi-icl-u2 
  Missing    (7): fi-kbl-soraka fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 fi-icl-u 


== Build changes ==

    * IGT: IGT_4696 -> IGTPW_2002

  CI_DRM_5042: 591c74093dc70bdceaa02441c494dd7090533564 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_2002: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2002/
  IGT_4696: ff2db94acb53543acd7ba4e2badff59807069365 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools



== Testlist changes ==

+igt@kms_rotation_crc@multiplane-rotation
+igt@kms_rotation_crc@multiplane-rotation-cropping-bottom
+igt@kms_rotation_crc@multiplane-rotation-cropping-top

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2002/issues.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [igt-dev] ✓ Fi.CI.IGT: success for tests/kms_rotation_crc: Add multi plane tests. (rev3)
  2018-10-24 13:33 [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests Juha-Pekka Heikkila
                   ` (10 preceding siblings ...)
  2018-10-27  5:52 ` [igt-dev] ✓ Fi.CI.BAT: success " Patchwork
@ 2018-10-27  9:25 ` Patchwork
  2018-11-19 15:01 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev4) Patchwork
                   ` (6 subsequent siblings)
  18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2018-10-27  9:25 UTC (permalink / raw)
  To: Juha-Pekka Heikkila; +Cc: igt-dev

== Series Details ==

Series: tests/kms_rotation_crc: Add multi plane tests. (rev3)
URL   : https://patchwork.freedesktop.org/series/51452/
State : success

== Summary ==

= CI Bug Log - changes from IGT_4696_full -> IGTPW_2002_full =

== Summary - SUCCESS ==

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51452/revisions/3/mbox/

== Known issues ==

  Here are the changes found in IGTPW_2002_full that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@gem_mmap_gtt@big-bo:
      shard-snb:          PASS -> INCOMPLETE (fdo#105411)

    igt@kms_cursor_crc@cursor-128x128-random:
      shard-apl:          PASS -> FAIL (fdo#103232) +2

    igt@kms_cursor_crc@cursor-256x256-onscreen:
      shard-glk:          PASS -> FAIL (fdo#103232)

    igt@kms_cursor_crc@cursor-64x64-sliding:
      shard-kbl:          PASS -> FAIL (fdo#103232)

    igt@kms_cursor_legacy@cursorb-vs-flipb-toggle:
      shard-glk:          PASS -> DMESG-WARN (fdo#105763, fdo#106538) +1

    igt@kms_cursor_legacy@nonblocking-modeset-vs-cursor-atomic:
      shard-kbl:          PASS -> DMESG-WARN (fdo#108550) +10

    igt@kms_flip@flip-vs-expired-vblank-interruptible:
      shard-kbl:          PASS -> FAIL (fdo#102887)
      shard-glk:          PASS -> FAIL (fdo#102887, fdo#105363)

    igt@kms_flip@flip-vs-modeset-vs-hang:
      shard-apl:          PASS -> DMESG-WARN (fdo#108549) +24

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-cpu:
      shard-apl:          PASS -> FAIL (fdo#103167) +3

    igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-mmap-cpu:
      shard-glk:          PASS -> FAIL (fdo#103167) +2

    igt@kms_plane@plane-position-covered-pipe-a-planes:
      shard-kbl:          PASS -> FAIL (fdo#103166) +1

    igt@kms_plane_alpha_blend@pipe-a-constant-alpha-max:
      shard-glk:          PASS -> FAIL (fdo#108145)
      shard-apl:          PASS -> FAIL (fdo#108145)

    igt@kms_plane_multiple@atomic-pipe-a-tiling-y:
      shard-glk:          PASS -> FAIL (fdo#103166) +6

    igt@kms_plane_multiple@atomic-pipe-b-tiling-x:
      shard-apl:          PASS -> FAIL (fdo#103166)

    igt@kms_vblank@pipe-b-ts-continuation-modeset-rpm:
      shard-apl:          PASS -> DMESG-FAIL (fdo#108549) +1

    
    ==== Possible fixes ====

    igt@gem_busy@close-race:
      shard-glk:          DMESG-FAIL (fdo#108561) -> PASS
      shard-apl:          DMESG-FAIL (fdo#108561) -> PASS

    igt@gem_ctx_isolation@vcs1-s3:
      shard-kbl:          DMESG-WARN (fdo#108549) -> PASS

    igt@kms_atomic_transition@plane-all-modeset-transition:
      shard-apl:          INCOMPLETE (fdo#103927) -> PASS

    igt@kms_busy@extended-pageflip-hang-newfb-render-b:
      shard-apl:          DMESG-WARN (fdo#107956) -> PASS

    igt@kms_color@pipe-c-legacy-gamma:
      shard-kbl:          FAIL (fdo#104782) -> PASS
      shard-apl:          FAIL (fdo#104782) -> PASS

    igt@kms_cursor_crc@cursor-256x85-sliding:
      shard-apl:          FAIL (fdo#103232) -> PASS +3

    igt@kms_cursor_crc@cursor-64x64-sliding:
      shard-glk:          FAIL (fdo#103232) -> PASS +1

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-gtt:
      shard-apl:          FAIL (fdo#103167) -> PASS

    igt@kms_frontbuffer_tracking@fbc-rgb565-draw-mmap-gtt:
      shard-glk:          FAIL (fdo#103167) -> PASS +2

    igt@kms_pipe_crc_basic@hang-read-crc-pipe-c:
      shard-apl:          DMESG-WARN (fdo#108549) -> PASS +39

    igt@kms_plane@plane-panning-bottom-right-suspend-pipe-a-planes:
      shard-kbl:          DMESG-WARN (fdo#108549, fdo#108550) -> PASS +1

    igt@kms_plane_alpha_blend@pipe-b-alpha-opaque-fb:
      shard-glk:          FAIL (fdo#108145) -> PASS
      shard-apl:          FAIL (fdo#108145) -> PASS
      shard-kbl:          FAIL (fdo#108145) -> PASS

    igt@kms_plane_alpha_blend@pipe-c-alpha-7efc:
      shard-glk:          FAIL (fdo#108146) -> PASS +1

    igt@kms_plane_alpha_blend@pipe-c-coverage-7efc:
      shard-kbl:          FAIL (fdo#108146) -> PASS +1
      shard-apl:          FAIL (fdo#108146) -> PASS +1

    igt@kms_plane_multiple@atomic-pipe-b-tiling-y:
      shard-glk:          FAIL (fdo#103166) -> PASS
      shard-apl:          FAIL (fdo#103166) -> PASS

    igt@kms_vblank@pipe-b-query-busy-hang:
      shard-kbl:          DMESG-WARN (fdo#108550) -> PASS +5

    igt@kms_vblank@pipe-c-ts-continuation-modeset:
      shard-apl:          DMESG-FAIL (fdo#108549) -> PASS

    igt@pm_rpm@modeset-stress-extra-wait:
      shard-glk:          INCOMPLETE (fdo#103359, k.org#198133) -> PASS

    
    ==== Warnings ====

    igt@kms_available_modes_crc@available_mode_test_crc:
      shard-kbl:          FAIL (fdo#106641) -> DMESG-FAIL (fdo#106641)

    igt@kms_cursor_crc@cursor-128x42-onscreen:
      shard-apl:          FAIL (fdo#103232) -> DMESG-WARN (fdo#108549)

    igt@kms_cursor_crc@cursor-256x85-onscreen:
      shard-apl:          DMESG-WARN (fdo#108549) -> FAIL (fdo#103232)
      shard-kbl:          DMESG-WARN (fdo#108550) -> FAIL (fdo#103232)

    igt@kms_plane@plane-position-covered-pipe-a-planes:
      shard-apl:          DMESG-WARN (fdo#108549) -> FAIL (fdo#103166)

    igt@kms_plane_alpha_blend@pipe-b-alpha-transparant-fb:
      shard-apl:          DMESG-FAIL (fdo#108549, fdo#108145) -> FAIL (fdo#108145)

    
  fdo#102887 https://bugs.freedesktop.org/show_bug.cgi?id=102887
  fdo#103166 https://bugs.freedesktop.org/show_bug.cgi?id=103166
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103232 https://bugs.freedesktop.org/show_bug.cgi?id=103232
  fdo#103359 https://bugs.freedesktop.org/show_bug.cgi?id=103359
  fdo#103927 https://bugs.freedesktop.org/show_bug.cgi?id=103927
  fdo#104782 https://bugs.freedesktop.org/show_bug.cgi?id=104782
  fdo#105363 https://bugs.freedesktop.org/show_bug.cgi?id=105363
  fdo#105411 https://bugs.freedesktop.org/show_bug.cgi?id=105411
  fdo#105763 https://bugs.freedesktop.org/show_bug.cgi?id=105763
  fdo#106538 https://bugs.freedesktop.org/show_bug.cgi?id=106538
  fdo#106641 https://bugs.freedesktop.org/show_bug.cgi?id=106641
  fdo#107956 https://bugs.freedesktop.org/show_bug.cgi?id=107956
  fdo#108145 https://bugs.freedesktop.org/show_bug.cgi?id=108145
  fdo#108146 https://bugs.freedesktop.org/show_bug.cgi?id=108146
  fdo#108549 https://bugs.freedesktop.org/show_bug.cgi?id=108549
  fdo#108550 https://bugs.freedesktop.org/show_bug.cgi?id=108550
  fdo#108561 https://bugs.freedesktop.org/show_bug.cgi?id=108561
  k.org#198133 https://bugzilla.kernel.org/show_bug.cgi?id=198133


== Participating hosts (6 -> 5) ==

  Missing    (1): shard-skl 


== Build changes ==

    * IGT: IGT_4696 -> IGTPW_2002
    * Linux: CI_DRM_5041 -> CI_DRM_5042

  CI_DRM_5041: a45f611eae66546bb297a81c88e89bfd409bf199 @ git://anongit.freedesktop.org/gfx-ci/linux
  CI_DRM_5042: 591c74093dc70bdceaa02441c494dd7090533564 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_2002: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2002/
  IGT_4696: ff2db94acb53543acd7ba4e2badff59807069365 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2002/shards.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests.
  2018-10-26 12:58   ` Juha-Pekka Heikkila
@ 2018-11-16 12:28     ` Nautiyal, Ankit K
  2018-11-19 11:45       ` Juha-Pekka Heikkila
  2018-11-19 11:59     ` Juha-Pekka Heikkila
  1 sibling, 1 reply; 28+ messages in thread
From: Nautiyal, Ankit K @ 2018-11-16 12:28 UTC (permalink / raw)
  To: Juha-Pekka Heikkila, igt-dev


[-- Attachment #1.1: Type: text/plain, Size: 11404 bytes --]

Hi Juha-Pekka,

The new test added do cover the gap of having multiple-plane rotation 
together, along with the top and bottom cropping scenarios.

The test work well for square figures i.e. the width = height =512, but 
for rectangular figure, the test needs some fix in get_multiplane_crc(), 
as this function does not assume that the width and height are same.

Please find suggestions inline.

Other than that, I could only nitpick some of the styling issues given 
inline.

On 10/26/2018 6:28 PM, Juha-Pekka Heikkila wrote:
> Add three new tests which try primary and sprite planes
> next to each other with different plane formats, rotations
> and tiling modes.
>
> multiplane-rotation subtest run test through with both planes
> fully visible.
>
> multiplane-rotation-cropping-top will crop primary plane to
> left/top corner and sprite plane to right/top corner while running
> rotation tests.
>
> multiplane-rotation-cropping-bottom will crop primary plane to
> left/bottom corner and sprite plane to right/bottom corner while
> running rotation tests.
>
> Signed-off-by: Juha-Pekka Heikkila<juhapekka.heikkila@gmail.com>
> ---
>   tests/kms_rotation_crc.c | 249 +++++++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 249 insertions(+)
>
> diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
> index 366c254..df9ac91 100644
> --- a/tests/kms_rotation_crc.c
> +++ b/tests/kms_rotation_crc.c
> @@ -26,6 +26,25 @@
>   #include <math.h>
>   
>   #define MAX_FENCES 32
> +#define MAXMULTIPLANESAMOUNT 2
> +
> +struct p_struct {
> +	igt_plane_t *plane;
> +	struct igt_fb fb;
> +};
> +
> +enum p_pointorigo {
> +	p_top = 1 << 0,
> +	p_bottom = 1 << 1,
> +	p_left = 1 << 2,
> +	p_right = 1 << 3
> +};
> +
> +struct p_point{
> +	enum p_pointorigo origo;
> +	int32_t x;
> +	int32_t y;
> +};
>   
>   typedef struct {
>   	int gfx_fd;
> @@ -43,6 +62,9 @@ typedef struct {
>   	uint32_t override_fmt;
>   	uint64_t override_tiling;
>   	int devid;
> +
> +	struct p_struct *multiplaneoldview;
> +	struct p_point planepos[MAXMULTIPLANESAMOUNT];
>   } data_t;
>   
>   typedef struct {
> @@ -395,6 +417,197 @@ static void test_plane_rotation(data_t *data, int plane_type, bool test_bad_form
>   	}
>   }
>   
> +typedef struct {
> +	int32_t x1, y1;
> +	uint64_t width, height, tiling, planetype, format;
> +	igt_rotation_t rotation_sw, rotation_hw;
> +} planeinfos;
> +
> +static void get_multiplane_crc(data_t *data, igt_output_t *output,
> +			       igt_crc_t *crc_output, planeinfos* planeinfo,
> +			       int numplanes)
> +{
> +	uint32_t w, h;
> +	igt_display_t *display = &data->display;
> +	struct p_struct *planes, *oldplanes;
> +	int c, ret;
> +
> +	oldplanes = data->multiplaneoldview;
> +	planes = malloc(sizeof(*planes)*numplanes);
> +
> +	for (c = 0; c < numplanes; c++) {
> +		planes[c].plane = igt_output_get_plane_type(output,
> +							    planeinfo[c].planetype);
> +
> +		w = planeinfo[c].width;
> +		h = planeinfo[c].height;
> +
> +		if ((planeinfo[c].rotation_hw|planeinfo[c].rotation_sw)
> +		    &(IGT_ROTATION_90|IGT_ROTATION_270))
> +			igt_swap(w, h);
> +
In case of an actual hardware rotation 90 and 270, the width and height 
should not be swapped.
The 'if condition' should have only check for rotation_sw, and not for 
rotation_hw.

> +		igt_plane_set_size(planes[c].plane, w, h);
For 90 and 270 degree rotation (i.e. rotation_hw) , igt_plane_set_size() 
should have height in place of width and vice-versa.

if (rotation_hw & (IGT_ROTATION_90 | IGT_ROTATION_270)
         igt_plane_set_size(plane[c].plane, h, w);

Further more this function igt_plane_set_size should be called after 
igt_plane_set_fb(), because igt_plane_set_fb sets the plane size with 
fb.width and fb.height, thereby overwriting our values.

> +
> +		igt_create_fb(data->gfx_fd, w, h, planeinfo[c].format,
> +			      planeinfo[c].tiling, &planes[c].fb);
> +
> +		paint_squares(data, planeinfo[c].rotation_sw, &planes[c].fb, 1.0f);
> +		igt_plane_set_fb(planes[c].plane, &planes[c].fb);
> +		igt_plane_set_position(planes[c].plane, planeinfo[c].x1, planeinfo[c].y1);
> +		igt_plane_set_rotation(planes[c].plane, planeinfo[c].rotation_hw);
> +	}
> +
> +	ret = igt_display_try_commit2(display, COMMIT_ATOMIC);
> +	igt_assert_eq(ret, 0);
> +
> +	igt_pipe_crc_get_current(data->gfx_fd, data->pipe_crc, crc_output);
> +
> +	for (c = 0; c < numplanes && oldplanes; c++)
> +		igt_remove_fb(data->gfx_fd, &oldplanes[c].fb);
> +
> +	free(oldplanes);
> +	data->multiplaneoldview = (void*)planes;
> +}
> +
> +static void pointlocation(data_t *data, planeinfos* p, drmModeModeInfo *mode,
> +			  int c)
> +{
> +	p[c].x1 = data->planepos[c].x
> +			+((data->planepos[c].origo&p_right)?mode->hdisplay:0);
> +	p[c].y1 = data->planepos[c].y
> +			+((data->planepos[c].origo&p_bottom)?mode->vdisplay:0);
> +}

Space around '&' and '?'

> +
> +/*
> + * Here is pipe parameter which is now used only for first pipe.
> + * It is left here if this test ever was wanted to be run on
> + * different pipes.
> + */
> +static void test_multi_plane_rotation(data_t *data, enum pipe pipe)
> +{
> +	igt_display_t *display = &data->display;
> +	igt_output_t *output;
> +	igt_crc_t retcrc_sw, retcrc_hw;
> +	planeinfos p[2];
> +	int c;
> +	struct p_struct *oldplanes;
> +	drmModeModeInfo *mode;
> +
> +	const static struct {
> +		igt_rotation_t	rotation;
> +		uint64_t	width;
> +		uint64_t	height;
> +		uint64_t	tiling;
> +	} planeconfigs[] = {
> +	{IGT_ROTATION_0, 512, 512, LOCAL_DRM_FORMAT_MOD_NONE },

In my humble opinion, we can use a rectangle content, instead of a 
square content. The function get_muliplane_crc already takes care of 
different width and height.
Only change will be required in function point_location.

> +	{IGT_ROTATION_0, 512, 512, LOCAL_I915_FORMAT_MOD_X_TILED },
> +	{IGT_ROTATION_0, 512, 512, LOCAL_I915_FORMAT_MOD_Y_TILED },
> +	{IGT_ROTATION_0, 512, 512, LOCAL_I915_FORMAT_MOD_Yf_TILED },
> +	{IGT_ROTATION_90, 512, 512, LOCAL_I915_FORMAT_MOD_Y_TILED },
> +	{IGT_ROTATION_90, 512, 512, LOCAL_I915_FORMAT_MOD_Yf_TILED },
> +	{IGT_ROTATION_180, 512, 512, LOCAL_DRM_FORMAT_MOD_NONE },
> +	{IGT_ROTATION_180, 512, 512, LOCAL_I915_FORMAT_MOD_X_TILED },
> +	{IGT_ROTATION_180, 512, 512, LOCAL_I915_FORMAT_MOD_Y_TILED },
> +	{IGT_ROTATION_180, 512, 512, LOCAL_I915_FORMAT_MOD_Yf_TILED },
> +	{IGT_ROTATION_270, 512, 512, LOCAL_I915_FORMAT_MOD_Y_TILED },
> +	{IGT_ROTATION_270, 512, 512, LOCAL_I915_FORMAT_MOD_Yf_TILED },
> +	};
> +
> +	/*
> +	* These are those modes which are tested. For testing feel interesting
> +	* case with tiling are 2 byte wide and 4 byte wide.
> +	*
> +	* TODO:
> +	* Built support for NV12 here.
> +	*/
> +	const static uint32_t  formatlist[] = {DRM_FORMAT_RGB565,
> +					       DRM_FORMAT_XRGB8888};
> +
> +
> +	for_each_valid_output_on_pipe(display, pipe, output) {
> +		int i, j, k, l;
> +		igt_output_set_pipe(output, pipe);
> +
> +		mode = igt_output_get_mode(output);
> +
> +		igt_display_require_output(display);
> +		igt_display_commit2(display, COMMIT_ATOMIC);
> +
> +		data->pipe_crc = igt_pipe_crc_new(data->gfx_fd, pipe,
> +						  INTEL_PIPE_CRC_SOURCE_AUTO);
> +		igt_pipe_crc_start(data->pipe_crc);
> +
> +		for (i = 0; i < ARRAY_SIZE(planeconfigs); i++) {
> +			p[0].planetype = DRM_PLANE_TYPE_PRIMARY;
> +			p[0].width = planeconfigs[i].width;
> +			p[0].height = planeconfigs[i].height;
> +			p[0].tiling = planeconfigs[i].tiling;
> +			pointlocation(data, (planeinfos*)&p, mode, 0);
> +
> +			for (k = 0; k < ARRAY_SIZE(formatlist); k++) {
> +				p[0].format = formatlist[k];
> +
> +				for (j = 0; j < ARRAY_SIZE(planeconfigs); j++) {
> +					p[1].planetype = DRM_PLANE_TYPE_OVERLAY;
> +					p[1].width = planeconfigs[j].width;
> +					p[1].height = planeconfigs[j].height;
> +					p[1].tiling = planeconfigs[j].tiling;
> +					pointlocation(data, (planeinfos*)&p,
> +						      mode, 1);
> +
> +					for (l = 0; l < ARRAY_SIZE(formatlist); l++) {
> +						p[1].format = formatlist[l];
> +
> +						/*
> +						 * RGB565 90/270 degrees rotation is supported
> +						 * from gen11 onwards.
> +						 */
> +						if (p[0].format == DRM_FORMAT_RGB565 &&
> +						     (planeconfigs[i].rotation&(IGT_ROTATION_90|IGT_ROTATION_270))
> +						     && intel_gen(data->devid) < 11)
> +							continue;
> +
> +						if (p[1].format == DRM_FORMAT_RGB565 &&
> +						     (planeconfigs[j].rotation&(IGT_ROTATION_90|IGT_ROTATION_270))
Space around '&' and '|'
> +						     && intel_gen(data->devid) < 11)
> +							continue;
> +
> +
> +						p[0].rotation_sw = planeconfigs[i].rotation;
> +						p[0].rotation_hw = IGT_ROTATION_0;
> +						p[1].rotation_sw = planeconfigs[j].rotation;
> +						p[1].rotation_hw = IGT_ROTATION_0;
> +						get_multiplane_crc(data, output, &retcrc_sw,
> +								   (planeinfos*)&p, MAXMULTIPLANESAMOUNT);
> +
> +						igt_swap(p[0].rotation_sw, p[0].rotation_hw);
> +						igt_swap(p[1].rotation_sw, p[1].rotation_hw);
> +						get_multiplane_crc(data, output, &retcrc_hw,
> +								   (planeinfos*)&p, MAXMULTIPLANESAMOUNT);
> +
> +						igt_assert_crc_equal(&retcrc_sw, &retcrc_hw);
> +					}
> +				}
> +			}
> +		}
> +		igt_pipe_crc_stop(data->pipe_crc);
> +		igt_pipe_crc_free(data->pipe_crc);
> +		igt_output_set_pipe(output, PIPE_ANY);
> +	}
> +
> +	/*
> +	* Old fbs are deleted only after new ones are set on planes.
> +	* This is done to speed up the test
> +	*/
> +	oldplanes = data->multiplaneoldview;
> +	for (c = 0; c < MAXMULTIPLANESAMOUNT && oldplanes; c++)
> +		igt_remove_fb(data->gfx_fd, &oldplanes[c].fb);
> +
> +	free(oldplanes);
> +	data->multiplaneoldview = NULL;
> +	data->pipe_crc = NULL;
> +}
> +
>   static void test_plane_rotation_exhaust_fences(data_t *data,
>   					       enum pipe pipe,
>   					       igt_output_t *output,
> @@ -595,6 +808,42 @@ igt_main
>   		}
>   	}
>   
> +	igt_subtest_f("multiplane-rotation") {
> +		igt_require(gen >= 9);
> +		cleanup_crtc(&data);
> +		data.planepos[0].origo = p_top|p_left;
> +		data.planepos[0].x = 128;
> +		data.planepos[0].y = 128;
> +		data.planepos[1].origo = p_top|p_right;
> +		data.planepos[1].x = -128-512;
Space around '|' and '-' operators. Valid for few more lines below.
Not sure if we will ever hit a case where there is a lower resolution 
e.g. 640x480, the figure will be cropped, which is not desired, the test 
however would still pass as crc would match.
Perhaps we can skip if resolution is less than some threshold.

> +		data.planepos[1].y = 128;
> +		test_multi_plane_rotation(&data, 0);
> +	}
> +
> +	igt_subtest_f("multiplane-rotation-cropping-top") {
> +		igt_require(gen >= 9);
> +		cleanup_crtc(&data);
> +		data.planepos[0].origo = p_top|p_left;
> +		data.planepos[0].x = -128;
> +		data.planepos[0].y = -128;
> +		data.planepos[1].origo = p_top|p_right;
> +		data.planepos[1].x = -512+128;
> +		data.planepos[1].y = -128;
> +		test_multi_plane_rotation(&data, 0);
> +	}
> +
> +	igt_subtest_f("multiplane-rotation-cropping-bottom") {
> +		igt_require(gen >= 9);
> +		cleanup_crtc(&data);
> +		data.planepos[0].origo = p_bottom|p_left;
> +		data.planepos[0].x = -128;
> +		data.planepos[0].y = -512+128;
> +		data.planepos[1].origo = p_bottom|p_right;
> +		data.planepos[1].x = -512+128;
> +		data.planepos[1].y = -512+128;
> +		test_multi_plane_rotation(&data, 0);
> +	}
> +
>   	/*
>   	 * exhaust-fences should be last test, if it fails we may OOM in
>   	 * the following subtests otherwise.
>
>    
>

[-- Attachment #1.2: Type: text/html, Size: 13430 bytes --]

[-- Attachment #2: Type: text/plain, Size: 154 bytes --]

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests.
  2018-11-16 12:28     ` Nautiyal, Ankit K
@ 2018-11-19 11:45       ` Juha-Pekka Heikkila
  0 siblings, 0 replies; 28+ messages in thread
From: Juha-Pekka Heikkila @ 2018-11-19 11:45 UTC (permalink / raw)
  To: Nautiyal, Ankit K, igt-dev

Hi Ankit, thanks for the comments. I'll soon post fixed patch. I had 
originally dropped idea for rectangular test figure as I didn't know if 
its useful, I now following your comments fixed it to work and take into 
account screen space.

/Juha-Pekka

On 16.11.2018 14:28, Nautiyal, Ankit K wrote:
> Hi Juha-Pekka,
> 
> The new test added do cover the gap of having multiple-plane rotation 
> together, along with the top and bottom cropping scenarios.
> 
> The test work well for square figures i.e. the width = height =512, but 
> for rectangular figure, the test needs some fix in get_multiplane_crc(), 
> as this function does not assume that the width and height are same.
> 
> Please find suggestions inline.
> 
> Other than that, I could only nitpick some of the styling issues given 
> inline.
> 
> On 10/26/2018 6:28 PM, Juha-Pekka Heikkila wrote:
>> Add three new tests which try primary and sprite planes
>> next to each other with different plane formats, rotations
>> and tiling modes.
>>
>> multiplane-rotation subtest run test through with both planes
>> fully visible.
>>
>> multiplane-rotation-cropping-top will crop primary plane to
>> left/top corner and sprite plane to right/top corner while running
>> rotation tests.
>>
>> multiplane-rotation-cropping-bottom will crop primary plane to
>> left/bottom corner and sprite plane to right/bottom corner while
>> running rotation tests.
>>
>> Signed-off-by: Juha-Pekka Heikkila<juhapekka.heikkila@gmail.com>
>> ---
>>   tests/kms_rotation_crc.c | 249 +++++++++++++++++++++++++++++++++++++++++++++++
>>   1 file changed, 249 insertions(+)
>>
>> diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
>> index 366c254..df9ac91 100644
>> --- a/tests/kms_rotation_crc.c
>> +++ b/tests/kms_rotation_crc.c
>> @@ -26,6 +26,25 @@
>>   #include <math.h>
>>   
>>   #define MAX_FENCES 32
>> +#define MAXMULTIPLANESAMOUNT 2
>> +
>> +struct p_struct {
>> +	igt_plane_t *plane;
>> +	struct igt_fb fb;
>> +};
>> +
>> +enum p_pointorigo {
>> +	p_top = 1 << 0,
>> +	p_bottom = 1 << 1,
>> +	p_left = 1 << 2,
>> +	p_right = 1 << 3
>> +};
>> +
>> +struct p_point{
>> +	enum p_pointorigo origo;
>> +	int32_t x;
>> +	int32_t y;
>> +};
>>   
>>   typedef struct {
>>   	int gfx_fd;
>> @@ -43,6 +62,9 @@ typedef struct {
>>   	uint32_t override_fmt;
>>   	uint64_t override_tiling;
>>   	int devid;
>> +
>> +	struct p_struct *multiplaneoldview;
>> +	struct p_point planepos[MAXMULTIPLANESAMOUNT];
>>   } data_t;
>>   
>>   typedef struct {
>> @@ -395,6 +417,197 @@ static void test_plane_rotation(data_t *data, int plane_type, bool test_bad_form
>>   	}
>>   }
>>   
>> +typedef struct {
>> +	int32_t x1, y1;
>> +	uint64_t width, height, tiling, planetype, format;
>> +	igt_rotation_t rotation_sw, rotation_hw;
>> +} planeinfos;
>> +
>> +static void get_multiplane_crc(data_t *data, igt_output_t *output,
>> +			       igt_crc_t *crc_output, planeinfos* planeinfo,
>> +			       int numplanes)
>> +{
>> +	uint32_t w, h;
>> +	igt_display_t *display = &data->display;
>> +	struct p_struct *planes, *oldplanes;
>> +	int c, ret;
>> +
>> +	oldplanes = data->multiplaneoldview;
>> +	planes = malloc(sizeof(*planes)*numplanes);
>> +
>> +	for (c = 0; c < numplanes; c++) {
>> +		planes[c].plane = igt_output_get_plane_type(output,
>> +							    planeinfo[c].planetype);
>> +
>> +		w = planeinfo[c].width;
>> +		h = planeinfo[c].height;
>> +
>> +		if ((planeinfo[c].rotation_hw|planeinfo[c].rotation_sw)
>> +		    &(IGT_ROTATION_90|IGT_ROTATION_270))
>> +			igt_swap(w, h);
>> +
> In case of an actual hardware rotation 90 and 270, the width and height 
> should not be swapped.
> The 'if condition' should have only check for rotation_sw, and not for 
> rotation_hw.
> 
>> +		igt_plane_set_size(planes[c].plane, w, h);
> For 90 and 270 degree rotation (i.e. rotation_hw) , igt_plane_set_size() 
> should have height in place of width and vice-versa.
> 
> if (rotation_hw & (IGT_ROTATION_90 | IGT_ROTATION_270)
>          igt_plane_set_size(plane[c].plane, h, w);
> 
> Further more this function igt_plane_set_size should be called after 
> igt_plane_set_fb(), because igt_plane_set_fb sets the plane size with 
> fb.width and fb.height, thereby overwriting our values.
> 
>> +
>> +		igt_create_fb(data->gfx_fd, w, h, planeinfo[c].format,
>> +			      planeinfo[c].tiling, &planes[c].fb);
>> +
>> +		paint_squares(data, planeinfo[c].rotation_sw, &planes[c].fb, 1.0f);
>> +		igt_plane_set_fb(planes[c].plane, &planes[c].fb);
>> +		igt_plane_set_position(planes[c].plane, planeinfo[c].x1, planeinfo[c].y1);
>> +		igt_plane_set_rotation(planes[c].plane, planeinfo[c].rotation_hw);
>> +	}
>> +
>> +	ret = igt_display_try_commit2(display, COMMIT_ATOMIC);
>> +	igt_assert_eq(ret, 0);
>> +
>> +	igt_pipe_crc_get_current(data->gfx_fd, data->pipe_crc, crc_output);
>> +
>> +	for (c = 0; c < numplanes && oldplanes; c++)
>> +		igt_remove_fb(data->gfx_fd, &oldplanes[c].fb);
>> +
>> +	free(oldplanes);
>> +	data->multiplaneoldview = (void*)planes;
>> +}
>> +
>> +static void pointlocation(data_t *data, planeinfos* p, drmModeModeInfo *mode,
>> +			  int c)
>> +{
>> +	p[c].x1 = data->planepos[c].x
>> +			+((data->planepos[c].origo&p_right)?mode->hdisplay:0);
>> +	p[c].y1 = data->planepos[c].y
>> +			+((data->planepos[c].origo&p_bottom)?mode->vdisplay:0);
>> +}
> 
> Space around '&' and '?'
> 
>> +
>> +/*
>> + * Here is pipe parameter which is now used only for first pipe.
>> + * It is left here if this test ever was wanted to be run on
>> + * different pipes.
>> + */
>> +static void test_multi_plane_rotation(data_t *data, enum pipe pipe)
>> +{
>> +	igt_display_t *display = &data->display;
>> +	igt_output_t *output;
>> +	igt_crc_t retcrc_sw, retcrc_hw;
>> +	planeinfos p[2];
>> +	int c;
>> +	struct p_struct *oldplanes;
>> +	drmModeModeInfo *mode;
>> +
>> +	const static struct {
>> +		igt_rotation_t	rotation;
>> +		uint64_t	width;
>> +		uint64_t	height;
>> +		uint64_t	tiling;
>> +	} planeconfigs[] = {
>> +	{IGT_ROTATION_0, 512, 512, LOCAL_DRM_FORMAT_MOD_NONE },
> 
> In my humble opinion, we can use a rectangle content, instead of a 
> square content. The function get_muliplane_crc already takes care of 
> different width and height.
> Only change will be required in function point_location.
> 
>> +	{IGT_ROTATION_0, 512, 512, LOCAL_I915_FORMAT_MOD_X_TILED },
>> +	{IGT_ROTATION_0, 512, 512, LOCAL_I915_FORMAT_MOD_Y_TILED },
>> +	{IGT_ROTATION_0, 512, 512, LOCAL_I915_FORMAT_MOD_Yf_TILED },
>> +	{IGT_ROTATION_90, 512, 512, LOCAL_I915_FORMAT_MOD_Y_TILED },
>> +	{IGT_ROTATION_90, 512, 512, LOCAL_I915_FORMAT_MOD_Yf_TILED },
>> +	{IGT_ROTATION_180, 512, 512, LOCAL_DRM_FORMAT_MOD_NONE },
>> +	{IGT_ROTATION_180, 512, 512, LOCAL_I915_FORMAT_MOD_X_TILED },
>> +	{IGT_ROTATION_180, 512, 512, LOCAL_I915_FORMAT_MOD_Y_TILED },
>> +	{IGT_ROTATION_180, 512, 512, LOCAL_I915_FORMAT_MOD_Yf_TILED },
>> +	{IGT_ROTATION_270, 512, 512, LOCAL_I915_FORMAT_MOD_Y_TILED },
>> +	{IGT_ROTATION_270, 512, 512, LOCAL_I915_FORMAT_MOD_Yf_TILED },
>> +	};
>> +
>> +	/*
>> +	* These are those modes which are tested. For testing feel interesting
>> +	* case with tiling are 2 byte wide and 4 byte wide.
>> +	*
>> +	* TODO:
>> +	* Built support for NV12 here.
>> +	*/
>> +	const static uint32_t  formatlist[] = {DRM_FORMAT_RGB565,
>> +					       DRM_FORMAT_XRGB8888};
>> +
>> +
>> +	for_each_valid_output_on_pipe(display, pipe, output) {
>> +		int i, j, k, l;
>> +		igt_output_set_pipe(output, pipe);
>> +
>> +		mode = igt_output_get_mode(output);
>> +
>> +		igt_display_require_output(display);
>> +		igt_display_commit2(display, COMMIT_ATOMIC);
>> +
>> +		data->pipe_crc = igt_pipe_crc_new(data->gfx_fd, pipe,
>> +						  INTEL_PIPE_CRC_SOURCE_AUTO);
>> +		igt_pipe_crc_start(data->pipe_crc);
>> +
>> +		for (i = 0; i < ARRAY_SIZE(planeconfigs); i++) {
>> +			p[0].planetype = DRM_PLANE_TYPE_PRIMARY;
>> +			p[0].width = planeconfigs[i].width;
>> +			p[0].height = planeconfigs[i].height;
>> +			p[0].tiling = planeconfigs[i].tiling;
>> +			pointlocation(data, (planeinfos*)&p, mode, 0);
>> +
>> +			for (k = 0; k < ARRAY_SIZE(formatlist); k++) {
>> +				p[0].format = formatlist[k];
>> +
>> +				for (j = 0; j < ARRAY_SIZE(planeconfigs); j++) {
>> +					p[1].planetype = DRM_PLANE_TYPE_OVERLAY;
>> +					p[1].width = planeconfigs[j].width;
>> +					p[1].height = planeconfigs[j].height;
>> +					p[1].tiling = planeconfigs[j].tiling;
>> +					pointlocation(data, (planeinfos*)&p,
>> +						      mode, 1);
>> +
>> +					for (l = 0; l < ARRAY_SIZE(formatlist); l++) {
>> +						p[1].format = formatlist[l];
>> +
>> +						/*
>> +						 * RGB565 90/270 degrees rotation is supported
>> +						 * from gen11 onwards.
>> +						 */
>> +						if (p[0].format == DRM_FORMAT_RGB565 &&
>> +						     (planeconfigs[i].rotation&(IGT_ROTATION_90|IGT_ROTATION_270))
>> +						     && intel_gen(data->devid) < 11)
>> +							continue;
>> +
>> +						if (p[1].format == DRM_FORMAT_RGB565 &&
>> +						     (planeconfigs[j].rotation&(IGT_ROTATION_90|IGT_ROTATION_270))
> Space around '&' and '|'
>> +						     && intel_gen(data->devid) < 11)
>> +							continue;
>> +
>> +
>> +						p[0].rotation_sw = planeconfigs[i].rotation;
>> +						p[0].rotation_hw = IGT_ROTATION_0;
>> +						p[1].rotation_sw = planeconfigs[j].rotation;
>> +						p[1].rotation_hw = IGT_ROTATION_0;
>> +						get_multiplane_crc(data, output, &retcrc_sw,
>> +								   (planeinfos*)&p, MAXMULTIPLANESAMOUNT);
>> +
>> +						igt_swap(p[0].rotation_sw, p[0].rotation_hw);
>> +						igt_swap(p[1].rotation_sw, p[1].rotation_hw);
>> +						get_multiplane_crc(data, output, &retcrc_hw,
>> +								   (planeinfos*)&p, MAXMULTIPLANESAMOUNT);
>> +
>> +						igt_assert_crc_equal(&retcrc_sw, &retcrc_hw);
>> +					}
>> +				}
>> +			}
>> +		}
>> +		igt_pipe_crc_stop(data->pipe_crc);
>> +		igt_pipe_crc_free(data->pipe_crc);
>> +		igt_output_set_pipe(output, PIPE_ANY);
>> +	}
>> +
>> +	/*
>> +	* Old fbs are deleted only after new ones are set on planes.
>> +	* This is done to speed up the test
>> +	*/
>> +	oldplanes = data->multiplaneoldview;
>> +	for (c = 0; c < MAXMULTIPLANESAMOUNT && oldplanes; c++)
>> +		igt_remove_fb(data->gfx_fd, &oldplanes[c].fb);
>> +
>> +	free(oldplanes);
>> +	data->multiplaneoldview = NULL;
>> +	data->pipe_crc = NULL;
>> +}
>> +
>>   static void test_plane_rotation_exhaust_fences(data_t *data,
>>   					       enum pipe pipe,
>>   					       igt_output_t *output,
>> @@ -595,6 +808,42 @@ igt_main
>>   		}
>>   	}
>>   
>> +	igt_subtest_f("multiplane-rotation") {
>> +		igt_require(gen >= 9);
>> +		cleanup_crtc(&data);
>> +		data.planepos[0].origo = p_top|p_left;
>> +		data.planepos[0].x = 128;
>> +		data.planepos[0].y = 128;
>> +		data.planepos[1].origo = p_top|p_right;
>> +		data.planepos[1].x = -128-512;
> Space around '|' and '-' operators. Valid for few more lines below.
> Not sure if we will ever hit a case where there is a lower resolution 
> e.g. 640x480, the figure will be cropped, which is not desired, the test 
> however would still pass as crc would match.
> Perhaps we can skip if resolution is less than some threshold.
> 
>> +		data.planepos[1].y = 128;
>> +		test_multi_plane_rotation(&data, 0);
>> +	}
>> +
>> +	igt_subtest_f("multiplane-rotation-cropping-top") {
>> +		igt_require(gen >= 9);
>> +		cleanup_crtc(&data);
>> +		data.planepos[0].origo = p_top|p_left;
>> +		data.planepos[0].x = -128;
>> +		data.planepos[0].y = -128;
>> +		data.planepos[1].origo = p_top|p_right;
>> +		data.planepos[1].x = -512+128;
>> +		data.planepos[1].y = -128;
>> +		test_multi_plane_rotation(&data, 0);
>> +	}
>> +
>> +	igt_subtest_f("multiplane-rotation-cropping-bottom") {
>> +		igt_require(gen >= 9);
>> +		cleanup_crtc(&data);
>> +		data.planepos[0].origo = p_bottom|p_left;
>> +		data.planepos[0].x = -128;
>> +		data.planepos[0].y = -512+128;
>> +		data.planepos[1].origo = p_bottom|p_right;
>> +		data.planepos[1].x = -512+128;
>> +		data.planepos[1].y = -512+128;
>> +		test_multi_plane_rotation(&data, 0);
>> +	}
>> +
>>   	/*
>>   	 * exhaust-fences should be last test, if it fails we may OOM in
>>   	 * the following subtests otherwise.
>>
>>    
>>

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests.
  2018-10-26 12:58   ` Juha-Pekka Heikkila
  2018-11-16 12:28     ` Nautiyal, Ankit K
@ 2018-11-19 11:59     ` Juha-Pekka Heikkila
  2018-11-22  7:04       ` Nautiyal, Ankit K
  2018-11-30 14:08       ` Juha-Pekka Heikkila
  1 sibling, 2 replies; 28+ messages in thread
From: Juha-Pekka Heikkila @ 2018-11-19 11:59 UTC (permalink / raw)
  To: igt-dev

Add three new tests which try primary and sprite planes
next to each other with different plane formats, rotations
and tiling modes.

multiplane-rotation subtest run test through with both planes
fully visible.

multiplane-rotation-cropping-top will crop primary plane to
left/top corner and sprite plane to right/top corner while running
rotation tests.

multiplane-rotation-cropping-bottom will crop primary plane to
left/bottom corner and sprite plane to right/bottom corner while
running rotation tests.

v2 (Nautiyal, Ankit K): Use rectangular figures instead of
square figures and fix associated code to perform correctly.
Adjust plane positions according to screen size to avoid
putting planes outside screen.

Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
---
 tests/kms_rotation_crc.c | 246 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 246 insertions(+)

diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
index 366c254..32814fe 100644
--- a/tests/kms_rotation_crc.c
+++ b/tests/kms_rotation_crc.c
@@ -26,6 +26,25 @@
 #include <math.h>
 
 #define MAX_FENCES 32
+#define MAXMULTIPLANESAMOUNT 2
+
+struct p_struct {
+	igt_plane_t *plane;
+	struct igt_fb fb;
+};
+
+enum p_pointorigo {
+	p_top = 1 << 0,
+	p_bottom = 1 << 1,
+	p_left = 1 << 2,
+	p_right = 1 << 3
+};
+
+struct p_point{
+	enum p_pointorigo origo;
+	float_t x;
+	float_t y;
+};
 
 typedef struct {
 	int gfx_fd;
@@ -43,6 +62,9 @@ typedef struct {
 	uint32_t override_fmt;
 	uint64_t override_tiling;
 	int devid;
+
+	struct p_struct *multiplaneoldview;
+	struct p_point planepos[MAXMULTIPLANESAMOUNT];
 } data_t;
 
 typedef struct {
@@ -395,6 +417,194 @@ static void test_plane_rotation(data_t *data, int plane_type, bool test_bad_form
 	}
 }
 
+typedef struct {
+	int32_t x1, y1;
+	uint64_t width, height, tiling, planetype, format;
+	igt_rotation_t rotation_sw, rotation_hw;
+} planeinfos;
+
+static void get_multiplane_crc(data_t *data, igt_output_t *output,
+			       igt_crc_t *crc_output, planeinfos* planeinfo,
+			       int numplanes)
+{
+	uint32_t w, h;
+	igt_display_t *display = &data->display;
+	struct p_struct *planes, *oldplanes;
+	int c, ret;
+
+	oldplanes = data->multiplaneoldview;
+	planes = malloc(sizeof(*planes)*numplanes);
+
+	for (c = 0; c < numplanes; c++) {
+		planes[c].plane = igt_output_get_plane_type(output,
+							    planeinfo[c].planetype);
+
+		w = planeinfo[c].width;
+		h = planeinfo[c].height;
+
+		if (planeinfo[c].rotation_sw & (IGT_ROTATION_90 | IGT_ROTATION_270))
+			igt_swap(w, h);
+
+		igt_create_fb(data->gfx_fd, w, h, planeinfo[c].format,
+			      planeinfo[c].tiling, &planes[c].fb);
+
+		paint_squares(data, planeinfo[c].rotation_sw, &planes[c].fb, 1.0f);
+		igt_plane_set_fb(planes[c].plane, &planes[c].fb);
+
+		if (planeinfo[c].rotation_hw & (IGT_ROTATION_90 | IGT_ROTATION_270))
+			igt_plane_set_size(planes[c].plane, h, w);
+
+		igt_plane_set_position(planes[c].plane, planeinfo[c].x1, planeinfo[c].y1);
+		igt_plane_set_rotation(planes[c].plane, planeinfo[c].rotation_hw);
+	}
+
+	ret = igt_display_try_commit2(display, COMMIT_ATOMIC);
+	igt_assert_eq(ret, 0);
+
+	igt_pipe_crc_get_current(data->gfx_fd, data->pipe_crc, crc_output);
+
+	for (c = 0; c < numplanes && oldplanes; c++)
+		igt_remove_fb(data->gfx_fd, &oldplanes[c].fb);
+
+	free(oldplanes);
+	data->multiplaneoldview = (void*)planes;
+}
+
+static void pointlocation(data_t *data, planeinfos* p, drmModeModeInfo *mode,
+			  int c)
+{
+	p[c].x1 = (int32_t)(data->planepos[c].x*mode->hdisplay)
+			+((data->planepos[c].origo & p_right) ? mode->hdisplay : 0);
+	p[c].y1 = (int32_t)(data->planepos[c].y*mode->vdisplay)
+			+((data->planepos[c].origo & p_bottom) ? mode->vdisplay : 0);
+}
+
+/*
+ * Here is pipe parameter which is now used only for first pipe.
+ * It is left here if this test ever was wanted to be run on
+ * different pipes.
+ */
+static void test_multi_plane_rotation(data_t *data, enum pipe pipe)
+{
+	igt_display_t *display = &data->display;
+	igt_output_t *output;
+	igt_crc_t retcrc_sw, retcrc_hw;
+	planeinfos p[2];
+	int c;
+	struct p_struct *oldplanes;
+	drmModeModeInfo *mode;
+
+	const static struct {
+		igt_rotation_t rotation;
+		float_t width;
+		float_t height;
+		uint64_t tiling;
+	} planeconfigs[] = {
+	{IGT_ROTATION_0, .2f, .4f, LOCAL_DRM_FORMAT_MOD_NONE },
+	{IGT_ROTATION_0, .2f, .4f, LOCAL_I915_FORMAT_MOD_X_TILED },
+	{IGT_ROTATION_0, .2f, .4f, LOCAL_I915_FORMAT_MOD_Y_TILED },
+	{IGT_ROTATION_0, .2f, .4f, LOCAL_I915_FORMAT_MOD_Yf_TILED },
+	{IGT_ROTATION_90, .2f, .4f, LOCAL_I915_FORMAT_MOD_Y_TILED },
+	{IGT_ROTATION_90, .2f, .4f, LOCAL_I915_FORMAT_MOD_Yf_TILED },
+	{IGT_ROTATION_180, .2f, .4f, LOCAL_DRM_FORMAT_MOD_NONE },
+	{IGT_ROTATION_180, .2f, .4f, LOCAL_I915_FORMAT_MOD_X_TILED },
+	{IGT_ROTATION_180, .2f, .4f, LOCAL_I915_FORMAT_MOD_Y_TILED },
+	{IGT_ROTATION_180, .2f, .4f, LOCAL_I915_FORMAT_MOD_Yf_TILED },
+	{IGT_ROTATION_270, .2f, .4f, LOCAL_I915_FORMAT_MOD_Y_TILED },
+	{IGT_ROTATION_270, .2f, .4f, LOCAL_I915_FORMAT_MOD_Yf_TILED },
+	};
+
+	/*
+	* These are those modes which are tested. For testing feel interesting
+	* case with tiling are 2 byte wide and 4 byte wide.
+	*
+	* TODO:
+	* Built support for NV12 here.
+	*/
+	const static uint32_t  formatlist[] = {DRM_FORMAT_RGB565,
+					       DRM_FORMAT_XRGB8888};
+
+	for_each_valid_output_on_pipe(display, pipe, output) {
+		int i, j, k, l;
+		igt_output_set_pipe(output, pipe);
+		mode = igt_output_get_mode(output);
+		igt_display_require_output(display);
+		igt_display_commit2(display, COMMIT_ATOMIC);
+
+		data->pipe_crc = igt_pipe_crc_new(data->gfx_fd, pipe,
+						  INTEL_PIPE_CRC_SOURCE_AUTO);
+		igt_pipe_crc_start(data->pipe_crc);
+
+		for (i = 0; i < ARRAY_SIZE(planeconfigs); i++) {
+			p[0].planetype = DRM_PLANE_TYPE_PRIMARY;
+			p[0].width = (uint64_t)(planeconfigs[i].width*mode->hdisplay);
+			p[0].height = (uint64_t)(planeconfigs[i].height*mode->vdisplay);
+			p[0].tiling = planeconfigs[i].tiling;
+			pointlocation(data, (planeinfos*)&p, mode, 0);
+
+			for (k = 0; k < ARRAY_SIZE(formatlist); k++) {
+				p[0].format = formatlist[k];
+
+				for (j = 0; j < ARRAY_SIZE(planeconfigs); j++) {
+					p[1].planetype = DRM_PLANE_TYPE_OVERLAY;
+					p[1].width = (uint64_t)(planeconfigs[j].width*mode->hdisplay);
+					p[1].height = (uint64_t)(planeconfigs[j].height*mode->vdisplay);
+					p[1].tiling = planeconfigs[j].tiling;
+					pointlocation(data, (planeinfos*)&p,
+						      mode, 1);
+
+					for (l = 0; l < ARRAY_SIZE(formatlist); l++) {
+						p[1].format = formatlist[l];
+
+						/*
+						 * RGB565 90/270 degrees rotation is supported
+						 * from gen11 onwards.
+						 */
+						if (p[0].format == DRM_FORMAT_RGB565 &&
+						     (planeconfigs[i].rotation & (IGT_ROTATION_90 | IGT_ROTATION_270))
+						     && intel_gen(data->devid) < 11)
+							continue;
+
+						if (p[1].format == DRM_FORMAT_RGB565 &&
+						     (planeconfigs[j].rotation & (IGT_ROTATION_90 | IGT_ROTATION_270))
+						     && intel_gen(data->devid) < 11)
+							continue;
+
+						p[0].rotation_sw = planeconfigs[i].rotation;
+						p[0].rotation_hw = IGT_ROTATION_0;
+						p[1].rotation_sw = planeconfigs[j].rotation;
+						p[1].rotation_hw = IGT_ROTATION_0;
+						get_multiplane_crc(data, output, &retcrc_sw,
+								   (planeinfos*)&p, MAXMULTIPLANESAMOUNT);
+
+						igt_swap(p[0].rotation_sw, p[0].rotation_hw);
+						igt_swap(p[1].rotation_sw, p[1].rotation_hw);
+						get_multiplane_crc(data, output, &retcrc_hw,
+								   (planeinfos*)&p, MAXMULTIPLANESAMOUNT);
+
+						igt_assert_crc_equal(&retcrc_sw, &retcrc_hw);
+					}
+				}
+			}
+		}
+		igt_pipe_crc_stop(data->pipe_crc);
+		igt_pipe_crc_free(data->pipe_crc);
+		igt_output_set_pipe(output, PIPE_ANY);
+	}
+
+	/*
+	* Old fbs are deleted only after new ones are set on planes.
+	* This is done to speed up the test
+	*/
+	oldplanes = data->multiplaneoldview;
+	for (c = 0; c < MAXMULTIPLANESAMOUNT && oldplanes; c++)
+		igt_remove_fb(data->gfx_fd, &oldplanes[c].fb);
+
+	free(oldplanes);
+	data->multiplaneoldview = NULL;
+	data->pipe_crc = NULL;
+}
+
 static void test_plane_rotation_exhaust_fences(data_t *data,
 					       enum pipe pipe,
 					       igt_output_t *output,
@@ -595,6 +805,42 @@ igt_main
 		}
 	}
 
+	igt_subtest_f("multiplane-rotation") {
+		igt_require(gen >= 9);
+		cleanup_crtc(&data);
+		data.planepos[0].origo = p_top | p_left;
+		data.planepos[0].x = .1f;
+		data.planepos[0].y = .1f;
+		data.planepos[1].origo = p_top | p_right;
+		data.planepos[1].x = -.3f;
+		data.planepos[1].y = .1f;
+		test_multi_plane_rotation(&data, 0);
+	}
+
+	igt_subtest_f("multiplane-rotation-cropping-top") {
+		igt_require(gen >= 9);
+		cleanup_crtc(&data);
+		data.planepos[0].origo = p_top | p_left;
+		data.planepos[0].x = -.05f;
+		data.planepos[0].y = -.15f;
+		data.planepos[1].origo = p_top | p_right;
+		data.planepos[1].x = -.15f;
+		data.planepos[1].y = -.15f;
+		test_multi_plane_rotation(&data, 0);
+	}
+
+	igt_subtest_f("multiplane-rotation-cropping-bottom") {
+		igt_require(gen >= 9);
+		cleanup_crtc(&data);
+		data.planepos[0].origo = p_bottom | p_left;
+		data.planepos[0].x = -.05f;
+		data.planepos[0].y = -.20f;
+		data.planepos[1].origo = p_bottom | p_right;
+		data.planepos[1].x = -.15f;
+		data.planepos[1].y = -.20f;
+		test_multi_plane_rotation(&data, 0);
+	}
+
 	/*
 	 * exhaust-fences should be last test, if it fails we may OOM in
 	 * the following subtests otherwise.
-- 
2.7.4

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev4)
  2018-10-24 13:33 [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests Juha-Pekka Heikkila
                   ` (11 preceding siblings ...)
  2018-10-27  9:25 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
@ 2018-11-19 15:01 ` Patchwork
  2018-11-19 18:55 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
                   ` (5 subsequent siblings)
  18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2018-11-19 15:01 UTC (permalink / raw)
  To: Juha-Pekka Heikkila; +Cc: igt-dev

== Series Details ==

Series: tests/kms_rotation_crc: Add multi plane tests. (rev4)
URL   : https://patchwork.freedesktop.org/series/51452/
State : success

== Summary ==

= CI Bug Log - changes from IGT_4720 -> IGTPW_2075 =

== Summary - SUCCESS ==

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51452/revisions/4/mbox/

== Known issues ==

  Here are the changes found in IGTPW_2075 that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@gem_ctx_create@basic-files:
      fi-bsw-n3050:       PASS -> FAIL (fdo#108656)

    igt@i915_selftest@live_contexts:
      fi-bsw-kefka:       PASS -> DMESG-FAIL (fdo#108656)

    igt@kms_pipe_crc_basic@nonblocking-crc-pipe-a-frame-sequence:
      fi-byt-clapper:     PASS -> FAIL (fdo#103191, fdo#107362)

    
    ==== Possible fixes ====

    igt@i915_selftest@live_sanitycheck:
      fi-gdg-551:         INCOMPLETE -> PASS

    igt@kms_frontbuffer_tracking@basic:
      fi-byt-clapper:     FAIL (fdo#103167) -> PASS

    
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103191 https://bugs.freedesktop.org/show_bug.cgi?id=103191
  fdo#107362 https://bugs.freedesktop.org/show_bug.cgi?id=107362
  fdo#108656 https://bugs.freedesktop.org/show_bug.cgi?id=108656


== Participating hosts (53 -> 47) ==

  Missing    (6): fi-kbl-soraka fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 


== Build changes ==

    * IGT: IGT_4720 -> IGTPW_2075

  CI_DRM_5159: af98442486c4eeed23ed036dfa2b556def4203bd @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_2075: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2075/
  IGT_4720: c27aaca295d3ca2a38521e571c012449371e4bb5 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools



== Testlist changes ==

+igt@kms_rotation_crc@multiplane-rotation
+igt@kms_rotation_crc@multiplane-rotation-cropping-bottom
+igt@kms_rotation_crc@multiplane-rotation-cropping-top

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2075/issues.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [igt-dev] ✓ Fi.CI.IGT: success for tests/kms_rotation_crc: Add multi plane tests. (rev4)
  2018-10-24 13:33 [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests Juha-Pekka Heikkila
                   ` (12 preceding siblings ...)
  2018-11-19 15:01 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev4) Patchwork
@ 2018-11-19 18:55 ` Patchwork
  2018-11-30 14:58 ` [igt-dev] ✗ Fi.CI.BAT: failure for tests/kms_rotation_crc: Add multi plane tests. (rev5) Patchwork
                   ` (4 subsequent siblings)
  18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2018-11-19 18:55 UTC (permalink / raw)
  To: Juha-Pekka Heikkila; +Cc: igt-dev

== Series Details ==

Series: tests/kms_rotation_crc: Add multi plane tests. (rev4)
URL   : https://patchwork.freedesktop.org/series/51452/
State : success

== Summary ==

= CI Bug Log - changes from IGT_4720_full -> IGTPW_2075_full =

== Summary - WARNING ==

  Minor unknown changes coming with IGTPW_2075_full need to be verified
  manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_2075_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51452/revisions/4/mbox/

== Possible new issues ==

  Here are the unknown changes that may have been introduced in IGTPW_2075_full:

  === IGT changes ===

    ==== Warnings ====

    igt@pm_rc6_residency@rc6-accuracy:
      shard-kbl:          SKIP -> PASS

    
== Known issues ==

  Here are the changes found in IGTPW_2075_full that come from known issues:

  === IGT changes ===

    ==== Issues hit ====

    igt@kms_atomic_transition@plane-all-modeset-transition-fencing:
      shard-apl:          PASS -> INCOMPLETE (fdo#103927)

    igt@kms_busy@extended-modeset-hang-newfb-with-reset-render-b:
      shard-snb:          NOTRUN -> DMESG-WARN (fdo#107956)

    igt@kms_ccs@pipe-b-crc-sprite-planes-basic:
      shard-glk:          PASS -> FAIL (fdo#108145)
      shard-kbl:          PASS -> FAIL (fdo#107725, fdo#108145)

    igt@kms_cursor_crc@cursor-256x256-random:
      shard-glk:          PASS -> FAIL (fdo#103232) +5
      shard-apl:          PASS -> FAIL (fdo#103232) +5

    igt@kms_cursor_crc@cursor-64x21-onscreen:
      shard-kbl:          PASS -> FAIL (fdo#103232) +4

    igt@kms_cursor_crc@cursor-64x64-offscreen:
      shard-snb:          PASS -> INCOMPLETE (fdo#105411)

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-move:
      shard-kbl:          PASS -> FAIL (fdo#103167)

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-gtt:
      shard-apl:          PASS -> FAIL (fdo#103167) +2

    igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-onoff:
      shard-glk:          PASS -> FAIL (fdo#103167) +3

    igt@kms_plane@plane-position-covered-pipe-c-planes:
      shard-apl:          PASS -> FAIL (fdo#103166) +2

    igt@kms_plane_alpha_blend@pipe-b-alpha-7efc:
      shard-kbl:          NOTRUN -> FAIL (fdo#108590, fdo#108145)

    igt@kms_plane_alpha_blend@pipe-c-alpha-transparant-fb:
      shard-kbl:          NOTRUN -> FAIL (fdo#108145)

    igt@kms_plane_multiple@atomic-pipe-b-tiling-y:
      shard-glk:          PASS -> FAIL (fdo#103166) +2
      shard-kbl:          PASS -> FAIL (fdo#103166) +1

    igt@kms_sysfs_edid_timing:
      shard-kbl:          NOTRUN -> FAIL (fdo#100047)

    
    ==== Possible fixes ====

    igt@gem_eio@in-flight-1us:
      shard-glk:          FAIL (fdo#107799) -> PASS +1

    igt@gem_eio@unwedge-stress:
      shard-glk:          FAIL -> PASS

    igt@gem_ppgtt@blt-vs-render-ctx0:
      shard-kbl:          INCOMPLETE (fdo#106023, fdo#106887, fdo#103665) -> PASS

    igt@kms_chv_cursor_fail@pipe-c-128x128-bottom-edge:
      shard-glk:          DMESG-WARN (fdo#105763, fdo#106538) -> PASS +1

    igt@kms_cursor_crc@cursor-256x256-onscreen:
      shard-glk:          FAIL (fdo#103232) -> PASS +2

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-blt:
      shard-apl:          FAIL (fdo#103167) -> PASS +2
      shard-kbl:          FAIL (fdo#103167) -> PASS +1

    igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-blt:
      shard-glk:          FAIL (fdo#103167) -> PASS +2

    igt@kms_plane@plane-position-covered-pipe-a-planes:
      shard-glk:          FAIL (fdo#103166) -> PASS +2

    igt@kms_plane_multiple@atomic-pipe-b-tiling-yf:
      shard-apl:          FAIL (fdo#103166) -> PASS

    igt@kms_setmode@basic:
      shard-kbl:          FAIL (fdo#99912) -> PASS

    igt@perf@blocking:
      shard-hsw:          FAIL (fdo#102252) -> PASS

    
    ==== Warnings ====

    igt@i915_suspend@shrink:
      shard-kbl:          DMESG-WARN (fdo#108784) -> INCOMPLETE (fdo#106886, fdo#103665)

    
  fdo#100047 https://bugs.freedesktop.org/show_bug.cgi?id=100047
  fdo#102252 https://bugs.freedesktop.org/show_bug.cgi?id=102252
  fdo#103166 https://bugs.freedesktop.org/show_bug.cgi?id=103166
  fdo#103167 https://bugs.freedesktop.org/show_bug.cgi?id=103167
  fdo#103232 https://bugs.freedesktop.org/show_bug.cgi?id=103232
  fdo#103665 https://bugs.freedesktop.org/show_bug.cgi?id=103665
  fdo#103927 https://bugs.freedesktop.org/show_bug.cgi?id=103927
  fdo#105411 https://bugs.freedesktop.org/show_bug.cgi?id=105411
  fdo#105763 https://bugs.freedesktop.org/show_bug.cgi?id=105763
  fdo#106023 https://bugs.freedesktop.org/show_bug.cgi?id=106023
  fdo#106538 https://bugs.freedesktop.org/show_bug.cgi?id=106538
  fdo#106886 https://bugs.freedesktop.org/show_bug.cgi?id=106886
  fdo#106887 https://bugs.freedesktop.org/show_bug.cgi?id=106887
  fdo#107725 https://bugs.freedesktop.org/show_bug.cgi?id=107725
  fdo#107799 https://bugs.freedesktop.org/show_bug.cgi?id=107799
  fdo#107956 https://bugs.freedesktop.org/show_bug.cgi?id=107956
  fdo#108145 https://bugs.freedesktop.org/show_bug.cgi?id=108145
  fdo#108590 https://bugs.freedesktop.org/show_bug.cgi?id=108590
  fdo#108784 https://bugs.freedesktop.org/show_bug.cgi?id=108784
  fdo#99912 https://bugs.freedesktop.org/show_bug.cgi?id=99912


== Participating hosts (7 -> 5) ==

  Missing    (2): shard-skl shard-iclb 


== Build changes ==

    * IGT: IGT_4720 -> IGTPW_2075

  CI_DRM_5159: af98442486c4eeed23ed036dfa2b556def4203bd @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_2075: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2075/
  IGT_4720: c27aaca295d3ca2a38521e571c012449371e4bb5 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2075/shards.html
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests.
  2018-11-19 11:59     ` Juha-Pekka Heikkila
@ 2018-11-22  7:04       ` Nautiyal, Ankit K
  2018-11-29 21:29         ` Juha-Pekka Heikkilä
  2018-11-30 14:08       ` Juha-Pekka Heikkila
  1 sibling, 1 reply; 28+ messages in thread
From: Nautiyal, Ankit K @ 2018-11-22  7:04 UTC (permalink / raw)
  To: Juha-Pekka Heikkila, igt-dev

Hi Juha-Pekka,

Thanks for considering the earlier suggestions. The solution looks 
pretty good, nicely avoids hard-coding of fixed width and height and 
making it dependent on the resolution.

I agree with the test as a whole. However I think it requires a slight 
change in case of 90/270 rotation for determining the x,y for right and 
bottom rectangles.

The suggested change can avoid cropped rectangles, for few resolutions.

Also minute styling issues in a couple of places.

Please find my suggestions inline:


On 11/19/2018 5:29 PM, Juha-Pekka Heikkila wrote:
> Add three new tests which try primary and sprite planes
> next to each other with different plane formats, rotations
> and tiling modes.
>
> multiplane-rotation subtest run test through with both planes
> fully visible.
>
> multiplane-rotation-cropping-top will crop primary plane to
> left/top corner and sprite plane to right/top corner while running
> rotation tests.
>
> multiplane-rotation-cropping-bottom will crop primary plane to
> left/bottom corner and sprite plane to right/bottom corner while
> running rotation tests.
>
> v2 (Nautiyal, Ankit K): Use rectangular figures instead of
> square figures and fix associated code to perform correctly.
> Adjust plane positions according to screen size to avoid
> putting planes outside screen.
>
> Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
> ---
>   tests/kms_rotation_crc.c | 246 +++++++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 246 insertions(+)
>
> diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
> index 366c254..32814fe 100644
> --- a/tests/kms_rotation_crc.c
> +++ b/tests/kms_rotation_crc.c
> @@ -26,6 +26,25 @@
>   #include <math.h>
>   
>   #define MAX_FENCES 32
> +#define MAXMULTIPLANESAMOUNT 2
> +
> +struct p_struct {
> +	igt_plane_t *plane;
> +	struct igt_fb fb;
> +};
> +
> +enum p_pointorigo {
> +	p_top = 1 << 0,
> +	p_bottom = 1 << 1,
> +	p_left = 1 << 2,
> +	p_right = 1 << 3
> +};
> +
> +struct p_point{
> +	enum p_pointorigo origo;
> +	float_t x;
> +	float_t y;
> +};
>   
>   typedef struct {
>   	int gfx_fd;
> @@ -43,6 +62,9 @@ typedef struct {
>   	uint32_t override_fmt;
>   	uint64_t override_tiling;
>   	int devid;
> +
> +	struct p_struct *multiplaneoldview;
> +	struct p_point planepos[MAXMULTIPLANESAMOUNT];
>   } data_t;
>   
>   typedef struct {
> @@ -395,6 +417,194 @@ static void test_plane_rotation(data_t *data, int plane_type, bool test_bad_form
>   	}
>   }
>   
> +typedef struct {
> +	int32_t x1, y1;
> +	uint64_t width, height, tiling, planetype, format;
> +	igt_rotation_t rotation_sw, rotation_hw;
> +} planeinfos;
> +
> +static void get_multiplane_crc(data_t *data, igt_output_t *output,
> +			       igt_crc_t *crc_output, planeinfos* planeinfo,

Space before '*'

> +			       int numplanes)
> +{
> +	uint32_t w, h;
> +	igt_display_t *display = &data->display;
> +	struct p_struct *planes, *oldplanes;
> +	int c, ret;
> +
> +	oldplanes = data->multiplaneoldview;
> +	planes = malloc(sizeof(*planes)*numplanes);

space around multiplication '*'
> +
> +	for (c = 0; c < numplanes; c++) {
> +		planes[c].plane = igt_output_get_plane_type(output,
> +							    planeinfo[c].planetype);
> +
> +		w = planeinfo[c].width;
> +		h = planeinfo[c].height;
> +
> +		if (planeinfo[c].rotation_sw & (IGT_ROTATION_90 | IGT_ROTATION_270))
> +			igt_swap(w, h);
> +

There can be a minor problem of cropping for rectangles right side of 
screen, in case of some squarish resolutions.
We know for our multi-plane rotation test for Top Right rectangle:
width = 0.2 hdisplay
height = 0.4 vdisplay
x1 = hdisplay - 0.2hdisplay - 0.1hdisplay (margin)= 0.7hdisplay
y1 = vdisplay - 0.4vdisplay - 0.1vdisplay (margin) = 0.5vdisplay


After rotation 90/270 width and height gets swapped.

Since x1 = 0.7 hdisplay, so maximum width of top-right rectangle without 
cropping = 0.3hdisplay.
So if the actual rectangle width after rotation of 90/270 is more than 
the maximum available width, we'll get cropped rectangle.

Now due to swap, the width of the rectangle after rotation = 0.4vdisplay.
We will always get cropped rectangle if:
  0.4 vdisplay > 0.3hdisplay.

Or in other words we'll get cropped rectangle if hdisplay/vdisplay < 4/3.
Now I am not sure whether we should even think about those resolutions 
which have hdisplay:vdisplay < 4:3
But to name a few 1280x1024,  720x576 resolution will get cropped rectangle.

The problem can be solved, if we change the x1 and y1 in case of 
rotation 90/270 before swapping.

if (planeinfo[c].rotation_sw & (IGT_ROTATION_90 | IGT_ROTATION_270)) {

     x1 = x1 + w - h;
     y1 = y1 + h - w;

     igt_swap(w, h);
}
so x1 will become 0.7 hdisplay + 0.2hdisplay - 0.4 vdisplay = 0.9 
hdisplay + 0.4 vdisplay [ a border/margin of 0.1 hdisplay from right side]
and y1 will become 0.5 vdisplay +0.4 vdisplay - 0.2hdisplay = 0.9 
vdisplay + 0.2 hdisplay [a border/margin of 0.1 vdisplay from bottom ]

> +		igt_create_fb(data->gfx_fd, w, h, planeinfo[c].format,
> +			      planeinfo[c].tiling, &planes[c].fb);
> +
> +		paint_squares(data, planeinfo[c].rotation_sw, &planes[c].fb, 1.0f);
> +		igt_plane_set_fb(planes[c].plane, &planes[c].fb);
> +
> +		if (planeinfo[c].rotation_hw & (IGT_ROTATION_90 | IGT_ROTATION_270))
> +			igt_plane_set_size(planes[c].plane, h, w);
> +
> +		igt_plane_set_position(planes[c].plane, planeinfo[c].x1, planeinfo[c].y1);
> +		igt_plane_set_rotation(planes[c].plane, planeinfo[c].rotation_hw);
> +	}
> +
> +	ret = igt_display_try_commit2(display, COMMIT_ATOMIC);
> +	igt_assert_eq(ret, 0);
> +
> +	igt_pipe_crc_get_current(data->gfx_fd, data->pipe_crc, crc_output);
> +
> +	for (c = 0; c < numplanes && oldplanes; c++)
> +		igt_remove_fb(data->gfx_fd, &oldplanes[c].fb);
> +
> +	free(oldplanes);
> +	data->multiplaneoldview = (void*)planes;
> +}
> +
> +static void pointlocation(data_t *data, planeinfos* p, drmModeModeInfo *mode,

planeinfos *p

> +			  int c)
> +{
> +	p[c].x1 = (int32_t)(data->planepos[c].x*mode->hdisplay)
> +			+((data->planepos[c].origo & p_right) ? mode->hdisplay : 0);
> +	p[c].y1 = (int32_t)(data->planepos[c].y*mode->vdisplay)
> +			+((data->planepos[c].origo & p_bottom) ? mode->vdisplay : 0);
> +}
> +

Space around '*'

> +/*
> + * Here is pipe parameter which is now used only for first pipe.
> + * It is left here if this test ever was wanted to be run on
> + * different pipes.
> + */
> +static void test_multi_plane_rotation(data_t *data, enum pipe pipe)
> +{
> +	igt_display_t *display = &data->display;
> +	igt_output_t *output;
> +	igt_crc_t retcrc_sw, retcrc_hw;
> +	planeinfos p[2];
> +	int c;
> +	struct p_struct *oldplanes;
> +	drmModeModeInfo *mode;
> +
> +	const static struct {
> +		igt_rotation_t rotation;
> +		float_t width;
> +		float_t height;
> +		uint64_t tiling;
> +	} planeconfigs[] = {
> +	{IGT_ROTATION_0, .2f, .4f, LOCAL_DRM_FORMAT_MOD_NONE },
> +	{IGT_ROTATION_0, .2f, .4f, LOCAL_I915_FORMAT_MOD_X_TILED },
> +	{IGT_ROTATION_0, .2f, .4f, LOCAL_I915_FORMAT_MOD_Y_TILED },
> +	{IGT_ROTATION_0, .2f, .4f, LOCAL_I915_FORMAT_MOD_Yf_TILED },
> +	{IGT_ROTATION_90, .2f, .4f, LOCAL_I915_FORMAT_MOD_Y_TILED },
> +	{IGT_ROTATION_90, .2f, .4f, LOCAL_I915_FORMAT_MOD_Yf_TILED },
> +	{IGT_ROTATION_180, .2f, .4f, LOCAL_DRM_FORMAT_MOD_NONE },
> +	{IGT_ROTATION_180, .2f, .4f, LOCAL_I915_FORMAT_MOD_X_TILED },
> +	{IGT_ROTATION_180, .2f, .4f, LOCAL_I915_FORMAT_MOD_Y_TILED },
> +	{IGT_ROTATION_180, .2f, .4f, LOCAL_I915_FORMAT_MOD_Yf_TILED },
> +	{IGT_ROTATION_270, .2f, .4f, LOCAL_I915_FORMAT_MOD_Y_TILED },
> +	{IGT_ROTATION_270, .2f, .4f, LOCAL_I915_FORMAT_MOD_Yf_TILED },
> +	};
> +
> +	/*
> +	* These are those modes which are tested. For testing feel interesting
> +	* case with tiling are 2 byte wide and 4 byte wide.
> +	*
> +	* TODO:
> +	* Built support for NV12 here.
> +	*/
> +	const static uint32_t  formatlist[] = {DRM_FORMAT_RGB565,
> +					       DRM_FORMAT_XRGB8888};
> +
> +	for_each_valid_output_on_pipe(display, pipe, output) {
> +		int i, j, k, l;
> +		igt_output_set_pipe(output, pipe);
> +		mode = igt_output_get_mode(output);
> +		igt_display_require_output(display);
> +		igt_display_commit2(display, COMMIT_ATOMIC);
> +
> +		data->pipe_crc = igt_pipe_crc_new(data->gfx_fd, pipe,
> +						  INTEL_PIPE_CRC_SOURCE_AUTO);
> +		igt_pipe_crc_start(data->pipe_crc);
> +
> +		for (i = 0; i < ARRAY_SIZE(planeconfigs); i++) {
> +			p[0].planetype = DRM_PLANE_TYPE_PRIMARY;
> +			p[0].width = (uint64_t)(planeconfigs[i].width*mode->hdisplay);
> +			p[0].height = (uint64_t)(planeconfigs[i].height*mode->vdisplay);

Space around '*'

> +			p[0].tiling = planeconfigs[i].tiling;
> +			pointlocation(data, (planeinfos*)&p, mode, 0);

Space before '*'

> +
> +			for (k = 0; k < ARRAY_SIZE(formatlist); k++) {
> +				p[0].format = formatlist[k];
> +
> +				for (j = 0; j < ARRAY_SIZE(planeconfigs); j++) {
> +					p[1].planetype = DRM_PLANE_TYPE_OVERLAY;
> +					p[1].width = (uint64_t)(planeconfigs[j].width*mode->hdisplay);
> +					p[1].height = (uint64_t)(planeconfigs[j].height*mode->vdisplay);

space around '*'

> +					p[1].tiling = planeconfigs[j].tiling;
> +					pointlocation(data, (planeinfos*)&p,
> +						      mode, 1);
> +

Space before '*'
> +					for (l = 0; l < ARRAY_SIZE(formatlist); l++) {
> +						p[1].format = formatlist[l];
> +
> +						/*
> +						 * RGB565 90/270 degrees rotation is supported
> +						 * from gen11 onwards.
> +						 */
> +						if (p[0].format == DRM_FORMAT_RGB565 &&
> +						     (planeconfigs[i].rotation & (IGT_ROTATION_90 | IGT_ROTATION_270))
> +						     && intel_gen(data->devid) < 11)
> +							continue;
> +
> +						if (p[1].format == DRM_FORMAT_RGB565 &&
> +						     (planeconfigs[j].rotation & (IGT_ROTATION_90 | IGT_ROTATION_270))
> +						     && intel_gen(data->devid) < 11)
> +							continue;
> +
> +						p[0].rotation_sw = planeconfigs[i].rotation;
> +						p[0].rotation_hw = IGT_ROTATION_0;
> +						p[1].rotation_sw = planeconfigs[j].rotation;
> +						p[1].rotation_hw = IGT_ROTATION_0;
> +						get_multiplane_crc(data, output, &retcrc_sw,
> +								   (planeinfos*)&p, MAXMULTIPLANESAMOUNT);

Space before '*'
> +
> +						igt_swap(p[0].rotation_sw, p[0].rotation_hw);
> +						igt_swap(p[1].rotation_sw, p[1].rotation_hw);
> +						get_multiplane_crc(data, output, &retcrc_hw,
> +								   (planeinfos*)&p, MAXMULTIPLANESAMOUNT);
> +

Space before '*'

> +						igt_assert_crc_equal(&retcrc_sw, &retcrc_hw);
> +					}
> +				}
> +			}
> +		}
> +		igt_pipe_crc_stop(data->pipe_crc);
> +		igt_pipe_crc_free(data->pipe_crc);
> +		igt_output_set_pipe(output, PIPE_ANY);
> +	}
> +
> +	/*
> +	* Old fbs are deleted only after new ones are set on planes.
> +	* This is done to speed up the test
> +	*/
> +	oldplanes = data->multiplaneoldview;
> +	for (c = 0; c < MAXMULTIPLANESAMOUNT && oldplanes; c++)
> +		igt_remove_fb(data->gfx_fd, &oldplanes[c].fb);
> +
> +	free(oldplanes);
> +	data->multiplaneoldview = NULL;
> +	data->pipe_crc = NULL;
> +}
> +
>   static void test_plane_rotation_exhaust_fences(data_t *data,
>   					       enum pipe pipe,
>   					       igt_output_t *output,
> @@ -595,6 +805,42 @@ igt_main
>   		}
>   	}
>   
> +	igt_subtest_f("multiplane-rotation") {
> +		igt_require(gen >= 9);
> +		cleanup_crtc(&data);
> +		data.planepos[0].origo = p_top | p_left;
> +		data.planepos[0].x = .1f;
> +		data.planepos[0].y = .1f;
> +		data.planepos[1].origo = p_top | p_right;
> +		data.planepos[1].x = -.3f;
> +		data.planepos[1].y = .1f;
> +		test_multi_plane_rotation(&data, 0);
> +	}
> +
> +	igt_subtest_f("multiplane-rotation-cropping-top") {
> +		igt_require(gen >= 9);
> +		cleanup_crtc(&data);
> +		data.planepos[0].origo = p_top | p_left;
> +		data.planepos[0].x = -.05f;
> +		data.planepos[0].y = -.15f;
> +		data.planepos[1].origo = p_top | p_right;
> +		data.planepos[1].x = -.15f;
> +		data.planepos[1].y = -.15f;
> +		test_multi_plane_rotation(&data, 0);
> +	}
> +
> +	igt_subtest_f("multiplane-rotation-cropping-bottom") {
> +		igt_require(gen >= 9);
> +		cleanup_crtc(&data);
> +		data.planepos[0].origo = p_bottom | p_left;
> +		data.planepos[0].x = -.05f;
> +		data.planepos[0].y = -.20f;
> +		data.planepos[1].origo = p_bottom | p_right;
> +		data.planepos[1].x = -.15f;
> +		data.planepos[1].y = -.20f;
> +		test_multi_plane_rotation(&data, 0);
> +	}
> +
>   	/*
>   	 * exhaust-fences should be last test, if it fails we may OOM in
>   	 * the following subtests otherwise.

Sorry for lengthy details for a minor corner case, couldnt make it more 
concise, and clear at the same time.

Regards,
Ankit
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests.
  2018-11-22  7:04       ` Nautiyal, Ankit K
@ 2018-11-29 21:29         ` Juha-Pekka Heikkilä
  0 siblings, 0 replies; 28+ messages in thread
From: Juha-Pekka Heikkilä @ 2018-11-29 21:29 UTC (permalink / raw)
  To: Nautiyal, Ankit K, igt-dev



Nautiyal, Ankit K kirjoitti 22.11.2018 klo 9.04:
> Hi Juha-Pekka,
> 
> Thanks for considering the earlier suggestions. The solution looks 
> pretty good, nicely avoids hard-coding of fixed width and height and 
> making it dependent on the resolution.
> 
> I agree with the test as a whole. However I think it requires a slight 
> change in case of 90/270 rotation for determining the x,y for right and 
> bottom rectangles.
> 
> The suggested change can avoid cropped rectangles, for few resolutions.
> 
> Also minute styling issues in a couple of places.
> 
> Please find my suggestions inline:
> 
> 
> On 11/19/2018 5:29 PM, Juha-Pekka Heikkila wrote:
>> Add three new tests which try primary and sprite planes
>> next to each other with different plane formats, rotations
>> and tiling modes.
>>
>> multiplane-rotation subtest run test through with both planes
>> fully visible.
>>
>> multiplane-rotation-cropping-top will crop primary plane to
>> left/top corner and sprite plane to right/top corner while running
>> rotation tests.
>>
>> multiplane-rotation-cropping-bottom will crop primary plane to
>> left/bottom corner and sprite plane to right/bottom corner while
>> running rotation tests.
>>
>> v2 (Nautiyal, Ankit K): Use rectangular figures instead of
>> square figures and fix associated code to perform correctly.
>> Adjust plane positions according to screen size to avoid
>> putting planes outside screen.
>>
>> Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
>> ---
>>   tests/kms_rotation_crc.c | 246 
>> +++++++++++++++++++++++++++++++++++++++++++++++
>>   1 file changed, 246 insertions(+)
>>
>> diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
>> index 366c254..32814fe 100644
>> --- a/tests/kms_rotation_crc.c
>> +++ b/tests/kms_rotation_crc.c
>> @@ -26,6 +26,25 @@
>>   #include <math.h>
>>   #define MAX_FENCES 32
>> +#define MAXMULTIPLANESAMOUNT 2
>> +
>> +struct p_struct {
>> +    igt_plane_t *plane;
>> +    struct igt_fb fb;
>> +};
>> +
>> +enum p_pointorigo {
>> +    p_top = 1 << 0,
>> +    p_bottom = 1 << 1,
>> +    p_left = 1 << 2,
>> +    p_right = 1 << 3
>> +};
>> +
>> +struct p_point{
>> +    enum p_pointorigo origo;
>> +    float_t x;
>> +    float_t y;
>> +};
>>   typedef struct {
>>       int gfx_fd;
>> @@ -43,6 +62,9 @@ typedef struct {
>>       uint32_t override_fmt;
>>       uint64_t override_tiling;
>>       int devid;
>> +
>> +    struct p_struct *multiplaneoldview;
>> +    struct p_point planepos[MAXMULTIPLANESAMOUNT];
>>   } data_t;
>>   typedef struct {
>> @@ -395,6 +417,194 @@ static void test_plane_rotation(data_t *data, 
>> int plane_type, bool test_bad_form
>>       }
>>   }
>> +typedef struct {
>> +    int32_t x1, y1;
>> +    uint64_t width, height, tiling, planetype, format;
>> +    igt_rotation_t rotation_sw, rotation_hw;
>> +} planeinfos;
>> +
>> +static void get_multiplane_crc(data_t *data, igt_output_t *output,
>> +                   igt_crc_t *crc_output, planeinfos* planeinfo,
> 
> Space before '*'
> 
>> +                   int numplanes)
>> +{
>> +    uint32_t w, h;
>> +    igt_display_t *display = &data->display;
>> +    struct p_struct *planes, *oldplanes;
>> +    int c, ret;
>> +
>> +    oldplanes = data->multiplaneoldview;
>> +    planes = malloc(sizeof(*planes)*numplanes);
> 
> space around multiplication '*'
>> +
>> +    for (c = 0; c < numplanes; c++) {
>> +        planes[c].plane = igt_output_get_plane_type(output,
>> +                                planeinfo[c].planetype);
>> +
>> +        w = planeinfo[c].width;
>> +        h = planeinfo[c].height;
>> +
>> +        if (planeinfo[c].rotation_sw & (IGT_ROTATION_90 | 
>> IGT_ROTATION_270))
>> +            igt_swap(w, h);
>> +
> 
> There can be a minor problem of cropping for rectangles right side of 
> screen, in case of some squarish resolutions.
> We know for our multi-plane rotation test for Top Right rectangle:
> width = 0.2 hdisplay
> height = 0.4 vdisplay
> x1 = hdisplay - 0.2hdisplay - 0.1hdisplay (margin)= 0.7hdisplay
> y1 = vdisplay - 0.4vdisplay - 0.1vdisplay (margin) = 0.5vdisplay
> 
> 
> After rotation 90/270 width and height gets swapped.
> 
> Since x1 = 0.7 hdisplay, so maximum width of top-right rectangle without 
> cropping = 0.3hdisplay.
> So if the actual rectangle width after rotation of 90/270 is more than 
> the maximum available width, we'll get cropped rectangle.
> 
> Now due to swap, the width of the rectangle after rotation = 0.4vdisplay.
> We will always get cropped rectangle if:
>   0.4 vdisplay > 0.3hdisplay.
> 
> Or in other words we'll get cropped rectangle if hdisplay/vdisplay < 4/3.
> Now I am not sure whether we should even think about those resolutions 
> which have hdisplay:vdisplay < 4:3
> But to name a few 1280x1024,  720x576 resolution will get cropped 
> rectangle.

I was wondering if you have monitor which actually have such resolutions 
as those you mentioned? I was looking but didn't find any such. If you 
are thinking about rotating monitor it will not change the scanning 
direction and the resolution flip is done via rotation -- that feature 
which is under test here. I don't know if it's with modern day monitors 
still but earlier scanning order of display was dictated by the lowest 
of x-res vs y-res because it caused less components.

I anyway moved those planes a bit but so far I'm sticking to 4/3 being 
'worst case', I'll probably tomorrow send new version of the patch.

> 
> The problem can be solved, if we change the x1 and y1 in case of 
> rotation 90/270 before swapping.
> 
> if (planeinfo[c].rotation_sw & (IGT_ROTATION_90 | IGT_ROTATION_270)) {
> 
>      x1 = x1 + w - h;
>      y1 = y1 + h - w;
> 
>      igt_swap(w, h);
> }
> so x1 will become 0.7 hdisplay + 0.2hdisplay - 0.4 vdisplay = 0.9 
> hdisplay + 0.4 vdisplay [ a border/margin of 0.1 hdisplay from right side]
> and y1 will become 0.5 vdisplay +0.4 vdisplay - 0.2hdisplay = 0.9 
> vdisplay + 0.2 hdisplay [a border/margin of 0.1 vdisplay from bottom ]
> 
>> +        igt_create_fb(data->gfx_fd, w, h, planeinfo[c].format,
>> +                  planeinfo[c].tiling, &planes[c].fb);
>> +
>> +        paint_squares(data, planeinfo[c].rotation_sw, &planes[c].fb, 
>> 1.0f);
>> +        igt_plane_set_fb(planes[c].plane, &planes[c].fb);
>> +
>> +        if (planeinfo[c].rotation_hw & (IGT_ROTATION_90 | 
>> IGT_ROTATION_270))
>> +            igt_plane_set_size(planes[c].plane, h, w);
>> +
>> +        igt_plane_set_position(planes[c].plane, planeinfo[c].x1, 
>> planeinfo[c].y1);
>> +        igt_plane_set_rotation(planes[c].plane, 
>> planeinfo[c].rotation_hw);
>> +    }
>> +
>> +    ret = igt_display_try_commit2(display, COMMIT_ATOMIC);
>> +    igt_assert_eq(ret, 0);
>> +
>> +    igt_pipe_crc_get_current(data->gfx_fd, data->pipe_crc, crc_output);
>> +
>> +    for (c = 0; c < numplanes && oldplanes; c++)
>> +        igt_remove_fb(data->gfx_fd, &oldplanes[c].fb);
>> +
>> +    free(oldplanes);
>> +    data->multiplaneoldview = (void*)planes;
>> +}
>> +
>> +static void pointlocation(data_t *data, planeinfos* p, 
>> drmModeModeInfo *mode,
> 
> planeinfos *p
> 
>> +              int c)
>> +{
>> +    p[c].x1 = (int32_t)(data->planepos[c].x*mode->hdisplay)
>> +            +((data->planepos[c].origo & p_right) ? mode->hdisplay : 0);
>> +    p[c].y1 = (int32_t)(data->planepos[c].y*mode->vdisplay)
>> +            +((data->planepos[c].origo & p_bottom) ? mode->vdisplay : 
>> 0);
>> +}
>> +
> 
> Space around '*'
> 
>> +/*
>> + * Here is pipe parameter which is now used only for first pipe.
>> + * It is left here if this test ever was wanted to be run on
>> + * different pipes.
>> + */
>> +static void test_multi_plane_rotation(data_t *data, enum pipe pipe)
>> +{
>> +    igt_display_t *display = &data->display;
>> +    igt_output_t *output;
>> +    igt_crc_t retcrc_sw, retcrc_hw;
>> +    planeinfos p[2];
>> +    int c;
>> +    struct p_struct *oldplanes;
>> +    drmModeModeInfo *mode;
>> +
>> +    const static struct {
>> +        igt_rotation_t rotation;
>> +        float_t width;
>> +        float_t height;
>> +        uint64_t tiling;
>> +    } planeconfigs[] = {
>> +    {IGT_ROTATION_0, .2f, .4f, LOCAL_DRM_FORMAT_MOD_NONE },
>> +    {IGT_ROTATION_0, .2f, .4f, LOCAL_I915_FORMAT_MOD_X_TILED },
>> +    {IGT_ROTATION_0, .2f, .4f, LOCAL_I915_FORMAT_MOD_Y_TILED },
>> +    {IGT_ROTATION_0, .2f, .4f, LOCAL_I915_FORMAT_MOD_Yf_TILED },
>> +    {IGT_ROTATION_90, .2f, .4f, LOCAL_I915_FORMAT_MOD_Y_TILED },
>> +    {IGT_ROTATION_90, .2f, .4f, LOCAL_I915_FORMAT_MOD_Yf_TILED },
>> +    {IGT_ROTATION_180, .2f, .4f, LOCAL_DRM_FORMAT_MOD_NONE },
>> +    {IGT_ROTATION_180, .2f, .4f, LOCAL_I915_FORMAT_MOD_X_TILED },
>> +    {IGT_ROTATION_180, .2f, .4f, LOCAL_I915_FORMAT_MOD_Y_TILED },
>> +    {IGT_ROTATION_180, .2f, .4f, LOCAL_I915_FORMAT_MOD_Yf_TILED },
>> +    {IGT_ROTATION_270, .2f, .4f, LOCAL_I915_FORMAT_MOD_Y_TILED },
>> +    {IGT_ROTATION_270, .2f, .4f, LOCAL_I915_FORMAT_MOD_Yf_TILED },
>> +    };
>> +
>> +    /*
>> +    * These are those modes which are tested. For testing feel 
>> interesting
>> +    * case with tiling are 2 byte wide and 4 byte wide.
>> +    *
>> +    * TODO:
>> +    * Built support for NV12 here.
>> +    */
>> +    const static uint32_t  formatlist[] = {DRM_FORMAT_RGB565,
>> +                           DRM_FORMAT_XRGB8888};
>> +
>> +    for_each_valid_output_on_pipe(display, pipe, output) {
>> +        int i, j, k, l;
>> +        igt_output_set_pipe(output, pipe);
>> +        mode = igt_output_get_mode(output);
>> +        igt_display_require_output(display);
>> +        igt_display_commit2(display, COMMIT_ATOMIC);
>> +
>> +        data->pipe_crc = igt_pipe_crc_new(data->gfx_fd, pipe,
>> +                          INTEL_PIPE_CRC_SOURCE_AUTO);
>> +        igt_pipe_crc_start(data->pipe_crc);
>> +
>> +        for (i = 0; i < ARRAY_SIZE(planeconfigs); i++) {
>> +            p[0].planetype = DRM_PLANE_TYPE_PRIMARY;
>> +            p[0].width = 
>> (uint64_t)(planeconfigs[i].width*mode->hdisplay);
>> +            p[0].height = 
>> (uint64_t)(planeconfigs[i].height*mode->vdisplay);
> 
> Space around '*'
> 
>> +            p[0].tiling = planeconfigs[i].tiling;
>> +            pointlocation(data, (planeinfos*)&p, mode, 0);
> 
> Space before '*'
> 
>> +
>> +            for (k = 0; k < ARRAY_SIZE(formatlist); k++) {
>> +                p[0].format = formatlist[k];
>> +
>> +                for (j = 0; j < ARRAY_SIZE(planeconfigs); j++) {
>> +                    p[1].planetype = DRM_PLANE_TYPE_OVERLAY;
>> +                    p[1].width = 
>> (uint64_t)(planeconfigs[j].width*mode->hdisplay);
>> +                    p[1].height = 
>> (uint64_t)(planeconfigs[j].height*mode->vdisplay);
> 
> space around '*'
> 
>> +                    p[1].tiling = planeconfigs[j].tiling;
>> +                    pointlocation(data, (planeinfos*)&p,
>> +                              mode, 1);
>> +
> 
> Space before '*'
>> +                    for (l = 0; l < ARRAY_SIZE(formatlist); l++) {
>> +                        p[1].format = formatlist[l];
>> +
>> +                        /*
>> +                         * RGB565 90/270 degrees rotation is supported
>> +                         * from gen11 onwards.
>> +                         */
>> +                        if (p[0].format == DRM_FORMAT_RGB565 &&
>> +                             (planeconfigs[i].rotation & 
>> (IGT_ROTATION_90 | IGT_ROTATION_270))
>> +                             && intel_gen(data->devid) < 11)
>> +                            continue;
>> +
>> +                        if (p[1].format == DRM_FORMAT_RGB565 &&
>> +                             (planeconfigs[j].rotation & 
>> (IGT_ROTATION_90 | IGT_ROTATION_270))
>> +                             && intel_gen(data->devid) < 11)
>> +                            continue;
>> +
>> +                        p[0].rotation_sw = planeconfigs[i].rotation;
>> +                        p[0].rotation_hw = IGT_ROTATION_0;
>> +                        p[1].rotation_sw = planeconfigs[j].rotation;
>> +                        p[1].rotation_hw = IGT_ROTATION_0;
>> +                        get_multiplane_crc(data, output, &retcrc_sw,
>> +                                   (planeinfos*)&p, 
>> MAXMULTIPLANESAMOUNT);
> 
> Space before '*'
>> +
>> +                        igt_swap(p[0].rotation_sw, p[0].rotation_hw);
>> +                        igt_swap(p[1].rotation_sw, p[1].rotation_hw);
>> +                        get_multiplane_crc(data, output, &retcrc_hw,
>> +                                   (planeinfos*)&p, 
>> MAXMULTIPLANESAMOUNT);
>> +
> 
> Space before '*'
> 
>> +                        igt_assert_crc_equal(&retcrc_sw, &retcrc_hw);
>> +                    }
>> +                }
>> +            }
>> +        }
>> +        igt_pipe_crc_stop(data->pipe_crc);
>> +        igt_pipe_crc_free(data->pipe_crc);
>> +        igt_output_set_pipe(output, PIPE_ANY);
>> +    }
>> +
>> +    /*
>> +    * Old fbs are deleted only after new ones are set on planes.
>> +    * This is done to speed up the test
>> +    */
>> +    oldplanes = data->multiplaneoldview;
>> +    for (c = 0; c < MAXMULTIPLANESAMOUNT && oldplanes; c++)
>> +        igt_remove_fb(data->gfx_fd, &oldplanes[c].fb);
>> +
>> +    free(oldplanes);
>> +    data->multiplaneoldview = NULL;
>> +    data->pipe_crc = NULL;
>> +}
>> +
>>   static void test_plane_rotation_exhaust_fences(data_t *data,
>>                              enum pipe pipe,
>>                              igt_output_t *output,
>> @@ -595,6 +805,42 @@ igt_main
>>           }
>>       }
>> +    igt_subtest_f("multiplane-rotation") {
>> +        igt_require(gen >= 9);
>> +        cleanup_crtc(&data);
>> +        data.planepos[0].origo = p_top | p_left;
>> +        data.planepos[0].x = .1f;
>> +        data.planepos[0].y = .1f;
>> +        data.planepos[1].origo = p_top | p_right;
>> +        data.planepos[1].x = -.3f;
>> +        data.planepos[1].y = .1f;
>> +        test_multi_plane_rotation(&data, 0);
>> +    }
>> +
>> +    igt_subtest_f("multiplane-rotation-cropping-top") {
>> +        igt_require(gen >= 9);
>> +        cleanup_crtc(&data);
>> +        data.planepos[0].origo = p_top | p_left;
>> +        data.planepos[0].x = -.05f;
>> +        data.planepos[0].y = -.15f;
>> +        data.planepos[1].origo = p_top | p_right;
>> +        data.planepos[1].x = -.15f;
>> +        data.planepos[1].y = -.15f;
>> +        test_multi_plane_rotation(&data, 0);
>> +    }
>> +
>> +    igt_subtest_f("multiplane-rotation-cropping-bottom") {
>> +        igt_require(gen >= 9);
>> +        cleanup_crtc(&data);
>> +        data.planepos[0].origo = p_bottom | p_left;
>> +        data.planepos[0].x = -.05f;
>> +        data.planepos[0].y = -.20f;
>> +        data.planepos[1].origo = p_bottom | p_right;
>> +        data.planepos[1].x = -.15f;
>> +        data.planepos[1].y = -.20f;
>> +        test_multi_plane_rotation(&data, 0);
>> +    }
>> +
>>       /*
>>        * exhaust-fences should be last test, if it fails we may OOM in
>>        * the following subtests otherwise.
> 
> Sorry for lengthy details for a minor corner case, couldnt make it more 
> concise, and clear at the same time.
> 
> Regards,
> Ankit
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests
  2018-11-19 11:59     ` Juha-Pekka Heikkila
  2018-11-22  7:04       ` Nautiyal, Ankit K
@ 2018-11-30 14:08       ` Juha-Pekka Heikkila
  2018-12-03  8:55         ` Nautiyal, Ankit K
  1 sibling, 1 reply; 28+ messages in thread
From: Juha-Pekka Heikkila @ 2018-11-30 14:08 UTC (permalink / raw)
  To: igt-dev

Add three new tests which try primary and sprite planes
next to each other with different plane formats, rotations
and tiling modes.

multiplane-rotation subtest run test through with both planes
fully visible.

multiplane-rotation-cropping-top will crop primary plane to
left/top corner and sprite plane to right/top corner while running
rotation tests.

multiplane-rotation-cropping-bottom will crop primary plane to
left/bottom corner and sprite plane to right/bottom corner while
running rotation tests.

v2 (Nautiyal, Ankit K): Use rectangular figures instead of
square figures and fix associated code to perform correctly.
Adjust plane positions according to screen size to avoid
putting planes outside screen.

v3 (Nautiyal, Ankit K): Minor detail fix.

Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
---
 tests/kms_rotation_crc.c | 246 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 246 insertions(+)

diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
index 366c254..369936f 100644
--- a/tests/kms_rotation_crc.c
+++ b/tests/kms_rotation_crc.c
@@ -26,6 +26,25 @@
 #include <math.h>
 
 #define MAX_FENCES 32
+#define MAXMULTIPLANESAMOUNT 2
+
+struct p_struct {
+	igt_plane_t *plane;
+	struct igt_fb fb;
+};
+
+enum p_pointorigo {
+	p_top = 1 << 0,
+	p_bottom = 1 << 1,
+	p_left = 1 << 2,
+	p_right = 1 << 3
+};
+
+struct p_point{
+	enum p_pointorigo origo;
+	float_t x;
+	float_t y;
+};
 
 typedef struct {
 	int gfx_fd;
@@ -43,6 +62,9 @@ typedef struct {
 	uint32_t override_fmt;
 	uint64_t override_tiling;
 	int devid;
+
+	struct p_struct *multiplaneoldview;
+	struct p_point planepos[MAXMULTIPLANESAMOUNT];
 } data_t;
 
 typedef struct {
@@ -395,6 +417,194 @@ static void test_plane_rotation(data_t *data, int plane_type, bool test_bad_form
 	}
 }
 
+typedef struct {
+	int32_t x1, y1;
+	uint64_t width, height, tiling, planetype, format;
+	igt_rotation_t rotation_sw, rotation_hw;
+} planeinfos;
+
+static void get_multiplane_crc(data_t *data, igt_output_t *output,
+			       igt_crc_t *crc_output, planeinfos *planeinfo,
+			       int numplanes)
+{
+	uint32_t w, h;
+	igt_display_t *display = &data->display;
+	struct p_struct *planes, *oldplanes;
+	int c, ret;
+
+	oldplanes = data->multiplaneoldview;
+	planes = malloc(sizeof(*planes) * numplanes);
+
+	for (c = 0; c < numplanes; c++) {
+		planes[c].plane = igt_output_get_plane_type(output,
+							    planeinfo[c].planetype);
+
+		w = planeinfo[c].width;
+		h = planeinfo[c].height;
+
+		if (planeinfo[c].rotation_sw & (IGT_ROTATION_90 | IGT_ROTATION_270))
+			igt_swap(w, h);
+
+		igt_create_fb(data->gfx_fd, w, h, planeinfo[c].format,
+			      planeinfo[c].tiling, &planes[c].fb);
+
+		paint_squares(data, planeinfo[c].rotation_sw, &planes[c].fb, 1.0f);
+		igt_plane_set_fb(planes[c].plane, &planes[c].fb);
+
+		if (planeinfo[c].rotation_hw & (IGT_ROTATION_90 | IGT_ROTATION_270))
+			igt_plane_set_size(planes[c].plane, h, w);
+
+		igt_plane_set_position(planes[c].plane, planeinfo[c].x1, planeinfo[c].y1);
+		igt_plane_set_rotation(planes[c].plane, planeinfo[c].rotation_hw);
+	}
+
+	ret = igt_display_try_commit2(display, COMMIT_ATOMIC);
+	igt_assert_eq(ret, 0);
+
+	igt_pipe_crc_get_current(data->gfx_fd, data->pipe_crc, crc_output);
+
+	for (c = 0; c < numplanes && oldplanes; c++)
+		igt_remove_fb(data->gfx_fd, &oldplanes[c].fb);
+
+	free(oldplanes);
+	data->multiplaneoldview = (void*)planes;
+}
+
+static void pointlocation(data_t *data, planeinfos *p, drmModeModeInfo *mode,
+			  int c)
+{
+	p[c].x1 = (int32_t)(data->planepos[c].x * mode->hdisplay)
+			+ ((data->planepos[c].origo & p_right) ? mode->hdisplay : 0);
+	p[c].y1 = (int32_t)(data->planepos[c].y * mode->vdisplay)
+			+ ((data->planepos[c].origo & p_bottom) ? mode->vdisplay : 0);
+}
+
+/*
+ * Here is pipe parameter which is now used only for first pipe.
+ * It is left here if this test ever was wanted to be run on
+ * different pipes.
+ */
+static void test_multi_plane_rotation(data_t *data, enum pipe pipe)
+{
+	igt_display_t *display = &data->display;
+	igt_output_t *output;
+	igt_crc_t retcrc_sw, retcrc_hw;
+	planeinfos p[2];
+	int c;
+	struct p_struct *oldplanes;
+	drmModeModeInfo *mode;
+
+	const static struct {
+		igt_rotation_t rotation;
+		float_t width;
+		float_t height;
+		uint64_t tiling;
+	} planeconfigs[] = {
+	{IGT_ROTATION_0, .2f, .4f, LOCAL_DRM_FORMAT_MOD_NONE },
+	{IGT_ROTATION_0, .2f, .4f, LOCAL_I915_FORMAT_MOD_X_TILED },
+	{IGT_ROTATION_0, .2f, .4f, LOCAL_I915_FORMAT_MOD_Y_TILED },
+	{IGT_ROTATION_0, .2f, .4f, LOCAL_I915_FORMAT_MOD_Yf_TILED },
+	{IGT_ROTATION_90, .2f, .4f, LOCAL_I915_FORMAT_MOD_Y_TILED },
+	{IGT_ROTATION_90, .2f, .4f, LOCAL_I915_FORMAT_MOD_Yf_TILED },
+	{IGT_ROTATION_180, .2f, .4f, LOCAL_DRM_FORMAT_MOD_NONE },
+	{IGT_ROTATION_180, .2f, .4f, LOCAL_I915_FORMAT_MOD_X_TILED },
+	{IGT_ROTATION_180, .2f, .4f, LOCAL_I915_FORMAT_MOD_Y_TILED },
+	{IGT_ROTATION_180, .2f, .4f, LOCAL_I915_FORMAT_MOD_Yf_TILED },
+	{IGT_ROTATION_270, .2f, .4f, LOCAL_I915_FORMAT_MOD_Y_TILED },
+	{IGT_ROTATION_270, .2f, .4f, LOCAL_I915_FORMAT_MOD_Yf_TILED },
+	};
+
+	/*
+	* These are those modes which are tested. For testing feel interesting
+	* case with tiling are 2 byte wide and 4 byte wide.
+	*
+	* TODO:
+	* Built support for NV12 here.
+	*/
+	const static uint32_t  formatlist[] = {DRM_FORMAT_RGB565,
+					       DRM_FORMAT_XRGB8888};
+
+	for_each_valid_output_on_pipe(display, pipe, output) {
+		int i, j, k, l;
+		igt_output_set_pipe(output, pipe);
+		mode = igt_output_get_mode(output);
+		igt_display_require_output(display);
+		igt_display_commit2(display, COMMIT_ATOMIC);
+
+		data->pipe_crc = igt_pipe_crc_new(data->gfx_fd, pipe,
+						  INTEL_PIPE_CRC_SOURCE_AUTO);
+		igt_pipe_crc_start(data->pipe_crc);
+
+		for (i = 0; i < ARRAY_SIZE(planeconfigs); i++) {
+			p[0].planetype = DRM_PLANE_TYPE_PRIMARY;
+			p[0].width = (uint64_t)(planeconfigs[i].width * mode->hdisplay);
+			p[0].height = (uint64_t)(planeconfigs[i].height * mode->vdisplay);
+			p[0].tiling = planeconfigs[i].tiling;
+			pointlocation(data, (planeinfos *)&p, mode, 0);
+
+			for (k = 0; k < ARRAY_SIZE(formatlist); k++) {
+				p[0].format = formatlist[k];
+
+				for (j = 0; j < ARRAY_SIZE(planeconfigs); j++) {
+					p[1].planetype = DRM_PLANE_TYPE_OVERLAY;
+					p[1].width = (uint64_t)(planeconfigs[j].width * mode->hdisplay);
+					p[1].height = (uint64_t)(planeconfigs[j].height * mode->vdisplay);
+					p[1].tiling = planeconfigs[j].tiling;
+					pointlocation(data, (planeinfos *)&p,
+						      mode, 1);
+
+					for (l = 0; l < ARRAY_SIZE(formatlist); l++) {
+						p[1].format = formatlist[l];
+
+						/*
+						 * RGB565 90/270 degrees rotation is supported
+						 * from gen11 onwards.
+						 */
+						if (p[0].format == DRM_FORMAT_RGB565 &&
+						     (planeconfigs[i].rotation & (IGT_ROTATION_90 | IGT_ROTATION_270))
+						     && intel_gen(data->devid) < 11)
+							continue;
+
+						if (p[1].format == DRM_FORMAT_RGB565 &&
+						     (planeconfigs[j].rotation & (IGT_ROTATION_90 | IGT_ROTATION_270))
+						     && intel_gen(data->devid) < 11)
+							continue;
+
+						p[0].rotation_sw = planeconfigs[i].rotation;
+						p[0].rotation_hw = IGT_ROTATION_0;
+						p[1].rotation_sw = planeconfigs[j].rotation;
+						p[1].rotation_hw = IGT_ROTATION_0;
+						get_multiplane_crc(data, output, &retcrc_sw,
+								   (planeinfos *)&p, MAXMULTIPLANESAMOUNT);
+
+						igt_swap(p[0].rotation_sw, p[0].rotation_hw);
+						igt_swap(p[1].rotation_sw, p[1].rotation_hw);
+						get_multiplane_crc(data, output, &retcrc_hw,
+								   (planeinfos *)&p, MAXMULTIPLANESAMOUNT);
+
+						igt_assert_crc_equal(&retcrc_sw, &retcrc_hw);
+					}
+				}
+			}
+		}
+		igt_pipe_crc_stop(data->pipe_crc);
+		igt_pipe_crc_free(data->pipe_crc);
+		igt_output_set_pipe(output, PIPE_ANY);
+	}
+
+	/*
+	* Old fbs are deleted only after new ones are set on planes.
+	* This is done to speed up the test
+	*/
+	oldplanes = data->multiplaneoldview;
+	for (c = 0; c < MAXMULTIPLANESAMOUNT && oldplanes; c++)
+		igt_remove_fb(data->gfx_fd, &oldplanes[c].fb);
+
+	free(oldplanes);
+	data->multiplaneoldview = NULL;
+	data->pipe_crc = NULL;
+}
+
 static void test_plane_rotation_exhaust_fences(data_t *data,
 					       enum pipe pipe,
 					       igt_output_t *output,
@@ -595,6 +805,42 @@ igt_main
 		}
 	}
 
+	igt_subtest_f("multiplane-rotation") {
+		igt_require(gen >= 9);
+		cleanup_crtc(&data);
+		data.planepos[0].origo = p_top | p_left;
+		data.planepos[0].x = .2f;
+		data.planepos[0].y = .1f;
+		data.planepos[1].origo = p_top | p_right;
+		data.planepos[1].x = -.4f;
+		data.planepos[1].y = .1f;
+		test_multi_plane_rotation(&data, 0);
+	}
+
+	igt_subtest_f("multiplane-rotation-cropping-top") {
+		igt_require(gen >= 9);
+		cleanup_crtc(&data);
+		data.planepos[0].origo = p_top | p_left;
+		data.planepos[0].x = -.05f;
+		data.planepos[0].y = -.15f;
+		data.planepos[1].origo = p_top | p_right;
+		data.planepos[1].x = -.15f;
+		data.planepos[1].y = -.15f;
+		test_multi_plane_rotation(&data, 0);
+	}
+
+	igt_subtest_f("multiplane-rotation-cropping-bottom") {
+		igt_require(gen >= 9);
+		cleanup_crtc(&data);
+		data.planepos[0].origo = p_bottom | p_left;
+		data.planepos[0].x = -.05f;
+		data.planepos[0].y = -.20f;
+		data.planepos[1].origo = p_bottom | p_right;
+		data.planepos[1].x = -.15f;
+		data.planepos[1].y = -.20f;
+		test_multi_plane_rotation(&data, 0);
+	}
+
 	/*
 	 * exhaust-fences should be last test, if it fails we may OOM in
 	 * the following subtests otherwise.
-- 
2.7.4

_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply related	[flat|nested] 28+ messages in thread

* [igt-dev] ✗ Fi.CI.BAT: failure for tests/kms_rotation_crc: Add multi plane tests. (rev5)
  2018-10-24 13:33 [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests Juha-Pekka Heikkila
                   ` (13 preceding siblings ...)
  2018-11-19 18:55 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
@ 2018-11-30 14:58 ` Patchwork
  2018-11-30 17:30 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev6) Patchwork
                   ` (3 subsequent siblings)
  18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2018-11-30 14:58 UTC (permalink / raw)
  To: Juha-Pekka Heikkila; +Cc: igt-dev

== Series Details ==

Series: tests/kms_rotation_crc: Add multi plane tests. (rev5)
URL   : https://patchwork.freedesktop.org/series/51452/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_5230 -> IGTPW_2109
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with IGTPW_2109 absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_2109, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51452/revisions/5/mbox/

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in IGTPW_2109:

### IGT changes ###

#### Possible regressions ####

  * igt@kms_flip@basic-flip-vs-dpms:
    - {fi-icl-u3}:        PASS -> DMESG-WARN

  * igt@pm_rpm@module-reload:
    - fi-cfl-8109u:       PASS -> FAIL

  * {igt@runner@aborted}:
    - {fi-icl-u3}:        NOTRUN -> FAIL

  
Known issues
------------

  Here are the changes found in IGTPW_2109 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_exec_suspend@basic-s4-devices:
    - fi-ivb-3520m:       PASS -> FAIL [fdo#108880]

  * igt@i915_selftest@live_coherency:
    - fi-gdg-551:         PASS -> DMESG-FAIL [fdo#107164]

  * igt@i915_selftest@live_hangcheck:
    - fi-cfl-8109u:       PASS -> INCOMPLETE [fdo#106070]

  * igt@kms_pipe_crc_basic@nonblocking-crc-pipe-a-frame-sequence:
    - fi-byt-clapper:     PASS -> FAIL [fdo#103191] / [fdo#107362]

  
#### Possible fixes ####

  * igt@gem_ctx_create@basic-files:
    - fi-kbl-7560u:       INCOMPLETE [fdo#103665] -> PASS

  * igt@kms_pipe_crc_basic@suspend-read-crc-pipe-b:
    - fi-apl-guc:         DMESG-WARN [fdo#108566] -> PASS

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#103191]: https://bugs.freedesktop.org/show_bug.cgi?id=103191
  [fdo#103665]: https://bugs.freedesktop.org/show_bug.cgi?id=103665
  [fdo#106070]: https://bugs.freedesktop.org/show_bug.cgi?id=106070
  [fdo#107164]: https://bugs.freedesktop.org/show_bug.cgi?id=107164
  [fdo#107362]: https://bugs.freedesktop.org/show_bug.cgi?id=107362
  [fdo#108566]: https://bugs.freedesktop.org/show_bug.cgi?id=108566
  [fdo#108880]: https://bugs.freedesktop.org/show_bug.cgi?id=108880


Participating hosts (50 -> 43)
------------------------------

  Missing    (7): fi-kbl-soraka fi-cnl-u fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 


Build changes
-------------

    * IGT: IGT_4736 -> IGTPW_2109

  CI_DRM_5230: b0a2de64f8969163f6e01071d5e05748f18a8bab @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_2109: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2109/
  IGT_4736: 285ebfb3b7adc56586031afa5150c4e5ad40c229 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools



== Testlist changes ==

+igt@kms_rotation_crc@multiplane-rotation
+igt@kms_rotation_crc@multiplane-rotation-cropping-bottom
+igt@kms_rotation_crc@multiplane-rotation-cropping-top

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2109/
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev6)
  2018-10-24 13:33 [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests Juha-Pekka Heikkila
                   ` (14 preceding siblings ...)
  2018-11-30 14:58 ` [igt-dev] ✗ Fi.CI.BAT: failure for tests/kms_rotation_crc: Add multi plane tests. (rev5) Patchwork
@ 2018-11-30 17:30 ` Patchwork
  2018-12-01 12:15 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
                   ` (2 subsequent siblings)
  18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2018-11-30 17:30 UTC (permalink / raw)
  To: Juha-Pekka Heikkila; +Cc: igt-dev

== Series Details ==

Series: tests/kms_rotation_crc: Add multi plane tests. (rev6)
URL   : https://patchwork.freedesktop.org/series/51452/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_5235 -> IGTPW_2111
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51452/revisions/6/mbox/

Known issues
------------

  Here are the changes found in IGTPW_2111 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_ctx_create@basic-files:
    - fi-bsw-n3050:       PASS -> INCOMPLETE [fdo#108714]

  * igt@i915_selftest@live_coherency:
    - fi-gdg-551:         PASS -> DMESG-FAIL [fdo#107164]

  * igt@i915_selftest@live_hangcheck:
    - fi-skl-iommu:       PASS -> INCOMPLETE [fdo#108602]

  * igt@prime_vgem@basic-fence-flip:
    - fi-gdg-551:         PASS -> FAIL [fdo#103182]

  * {igt@runner@aborted}:
    - fi-skl-iommu:       NOTRUN -> FAIL [fdo#108602]

  
#### Possible fixes ####

  * igt@gem_ctx_create@basic-files:
    - fi-bsw-kefka:       FAIL [fdo#108656] -> PASS

  * igt@gem_exec_suspend@basic-s3:
    - fi-byt-clapper:     INCOMPLETE [fdo#102657] -> PASS

  * igt@i915_selftest@live_execlists:
    - fi-apl-guc:         INCOMPLETE [fdo#103927] -> PASS

  * igt@i915_selftest@live_hangcheck:
    - fi-kbl-7560u:       INCOMPLETE [fdo#108044] -> PASS

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#102657]: https://bugs.freedesktop.org/show_bug.cgi?id=102657
  [fdo#103182]: https://bugs.freedesktop.org/show_bug.cgi?id=103182
  [fdo#103927]: https://bugs.freedesktop.org/show_bug.cgi?id=103927
  [fdo#107164]: https://bugs.freedesktop.org/show_bug.cgi?id=107164
  [fdo#108044]: https://bugs.freedesktop.org/show_bug.cgi?id=108044
  [fdo#108602]: https://bugs.freedesktop.org/show_bug.cgi?id=108602
  [fdo#108656]: https://bugs.freedesktop.org/show_bug.cgi?id=108656
  [fdo#108714]: https://bugs.freedesktop.org/show_bug.cgi?id=108714


Participating hosts (50 -> 44)
------------------------------

  Missing    (6): fi-kbl-soraka fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 


Build changes
-------------

    * IGT: IGT_4736 -> IGTPW_2111

  CI_DRM_5235: 5e327aec3fa3fc277b40818e06785743cf16b1ad @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_2111: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2111/
  IGT_4736: 285ebfb3b7adc56586031afa5150c4e5ad40c229 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools



== Testlist changes ==

+igt@kms_rotation_crc@multiplane-rotation
+igt@kms_rotation_crc@multiplane-rotation-cropping-bottom
+igt@kms_rotation_crc@multiplane-rotation-cropping-top

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2111/
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [igt-dev] ✗ Fi.CI.IGT: failure for tests/kms_rotation_crc: Add multi plane tests. (rev6)
  2018-10-24 13:33 [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests Juha-Pekka Heikkila
                   ` (15 preceding siblings ...)
  2018-11-30 17:30 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev6) Patchwork
@ 2018-12-01 12:15 ` Patchwork
  2018-12-01 18:41 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev7) Patchwork
  2018-12-01 22:51 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
  18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2018-12-01 12:15 UTC (permalink / raw)
  To: Juha-Pekka Heikkila; +Cc: igt-dev

== Series Details ==

Series: tests/kms_rotation_crc: Add multi plane tests. (rev6)
URL   : https://patchwork.freedesktop.org/series/51452/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_5235_full -> IGTPW_2111_full
====================================================

Summary
-------

  **FAILURE**

  Serious unknown changes coming with IGTPW_2111_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_2111_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51452/revisions/6/mbox/

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in IGTPW_2111_full:

### IGT changes ###

#### Possible regressions ####

  * igt@gem_busy@extended-semaphore-blt:
    - shard-hsw:          PASS -> FAIL

  * {igt@kms_rotation_crc@multiplane-rotation-cropping-top}:
    - shard-kbl:          NOTRUN -> DMESG-FAIL

  
#### Warnings ####

  * igt@gem_tiled_swapping@non-threaded:
    - shard-kbl:          SKIP -> PASS
    - shard-apl:          SKIP -> PASS

  * igt@perf_pmu@rc6:
    - shard-kbl:          PASS -> SKIP

  * igt@pm_rc6_residency@rc6-accuracy:
    - shard-snb:          PASS -> SKIP

  
Known issues
------------

  Here are the changes found in IGTPW_2111_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_exec_blt@dumb-buf-max:
    - shard-snb:          PASS -> INCOMPLETE [fdo#105411]

  * igt@gem_ppgtt@blt-vs-render-ctx0:
    - shard-kbl:          PASS -> INCOMPLETE [fdo#103665] / [fdo#106023] / [fdo#106887]

  * igt@kms_busy@extended-pageflip-modeset-hang-oldfb-render-c:
    - shard-kbl:          PASS -> DMESG-WARN [fdo#107956]

  * igt@kms_color@pipe-b-degamma:
    - shard-apl:          PASS -> FAIL [fdo#104782]

  * igt@kms_cursor_crc@cursor-256x256-sliding:
    - shard-glk:          PASS -> FAIL [fdo#103232] +8

  * igt@kms_cursor_crc@cursor-64x21-sliding:
    - shard-apl:          PASS -> FAIL [fdo#103232] +2

  * igt@kms_cursor_crc@cursor-64x64-onscreen:
    - shard-kbl:          PASS -> FAIL [fdo#103232] +1

  * igt@kms_cursor_crc@cursor-64x64-suspend:
    - shard-apl:          PASS -> FAIL [fdo#103191] / [fdo#103232]

  * igt@kms_cursor_legacy@2x-long-cursor-vs-flip-atomic:
    - shard-hsw:          PASS -> FAIL [fdo#105767]

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-pwrite:
    - shard-apl:          PASS -> FAIL [fdo#103167] +1

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-onoff:
    - shard-glk:          PASS -> FAIL [fdo#103167] +10

  * igt@kms_plane@plane-position-covered-pipe-c-planes:
    - shard-apl:          PASS -> FAIL [fdo#103166] +3

  * igt@kms_plane_alpha_blend@pipe-b-alpha-transparant-fb:
    - shard-kbl:          NOTRUN -> FAIL [fdo#108145]

  * igt@kms_plane_multiple@atomic-pipe-b-tiling-y:
    - shard-glk:          PASS -> FAIL [fdo#103166] +3

  * igt@kms_plane_multiple@atomic-pipe-c-tiling-yf:
    - shard-kbl:          PASS -> FAIL [fdo#103166] +2

  
#### Possible fixes ####

  * igt@gem_ppgtt@blt-vs-render-ctxn:
    - shard-kbl:          INCOMPLETE [fdo#103665] / [fdo#106023] / [fdo#106887] -> PASS

  * igt@gem_userptr_blits@readonly-unsync:
    - shard-kbl:          TIMEOUT -> PASS

  * igt@kms_busy@extended-pageflip-hang-newfb-render-c:
    - shard-apl:          DMESG-WARN [fdo#107956] -> PASS

  * igt@kms_busy@extended-pageflip-modeset-hang-oldfb-render-b:
    - shard-hsw:          DMESG-WARN [fdo#107956] -> PASS +1

  * igt@kms_cursor_crc@cursor-128x128-sliding:
    - shard-kbl:          FAIL [fdo#103232] -> PASS +1

  * igt@kms_cursor_crc@cursor-128x42-onscreen:
    - shard-glk:          FAIL [fdo#103232] -> PASS +1
    - shard-apl:          FAIL [fdo#103232] -> PASS +1

  * igt@kms_flip@plain-flip-fb-recreate-interruptible:
    - shard-kbl:          FAIL [fdo#100368] -> PASS

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-fullscreen:
    - shard-apl:          FAIL [fdo#103167] -> PASS

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-mmap-wc:
    - shard-glk:          FAIL [fdo#103167] -> PASS +3

  * igt@kms_plane@plane-position-covered-pipe-b-planes:
    - shard-glk:          FAIL [fdo#103166] -> PASS +2

  * igt@kms_plane_alpha_blend@pipe-a-constant-alpha-max:
    - shard-glk:          FAIL [fdo#108145] -> PASS

  * igt@kms_plane_alpha_blend@pipe-c-constant-alpha-max:
    - shard-apl:          FAIL [fdo#108145] -> PASS

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#100368]: https://bugs.freedesktop.org/show_bug.cgi?id=100368
  [fdo#103166]: https://bugs.freedesktop.org/show_bug.cgi?id=103166
  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#103191]: https://bugs.freedesktop.org/show_bug.cgi?id=103191
  [fdo#103232]: https://bugs.freedesktop.org/show_bug.cgi?id=103232
  [fdo#103665]: https://bugs.freedesktop.org/show_bug.cgi?id=103665
  [fdo#104782]: https://bugs.freedesktop.org/show_bug.cgi?id=104782
  [fdo#105411]: https://bugs.freedesktop.org/show_bug.cgi?id=105411
  [fdo#105767]: https://bugs.freedesktop.org/show_bug.cgi?id=105767
  [fdo#106023]: https://bugs.freedesktop.org/show_bug.cgi?id=106023
  [fdo#106887]: https://bugs.freedesktop.org/show_bug.cgi?id=106887
  [fdo#107956]: https://bugs.freedesktop.org/show_bug.cgi?id=107956
  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145


Participating hosts (7 -> 5)
------------------------------

  Missing    (2): shard-skl shard-iclb 


Build changes
-------------

    * IGT: IGT_4736 -> IGTPW_2111
    * Piglit: piglit_4509 -> None

  CI_DRM_5235: 5e327aec3fa3fc277b40818e06785743cf16b1ad @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_2111: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2111/
  IGT_4736: 285ebfb3b7adc56586031afa5150c4e5ad40c229 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2111/
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev7)
  2018-10-24 13:33 [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests Juha-Pekka Heikkila
                   ` (16 preceding siblings ...)
  2018-12-01 12:15 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
@ 2018-12-01 18:41 ` Patchwork
  2018-12-01 22:51 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
  18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2018-12-01 18:41 UTC (permalink / raw)
  To: Juha-Pekka Heikkila; +Cc: igt-dev

== Series Details ==

Series: tests/kms_rotation_crc: Add multi plane tests. (rev7)
URL   : https://patchwork.freedesktop.org/series/51452/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_5237 -> IGTPW_2112
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51452/revisions/7/mbox/

Known issues
------------

  Here are the changes found in IGTPW_2112 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_exec_suspend@basic-s4-devices:
    - fi-ivb-3520m:       PASS -> FAIL [fdo#108880]

  * {igt@runner@aborted}:
    - {fi-icl-y}:         NOTRUN -> FAIL [fdo#108070]

  
#### Possible fixes ####

  * igt@kms_pipe_crc_basic@hang-read-crc-pipe-a:
    - fi-byt-clapper:     FAIL [fdo#103191] / [fdo#107362] -> PASS

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#103191]: https://bugs.freedesktop.org/show_bug.cgi?id=103191
  [fdo#107362]: https://bugs.freedesktop.org/show_bug.cgi?id=107362
  [fdo#108070]: https://bugs.freedesktop.org/show_bug.cgi?id=108070
  [fdo#108880]: https://bugs.freedesktop.org/show_bug.cgi?id=108880


Participating hosts (49 -> 43)
------------------------------

  Additional (1): fi-icl-y 
  Missing    (7): fi-kbl-soraka fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-ctg-p8600 fi-kbl-7560u 


Build changes
-------------

    * IGT: IGT_4736 -> IGTPW_2112

  CI_DRM_5237: 2f99c4889e4124f9cf50b745d037f432318c4bb4 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_2112: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2112/
  IGT_4736: 285ebfb3b7adc56586031afa5150c4e5ad40c229 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools



== Testlist changes ==

+igt@kms_rotation_crc@multiplane-rotation
+igt@kms_rotation_crc@multiplane-rotation-cropping-bottom
+igt@kms_rotation_crc@multiplane-rotation-cropping-top

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2112/
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* [igt-dev] ✓ Fi.CI.IGT: success for tests/kms_rotation_crc: Add multi plane tests. (rev7)
  2018-10-24 13:33 [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests Juha-Pekka Heikkila
                   ` (17 preceding siblings ...)
  2018-12-01 18:41 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev7) Patchwork
@ 2018-12-01 22:51 ` Patchwork
  18 siblings, 0 replies; 28+ messages in thread
From: Patchwork @ 2018-12-01 22:51 UTC (permalink / raw)
  To: Juha-Pekka Heikkila; +Cc: igt-dev

== Series Details ==

Series: tests/kms_rotation_crc: Add multi plane tests. (rev7)
URL   : https://patchwork.freedesktop.org/series/51452/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_5237_full -> IGTPW_2112_full
====================================================

Summary
-------

  **WARNING**

  Minor unknown changes coming with IGTPW_2112_full need to be verified
  manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in IGTPW_2112_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  External URL: https://patchwork.freedesktop.org/api/1.0/series/51452/revisions/7/mbox/

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in IGTPW_2112_full:

### IGT changes ###

#### Possible regressions ####

  * {igt@kms_rotation_crc@multiplane-rotation-cropping-top}:
    - shard-kbl:          NOTRUN -> DMESG-FAIL

  
#### Warnings ####

  * igt@gem_tiled_swapping@non-threaded:
    - shard-kbl:          SKIP -> PASS
    - shard-apl:          SKIP -> PASS

  * igt@kms_frontbuffer_tracking@fbc-rgb565-draw-mmap-cpu:
    - shard-snb:          PASS -> SKIP +1

  * igt@kms_vblank@pipe-c-query-busy:
    - shard-apl:          PASS -> SKIP +49

  * igt@perf_pmu@rc6:
    - shard-kbl:          PASS -> SKIP

  
Known issues
------------

  Here are the changes found in IGTPW_2112_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_eio@in-flight-suspend:
    - shard-apl:          PASS -> DMESG-WARN [fdo#103558]

  * igt@gem_exec_fence@basic-await-default:
    - shard-hsw:          PASS -> FAIL [fdo#108888]

  * igt@i915_suspend@shrink:
    - shard-hsw:          NOTRUN -> DMESG-WARN [fdo#108784]

  * igt@kms_busy@extended-modeset-hang-newfb-render-a:
    - shard-snb:          PASS -> DMESG-WARN [fdo#107956]

  * igt@kms_ccs@pipe-a-crc-sprite-planes-basic:
    - shard-glk:          PASS -> FAIL [fdo#108145]
    - shard-kbl:          PASS -> FAIL [fdo#107725] / [fdo#108145]

  * igt@kms_chv_cursor_fail@pipe-b-128x128-bottom-edge:
    - shard-apl:          PASS -> DMESG-WARN [fdo#103558] / [fdo#105602] +21

  * igt@kms_color@pipe-a-degamma:
    - shard-apl:          PASS -> FAIL [fdo#104782] / [fdo#108145]

  * igt@kms_cursor_crc@cursor-256x256-suspend:
    - shard-glk:          PASS -> FAIL [fdo#103232]
    - shard-apl:          PASS -> FAIL [fdo#103191] / [fdo#103232]

  * igt@kms_cursor_crc@cursor-256x85-random:
    - shard-apl:          PASS -> FAIL [fdo#103232] +2

  * igt@kms_cursor_crc@cursor-64x21-onscreen:
    - shard-kbl:          PASS -> FAIL [fdo#103232] +2

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-pwrite:
    - shard-apl:          PASS -> FAIL [fdo#103167] +3
    - shard-glk:          PASS -> FAIL [fdo#103167] +2
    - shard-kbl:          PASS -> FAIL [fdo#103167]

  * igt@kms_plane@pixel-format-pipe-a-planes:
    - shard-kbl:          PASS -> FAIL [fdo#103166] +1

  * igt@kms_plane@plane-position-covered-pipe-a-planes:
    - shard-glk:          PASS -> FAIL [fdo#103166] +1
    - shard-apl:          PASS -> FAIL [fdo#103166] +2

  * igt@kms_plane@plane-position-covered-pipe-c-planes:
    - shard-apl:          PASS -> DMESG-FAIL [fdo#103166] / [fdo#103558] / [fdo#105602]

  * igt@kms_plane_alpha_blend@pipe-b-alpha-transparant-fb:
    - shard-kbl:          NOTRUN -> FAIL [fdo#108145]

  * igt@kms_setmode@basic:
    - shard-kbl:          PASS -> FAIL [fdo#99912]

  
#### Possible fixes ####

  * igt@gem_ctx_isolation@rcs0-s3:
    - shard-snb:          DMESG-WARN [fdo#102365] -> PASS

  * igt@gem_ppgtt@blt-vs-render-ctxn:
    - shard-kbl:          INCOMPLETE [fdo#103665] / [fdo#106023] / [fdo#106887] -> PASS

  * igt@kms_busy@extended-modeset-hang-newfb-render-b:
    - shard-apl:          DMESG-WARN [fdo#107956] -> SKIP

  * igt@kms_busy@extended-pageflip-hang-newfb-render-b:
    - shard-apl:          DMESG-WARN [fdo#107956] -> PASS

  * igt@kms_content_protection@atomic:
    - shard-apl:          FAIL [fdo#108597] -> SKIP

  * igt@kms_cursor_crc@cursor-128x128-sliding:
    - shard-kbl:          FAIL [fdo#103232] -> PASS +1

  * igt@kms_cursor_crc@cursor-128x42-onscreen:
    - shard-glk:          FAIL [fdo#103232] -> PASS +1
    - shard-apl:          FAIL [fdo#103232] -> PASS +4

  * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-spr-indfb-draw-mmap-gtt:
    - shard-apl:          FAIL [fdo#103167] -> PASS

  * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-spr-indfb-draw-mmap-cpu:
    - shard-glk:          FAIL [fdo#103167] -> PASS +6

  * igt@kms_plane@plane-position-covered-pipe-b-planes:
    - shard-glk:          FAIL [fdo#103166] -> PASS +2

  * igt@kms_plane_alpha_blend@pipe-a-alpha-opaque-fb:
    - shard-apl:          FAIL [fdo#108145] -> SKIP

  * igt@kms_plane_multiple@atomic-pipe-c-tiling-yf:
    - shard-apl:          FAIL [fdo#103166] -> PASS +4

  
#### Warnings ####

  * igt@i915_suspend@shrink:
    - shard-snb:          INCOMPLETE [fdo#105411] / [fdo#106886] -> DMESG-WARN [fdo#108784]

  * igt@kms_plane_alpha_blend@pipe-b-alpha-basic:
    - shard-apl:          FAIL [fdo#108145] -> DMESG-FAIL [fdo#103558] / [fdo#105602] / [fdo#108145]

  * igt@kms_plane_multiple@atomic-pipe-b-tiling-y:
    - shard-apl:          FAIL [fdo#103166] -> DMESG-FAIL [fdo#103166] / [fdo#103558] / [fdo#105602]

  
  {name}: This element is suppressed. This means it is ignored when computing
          the status of the difference (SUCCESS, WARNING, or FAILURE).

  [fdo#102365]: https://bugs.freedesktop.org/show_bug.cgi?id=102365
  [fdo#103166]: https://bugs.freedesktop.org/show_bug.cgi?id=103166
  [fdo#103167]: https://bugs.freedesktop.org/show_bug.cgi?id=103167
  [fdo#103191]: https://bugs.freedesktop.org/show_bug.cgi?id=103191
  [fdo#103232]: https://bugs.freedesktop.org/show_bug.cgi?id=103232
  [fdo#103558]: https://bugs.freedesktop.org/show_bug.cgi?id=103558
  [fdo#103665]: https://bugs.freedesktop.org/show_bug.cgi?id=103665
  [fdo#104782]: https://bugs.freedesktop.org/show_bug.cgi?id=104782
  [fdo#105411]: https://bugs.freedesktop.org/show_bug.cgi?id=105411
  [fdo#105602]: https://bugs.freedesktop.org/show_bug.cgi?id=105602
  [fdo#106023]: https://bugs.freedesktop.org/show_bug.cgi?id=106023
  [fdo#106886]: https://bugs.freedesktop.org/show_bug.cgi?id=106886
  [fdo#106887]: https://bugs.freedesktop.org/show_bug.cgi?id=106887
  [fdo#107725]: https://bugs.freedesktop.org/show_bug.cgi?id=107725
  [fdo#107956]: https://bugs.freedesktop.org/show_bug.cgi?id=107956
  [fdo#108145]: https://bugs.freedesktop.org/show_bug.cgi?id=108145
  [fdo#108597]: https://bugs.freedesktop.org/show_bug.cgi?id=108597
  [fdo#108784]: https://bugs.freedesktop.org/show_bug.cgi?id=108784
  [fdo#108888]: https://bugs.freedesktop.org/show_bug.cgi?id=108888
  [fdo#99912]: https://bugs.freedesktop.org/show_bug.cgi?id=99912


Participating hosts (7 -> 5)
------------------------------

  Missing    (2): shard-skl shard-iclb 


Build changes
-------------

    * IGT: IGT_4736 -> IGTPW_2112
    * Piglit: piglit_4509 -> None

  CI_DRM_5237: 2f99c4889e4124f9cf50b745d037f432318c4bb4 @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_2112: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2112/
  IGT_4736: 285ebfb3b7adc56586031afa5150c4e5ad40c229 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_2112/
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

* Re: [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests
  2018-11-30 14:08       ` Juha-Pekka Heikkila
@ 2018-12-03  8:55         ` Nautiyal, Ankit K
  0 siblings, 0 replies; 28+ messages in thread
From: Nautiyal, Ankit K @ 2018-12-03  8:55 UTC (permalink / raw)
  To: Juha-Pekka Heikkila, igt-dev


On 11/30/2018 7:38 PM, Juha-Pekka Heikkila wrote:
> Add three new tests which try primary and sprite planes
> next to each other with different plane formats, rotations
> and tiling modes.
>
> multiplane-rotation subtest run test through with both planes
> fully visible.
>
> multiplane-rotation-cropping-top will crop primary plane to
> left/top corner and sprite plane to right/top corner while running
> rotation tests.
>
> multiplane-rotation-cropping-bottom will crop primary plane to
> left/bottom corner and sprite plane to right/bottom corner while
> running rotation tests.
>
> v2 (Nautiyal, Ankit K): Use rectangular figures instead of
> square figures and fix associated code to perform correctly.
> Adjust plane positions according to screen size to avoid
> putting planes outside screen.
>
> v3 (Nautiyal, Ankit K): Minor detail fix.
>
> Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
> ---
>   tests/kms_rotation_crc.c | 246 +++++++++++++++++++++++++++++++++++++++++++++++
>   1 file changed, 246 insertions(+)
>
> diff --git a/tests/kms_rotation_crc.c b/tests/kms_rotation_crc.c
> index 366c254..369936f 100644
> --- a/tests/kms_rotation_crc.c
> +++ b/tests/kms_rotation_crc.c
> @@ -26,6 +26,25 @@
>   #include <math.h>
>   
>   #define MAX_FENCES 32
> +#define MAXMULTIPLANESAMOUNT 2
> +
> +struct p_struct {
> +	igt_plane_t *plane;
> +	struct igt_fb fb;
> +};
> +
> +enum p_pointorigo {
> +	p_top = 1 << 0,
> +	p_bottom = 1 << 1,
> +	p_left = 1 << 2,
> +	p_right = 1 << 3
> +};
> +
> +struct p_point{
> +	enum p_pointorigo origo;
> +	float_t x;
> +	float_t y;
> +};
>   
>   typedef struct {
>   	int gfx_fd;
> @@ -43,6 +62,9 @@ typedef struct {
>   	uint32_t override_fmt;
>   	uint64_t override_tiling;
>   	int devid;
> +
> +	struct p_struct *multiplaneoldview;
> +	struct p_point planepos[MAXMULTIPLANESAMOUNT];
>   } data_t;
>   
>   typedef struct {
> @@ -395,6 +417,194 @@ static void test_plane_rotation(data_t *data, int plane_type, bool test_bad_form
>   	}
>   }
>   
> +typedef struct {
> +	int32_t x1, y1;
> +	uint64_t width, height, tiling, planetype, format;
> +	igt_rotation_t rotation_sw, rotation_hw;
> +} planeinfos;
> +
> +static void get_multiplane_crc(data_t *data, igt_output_t *output,
> +			       igt_crc_t *crc_output, planeinfos *planeinfo,
> +			       int numplanes)
> +{
> +	uint32_t w, h;
> +	igt_display_t *display = &data->display;
> +	struct p_struct *planes, *oldplanes;
> +	int c, ret;
> +
> +	oldplanes = data->multiplaneoldview;
> +	planes = malloc(sizeof(*planes) * numplanes);
> +
> +	for (c = 0; c < numplanes; c++) {
> +		planes[c].plane = igt_output_get_plane_type(output,
> +							    planeinfo[c].planetype);
> +
> +		w = planeinfo[c].width;
> +		h = planeinfo[c].height;
> +
> +		if (planeinfo[c].rotation_sw & (IGT_ROTATION_90 | IGT_ROTATION_270))
> +			igt_swap(w, h);
> +
> +		igt_create_fb(data->gfx_fd, w, h, planeinfo[c].format,
> +			      planeinfo[c].tiling, &planes[c].fb);
> +
> +		paint_squares(data, planeinfo[c].rotation_sw, &planes[c].fb, 1.0f);
> +		igt_plane_set_fb(planes[c].plane, &planes[c].fb);
> +
> +		if (planeinfo[c].rotation_hw & (IGT_ROTATION_90 | IGT_ROTATION_270))
> +			igt_plane_set_size(planes[c].plane, h, w);
> +
> +		igt_plane_set_position(planes[c].plane, planeinfo[c].x1, planeinfo[c].y1);
> +		igt_plane_set_rotation(planes[c].plane, planeinfo[c].rotation_hw);
> +	}
> +
> +	ret = igt_display_try_commit2(display, COMMIT_ATOMIC);
> +	igt_assert_eq(ret, 0);
> +
> +	igt_pipe_crc_get_current(data->gfx_fd, data->pipe_crc, crc_output);
> +
> +	for (c = 0; c < numplanes && oldplanes; c++)
> +		igt_remove_fb(data->gfx_fd, &oldplanes[c].fb);
> +
> +	free(oldplanes);
> +	data->multiplaneoldview = (void*)planes;
> +}
> +
> +static void pointlocation(data_t *data, planeinfos *p, drmModeModeInfo *mode,
> +			  int c)
> +{
> +	p[c].x1 = (int32_t)(data->planepos[c].x * mode->hdisplay)
> +			+ ((data->planepos[c].origo & p_right) ? mode->hdisplay : 0);
> +	p[c].y1 = (int32_t)(data->planepos[c].y * mode->vdisplay)
> +			+ ((data->planepos[c].origo & p_bottom) ? mode->vdisplay : 0);
> +}
> +
> +/*
> + * Here is pipe parameter which is now used only for first pipe.
> + * It is left here if this test ever was wanted to be run on
> + * different pipes.
> + */
> +static void test_multi_plane_rotation(data_t *data, enum pipe pipe)
> +{
> +	igt_display_t *display = &data->display;
> +	igt_output_t *output;
> +	igt_crc_t retcrc_sw, retcrc_hw;
> +	planeinfos p[2];
> +	int c;
> +	struct p_struct *oldplanes;
> +	drmModeModeInfo *mode;
> +
> +	const static struct {
> +		igt_rotation_t rotation;
> +		float_t width;
> +		float_t height;
> +		uint64_t tiling;
> +	} planeconfigs[] = {
> +	{IGT_ROTATION_0, .2f, .4f, LOCAL_DRM_FORMAT_MOD_NONE },
> +	{IGT_ROTATION_0, .2f, .4f, LOCAL_I915_FORMAT_MOD_X_TILED },
> +	{IGT_ROTATION_0, .2f, .4f, LOCAL_I915_FORMAT_MOD_Y_TILED },
> +	{IGT_ROTATION_0, .2f, .4f, LOCAL_I915_FORMAT_MOD_Yf_TILED },
> +	{IGT_ROTATION_90, .2f, .4f, LOCAL_I915_FORMAT_MOD_Y_TILED },
> +	{IGT_ROTATION_90, .2f, .4f, LOCAL_I915_FORMAT_MOD_Yf_TILED },
> +	{IGT_ROTATION_180, .2f, .4f, LOCAL_DRM_FORMAT_MOD_NONE },
> +	{IGT_ROTATION_180, .2f, .4f, LOCAL_I915_FORMAT_MOD_X_TILED },
> +	{IGT_ROTATION_180, .2f, .4f, LOCAL_I915_FORMAT_MOD_Y_TILED },
> +	{IGT_ROTATION_180, .2f, .4f, LOCAL_I915_FORMAT_MOD_Yf_TILED },
> +	{IGT_ROTATION_270, .2f, .4f, LOCAL_I915_FORMAT_MOD_Y_TILED },
> +	{IGT_ROTATION_270, .2f, .4f, LOCAL_I915_FORMAT_MOD_Yf_TILED },
> +	};
> +
> +	/*
> +	* These are those modes which are tested. For testing feel interesting
> +	* case with tiling are 2 byte wide and 4 byte wide.
> +	*
> +	* TODO:
> +	* Built support for NV12 here.
> +	*/
> +	const static uint32_t  formatlist[] = {DRM_FORMAT_RGB565,
> +					       DRM_FORMAT_XRGB8888};
> +
> +	for_each_valid_output_on_pipe(display, pipe, output) {
> +		int i, j, k, l;
> +		igt_output_set_pipe(output, pipe);
> +		mode = igt_output_get_mode(output);
> +		igt_display_require_output(display);
> +		igt_display_commit2(display, COMMIT_ATOMIC);
> +
> +		data->pipe_crc = igt_pipe_crc_new(data->gfx_fd, pipe,
> +						  INTEL_PIPE_CRC_SOURCE_AUTO);
> +		igt_pipe_crc_start(data->pipe_crc);
> +
> +		for (i = 0; i < ARRAY_SIZE(planeconfigs); i++) {
> +			p[0].planetype = DRM_PLANE_TYPE_PRIMARY;
> +			p[0].width = (uint64_t)(planeconfigs[i].width * mode->hdisplay);
> +			p[0].height = (uint64_t)(planeconfigs[i].height * mode->vdisplay);
> +			p[0].tiling = planeconfigs[i].tiling;
> +			pointlocation(data, (planeinfos *)&p, mode, 0);
> +
> +			for (k = 0; k < ARRAY_SIZE(formatlist); k++) {
> +				p[0].format = formatlist[k];
> +
> +				for (j = 0; j < ARRAY_SIZE(planeconfigs); j++) {
> +					p[1].planetype = DRM_PLANE_TYPE_OVERLAY;
> +					p[1].width = (uint64_t)(planeconfigs[j].width * mode->hdisplay);
> +					p[1].height = (uint64_t)(planeconfigs[j].height * mode->vdisplay);
> +					p[1].tiling = planeconfigs[j].tiling;
> +					pointlocation(data, (planeinfos *)&p,
> +						      mode, 1);
> +
> +					for (l = 0; l < ARRAY_SIZE(formatlist); l++) {
> +						p[1].format = formatlist[l];
> +
> +						/*
> +						 * RGB565 90/270 degrees rotation is supported
> +						 * from gen11 onwards.
> +						 */
> +						if (p[0].format == DRM_FORMAT_RGB565 &&
> +						     (planeconfigs[i].rotation & (IGT_ROTATION_90 | IGT_ROTATION_270))
> +						     && intel_gen(data->devid) < 11)
> +							continue;
> +
> +						if (p[1].format == DRM_FORMAT_RGB565 &&
> +						     (planeconfigs[j].rotation & (IGT_ROTATION_90 | IGT_ROTATION_270))
> +						     && intel_gen(data->devid) < 11)
> +							continue;
> +
> +						p[0].rotation_sw = planeconfigs[i].rotation;
> +						p[0].rotation_hw = IGT_ROTATION_0;
> +						p[1].rotation_sw = planeconfigs[j].rotation;
> +						p[1].rotation_hw = IGT_ROTATION_0;
> +						get_multiplane_crc(data, output, &retcrc_sw,
> +								   (planeinfos *)&p, MAXMULTIPLANESAMOUNT);
> +
> +						igt_swap(p[0].rotation_sw, p[0].rotation_hw);
> +						igt_swap(p[1].rotation_sw, p[1].rotation_hw);
> +						get_multiplane_crc(data, output, &retcrc_hw,
> +								   (planeinfos *)&p, MAXMULTIPLANESAMOUNT);
> +
> +						igt_assert_crc_equal(&retcrc_sw, &retcrc_hw);
> +					}
> +				}
> +			}
> +		}
> +		igt_pipe_crc_stop(data->pipe_crc);
> +		igt_pipe_crc_free(data->pipe_crc);
> +		igt_output_set_pipe(output, PIPE_ANY);
> +	}
> +
> +	/*
> +	* Old fbs are deleted only after new ones are set on planes.
> +	* This is done to speed up the test
> +	*/
> +	oldplanes = data->multiplaneoldview;
> +	for (c = 0; c < MAXMULTIPLANESAMOUNT && oldplanes; c++)
> +		igt_remove_fb(data->gfx_fd, &oldplanes[c].fb);
> +
> +	free(oldplanes);
> +	data->multiplaneoldview = NULL;
> +	data->pipe_crc = NULL;
> +}
> +
>   static void test_plane_rotation_exhaust_fences(data_t *data,
>   					       enum pipe pipe,
>   					       igt_output_t *output,
> @@ -595,6 +805,42 @@ igt_main
>   		}
>   	}
>   
> +	igt_subtest_f("multiplane-rotation") {
> +		igt_require(gen >= 9);
> +		cleanup_crtc(&data);
> +		data.planepos[0].origo = p_top | p_left;
> +		data.planepos[0].x = .2f;
> +		data.planepos[0].y = .1f;
> +		data.planepos[1].origo = p_top | p_right;
> +		data.planepos[1].x = -.4f;
> +		data.planepos[1].y = .1f;
> +		test_multi_plane_rotation(&data, 0);
> +	}
> +
> +	igt_subtest_f("multiplane-rotation-cropping-top") {
> +		igt_require(gen >= 9);
> +		cleanup_crtc(&data);
> +		data.planepos[0].origo = p_top | p_left;
> +		data.planepos[0].x = -.05f;
> +		data.planepos[0].y = -.15f;
> +		data.planepos[1].origo = p_top | p_right;
> +		data.planepos[1].x = -.15f;
> +		data.planepos[1].y = -.15f;
> +		test_multi_plane_rotation(&data, 0);
> +	}
> +
> +	igt_subtest_f("multiplane-rotation-cropping-bottom") {
> +		igt_require(gen >= 9);
> +		cleanup_crtc(&data);
> +		data.planepos[0].origo = p_bottom | p_left;
> +		data.planepos[0].x = -.05f;
> +		data.planepos[0].y = -.20f;
> +		data.planepos[1].origo = p_bottom | p_right;
> +		data.planepos[1].x = -.15f;
> +		data.planepos[1].y = -.20f;
> +		test_multi_plane_rotation(&data, 0);
> +	}
> +
>   	/*
>   	 * exhaust-fences should be last test, if it fails we may OOM in
>   	 * the following subtests otherwise.

Looks good to me.

Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>

Regards,
Ankit
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

^ permalink raw reply	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2018-12-03  8:55 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-24 13:33 [igt-dev] [PATCH i-g-t] tests/kms_rotation_crc: Add multi plane tests Juha-Pekka Heikkila
2018-10-24 18:25 ` [igt-dev] ✓ Fi.CI.BAT: success for " Patchwork
2018-10-24 18:55 ` Patchwork
2018-10-24 23:17 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2018-10-25  0:12 ` Patchwork
2018-10-25 13:26 ` [igt-dev] [PATCH i-g-t] " Juha-Pekka Heikkila
2018-10-26 12:58   ` Juha-Pekka Heikkila
2018-11-16 12:28     ` Nautiyal, Ankit K
2018-11-19 11:45       ` Juha-Pekka Heikkila
2018-11-19 11:59     ` Juha-Pekka Heikkila
2018-11-22  7:04       ` Nautiyal, Ankit K
2018-11-29 21:29         ` Juha-Pekka Heikkilä
2018-11-30 14:08       ` Juha-Pekka Heikkila
2018-12-03  8:55         ` Nautiyal, Ankit K
2018-10-25 14:42 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev2) Patchwork
2018-10-26  6:10 ` Patchwork
2018-10-26 12:21 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2018-10-26 14:23 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev3) Patchwork
2018-10-26 20:41 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
2018-10-27  5:52 ` [igt-dev] ✓ Fi.CI.BAT: success " Patchwork
2018-10-27  9:25 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2018-11-19 15:01 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev4) Patchwork
2018-11-19 18:55 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2018-11-30 14:58 ` [igt-dev] ✗ Fi.CI.BAT: failure for tests/kms_rotation_crc: Add multi plane tests. (rev5) Patchwork
2018-11-30 17:30 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev6) Patchwork
2018-12-01 12:15 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork
2018-12-01 18:41 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_rotation_crc: Add multi plane tests. (rev7) Patchwork
2018-12-01 22:51 ` [igt-dev] ✓ Fi.CI.IGT: " 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.