Re: [PATCH i-g-t] kms_flip_tiling: Test flips between same tiling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 04/23/2015 11:39 AM, Chris Wilson wrote:
On Thu, Apr 23, 2015 at 11:08:35AM +0100, Tvrtko Ursulin wrote:
+/*
+ * Test that tiled page flips work.

Worth saying that we don't always expect linear->tiled flips to work, so
the mo is to first set the CRTC with a tiled fb, then flip to the
second.

I didn't have that in mind for this test - here it only concerns itself with skl_do_mmio_flip bug (2ebef630fd283642a11c48c0e0f054c3c5c59e86).

+ */
+static void
+test_tiled_flip(data_t *data, igt_output_t *output, uint64_t tiling)
+{
+	drmModeModeInfo *mode;
+	igt_plane_t *primary;
+	igt_pipe_crc_t *pipe_crc;
+	igt_crc_t reference_crc, crc;
+	struct igt_fb fb[2];
+	int fb_id[2], pipe, ret, width, height;
+
+	pipe = output->config.pipe;
+	pipe_crc = igt_pipe_crc_new(pipe, INTEL_PIPE_CRC_SOURCE_AUTO);
+	igt_output_set_pipe(output, pipe);
+
+	mode = igt_output_get_mode(output);
+	primary = igt_output_get_plane(output, 0);
+
+	width = mode->hdisplay;
+	height = mode->vdisplay;
+
+	/* create two identical fbs */
+	fb_id[0] = igt_create_fb(data->drm_fd, width, height,
+				 DRM_FORMAT_XRGB8888, tiling, &fb[0]);
+	igt_assert(fb_id[0]);
+
+	fb_id[1] = igt_create_fb(data->drm_fd, width, height,
+				 DRM_FORMAT_XRGB8888, tiling, &fb[1]);
+	igt_assert(fb_id[1]);
+
+	fill_fb(&fb[0], data, mode);
+	fill_fb(&fb[1], data, mode);

Pretty please can we have two different patterns?

+	/* set the crtc and generate a reference crc */
+	igt_plane_set_fb(primary, &fb[0]);
+	igt_display_commit(&data->display);
+	igt_pipe_crc_collect_crc(pipe_crc, &reference_crc);
+
+	/* flip to the other fb */
+	ret = drmModePageFlip(data->drm_fd, output->config.crtc->crtc_id,
+			      fb_id[1], 0, NULL);
+	igt_assert_eq(ret, 0);
+
+	igt_wait_for_vblank(data->drm_fd, pipe);

I'd be more comfortable waiting for the flip-completion event (and then
a vblank for the CRC to be computed? idk)

I can look into that but shame on you for ruining my copy&paste party! ;)

+	/* get a crc and compare with the reference */
+	igt_pipe_crc_collect_crc(pipe_crc, &crc);
+	igt_assert_crc_equal(&reference_crc, &crc);

With 2 patterns you can even test the second flip back again!

So for detecting the current breakage, we should just a
test_tiled_change that if PageFlip returns 0, the crc matches the
reference? And iterate over the modes to find one that causes an
underrun?

Underruns and watermarks I intended for another test case. This one is a really simple one - flip with the same framebuffer and check that it has really remained the same.

And the pre-existent test_flip_changes_tiling works in the opposite direction so won't cause an underrun. But will start failing if we merge (drm/i915/skl: Disallow tiling changes during page flip).

So third test case could be what you say, flip from linear to tiled and check for underrun if it works.

Regards,

Tvrtko
_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/intel-gfx





[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux