[PATCH i-g-t] tests/intel/kms_odd_pan: Add test to validate odd panning

Garg, Nemesa nemesa.garg at intel.com
Tue Feb 18 14:34:45 UTC 2025



> -----Original Message-----
> From: Sharma, Swati2 <swati2.sharma at intel.com>
> Sent: Tuesday, February 18, 2025 12:29 PM
> To: Garg, Nemesa <nemesa.garg at intel.com>; igt-dev at lists.freedesktop.org
> Subject: Re: [PATCH i-g-t] tests/intel/kms_odd_pan: Add test to validate odd
> panning
> 
> Hi Nemesa,
> 
> On 17-02-2025 08:44 pm, Nemesa Garg wrote:
> > Add a new test to check whether odd pan is supported or not.
> Please elaborate more in the description whats the intention of this test, what
> is this feature all about?
> Also, why do we need to create a new binary to validate this feature?
> Why can't
> we add subtest in existing binaries like kms_plane?
> >
Hi Swati,

I can add this test as a part of the kms_plane. This test if for checking whether the odd panning is
supported or not. I'll add more in the description.

Thanks and Regards,
Nemesa
> > Signed-off-by: Nemesa Garg <nemesa.garg at intel.com>
> > ---
> >   tests/intel/kms_odd_pan.c | 155
> ++++++++++++++++++++++++++++++++++++++
> >   tests/meson.build         |   1 +
> >   2 files changed, 156 insertions(+)
> >   create mode 100644 tests/intel/kms_odd_pan.c
> >
> > diff --git a/tests/intel/kms_odd_pan.c b/tests/intel/kms_odd_pan.c new
> > file mode 100644 index 000000000..46f9c8fe2
> > --- /dev/null
> > +++ b/tests/intel/kms_odd_pan.c
> > @@ -0,0 +1,155 @@
> > +/* SPDX-License-Identifier: MIT */
> > +/*
> > + * Copyright © 2025 Intel Corporation  */
> > +
> > +/**
> > + * TEST: kms odd pan
> > + * Category: Display
> > + * Description: Test to validate odd panning for planar format
> > + * Driver requirement: xe
> > + * Mega feature: General Display Features
> > + * Test category: functionality test
> > + * Functionality: panning
> > + */
> > +
> > +#include "igt.h"
> > +#include "igt_vec.h"
> > +#include <errno.h>
> > +#include <stdbool.h>
> > +#include <stdio.h>
> > +#include <string.h>
> > +#include "xe/xe_query.h"
> > +
> > +/**
> > + * SUBTEST: odd-panning
> > + * Description: Verify that odd panning in horizontal direction for
> > +planar format
> > + * Driver requirement: i915, xe
> > + * Functionality: kms_odd_pan
> > + * Mega feature: General Display Features
> > + * Test category: functionality test
> > + */
> > +
> > +IGT_TEST_DESCRIPTION("Test to validate odd panning for planar
> > +format");
> > +
> > +typedef struct {
> > +	int drm_fd;
> > +	igt_display_t display;
> > +	igt_output_t *output;
> > +	igt_plane_t **plane;
> > +	struct igt_fb *fb;
> > +} data_t;
> > +
> > +#define PLANE_WIDTH 810
> > +#define PLANE_HEIGHT 590
> > +
> > +static void
> > +prepare_planes(igt_display_t *display, const enum pipe pipe_id,
> > +	       igt_output_t *output)
> > +{
> > +	igt_plane_t *primary;
> > +	struct igt_fb primary_fb_1, primary_fb_2;
> > +	unsigned int fb_id_1, fb_id_2;
> > +	int j = 0, ret;
> > +
> > +	igt_output_set_pipe(output, pipe_id);
> > +
> > +	primary = igt_output_get_plane_type(output,
> DRM_PLANE_TYPE_PRIMARY);
> > +
> > +	fb_id_1 = igt_create_pattern_fb(display->drm_fd,
> > +					800, 590,
> > +					DRM_FORMAT_NV12,
> > +					DRM_FORMAT_MOD_LINEAR,
> > +					&primary_fb_1);
> > +
> > +	fb_id_2 = igt_create_pattern_fb(display->drm_fd,
> > +					800, 590,
> > +					DRM_FORMAT_NV12,
> > +					DRM_FORMAT_MOD_LINEAR,
> > +					&primary_fb_2);
> > +
> > +	igt_assert(fb_id_1);
> > +	igt_assert(fb_id_2);
> > +
> > +	igt_plane_set_fb(primary, &primary_fb_1);
> > +
> > +	igt_plane_set_size(primary, PLANE_WIDTH, PLANE_HEIGHT);
> > +	igt_plane_set_position(primary, -501, 200);
> > +
> > +	ret = igt_display_try_commit_atomic(display,
> > +DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
> > +
> > +	do {
> > +		if (j % 2 == 0) {
> > +			igt_plane_set_fb(primary, &primary_fb_1);
> > +			igt_plane_set_size(primary, PLANE_WIDTH - j,
> PLANE_HEIGHT);
> > +			ret = igt_display_try_commit_atomic(display, 0, NULL);
> > +		} else {
> > +			igt_plane_set_fb(primary, &primary_fb_2);
> > +			igt_plane_set_size(primary, PLANE_WIDTH - j,
> PLANE_HEIGHT);
> > +			ret = igt_display_try_commit_atomic(display, 0, NULL);
> > +		}
> > +		j++;
> > +	} while (j < 20);
> > +
> > +	igt_assert_eq(ret, -22);
> > +
> > +	igt_plane_set_fb(primary, NULL);
> > +	igt_output_set_pipe(output, PIPE_NONE);
> > +	igt_display_try_commit2(display, COMMIT_ATOMIC);
> > +
> > +	igt_remove_fb(display->drm_fd, &primary_fb_1);
> > +	igt_remove_fb(display->drm_fd, &primary_fb_2); }
> > +
> > +static void run_test_pan(igt_display_t *display, const enum pipe pipe_id,
> > +			 igt_output_t *output)
> > +{
> > +	prepare_planes(display, pipe_id, output); }
> > +
> > +static void run_test_odd_pan(data_t *data) {
> > +	igt_display_t *display = &data->display;
> > +	enum pipe pipe;
> > +	igt_output_t *output;
> > +
> > +	for_each_pipe_with_valid_output(display, pipe, output) {
> > +		igt_display_reset(display);
> > +
> > +		igt_output_set_pipe(output, pipe);
> > +		if (!intel_pipe_output_combo_valid(display))
> > +			continue;
> > +
> > +		igt_dynamic_f("pipe-%s-%s", kmstest_pipe_name(pipe),
> igt_output_name(output))
> > +			run_test_pan(display, pipe, output);
> > +
> > +		if (pipe == 0)
> > +			break;
> > +	}
> > +}
> > +
> > +igt_main
> > +{
> > +	data_t data = {};
> > +
> > +	igt_fixture {
> > +		data.drm_fd = drm_open_driver_master(DRIVER_ANY);
> > +		igt_require(data.drm_fd >= 0);
> > +
> > +		kmstest_set_vt_graphics_mode();
> > +
> > +		igt_display_require(&data.display, data.drm_fd);
> > +		igt_require(data.display.is_atomic);
> > +
> > +		igt_display_require_output(&data.display);
> > +	}
> > +
> > +	igt_describe("Tests odd  panning");
> > +	igt_subtest_with_dynamic("odd-panning")
> > +		run_test_odd_pan(&data);
> > +
> > +	igt_fixture {
> > +		igt_display_fini(&data.display);
> > +		drm_close_driver(data.drm_fd);
> > +	}
> > +}
> > diff --git a/tests/meson.build b/tests/meson.build index
> > f8a0ab836..97effb290 100644
> > --- a/tests/meson.build
> > +++ b/tests/meson.build
> > @@ -257,6 +257,7 @@ intel_kms_progs = [
> >   	'kms_joiner',
> >   	'kms_legacy_colorkey',
> >   	'kms_mmap_write_crc',
> > +	'kms_odd_pan',
> >   	'kms_pipe_b_c_ivb',
> >   	'kms_pipe_stress',
> >   	'kms_pm_backlight',



More information about the igt-dev mailing list