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

Garg, Nemesa nemesa.garg at intel.com
Thu Mar 27 15:23:30 UTC 2025



> -----Original Message-----
> From: Sharma, Swati2 <swati2.sharma at intel.com>
> Sent: Tuesday, March 25, 2025 2:32 PM
> To: Garg, Nemesa <nemesa.garg at intel.com>; igt-dev at lists.freedesktop.org
> Subject: Re: [PATCH i-g-t v4] tests/kms_plane: Add test to validate odd
> panning
> 
> Hi Nemesa
> 
> Test seems to be failing on LNL
> https://intel-gfx-ci.01.org/tree/intel-xe/IGTPW_12780/shards-
> all.html?testfilter=odd-panning
> Please check.
> 
Hi Swati,
Sure will check once.

> On 05-03-2025 08:47 pm, Nemesa Garg wrote:
> > This feature creates a NV12 plane having two framebuffers and moving
> > it to odd position and then do continous flip along with the change in
> > the width of framebuffer.
> > This is to check whether panning at odd position is supported or not.
> >
> > v2: Add test in kms_plane.[Swati]
> > v3: Remove extra parameters[Pranay]
> > v4: Add a break condition in loop
> >
> > Signed-off-by: Nemesa Garg <nemesa.garg at intel.com>
> > ---
> >   tests/kms_plane.c | 99
> +++++++++++++++++++++++++++++++++++++++++++++++
> >   1 file changed, 99 insertions(+)
> >
> > diff --git a/tests/kms_plane.c b/tests/kms_plane.c index
> > b9bf025bd..e4555e932 100644
> > --- a/tests/kms_plane.c
> > +++ b/tests/kms_plane.c
> > @@ -88,6 +88,15 @@
> >    * @format-source-clamping:          with source clamping
> >    */
> >
> > +/**
> > + * SUBTEST: odd-panning
> > + * Description: Verify that odd panning in horizontal direction for
> > +planar format
> > + * Driver requirement: i915, xe
> > + * Functionality: plane, panning
> > + * Mega feature: General Display Features
> We have dropped Test category and Functionality. Please remove them from
> documentation.
> > + * Test category: functionality test
> > + */
> > +
> >   /*
> >    * Throw away enough lsbs in pixel formats tests
> >    * to get a match despite some differences between @@ -100,6 +109,9
> > @@
> >   #define CRTC_RESTRICT_CNT	2
> >   #define SIM_CRTC_RESTRICT_CNT	1
> >
> > +#define PLANE_WIDTH 810
> > +#define PLANE_HEIGHT 590
> > +
> >   typedef struct {
> >   	float red;
> >   	float green;
> > @@ -1330,6 +1342,89 @@ static bool is_pipe_limit_reached(int count)
> >   		return count >= CRTC_RESTRICT_CNT && !all_pipes;
> >   }
> >
> > +static void
> > +prepare_planes_panning(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);
> > +			if (ret == -22)
> > +				break;
> > +		} 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);
> > +			if (ret == -22)
> > +				break;
> > +		}
> > +		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_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))
> > +			prepare_planes_panning(display, pipe, output);
> > +
> > +		if (pipe == 0)
> > +			break;
> > +	}
> > +}
> > +
> >   static void run_test(data_t *data, void (*test)(data_t *, enum pipe))
> >   {
> >   	enum pipe pipe;
> > @@ -1408,6 +1503,10 @@ run_tests_for_pipe_plane(data_t *data)
> >   		run_test(data, dynamic_test_handler);
> >   	}
> >
> > +	igt_describe("verify whether odd panning is supported or not");
> > +	igt_subtest_with_dynamic("odd-panning")
> > +		run_test_odd_pan(data);
> > +
> >   	igt_describe("verify planar settings for pixel format are accepted or
> rejected correctly");
> >   	igt_subtest_f("planar-pixel-format-settings")
> >   		test_planar_settings(data);



More information about the igt-dev mailing list