[igt-dev] [PATCH 2/4] tests/amdgpu/amd_psr: clean-up the code

David Zhang dingchen.zhang at amd.com
Thu May 5 21:32:24 UTC 2022


[why]
We'd clean-up the code to avoid repeated variable declarations in
different psr-su test cases.

[how]
- add primary/overlay framebuffer width/height to generic data
  structure
- add cursor framebuffer instance to data structure
- clean-up the code for mpo/ffu/cusor test cases by using above
  re-useable variables

Cc: Rodrigo Siqueira <rodrigo.siqueira at amd.com>
Cc: Harry Wentland <harry.wentland at amd.com>
Cc: Leo Li <sunpeng.li at amd.com>
Cc: Jay Pillai <aurabindo.pillai at amd.com>
Cc: Wayne Lin <wayne.lin at amd.com>

Signed-off-by: David Zhang <dingchen.zhang at amd.com>
---
 tests/amdgpu/amd_psr.c | 65 +++++++++++++++++++-----------------------
 1 file changed, 30 insertions(+), 35 deletions(-)

diff --git a/tests/amdgpu/amd_psr.c b/tests/amdgpu/amd_psr.c
index 5d190720..29982605 100644
--- a/tests/amdgpu/amd_psr.c
+++ b/tests/amdgpu/amd_psr.c
@@ -56,12 +56,14 @@ typedef struct data {
 	igt_pipe_crc_t *pipe_crc;
 	igt_fb_t ov_fb[2];
 	igt_fb_t pm_fb[2];
+	igt_fb_t cs_fb;		/* cursor framebuffer */
 	drmModeModeInfo *mode;
 	enum pipe pipe_id;
 	int fd;
 	int debugfs_fd;
-	int w;
-	int h;
+	int w, h;
+	int pfb_w, pfb_h;
+	int ofb_w, ofb_h;
 } data_t;
 
 enum cursor_move {
@@ -170,6 +172,10 @@ static void test_init(data_t *data)
 
 	data->w = data->mode->hdisplay;
 	data->h = data->mode->vdisplay;
+	data->ofb_w = data->w;
+	data->ofb_h = data->h;
+	data->pfb_w = data->w / 2;
+	data->pfb_h = data->h / 2;
 
 	if (opt.visual_confirm) {
 		/**
@@ -308,7 +314,6 @@ static void run_check_psr(data_t *data, bool test_null_crtc) {
 static void run_check_psr_su_mpo(data_t *data)
 {
 	int edp_idx = check_conn_type(data, DRM_MODE_CONNECTOR_eDP);
-	igt_fb_t ov_fb;		/* fb for overlay */
 	igt_fb_t rect_fb[N_MPO_TEST_RECT_FB]; 	/* rectangle fbs for primary, emulate as video playback region */
 	igt_fb_t ref_fb;	/* reference fb */
 	igt_fb_t *flip_fb;
@@ -341,28 +346,28 @@ static void run_check_psr_su_mpo(data_t *data)
 	 * thus the overlay fb be initialized w/ ARGB pixel format to support blending
 	 */
 	igt_create_color_fb(data->fd, data->w, data->h, DRM_FORMAT_ARGB8888, DRM_FORMAT_MOD_LINEAR,
-			    1.0, 1.0, 1.0, &ov_fb);
+			    1.0, 1.0, 1.0, &data->ov_fb[0]);
 	for (int i = 0; i < N_MPO_TEST_RECT_FB; ++i) {
 		cairo_t *cr;
 		int strip_w = data->w / (2 * N_MPO_TEST_RECT_FB);
 
-		igt_create_fb(data->fd, data->w / 2, data->h / 2, DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR,
+		igt_create_fb(data->fd, data->pfb_w, data->pfb_h, DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR,
 			      &rect_fb[i]);
 		cr = igt_get_cairo_ctx(data->fd, &rect_fb[i]);
 		igt_assert_f(cr, "Failed to get cairo context\n");
 		/* background in black */
-		igt_paint_color(cr, 0, 0, data->w / 2, data->h / 2, .0, .0, .0);
+		igt_paint_color(cr, 0, 0, data->pfb_w, data->pfb_h, .0, .0, .0);
 		/* foreground (megenta strip) */
-		igt_paint_color(cr, i * strip_w, 0, strip_w, data->h / 2, 1.0, .0, 1.0);
+		igt_paint_color(cr, i * strip_w, 0, strip_w, data->pfb_h, 1.0, .0, 1.0);
 
 		igt_put_cairo_ctx(cr);
 	}
 
 	/* tie fbs to planes and set position/size/blending */
-	igt_plane_set_fb(data->overlay, &ov_fb);
+	igt_plane_set_fb(data->overlay, &data->ov_fb[0]);
 	igt_plane_set_fb(data->primary, &rect_fb[0]);
 	igt_plane_set_position(data->primary, 0, 0);
-	igt_plane_set_size(data->primary, data->w / 2, data->h / 2);
+	igt_plane_set_size(data->primary, data->pfb_w, data->pfb_h);
 
 	/**
 	 * adjust alpha for vpb (primary plane) region in overlay
@@ -375,7 +380,7 @@ static void run_check_psr_su_mpo(data_t *data)
 	 * of each pixel in overlay corresponding to primary plane position/size
 	 * to be zero.
 	 */
-	draw_color_alpha(&ov_fb, 0, 0, data->w / 2, data->h / 2, .5, .5, .5, .0);
+	draw_color_alpha(&data->ov_fb[0], 0, 0, data->pfb_w, data->pfb_h, .5, .5, .5, .0);
 
 	igt_output_set_pipe(data->output, data->pipe_id);
 	igt_display_commit_atomic(&data->display, 0, NULL);
@@ -398,7 +403,7 @@ static void run_check_psr_su_mpo(data_t *data)
 
 	/* fini */
 	igt_remove_fb(data->fd, &ref_fb);
-	igt_remove_fb(data->fd, &ov_fb);
+	igt_remove_fb(data->fd, &data->ov_fb[0]);
 	for (int i = 0; i < N_MPO_TEST_RECT_FB; ++i)
 		igt_remove_fb(data->fd, &rect_fb[i]);
 	test_fini(data);
@@ -438,17 +443,13 @@ static void panning_rect_fb(data_t *data, igt_fb_t *rect_fb, int rect_w, int rec
 static void run_check_psr_su_ffu(data_t *data)
 {
 	int edp_idx = check_conn_type(data, DRM_MODE_CONNECTOR_eDP);
-	igt_fb_t rect_fb; 	/* rectangle fbs for primary */
 	igt_fb_t ref_fb;	/* reference fb */
-	int pb_w, pb_h;
 
 	/* skip the test run if no eDP sink detected */
 	igt_skip_on_f(edp_idx == -1, "no eDP connector found\n");
 
 	/* init */
 	test_init(data);
-	pb_w = data->w / 2;
-	pb_h = data->h / 2;
 
 	/* run the test i.i.f. eDP panel supports and kernel driver both support PSR-SU  */
 	igt_skip_on(!psr_su_supported(data));
@@ -492,26 +493,26 @@ static void run_check_psr_su_ffu(data_t *data)
 	/* step 1 */
 	igt_create_fb(data->fd, data->w, data->h, DRM_FORMAT_ARGB8888, DRM_FORMAT_MOD_LINEAR, &data->ov_fb[0]);
 	igt_create_fb(data->fd, data->w, data->h, DRM_FORMAT_ARGB8888, DRM_FORMAT_MOD_LINEAR, &data->ov_fb[1]);
-	igt_create_color_fb(data->fd, pb_w, pb_h, DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR,
-			    1.0, .0, 1.0, &rect_fb); /* magenta primary */
+	igt_create_color_fb(data->fd, data->pfb_w, data->pfb_h, DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR,
+			    1.0, .0, 1.0, &data->pm_fb[0]); /* magenta primary */
 
 	/* step 2 & 3 */
-	panning_rect_fb(data, &rect_fb, pb_w, pb_h, 0, 0);
+	panning_rect_fb(data, &data->pm_fb[0], data->pfb_w, data->pfb_h, 0, 0);
 	sleep(5);
 
 	/* step 4 & 5 */
-	panning_rect_fb(data, &rect_fb, pb_w, pb_h, pb_w / 2, pb_h / 2);
+	panning_rect_fb(data, &data->pm_fb[0], data->pfb_w, data->pfb_h, data->pfb_w / 2, data->pfb_h / 2);
 	sleep(5);
 
 	/* step 6 & 7 */
-	panning_rect_fb(data, &rect_fb, pb_w, pb_h, pb_w, pb_h);
+	panning_rect_fb(data, &data->pm_fb[0], data->pfb_w, data->pfb_h, data->pfb_w, data->pfb_h);
 	sleep(5);
 
 	/* fini */
 	igt_remove_fb(data->fd, &ref_fb);
 	igt_remove_fb(data->fd, &data->ov_fb[0]);
 	igt_remove_fb(data->fd, &data->ov_fb[1]);
-	igt_remove_fb(data->fd, &rect_fb);
+	igt_remove_fb(data->fd, &data->pm_fb[0]);
 	test_fini(data);
 }
 
@@ -556,21 +557,15 @@ static void test_cursor_movement(data_t *data, int iters, int cs_size, enum curs
 static void run_check_psr_su_cursor(data_t *data, bool test_mpo)
 {
 	int edp_idx = check_conn_type(data, DRM_MODE_CONNECTOR_eDP);
-	igt_fb_t cs_fb;		/* cursor FB */
 	const int cs_size = 128;
 	const int delay_sec = 5; /* seconds */
 	int frame_rate = 0;
-	int pb_w, pb_h, ob_w, ob_h;
 
 	igt_skip_on_f(edp_idx == -1, "no eDP connector found\n");
 
 	test_init(data);
 	igt_skip_on(!psr_su_supported(data));
 
-	ob_w = data->w;
-	ob_h = data->h;
-	pb_w = data->w / 2;
-	pb_h = data->h / 2;
 	frame_rate = data->mode->vrefresh;
 
 	/*
@@ -578,26 +573,26 @@ static void run_check_psr_su_cursor(data_t *data, bool test_mpo)
 	 * - create primary FBs of quarter screen size of different colors (blue and green)
 	 * - create overlay FB of screen size of white color (default alpha 1.0)
 	 */
-	igt_create_color_fb(data->fd, pb_w, pb_h, DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR,
+	igt_create_color_fb(data->fd, data->pfb_w, data->pfb_h, DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR,
 			    .0, .0, 1.0, &data->pm_fb[0]);
-	igt_create_color_fb(data->fd, pb_w, pb_h, DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR,
+	igt_create_color_fb(data->fd, data->pfb_w, data->pfb_h, DRM_FORMAT_XRGB8888, DRM_FORMAT_MOD_LINEAR,
 			    .0, 1.0, .0, &data->pm_fb[1]);
-	igt_create_color_fb(data->fd, ob_w, ob_h, DRM_FORMAT_ARGB8888, DRM_FORMAT_MOD_LINEAR,
+	igt_create_color_fb(data->fd, data->ofb_w, data->ofb_h, DRM_FORMAT_ARGB8888, DRM_FORMAT_MOD_LINEAR,
 			    1.0, 1.0, 1.0, &data->ov_fb[0]);
 
 	/* cursor FB creation, draw cursor pattern/set alpha regions */
-	igt_create_fb(data->fd, cs_size, cs_size, DRM_FORMAT_ARGB8888, DRM_FORMAT_MOD_LINEAR, &cs_fb);
-	draw_color_cursor(&cs_fb, cs_size, 1.0, .0, 1.0);
+	igt_create_fb(data->fd, cs_size, cs_size, DRM_FORMAT_ARGB8888, DRM_FORMAT_MOD_LINEAR, &data->cs_fb);
+	draw_color_cursor(&data->cs_fb, cs_size, 1.0, .0, 1.0);
 
 	/*
 	 * panning the primary plane at the top-left of screen
 	 * set alpha region in overlay plane and set alpha to 0.0 to show primary plane
 	 * set cursor plane and starting from position of (0, 0)
 	 */ 
-	draw_color_alpha(&data->ov_fb[0], 0, 0, pb_w, pb_h, 1.0, 1.0, 1.0, .0);
+	draw_color_alpha(&data->ov_fb[0], 0, 0, data->pfb_w, data->pfb_h, 1.0, 1.0, 1.0, .0);
 	igt_plane_set_fb(data->primary, &data->pm_fb[0]);
 	igt_plane_set_fb(data->overlay, &data->ov_fb[0]);
-	igt_plane_set_fb(data->cursor, &cs_fb);
+	igt_plane_set_fb(data->cursor, &data->cs_fb);
 	igt_plane_set_position(data->cursor, 0, 0);
 
 	igt_output_set_pipe(data->output, data->pipe_id);
@@ -624,7 +619,7 @@ static void run_check_psr_su_cursor(data_t *data, bool test_mpo)
 
 	igt_remove_fb(data->fd, &data->pm_fb[0]);
 	igt_remove_fb(data->fd, &data->pm_fb[1]);
-	igt_remove_fb(data->fd, &cs_fb);
+	igt_remove_fb(data->fd, &data->cs_fb);
 	igt_remove_fb(data->fd, &data->ov_fb[0]);
 	test_fini(data);
 }
-- 
2.25.1



More information about the igt-dev mailing list