Thread (97 messages) 97 messages, 8 authors, 2021-07-14

Re: [igt-dev] [PATCH i-g-t] tests/kms_plane_alpha_blend: Limit pipe output to 8bpc for coverage-vs-premult-vs-constant

From: Srinivas, Vidya <hidden>
Date: 2021-06-19 11:41:32

Thank you so much Juha-Pekka. The moment I add back gray fb, CRC again fails :(

Regards
Vidya

-----Original Message-----
From: Juha-Pekka Heikkilä <redacted> 
Sent: Saturday, June 19, 2021 2:51 PM
To: Srinivas, Vidya <redacted>; igt-dev@lists.freedesktop.org
Cc: Shankar, Uma <redacted>
Subject: Re: [PATCH i-g-t] tests/kms_plane_alpha_blend: Limit pipe output to 8bpc for coverage-vs-premult-vs-constant

Hi Vidya

Vidya Srinivas kirjoitti 19.6.2021 klo 11.08:
quoted hunk ↗ jump to hunk
Few Gen11 systems report CRC mismatch with higher alpha values if 
primary plane is enabled. So in order to get the coverage vs. premult 
vs. constant crc to match use legacy LUT to limit pipe output to 8bpc 
for subtest coverage-vs-premult-vs-constant. Similar thing is done in kms_flip_scaled_crc.

Signed-off-by: Vidya Srinivas <redacted>
---
  tests/kms_plane_alpha_blend.c | 39 ++++++++++++++++++++++++++++++++++++---
  1 file changed, 36 insertions(+), 3 deletions(-)
diff --git a/tests/kms_plane_alpha_blend.c 
b/tests/kms_plane_alpha_blend.c index a37cb27c7d62..1e20d9b0778c 
100644
--- a/tests/kms_plane_alpha_blend.c
+++ b/tests/kms_plane_alpha_blend.c
@@ -442,20 +442,52 @@ static void coverage_7efc(data_t *data, enum pipe pipe, igt_plane_t *plane)
  	igt_pipe_crc_stop(data->pipe_crc);
  }
  
+static void set_lut(data_t *data, enum pipe pipe) {
+	igt_pipe_t *pipe_obj = &data->display.pipes[pipe];
+	struct drm_color_lut *lut;
+	drmModeCrtc *crtc;
+	int i, lut_size;
+
+	crtc = drmModeGetCrtc(data->gfx_fd, pipe_obj->crtc_id);
+	lut_size = crtc->gamma_size;
+	drmModeFreeCrtc(crtc);
+	lut = malloc(sizeof(lut[0]) * lut_size);
+	for (i = 0; i < lut_size; i++) {
+		uint16_t v  = (i * 0xffff / (lut_size - 1)) & 0xff00;
+		lut[i].red = v;
+		lut[i].green = v;
+		lut[i].blue = v;
+	}
+	igt_pipe_obj_replace_prop_blob(pipe_obj, IGT_CRTC_GAMMA_LUT,
+				       lut, sizeof(lut[0]) * lut_size);
+	free(lut);
+}
+
+static void clear_lut(data_t *data, enum pipe pipe) {
+	igt_pipe_t *pipe_obj = &data->display.pipes[pipe];
+
+	igt_pipe_obj_set_prop_value(pipe_obj, IGT_CRTC_GAMMA_LUT, 0); }
+
  static void coverage_premult_constant(data_t *data, enum pipe pipe, igt_plane_t *plane)
  {
  	igt_display_t *display = &data->display;
  	igt_crc_t ref_crc = {}, crc = {};
+	int i;
I didn't notice i variable being used
  
  	/* Set a background color on the primary fb for testing */
-	if (plane->type != DRM_PLANE_TYPE_PRIMARY)
-		igt_plane_set_fb(igt_pipe_get_plane_type(&display->pipes[pipe], DRM_PLANE_TYPE_PRIMARY), &data->gray_fb);
^^
now gray fb background is missing from the test.
+	if (plane->type != DRM_PLANE_TYPE_PRIMARY) {
+		set_lut(data, pipe); > +		igt_display_commit_atomic(&data->display, 
DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
+	}
  
  	igt_plane_set_prop_enum(plane, IGT_PLANE_PIXEL_BLEND_MODE, "Coverage");
  	igt_plane_set_fb(plane, &data->argb_fb_cov_7e);
  	igt_display_commit2(display, COMMIT_ATOMIC);
  	igt_pipe_crc_start(data->pipe_crc);
-	igt_pipe_crc_get_single(data->pipe_crc, &ref_crc);
+	igt_pipe_crc_get_current(display->drm_fd, data->pipe_crc, &ref_crc);
  
  	igt_plane_set_prop_enum(plane, IGT_PLANE_PIXEL_BLEND_MODE, "Pre-multiplied");
  	igt_plane_set_fb(plane, &data->argb_fb_7e); @@ -470,6 +502,7 @@ 
static void coverage_premult_constant(data_t *data, enum pipe pipe, igt_plane_t
  	igt_pipe_crc_get_current(display->drm_fd, data->pipe_crc, &crc);
  	igt_assert_crc_equal(&ref_crc, &crc);
  
+	clear_lut(data, pipe);
You'll need to do commit clearing gamma lut.
  	igt_pipe_crc_stop(data->pipe_crc);
  }
  
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help