[igt-dev] [PATCH i-g-t 5/5] tests/amdgpu: fix gamma test on plane and crtc

Rodrigo Siqueira Rodrigo.Siqueira at amd.com
Mon Nov 29 19:56:59 UTC 2021


From: Stylon Wang <stylon.wang at amd.com>

[Why]
YUV formats are failing max degamma tests because black is not really
black. Color bar pattern are causing sub-sampling errors.

[How]
Use proper max gamma with pure color pattern. Fix typo and remove
un-used code.

Signed-off-by: Stylon Wang <stylon.wang at amd.com>
---
 tests/amdgpu/amd_color.c | 71 ++++++++++++++++++----------------------
 1 file changed, 32 insertions(+), 39 deletions(-)

diff --git a/tests/amdgpu/amd_color.c b/tests/amdgpu/amd_color.c
index 2e1f3d84..3504c53a 100644
--- a/tests/amdgpu/amd_color.c
+++ b/tests/amdgpu/amd_color.c
@@ -43,7 +43,6 @@ typedef struct color {
 typedef struct data {
 	igt_display_t display;
 	igt_plane_t *primary;
-	igt_plane_t *overlay;
 	igt_output_t *output;
 	igt_pipe_t *pipe;
 	igt_pipe_crc_t *pipe_crc;
@@ -132,13 +131,21 @@ static void lut_gen_regamma_srgb(lut_t *lut, uint16_t mask)
 	}
 }
 
-/* Generates the maximum curve gamma LUT. */
-static void lut_gen_max(lut_t *lut, uint16_t mask)
+static void lut_gen_max(lut_t *lut)
 {
 	uint32_t i;
+	uint32_t threshold = (uint32_t)(0.25 * lut->size);
 
-	for (i = 0; i < lut->size; ++i) {
-		uint32_t v = i? (0xffff & mask) : 0;
+	for (i = 0; i < threshold; ++i) {
+		uint32_t v = 0;
+
+		lut->data[i].red = v;
+		lut->data[i].blue = v;
+		lut->data[i].green = v;
+	}
+
+	for (i = threshold; i < lut->size; ++i) {
+		uint32_t v = 0xffff;
 
 		lut->data[i].red = v;
 		lut->data[i].blue = v;
@@ -264,8 +271,6 @@ static void test_init(data_t *data)
 
 	data->primary =
 		igt_pipe_get_plane_type(data->pipe, DRM_PLANE_TYPE_PRIMARY);
-	data->overlay =
-		igt_pipe_get_plane_type_index(data->pipe, DRM_PLANE_TYPE_OVERLAY, 0);
 
 	data->pipe_crc = igt_pipe_crc_new(data->fd, data->pipe_id,
 					  INTEL_PIPE_CRC_SOURCE_AUTO);
@@ -699,48 +704,33 @@ static void test_plane_ctm_mixed_mapping(data_t *data)
 	igt_remove_fb(data->fd, &rfb);
 }
 
-/* draw color bars */
-static void draw_fill_color_bar(igt_fb_t *fb, int w, int h)
+/* draw color with half the brightness*/
+static void draw_fill_color_half(igt_fb_t *fb, int w, int h)
 {
 	cairo_t *cr;
-	int gh = h/3;
-	int rh = h-gh*2;
 
 	cr = igt_get_cairo_ctx(fb->fd, fb);
-	igt_paint_color(cr, 0, 0, w, gh, 1.0, 0.0, 0.0);
-	igt_paint_color(cr, 0, gh, w, gh, 0.0, 1.0, 0.0);
-	igt_paint_color(cr, 0, gh*2, w, rh, 0.0, 0.0, 1.0);
+	igt_paint_color(cr, 0, 0, w, h, 0.5, 0.5, 0.5);
 	igt_put_cairo_ctx(cr);
 }
 
-/* draw color bars with half the brightness*/
-static void draw_fill_color_bar_half(igt_fb_t *fb, int w, int h)
+/* draw color in gradient without all-black pixels */
+static void draw_gradient_color(igt_fb_t *fb, int w, int h)
 {
 	cairo_t *cr;
-	int gh = h/3;
-	int rh = h-gh*2;
 
 	cr = igt_get_cairo_ctx(fb->fd, fb);
-	igt_paint_color(cr, 0, 0, w, gh, 0.5, 0.0, 0.0);
-	igt_paint_color(cr, 0, gh, w, gh, 0.0, 0.5, 0.0);
-	igt_paint_color(cr, 0, gh*2, w, rh, 0.0, 0.0, 0.5);
+	igt_paint_color_gradient_range(cr, 0, 0, w, h, 1.0, 1.0, 1.0,
+				       128.0/255, 128.0/255, 128.0/255);
 	igt_put_cairo_ctx(cr);
 }
 
-/* draw color bars in gradient without all-black pixels */
-static void draw_gradient_color_bar(igt_fb_t *fb, int w, int h)
+static void draw_fill_color(igt_fb_t *fb)
 {
 	cairo_t *cr;
-	int gh = h/3;
-	int rh = h-gh*2;
 
 	cr = igt_get_cairo_ctx(fb->fd, fb);
-	igt_paint_color_gradient_range(cr, 0, 0, w, gh, 1.0, 0.0, 0.0,
-				       1.0/255, 0.0, 0.0);
-	igt_paint_color_gradient_range(cr, 0, gh, w, gh, 0.0, 1.0, 0.0,
-				       0.0, 1.0/255, 0.0);
-	igt_paint_color_gradient_range(cr, 0, gh*2, w, rh, 0.0, 0.0, 1.0,
-				       0.0, 0.0, 1.0/255);
+	igt_paint_color(cr, 0, 0, fb->width, fb->height, 1.0, 1.0, 1.0);
 	igt_put_cairo_ctx(cr);
 }
 
@@ -754,12 +744,12 @@ static void test_plane_max_degamma(data_t *data)
 	test_init(data);
 
 	lut_init(&lut_max, data->plane_degamma_lut_size);
-	lut_gen_max(&lut_max, 0xffff);
+	lut_gen_max(&lut_max);
 
 	igt_create_fb(data->fd, data->w, data->h, DRM_FORMAT_XRGB8888, 0, &rfb);
-	draw_fill_color_bar(&rfb, data->w, data->h);
+	draw_fill_color(&rfb);
 	igt_create_fb(data->fd, data->w, data->h, DRM_FORMAT_XRGB8888, 0, &afb);
-	draw_gradient_color_bar(&afb, data->w, data->h);
+	draw_gradient_color(&afb, data->w, data->h);
 
 	igt_info("Reference image: max degamma\n");
 	igt_plane_set_fb(data->primary, &rfb);
@@ -775,6 +765,9 @@ static void test_plane_max_degamma(data_t *data)
 
 	igt_assert_crc_equal(&ref_crc, &new_crc);
 
+	set_plane_degamma_lut(data, NULL);
+	igt_display_commit2(display, COMMIT_ATOMIC);
+
 	test_fini(data);
 	igt_remove_fb(data->fd, &rfb);
 	igt_remove_fb(data->fd, &afb);
@@ -798,15 +791,15 @@ static bool test_plane_crtc_gamma(data_t *data, uint32_t format, igt_crc_t ref_c
 		 kmstest_pipe_name(data->pipe_id), data->primary->index);
 
 	lut_init(&lut_max, data->plane_degamma_lut_size);
-	lut_gen_max(&lut_max, 0xffff);
-	lut_init(&lut_half, data->plane_degamma_lut_size);
+	lut_gen_max(&lut_max);
+	lut_init(&lut_half, data->regamma_lut_size);
 	lut_gen_half(&lut_half, 0xffff);
 
 	igt_create_fb_with_bo_size(data->fd, data->w, data->h,
 				   format, 0,
 				   e, r,
 				   &afb, 0, 0);
-	draw_gradient_color_bar(&afb, data->w, data->h);
+	draw_gradient_color(&afb, data->w, data->h);
 
 	igt_plane_set_fb(data->primary, &afb);
 	set_plane_degamma_lut(data, &lut_max);
@@ -840,7 +833,7 @@ static void test_plane_crtc_gamma_formats(data_t *data)
 
 	/* draw test pattern and take CRC as reference */
 	igt_create_fb(data->fd, data->w, data->h, DRM_FORMAT_XRGB8888, 0, &rfb);
-	draw_fill_color_bar_half(&rfb, data->w, data->h);
+	draw_fill_color_half(&rfb, data->w, data->h);
 	igt_plane_set_fb(data->primary, &rfb);
 	set_plane_degamma_lut(data, NULL);
 	set_regamma_lut(data, NULL);
@@ -852,7 +845,7 @@ static void test_plane_crtc_gamma_formats(data_t *data)
 	/* test on all supported formats */
 	for (i = plane->format_mod_count-1; i >= 0; i--) {
 		if (!igt_fb_supported_format(plane->formats[i]))
-				continue;
+			continue;
 		result &= test_plane_crtc_gamma(data,  plane->formats[i], ref_crc);
 	}
 
-- 
2.25.1



More information about the igt-dev mailing list