[Intel-gfx] [PATCH] kms_atomic : Added subtest for Single Pipe DBUF validation
Daniel Vetter
daniel at ffwll.ch
Thu Oct 13 13:16:29 UTC 2016
On Tue, Oct 04, 2016 at 10:17:58AM +0530, meghanelogal wrote:
> Existing DDB algorithm divide the DDB wrt data rate,
> hence the planes with the less height but same width
> will be allocated less blocks and watermark are based
> on width which requires more DDB. With this data the flip
> may fail.
>
> In new DDB algorithm, the DDB is divided based on
> watermark requirement.
>
> In this subtest, dividing the htotal/200 will allocate
> ~2-4 blocks out of total(512/896), flip may fail with the
> exisiting algorithm.But with the new algorithm it will pass.
>
> Signed-off-by: Megha Nelogal <megha.i.nelogal at intel.com>
Please note that igt can be run on _any_ linux driver. If you are testing
for such a specific case like this one here, you definitely need to have
very specific platform checks in place, using igt_require.
But tbh I'm not sure this is all that useful ....
-Daniel
> ---
> tests/kms_atomic.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 77 insertions(+)
>
> diff --git a/tests/kms_atomic.c b/tests/kms_atomic.c
> index f27ee46..ff25644 100644
> --- a/tests/kms_atomic.c
> +++ b/tests/kms_atomic.c
> @@ -1280,6 +1280,60 @@ static void atomic_invalid_params(struct kms_atomic_crtc_state *crtc,
> do_ioctl_err(desc->fd, DRM_IOCTL_MODE_ATOMIC, &ioc, EFAULT);
> }
>
> +static void validate_dbuf(struct kms_atomic_crtc_state *crtc,
> + struct kms_atomic_plane_state **plane_array,
> + int plane_count)
> +{
> + int i;
> + struct kms_atomic_desc *desc = crtc->state->desc;
> +
> + /* for active crtc do modeset on the native resolution */
> + drmModeAtomicReq *req = drmModeAtomicAlloc();
> + struct drm_mode_modeinfo *mode = crtc->mode.data;
> + struct kms_atomic_plane_state plane;
> + struct igt_fb fb;
> +
> + crtc_populate_req(crtc, req);
> +
> + /* Add plane data to the structure...*/
> + uint32_t crtc_x = 0;
> + uint32_t crtc_y = 0;
> +
> + for (i = 0; i < plane_count; i++) {
> + plane = *plane_array[i];
> + uint32_t format = plane_get_igt_format(&plane);
> +
> + igt_require(format != 0);
> + plane.src_x = 0;
> + plane.src_y = 0;
> + plane.src_w = (mode->hdisplay / (1)) << 16;
> + plane.crtc_x = crtc_x;
> + plane.crtc_y = crtc_y;
> + plane.crtc_w = (mode->hdisplay) / (1);
> + plane.crtc_h = (mode->vdisplay) / (i + 1);
> +
> + plane.crtc_id = crtc->obj;
> +
> + if (i%2 == 0) {
> + plane.src_h = (mode->vdisplay / (1)) << 16;
> + plane.crtc_h = (mode->vdisplay) / (1);
> + }
> +
> + if (i%2 == 1) {
> + plane.src_h = ceil((mode->vdisplay / 200) << 16);
> + plane.crtc_h = ceil((mode->vdisplay / 200));
> + }
> +
> + plane.fb_id = igt_create_fb(plane.state->desc->fd,
> + plane.crtc_w, plane.crtc_h,
> + format, I915_TILING_NONE, &fb);
> + plane_populate_req(&plane, req);
> + }
> + do_atomic_commit(desc->fd, req, ATOMIC_RELAX_NONE);
> + drmModeAtomicFree(req);
> +}
> +
> +
> igt_main
> {
> struct kms_atomic_desc desc;
> @@ -1373,6 +1427,29 @@ igt_main
> atomic_state_free(scratch);
> }
>
> + igt_subtest("validate_dbuf") {
> + struct kms_atomic_state *scratch = atomic_state_dup(current);
> + struct kms_atomic_crtc_state *crtc = find_crtc(scratch, true);
> + struct kms_atomic_plane_state *plane;
> + struct kms_atomic_connector_state *connector =
> + find_connector(scratch, crtc);
> + struct kms_atomic_plane_state **plane_array = NULL;
> + /* Enabling Two planes */
> + plane_array = calloc(2, sizeof(struct kms_atomic_plane_state *));
> + int plane_count = 0;
> +
> + igt_require(crtc);
> + plane = find_plane(scratch, PLANE_TYPE_PRIMARY, crtc);
> + igt_require(plane);
> + plane_array[plane_count] = plane; plane_count++;
> + plane = find_plane(scratch, PLANE_TYPE_OVERLAY, crtc);
> + igt_require(plane);
> + plane_array[plane_count] = plane; plane_count++;
> + igt_require(connector);
> + validate_dbuf(crtc, plane_array, plane_count);
> + atomic_state_free(scratch);
> + }
> +
> atomic_state_free(current);
>
> igt_fixture
> --
> 1.9.1
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
More information about the Intel-gfx
mailing list