[Intel-gfx] [PATCH i-g-t] kms_flip_tiling: Test flips between same tiling
Chris Wilson
chris at chris-wilson.co.uk
Thu Apr 23 03:39:49 PDT 2015
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.
> + */
> +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)
> + /* 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?
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
More information about the Intel-gfx
mailing list