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 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx