All of lore.kernel.org
 help / color / mirror / Atom feed
* [igt-dev] [PATCH i-g-t v3 0/7] tests/kms_color: 3D LUT tests
@ 2021-09-03 16:27 Ville Syrjala
  2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 1/7] tests/kms_color_chamelium: Remove invalid LUT size tests Ville Syrjala
                   ` (9 more replies)
  0 siblings, 10 replies; 19+ messages in thread
From: Ville Syrjala @ 2021-09-03 16:27 UTC (permalink / raw)
  To: igt-dev; +Cc: Bhanuprakash Modem

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Updated set of 3D LUT tests and associated refactoring/fixes.

Cc: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>

Ville Syrjälä (7):
  tests/kms_color_chamelium: Remove invalid LUT size tests
  tests/kms_color: Refactor invalid LUT size tests
  tests/kms_color: Store r/g/b separately for LUT color tests
  tests/kms_color: Pass pipe to invalid LUT size tests
  tests/kms_color: Run each subtest only for a single connector
  lib/kms: Add GAMMA_LUT_3D support
  tests/kms_color: Add GAMMA_LUT_3D tests

 lib/igt_kms.c               |   5 +
 lib/igt_kms.h               |   2 +
 tests/kms_color.c           | 782 +++++++++++++++++++++---------------
 tests/kms_color_chamelium.c |  11 -
 tests/kms_color_helper.c    | 181 +++++----
 tests/kms_color_helper.h    |  27 +-
 6 files changed, 587 insertions(+), 421 deletions(-)

-- 
2.31.1

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [igt-dev] [PATCH i-g-t v3 1/7] tests/kms_color_chamelium: Remove invalid LUT size tests
  2021-09-03 16:27 [igt-dev] [PATCH i-g-t v3 0/7] tests/kms_color: 3D LUT tests Ville Syrjala
@ 2021-09-03 16:27 ` Ville Syrjala
  2021-09-12 15:30   ` Modem, Bhanuprakash
  2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 2/7] tests/kms_color: Refactor " Ville Syrjala
                   ` (8 subsequent siblings)
  9 siblings, 1 reply; 19+ messages in thread
From: Ville Syrjala @ 2021-09-03 16:27 UTC (permalink / raw)
  To: igt-dev; +Cc: Bhanuprakash Modem

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

There is zero point in duplicating the invalid LUT size tests
in the chamelium test. Get rid of them.

Cc: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/kms_color_chamelium.c | 11 -----------
 1 file changed, 11 deletions(-)

diff --git a/tests/kms_color_chamelium.c b/tests/kms_color_chamelium.c
index bc4356bfab6a..97741b9c968e 100644
--- a/tests/kms_color_chamelium.c
+++ b/tests/kms_color_chamelium.c
@@ -752,17 +752,6 @@ igt_main
 	for_each_pipe_static(pipe)
 		igt_subtest_group
 			run_tests_for_pipe(&data, pipe);
-	igt_describe("Negative test case gamma lut size");
-	igt_subtest_f("pipe-invalid-gamma-lut-sizes")
-		invalid_gamma_lut_sizes(&data);
-
-	igt_describe("Negative test case degamma lut size");
-	igt_subtest_f("pipe-invalid-degamma-lut-sizes")
-		invalid_degamma_lut_sizes(&data);
-
-	igt_describe("Negative test case ctm matrix size");
-	igt_subtest_f("pipe-invalid-ctm-matrix-sizes")
-		invalid_ctm_matrix_sizes(&data);
 
 	igt_fixture {
 		igt_display_fini(&data.display);
-- 
2.31.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [igt-dev] [PATCH i-g-t v3 2/7] tests/kms_color: Refactor invalid LUT size tests
  2021-09-03 16:27 [igt-dev] [PATCH i-g-t v3 0/7] tests/kms_color: 3D LUT tests Ville Syrjala
  2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 1/7] tests/kms_color_chamelium: Remove invalid LUT size tests Ville Syrjala
@ 2021-09-03 16:27 ` Ville Syrjala
  2021-09-06  6:37   ` Modem, Bhanuprakash
  2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 3/7] tests/kms_color: Store r/g/b separately for LUT color tests Ville Syrjala
                   ` (7 subsequent siblings)
  9 siblings, 1 reply; 19+ messages in thread
From: Ville Syrjala @ 2021-09-03 16:27 UTC (permalink / raw)
  To: igt-dev; +Cc: Bhanuprakash Modem

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Reuse the same code for all invalid LUT size tests.

v2: Drop the pointless return statements in void functions

Cc: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/kms_color_helper.c | 81 +++++++++++++---------------------------
 1 file changed, 26 insertions(+), 55 deletions(-)

diff --git a/tests/kms_color_helper.c b/tests/kms_color_helper.c
index 5f223a88129f..68fa5f0e42ea 100644
--- a/tests/kms_color_helper.c
+++ b/tests/kms_color_helper.c
@@ -277,77 +277,48 @@ pipe_set_property_blob(igt_pipe_t *pipe,
 				       COMMIT_ATOMIC : COMMIT_LEGACY);
 }
 
-void
-invalid_gamma_lut_sizes(data_t *data)
+static void
+invalid_lut_sizes(data_t *data, enum igt_atomic_crtc_properties prop, int size)
 {
 	igt_display_t *display = &data->display;
 	igt_pipe_t *pipe = &display->pipes[0];
-	size_t gamma_lut_size = data->gamma_lut_size *
-				sizeof(struct drm_color_lut);
-	struct drm_color_lut *gamma_lut;
+	struct drm_color_lut *lut;
+	size_t lut_size = size * sizeof(lut[0]);
 
-	igt_require(igt_pipe_obj_has_prop(pipe, IGT_CRTC_GAMMA_LUT));
+	igt_require(igt_pipe_obj_has_prop(pipe, prop));
 
-	gamma_lut = malloc(gamma_lut_size * 2);
+	lut = malloc(lut_size * 2);
 
 	igt_display_commit2(display,
 			    display->is_atomic ?
 			    COMMIT_ATOMIC : COMMIT_LEGACY);
 
-	igt_assert_eq(pipe_set_property_blob(pipe, IGT_CRTC_GAMMA_LUT,
-					     gamma_lut, 1), -EINVAL);
-	igt_assert_eq(pipe_set_property_blob(pipe, IGT_CRTC_GAMMA_LUT,
-					     gamma_lut, gamma_lut_size + 1),
-					     -EINVAL);
-	igt_assert_eq(pipe_set_property_blob(pipe, IGT_CRTC_GAMMA_LUT,
-					     gamma_lut, gamma_lut_size - 1),
-					     -EINVAL);
-	igt_assert_eq(pipe_set_property_blob(pipe, IGT_CRTC_GAMMA_LUT,
-					     gamma_lut, gamma_lut_size +
-					     sizeof(struct drm_color_lut)),
-					     -EINVAL);
-	igt_assert_eq(pipe_set_property_blob_id(pipe, IGT_CRTC_GAMMA_LUT,
-		      pipe->crtc_id), -EINVAL);
-	igt_assert_eq(pipe_set_property_blob_id(pipe, IGT_CRTC_GAMMA_LUT,
-		      4096 * 4096), -EINVAL);
+	igt_assert_eq(pipe_set_property_blob(pipe, prop, lut,
+					     1), -EINVAL);
+	igt_assert_eq(pipe_set_property_blob(pipe, prop, lut,
+					     lut_size + 1), -EINVAL);
+	igt_assert_eq(pipe_set_property_blob(pipe, prop, lut,
+					     lut_size - 1), -EINVAL);
+	igt_assert_eq(pipe_set_property_blob(pipe, prop, lut,
+					     lut_size + sizeof(struct drm_color_lut)), -EINVAL);
+	igt_assert_eq(pipe_set_property_blob_id(pipe, prop,
+						pipe->crtc_id), -EINVAL);
+	igt_assert_eq(pipe_set_property_blob_id(pipe, prop,
+						4096 * 4096), -EINVAL);
 
-	free(gamma_lut);
+	free(lut);
+}
+
+void
+invalid_gamma_lut_sizes(data_t *data)
+{
+	invalid_lut_sizes(data, IGT_CRTC_GAMMA_LUT, data->gamma_lut_size);
 }
 
 void
 invalid_degamma_lut_sizes(data_t *data)
 {
-	igt_display_t *display = &data->display;
-	igt_pipe_t *pipe = &display->pipes[0];
-	size_t degamma_lut_size = data->degamma_lut_size *
-				  sizeof(struct drm_color_lut);
-	struct drm_color_lut *degamma_lut;
-
-	igt_require(igt_pipe_obj_has_prop(pipe, IGT_CRTC_DEGAMMA_LUT));
-
-	degamma_lut = malloc(degamma_lut_size * 2);
-
-	igt_display_commit2(display, display->is_atomic ?
-			    COMMIT_ATOMIC : COMMIT_LEGACY);
-
-	igt_assert_eq(pipe_set_property_blob(pipe, IGT_CRTC_DEGAMMA_LUT,
-					     degamma_lut, 1), -EINVAL);
-	igt_assert_eq(pipe_set_property_blob(pipe, IGT_CRTC_DEGAMMA_LUT,
-					     degamma_lut, degamma_lut_size + 1),
-					     -EINVAL);
-	igt_assert_eq(pipe_set_property_blob(pipe, IGT_CRTC_DEGAMMA_LUT,
-					     degamma_lut, degamma_lut_size - 1),
-					     -EINVAL);
-	igt_assert_eq(pipe_set_property_blob(pipe, IGT_CRTC_DEGAMMA_LUT,
-					     degamma_lut, degamma_lut_size +
-					     sizeof(struct drm_color_lut)),
-					     -EINVAL);
-	igt_assert_eq(pipe_set_property_blob_id(pipe, IGT_CRTC_DEGAMMA_LUT,
-						pipe->crtc_id), -EINVAL);
-	igt_assert_eq(pipe_set_property_blob_id(pipe, IGT_CRTC_DEGAMMA_LUT,
-						4096 * 4096), -EINVAL);
-
-	free(degamma_lut);
+	invalid_lut_sizes(data, IGT_CRTC_DEGAMMA_LUT, data->degamma_lut_size);
 }
 
 void invalid_ctm_matrix_sizes(data_t *data)
-- 
2.31.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [igt-dev] [PATCH i-g-t v3 3/7] tests/kms_color: Store r/g/b separately for LUT color tests
  2021-09-03 16:27 [igt-dev] [PATCH i-g-t v3 0/7] tests/kms_color: 3D LUT tests Ville Syrjala
  2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 1/7] tests/kms_color_chamelium: Remove invalid LUT size tests Ville Syrjala
  2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 2/7] tests/kms_color: Refactor " Ville Syrjala
@ 2021-09-03 16:27 ` Ville Syrjala
  2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 4/7] tests/kms_color: Pass pipe to invalid LUT size tests Ville Syrjala
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 19+ messages in thread
From: Ville Syrjala @ 2021-09-03 16:27 UTC (permalink / raw)
  To: igt-dev; +Cc: Bhanuprakash Modem

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Store the r/g/b values separately for each LUT. A lot of hw
has a separate 1D LUT for each channel, so with this we can
potentially do more interesting tests. Also needed for 3D LUTs
(if we should ever support them).

Reviewed-by: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/kms_color_helper.c | 29 +++++++++++++++++++----------
 tests/kms_color_helper.h |  2 +-
 2 files changed, 20 insertions(+), 11 deletions(-)

diff --git a/tests/kms_color_helper.c b/tests/kms_color_helper.c
index 68fa5f0e42ea..8b08cdaeea5f 100644
--- a/tests/kms_color_helper.c
+++ b/tests/kms_color_helper.c
@@ -103,14 +103,19 @@ void free_lut(gamma_lut_t *gamma)
 	free(gamma);
 }
 
+static void set_rgb(color_t *coeff, double value)
+{
+	coeff->r = coeff->g = coeff->b = value;
+}
+
 gamma_lut_t *generate_table(int lut_size, double exp)
 {
 	gamma_lut_t *gamma = alloc_lut(lut_size);
 	int i;
 
-	gamma->coeffs[0] = 0.0;
+	set_rgb(&gamma->coeffs[0], 0.0);
 	for (i = 1; i < lut_size; i++)
-		gamma->coeffs[i] = pow(i * 1.0 / (lut_size - 1), exp);
+		set_rgb(&gamma->coeffs[i], pow(i * 1.0 / (lut_size - 1), exp));
 
 	return gamma;
 }
@@ -120,9 +125,9 @@ gamma_lut_t *generate_table_max(int lut_size)
 	gamma_lut_t *gamma = alloc_lut(lut_size);
 	int i;
 
-	gamma->coeffs[0] = 0.0;
+	set_rgb(&gamma->coeffs[0], 0.0);
 	for (i = 1; i < lut_size; i++)
-		gamma->coeffs[i] = 1.0;
+		set_rgb(&gamma->coeffs[i], 1.0);
 
 	return gamma;
 }
@@ -133,7 +138,7 @@ gamma_lut_t *generate_table_zero(int lut_size)
 	int i;
 
 	for (i = 0; i < lut_size; i++)
-		gamma->coeffs[i] = 0.0;
+		set_rgb(&gamma->coeffs[i], 0.0);
 
 	return gamma;
 }
@@ -158,7 +163,9 @@ struct drm_color_lut *coeffs_to_lut(data_t *data,
 	if (IS_CHERRYVIEW(data->devid))
 		lut_size -= 1;
 	for (i = 0; i < lut_size; i++) {
-		uint32_t v = (gamma->coeffs[i] * max_value);
+		uint32_t r = gamma->coeffs[i].r * max_value;
+		uint32_t g = gamma->coeffs[i].g * max_value;
+		uint32_t b = gamma->coeffs[i].b * max_value;
 
 		/*
 		 * Hardware might encode colors on a different number of bits
@@ -166,11 +173,13 @@ struct drm_color_lut *coeffs_to_lut(data_t *data,
 		 * Mask the lower bits not provided by the framebuffer so we
 		 * can do CRC comparisons.
 		 */
-		v &= mask;
+		r &= mask;
+		g &= mask;
+		b &= mask;
 
-		lut[i].red = v;
-		lut[i].green = v;
-		lut[i].blue = v;
+		lut[i].red = r;
+		lut[i].green = g;
+		lut[i].blue = b;
 	}
 
 	if (IS_CHERRYVIEW(data->devid))
diff --git a/tests/kms_color_helper.h b/tests/kms_color_helper.h
index 88890724c2e4..3f49e7cae4c0 100644
--- a/tests/kms_color_helper.h
+++ b/tests/kms_color_helper.h
@@ -61,7 +61,7 @@ typedef struct {
 
 typedef struct {
 	int size;
-	double coeffs[];
+	color_t coeffs[];
 } gamma_lut_t;
 
 void paint_gradient_rectangles(data_t *data,
-- 
2.31.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [igt-dev] [PATCH i-g-t v3 4/7] tests/kms_color: Pass pipe to invalid LUT size tests
  2021-09-03 16:27 [igt-dev] [PATCH i-g-t v3 0/7] tests/kms_color: 3D LUT tests Ville Syrjala
                   ` (2 preceding siblings ...)
  2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 3/7] tests/kms_color: Store r/g/b separately for LUT color tests Ville Syrjala
@ 2021-09-03 16:27 ` Ville Syrjala
  2021-09-06  6:37   ` Modem, Bhanuprakash
  2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 5/7] tests/kms_color: Run each subtest only for a single connector Ville Syrjala
                   ` (5 subsequent siblings)
  9 siblings, 1 reply; 19+ messages in thread
From: Ville Syrjala @ 2021-09-03 16:27 UTC (permalink / raw)
  To: igt-dev; +Cc: Bhanuprakash Modem

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Each pipe can have a different LUT sizes, so run the invalid LUT
size tests once for each pipe.

This also makes sure data->(de)gamma_lut_size are properly initialized
prior to running these subtests.

Cc: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/kms_color.c        | 73 +++++++++++++++++++++++++---------------
 tests/kms_color_helper.c | 17 +++++-----
 tests/kms_color_helper.h |  7 ++--
 3 files changed, 58 insertions(+), 39 deletions(-)

diff --git a/tests/kms_color.c b/tests/kms_color.c
index 9105076aba4f..dabc6963e9e0 100644
--- a/tests/kms_color.c
+++ b/tests/kms_color.c
@@ -638,6 +638,26 @@ static void test_pipe_limited_range_ctm(data_t *data,
 }
 #endif
 
+static void
+prep_pipe(data_t *data, enum pipe p)
+{
+	igt_require_pipe(&data->display, p);
+
+	if (igt_pipe_obj_has_prop(&data->display.pipes[p], IGT_CRTC_DEGAMMA_LUT_SIZE)) {
+		data->degamma_lut_size =
+			igt_pipe_obj_get_prop(&data->display.pipes[p],
+					      IGT_CRTC_DEGAMMA_LUT_SIZE);
+		igt_assert_lt(0, data->degamma_lut_size);
+	}
+
+	if (igt_pipe_obj_has_prop(&data->display.pipes[p], IGT_CRTC_GAMMA_LUT_SIZE)) {
+		data->gamma_lut_size =
+			igt_pipe_obj_get_prop(&data->display.pipes[p],
+					      IGT_CRTC_GAMMA_LUT_SIZE);
+		igt_assert_lt(0, data->gamma_lut_size);
+	}
+}
+
 static void
 run_tests_for_pipe(data_t *data, enum pipe p)
 {
@@ -652,10 +672,10 @@ run_tests_for_pipe(data_t *data, enum pipe p)
 	};
 
 	igt_fixture {
+		prep_pipe(data, p);
+
 		igt_require_pipe_crc(data->drm_fd);
 
-		igt_require_pipe(&data->display, p);
-
 		pipe = &data->display.pipes[p];
 		igt_require(pipe->n_planes >= 0);
 
@@ -665,20 +685,6 @@ run_tests_for_pipe(data_t *data, enum pipe p)
 						  primary->pipe->pipe,
 						  INTEL_PIPE_CRC_SOURCE_AUTO);
 
-		if (igt_pipe_obj_has_prop(&data->display.pipes[p], IGT_CRTC_DEGAMMA_LUT_SIZE)) {
-			data->degamma_lut_size =
-				igt_pipe_obj_get_prop(&data->display.pipes[p],
-						      IGT_CRTC_DEGAMMA_LUT_SIZE);
-			igt_assert_lt(0, data->degamma_lut_size);
-		}
-
-		if (igt_pipe_obj_has_prop(&data->display.pipes[p], IGT_CRTC_GAMMA_LUT_SIZE)) {
-			data->gamma_lut_size =
-				igt_pipe_obj_get_prop(&data->display.pipes[p],
-						      IGT_CRTC_GAMMA_LUT_SIZE);
-			igt_assert_lt(0, data->gamma_lut_size);
-		}
-
 		igt_display_require_output_on_pipe(&data->display, p);
 	}
 
@@ -865,6 +871,25 @@ run_tests_for_pipe(data_t *data, enum pipe p)
 	}
 }
 
+static void
+run_invalid_tests_for_pipe(data_t *data, enum pipe p)
+{
+	igt_fixture
+		prep_pipe(data, p);
+
+	igt_describe("Negative check for invalid gamma lut sizes");
+	igt_subtest_f("pipe-%s-invalid-gamma-lut-sizes", kmstest_pipe_name(p))
+		invalid_gamma_lut_sizes(data, p);
+
+	igt_describe("Negative check for invalid degamma lut sizes");
+	igt_subtest_f("pipe-%s-invalid-degamma-lut-sizes", kmstest_pipe_name(p))
+		invalid_degamma_lut_sizes(data, p);
+
+	igt_describe("Negative check for color tranformation matrix sizes");
+	igt_subtest_f("pipe-%s-invalid-ctm-matrix-sizes", kmstest_pipe_name(p))
+		invalid_ctm_matrix_sizes(data, p);
+}
+
 igt_main
 {
 	data_t data = {};
@@ -879,21 +904,13 @@ igt_main
 		igt_display_require(&data.display, data.drm_fd);
 	}
 
-	for_each_pipe_static(pipe)
+	for_each_pipe_static(pipe) {
 		igt_subtest_group
 			run_tests_for_pipe(&data, pipe);
 
-	igt_describe("Negative check for invalid gamma lut sizes");
-	igt_subtest_f("pipe-invalid-gamma-lut-sizes")
-		invalid_gamma_lut_sizes(&data);
-
-	igt_describe("Negative check for invalid degamma lut sizes");
-	igt_subtest_f("pipe-invalid-degamma-lut-sizes")
-		invalid_degamma_lut_sizes(&data);
-
-	igt_describe("Negative check for color tranformation matrix sizes");
-	igt_subtest_f("pipe-invalid-ctm-matrix-sizes")
-		invalid_ctm_matrix_sizes(&data);
+		igt_subtest_group
+			run_invalid_tests_for_pipe(&data, pipe);
+	}
 
 	igt_fixture {
 		igt_display_fini(&data.display);
diff --git a/tests/kms_color_helper.c b/tests/kms_color_helper.c
index 8b08cdaeea5f..d71e7bb2e6f9 100644
--- a/tests/kms_color_helper.c
+++ b/tests/kms_color_helper.c
@@ -287,10 +287,11 @@ pipe_set_property_blob(igt_pipe_t *pipe,
 }
 
 static void
-invalid_lut_sizes(data_t *data, enum igt_atomic_crtc_properties prop, int size)
+invalid_lut_sizes(data_t *data, enum pipe p,
+		  enum igt_atomic_crtc_properties prop, int size)
 {
 	igt_display_t *display = &data->display;
-	igt_pipe_t *pipe = &display->pipes[0];
+	igt_pipe_t *pipe = &display->pipes[p];
 	struct drm_color_lut *lut;
 	size_t lut_size = size * sizeof(lut[0]);
 
@@ -319,21 +320,21 @@ invalid_lut_sizes(data_t *data, enum igt_atomic_crtc_properties prop, int size)
 }
 
 void
-invalid_gamma_lut_sizes(data_t *data)
+invalid_gamma_lut_sizes(data_t *data, enum pipe p)
 {
-	invalid_lut_sizes(data, IGT_CRTC_GAMMA_LUT, data->gamma_lut_size);
+	invalid_lut_sizes(data, p, IGT_CRTC_GAMMA_LUT, data->gamma_lut_size);
 }
 
 void
-invalid_degamma_lut_sizes(data_t *data)
+invalid_degamma_lut_sizes(data_t *data, enum pipe p)
 {
-	invalid_lut_sizes(data, IGT_CRTC_DEGAMMA_LUT, data->degamma_lut_size);
+	invalid_lut_sizes(data, p, IGT_CRTC_DEGAMMA_LUT, data->degamma_lut_size);
 }
 
-void invalid_ctm_matrix_sizes(data_t *data)
+void invalid_ctm_matrix_sizes(data_t *data, enum pipe p)
 {
 	igt_display_t *display = &data->display;
-	igt_pipe_t *pipe = &display->pipes[0];
+	igt_pipe_t *pipe = &display->pipes[p];
 	void *ptr;
 
 	igt_require(igt_pipe_obj_has_prop(pipe, IGT_CRTC_CTM));
diff --git a/tests/kms_color_helper.h b/tests/kms_color_helper.h
index 3f49e7cae4c0..bb6f0054f388 100644
--- a/tests/kms_color_helper.h
+++ b/tests/kms_color_helper.h
@@ -103,8 +103,9 @@ int pipe_set_property_blob_id(igt_pipe_t *pipe,
 int pipe_set_property_blob(igt_pipe_t *pipe,
 			   enum igt_atomic_crtc_properties prop,
 			   void *ptr, size_t length);
-void invalid_gamma_lut_sizes(data_t *data);
-void invalid_degamma_lut_sizes(data_t *data);
-void invalid_ctm_matrix_sizes(data_t *data);
+void invalid_gamma_lut_sizes(data_t *data, enum pipe p);
+void invalid_degamma_lut_sizes(data_t *data, enum pipe p);
+void invalid_ctm_matrix_sizes(data_t *data, enum pipe p);
+
 #endif
 
-- 
2.31.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [igt-dev] [PATCH i-g-t v3 5/7] tests/kms_color: Run each subtest only for a single connector
  2021-09-03 16:27 [igt-dev] [PATCH i-g-t v3 0/7] tests/kms_color: 3D LUT tests Ville Syrjala
                   ` (3 preceding siblings ...)
  2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 4/7] tests/kms_color: Pass pipe to invalid LUT size tests Ville Syrjala
@ 2021-09-03 16:27 ` Ville Syrjala
  2021-09-06  6:38   ` Modem, Bhanuprakash
  2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 6/7] lib/kms: Add GAMMA_LUT_3D support Ville Syrjala
                   ` (4 subsequent siblings)
  9 siblings, 1 reply; 19+ messages in thread
From: Ville Syrjala @ 2021-09-03 16:27 UTC (permalink / raw)
  To: igt-dev; +Cc: Bhanuprakash Modem

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

For most of the subtests the used connector should not matter,
so run each subtest just for a single connector.

Suggested-by: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/kms_color.c | 612 +++++++++++++++++++++++-----------------------
 1 file changed, 306 insertions(+), 306 deletions(-)

diff --git a/tests/kms_color.c b/tests/kms_color.c
index dabc6963e9e0..d78c7e211511 100644
--- a/tests/kms_color.c
+++ b/tests/kms_color.c
@@ -37,6 +37,10 @@ static void test_pipe_degamma(data_t *data,
 		{ 0.0, 1.0, 0.0 },
 		{ 0.0, 0.0, 1.0 }
 	};
+	drmModeModeInfo *mode;
+	struct igt_fb fb_modeset, fb;
+	igt_crc_t crc_fullgamma, crc_fullcolors;
+	int fb_id, fb_modeset_id;
 
 	igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT));
 	igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_GAMMA_LUT));
@@ -44,69 +48,65 @@ static void test_pipe_degamma(data_t *data,
 	degamma_linear = generate_table(data->degamma_lut_size, 1.0);
 	degamma_full = generate_table_max(data->degamma_lut_size);
 
-	for_each_valid_output_on_pipe(&data->display, primary->pipe->pipe, output) {
-		drmModeModeInfo *mode;
-		struct igt_fb fb_modeset, fb;
-		igt_crc_t crc_fullgamma, crc_fullcolors;
-		int fb_id, fb_modeset_id;
+	output = igt_get_single_output_for_pipe(&data->display, primary->pipe->pipe);
+	igt_require(output);
 
-		igt_output_set_pipe(output, primary->pipe->pipe);
-		mode = igt_output_get_mode(output);
+	igt_output_set_pipe(output, primary->pipe->pipe);
+	mode = igt_output_get_mode(output);
 
-		/* Create a framebuffer at the size of the output. */
-		fb_id = igt_create_fb(data->drm_fd,
+	/* Create a framebuffer at the size of the output. */
+	fb_id = igt_create_fb(data->drm_fd,
+			      mode->hdisplay,
+			      mode->vdisplay,
+			      DRM_FORMAT_XRGB8888,
+			      DRM_FORMAT_MOD_NONE,
+			      &fb);
+	igt_assert(fb_id);
+
+	fb_modeset_id = igt_create_fb(data->drm_fd,
 				      mode->hdisplay,
 				      mode->vdisplay,
 				      DRM_FORMAT_XRGB8888,
 				      DRM_FORMAT_MOD_NONE,
-				      &fb);
-		igt_assert(fb_id);
+				      &fb_modeset);
+	igt_assert(fb_modeset_id);
 
-		fb_modeset_id = igt_create_fb(data->drm_fd,
-					      mode->hdisplay,
-					      mode->vdisplay,
-					      DRM_FORMAT_XRGB8888,
-					      DRM_FORMAT_MOD_NONE,
-					      &fb_modeset);
-		igt_assert(fb_modeset_id);
+	igt_plane_set_fb(primary, &fb_modeset);
+	disable_ctm(primary->pipe);
+	disable_gamma(primary->pipe);
+	set_degamma(data, primary->pipe, degamma_linear);
+	igt_display_commit(&data->display);
 
-		igt_plane_set_fb(primary, &fb_modeset);
-		disable_ctm(primary->pipe);
-		disable_gamma(primary->pipe);
-		set_degamma(data, primary->pipe, degamma_linear);
-		igt_display_commit(&data->display);
+	/* Draw solid colors with linear degamma transformation. */
+	paint_rectangles(data, mode, red_green_blue, &fb);
+	igt_plane_set_fb(primary, &fb);
+	igt_display_commit(&data->display);
+	igt_wait_for_vblank(data->drm_fd,
+			    display->pipes[primary->pipe->pipe].crtc_offset);
+	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
 
-		/* Draw solid colors with linear degamma transformation. */
-		paint_rectangles(data, mode, red_green_blue, &fb);
-		igt_plane_set_fb(primary, &fb);
-		igt_display_commit(&data->display);
-		igt_wait_for_vblank(data->drm_fd,
-				display->pipes[primary->pipe->pipe].crtc_offset);
-		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
+	/* Draw a gradient with degamma LUT to remap all
+	 * values to max red/green/blue.
+	 */
+	paint_gradient_rectangles(data, mode, red_green_blue, &fb);
+	igt_plane_set_fb(primary, &fb);
+	set_degamma(data, primary->pipe, degamma_full);
+	igt_display_commit(&data->display);
+	igt_wait_for_vblank(data->drm_fd,
+			    display->pipes[primary->pipe->pipe].crtc_offset);
+	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
 
-		/* Draw a gradient with degamma LUT to remap all
-		 * values to max red/green/blue.
-		 */
-		paint_gradient_rectangles(data, mode, red_green_blue, &fb);
-		igt_plane_set_fb(primary, &fb);
-		set_degamma(data, primary->pipe, degamma_full);
-		igt_display_commit(&data->display);
-		igt_wait_for_vblank(data->drm_fd,
-				display->pipes[primary->pipe->pipe].crtc_offset);
-		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
+	/* Verify that the CRC of the software computed output is
+	 * equal to the CRC of the degamma LUT transformation output.
+	 */
+	igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
 
-		/* Verify that the CRC of the software computed output is
-		 * equal to the CRC of the degamma LUT transformation output.
-		 */
-		igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
-
-		disable_degamma(primary->pipe);
-		igt_plane_set_fb(primary, NULL);
-		igt_output_set_pipe(output, PIPE_NONE);
-		igt_display_commit(&data->display);
-		igt_remove_fb(data->drm_fd, &fb);
-		igt_remove_fb(data->drm_fd, &fb_modeset);
-	}
+	disable_degamma(primary->pipe);
+	igt_plane_set_fb(primary, NULL);
+	igt_output_set_pipe(output, PIPE_NONE);
+	igt_display_commit(&data->display);
+	igt_remove_fb(data->drm_fd, &fb);
+	igt_remove_fb(data->drm_fd, &fb_modeset);
 
 	free_lut(degamma_linear);
 	free_lut(degamma_full);
@@ -127,73 +127,73 @@ static void test_pipe_gamma(data_t *data,
 		{ 0.0, 1.0, 0.0 },
 		{ 0.0, 0.0, 1.0 }
 	};
+	drmModeModeInfo *mode;
+	struct igt_fb fb_modeset, fb;
+	igt_crc_t crc_fullgamma, crc_fullcolors;
+	int fb_id, fb_modeset_id;
 
 	igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_GAMMA_LUT));
 
 	gamma_full = generate_table_max(data->gamma_lut_size);
 
-	for_each_valid_output_on_pipe(&data->display, primary->pipe->pipe, output) {
-		drmModeModeInfo *mode;
-		struct igt_fb fb_modeset, fb;
-		igt_crc_t crc_fullgamma, crc_fullcolors;
-		int fb_id, fb_modeset_id;
+	output = igt_get_single_output_for_pipe(&data->display, primary->pipe->pipe);
+	igt_require(output);
 
-		igt_output_set_pipe(output, primary->pipe->pipe);
-		mode = igt_output_get_mode(output);
+	igt_output_set_pipe(output, primary->pipe->pipe);
+	mode = igt_output_get_mode(output);
 
-		/* Create a framebuffer at the size of the output. */
-		fb_id = igt_create_fb(data->drm_fd,
+	/* Create a framebuffer at the size of the output. */
+	fb_id = igt_create_fb(data->drm_fd,
+			      mode->hdisplay,
+			      mode->vdisplay,
+			      DRM_FORMAT_XRGB8888,
+			      DRM_FORMAT_MOD_NONE,
+			      &fb);
+	igt_assert(fb_id);
+
+	fb_modeset_id = igt_create_fb(data->drm_fd,
 				      mode->hdisplay,
 				      mode->vdisplay,
 				      DRM_FORMAT_XRGB8888,
 				      DRM_FORMAT_MOD_NONE,
-				      &fb);
-		igt_assert(fb_id);
+				      &fb_modeset);
+	igt_assert(fb_modeset_id);
 
-		fb_modeset_id = igt_create_fb(data->drm_fd,
-					      mode->hdisplay,
-					      mode->vdisplay,
-					      DRM_FORMAT_XRGB8888,
-					      DRM_FORMAT_MOD_NONE,
-					      &fb_modeset);
-		igt_assert(fb_modeset_id);
+	igt_plane_set_fb(primary, &fb_modeset);
+	disable_ctm(primary->pipe);
+	disable_degamma(primary->pipe);
+	set_gamma(data, primary->pipe, gamma_full);
+	igt_display_commit(&data->display);
 
-		igt_plane_set_fb(primary, &fb_modeset);
-		disable_ctm(primary->pipe);
-		disable_degamma(primary->pipe);
-		set_gamma(data, primary->pipe, gamma_full);
-		igt_display_commit(&data->display);
+	/* Draw solid colors with no gamma transformation. */
+	paint_rectangles(data, mode, red_green_blue, &fb);
+	igt_plane_set_fb(primary, &fb);
+	igt_display_commit(&data->display);
+	igt_wait_for_vblank(data->drm_fd,
+			    display->pipes[primary->pipe->pipe].crtc_offset);
+	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
 
-		/* Draw solid colors with no gamma transformation. */
-		paint_rectangles(data, mode, red_green_blue, &fb);
-		igt_plane_set_fb(primary, &fb);
-		igt_display_commit(&data->display);
-		igt_wait_for_vblank(data->drm_fd,
-				display->pipes[primary->pipe->pipe].crtc_offset);
-		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
+	/* Draw a gradient with gamma LUT to remap all values
+	 * to max red/green/blue.
+	 */
+	paint_gradient_rectangles(data, mode, red_green_blue, &fb);
+	igt_plane_set_fb(primary, &fb);
+	igt_display_commit(&data->display);
+	igt_wait_for_vblank(data->drm_fd,
+			    display->pipes[primary->pipe->pipe].crtc_offset);
+	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
 
-		/* Draw a gradient with gamma LUT to remap all values
-		 * to max red/green/blue.
-		 */
-		paint_gradient_rectangles(data, mode, red_green_blue, &fb);
-		igt_plane_set_fb(primary, &fb);
-		igt_display_commit(&data->display);
-		igt_wait_for_vblank(data->drm_fd,
-				display->pipes[primary->pipe->pipe].crtc_offset);
-		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
+	/* Verify that the CRC of the software computed output is
+	 * equal to the CRC of the gamma LUT transformation output.
+	 */
+	igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
 
-		/* Verify that the CRC of the software computed output is
-		 * equal to the CRC of the gamma LUT transformation output.
-		 */
-		igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
-
-		disable_gamma(primary->pipe);
-		igt_plane_set_fb(primary, NULL);
-		igt_output_set_pipe(output, PIPE_NONE);
-		igt_display_commit(&data->display);
-		igt_remove_fb(data->drm_fd, &fb);
-		igt_remove_fb(data->drm_fd, &fb_modeset);
-	}
+	disable_gamma(primary->pipe);
+	igt_plane_set_fb(primary, NULL);
+	igt_output_set_pipe(output, PIPE_NONE);
+	igt_display_commit(&data->display);
+	igt_remove_fb(data->drm_fd, &fb);
+	igt_remove_fb(data->drm_fd, &fb_modeset);
 
 	free_lut(gamma_full);
 }
@@ -216,6 +216,10 @@ static void test_pipe_legacy_gamma(data_t *data,
 	drmModeCrtc *kms_crtc;
 	uint32_t i, legacy_lut_size;
 	uint16_t *red_lut, *green_lut, *blue_lut;
+	drmModeModeInfo *mode;
+	struct igt_fb fb_modeset, fb;
+	igt_crc_t crc_fullgamma, crc_fullcolors;
+	int fb_id, fb_modeset_id;
 
 	kms_crtc = drmModeGetCrtc(data->drm_fd, primary->pipe->crtc_id);
 	legacy_lut_size = kms_crtc->gamma_size;
@@ -225,80 +229,76 @@ static void test_pipe_legacy_gamma(data_t *data,
 	green_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
 	blue_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
 
-	for_each_valid_output_on_pipe(&data->display, primary->pipe->pipe, output) {
-		drmModeModeInfo *mode;
-		struct igt_fb fb_modeset, fb;
-		igt_crc_t crc_fullgamma, crc_fullcolors;
-		int fb_id, fb_modeset_id;
+	output = igt_get_single_output_for_pipe(&data->display, primary->pipe->pipe);
+	igt_require(output);
 
-		igt_output_set_pipe(output, primary->pipe->pipe);
-		mode = igt_output_get_mode(output);
+	igt_output_set_pipe(output, primary->pipe->pipe);
+	mode = igt_output_get_mode(output);
 
-		/* Create a framebuffer at the size of the output. */
-		fb_id = igt_create_fb(data->drm_fd,
+	/* Create a framebuffer at the size of the output. */
+	fb_id = igt_create_fb(data->drm_fd,
+			      mode->hdisplay,
+			      mode->vdisplay,
+			      DRM_FORMAT_XRGB8888,
+			      DRM_FORMAT_MOD_NONE,
+			      &fb);
+	igt_assert(fb_id);
+
+	fb_modeset_id = igt_create_fb(data->drm_fd,
 				      mode->hdisplay,
 				      mode->vdisplay,
 				      DRM_FORMAT_XRGB8888,
 				      DRM_FORMAT_MOD_NONE,
-				      &fb);
-		igt_assert(fb_id);
-
-		fb_modeset_id = igt_create_fb(data->drm_fd,
-					      mode->hdisplay,
-					      mode->vdisplay,
-					      DRM_FORMAT_XRGB8888,
-					      DRM_FORMAT_MOD_NONE,
-					      &fb_modeset);
-		igt_assert(fb_modeset_id);
-
-		igt_plane_set_fb(primary, &fb_modeset);
-		disable_degamma(primary->pipe);
-		disable_gamma(primary->pipe);
-		disable_ctm(primary->pipe);
-		igt_display_commit(&data->display);
-
-		/* Draw solid colors with no gamma transformation. */
-		paint_rectangles(data, mode, red_green_blue, &fb);
-		igt_plane_set_fb(primary, &fb);
-		igt_display_commit(&data->display);
-		igt_wait_for_vblank(data->drm_fd,
-				display->pipes[primary->pipe->pipe].crtc_offset);
-		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
-
-		/* Draw a gradient with gamma LUT to remap all values
-		 * to max red/green/blue.
-		 */
-		paint_gradient_rectangles(data, mode, red_green_blue, &fb);
-		igt_plane_set_fb(primary, &fb);
-
-		red_lut[0] = green_lut[0] = blue_lut[0] = 0;
-		for (i = 1; i < legacy_lut_size; i++)
-			red_lut[i] = green_lut[i] = blue_lut[i] = 0xffff;
-		igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd, primary->pipe->crtc_id,
-						  legacy_lut_size, red_lut, green_lut, blue_lut), 0);
-		igt_display_commit(&data->display);
-		igt_wait_for_vblank(data->drm_fd,
-				display->pipes[primary->pipe->pipe].crtc_offset);
-		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
-
-		/* Verify that the CRC of the software computed output is
-		 * equal to the CRC of the gamma LUT transformation output.
-		 */
-		igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
-
-		/* Reset output. */
-		for (i = 1; i < legacy_lut_size; i++)
-			red_lut[i] = green_lut[i] = blue_lut[i] = i << 8;
-
-		igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd, primary->pipe->crtc_id,
-						  legacy_lut_size, red_lut, green_lut, blue_lut), 0);
-		igt_display_commit(&data->display);
-
-		igt_plane_set_fb(primary, NULL);
-		igt_output_set_pipe(output, PIPE_NONE);
-		igt_remove_fb(data->drm_fd, &fb);
-		igt_remove_fb(data->drm_fd, &fb_modeset);
-	}
+				      &fb_modeset);
+	igt_assert(fb_modeset_id);
+
+	igt_plane_set_fb(primary, &fb_modeset);
+	disable_degamma(primary->pipe);
+	disable_gamma(primary->pipe);
+	disable_ctm(primary->pipe);
+	igt_display_commit(&data->display);
+
+	/* Draw solid colors with no gamma transformation. */
+	paint_rectangles(data, mode, red_green_blue, &fb);
+	igt_plane_set_fb(primary, &fb);
+	igt_display_commit(&data->display);
+	igt_wait_for_vblank(data->drm_fd,
+			    display->pipes[primary->pipe->pipe].crtc_offset);
+	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
+
+	/* Draw a gradient with gamma LUT to remap all values
+	 * to max red/green/blue.
+	 */
+	paint_gradient_rectangles(data, mode, red_green_blue, &fb);
+	igt_plane_set_fb(primary, &fb);
+
+	red_lut[0] = green_lut[0] = blue_lut[0] = 0;
+	for (i = 1; i < legacy_lut_size; i++)
+		red_lut[i] = green_lut[i] = blue_lut[i] = 0xffff;
+	igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd, primary->pipe->crtc_id,
+					  legacy_lut_size, red_lut, green_lut, blue_lut), 0);
+	igt_display_commit(&data->display);
+	igt_wait_for_vblank(data->drm_fd,
+			    display->pipes[primary->pipe->pipe].crtc_offset);
+	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
+
+	/* Verify that the CRC of the software computed output is
+	 * equal to the CRC of the gamma LUT transformation output.
+	 */
+	igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
+
+	/* Reset output. */
+	for (i = 1; i < legacy_lut_size; i++)
+		red_lut[i] = green_lut[i] = blue_lut[i] = i << 8;
+
+	igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd, primary->pipe->crtc_id,
+					  legacy_lut_size, red_lut, green_lut, blue_lut), 0);
+	igt_display_commit(&data->display);
+
+	igt_plane_set_fb(primary, NULL);
+	igt_output_set_pipe(output, PIPE_NONE);
+	igt_remove_fb(data->drm_fd, &fb);
+	igt_remove_fb(data->drm_fd, &fb_modeset);
 
 	free(red_lut);
 	free(green_lut);
@@ -331,93 +331,93 @@ static void test_pipe_legacy_gamma_reset(data_t *data,
 		degamma_linear = generate_table(data->degamma_lut_size, 1.0);
 	gamma_zero = generate_table_zero(data->gamma_lut_size);
 
-	for_each_valid_output_on_pipe(&data->display, primary->pipe->pipe, output) {
-		igt_output_set_pipe(output, primary->pipe->pipe);
+	output = igt_get_single_output_for_pipe(&data->display, primary->pipe->pipe);
+	igt_require(output);
 
-		/* Ensure we have a clean state to start with. */
-		disable_degamma(primary->pipe);
-		disable_ctm(primary->pipe);
-		disable_gamma(primary->pipe);
-		igt_display_commit(&data->display);
+	igt_output_set_pipe(output, primary->pipe->pipe);
 
-		/* Set a degama & gamma LUT and a CTM using the
-		 * properties and verify the content of the
-		 * properties. */
-		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT))
-			set_degamma(data, primary->pipe, degamma_linear);
-		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM))
-			set_ctm(primary->pipe, ctm_identity);
-		set_gamma(data, primary->pipe, gamma_zero);
-		igt_display_commit(&data->display);
+	/* Ensure we have a clean state to start with. */
+	disable_degamma(primary->pipe);
+	disable_ctm(primary->pipe);
+	disable_gamma(primary->pipe);
+	igt_display_commit(&data->display);
 
-		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT)) {
-			blob = get_blob(data, primary->pipe, IGT_CRTC_DEGAMMA_LUT);
-			igt_assert(blob &&
-				   blob->length == (sizeof(struct drm_color_lut) *
-						    data->degamma_lut_size));
-			drmModeFreePropertyBlob(blob);
-		}
+	/* Set a degama & gamma LUT and a CTM using the
+	 * properties and verify the content of the
+	 * properties. */
+	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT))
+		set_degamma(data, primary->pipe, degamma_linear);
+	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM))
+		set_ctm(primary->pipe, ctm_identity);
+	set_gamma(data, primary->pipe, gamma_zero);
+	igt_display_commit(&data->display);
 
-		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM)) {
-			blob = get_blob(data, primary->pipe, IGT_CRTC_CTM);
-			igt_assert(blob &&
-				   blob->length == sizeof(struct drm_color_ctm));
-			drmModeFreePropertyBlob(blob);
-		}
-
-		blob = get_blob(data, primary->pipe, IGT_CRTC_GAMMA_LUT);
+	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT)) {
+		blob = get_blob(data, primary->pipe, IGT_CRTC_DEGAMMA_LUT);
 		igt_assert(blob &&
 			   blob->length == (sizeof(struct drm_color_lut) *
-					    data->gamma_lut_size));
-		lut = (struct drm_color_lut *) blob->data;
-		for (i = 0; i < data->gamma_lut_size; i++)
-			igt_assert(lut[i].red == 0 &&
-				   lut[i].green == 0 &&
-				   lut[i].blue == 0);
+					    data->degamma_lut_size));
 		drmModeFreePropertyBlob(blob);
+	}
 
-		/* Set a gamma LUT using the legacy ioctl and verify
-		 * the content of the GAMMA_LUT property is changed
-		 * and that CTM and DEGAMMA_LUT are empty. */
-		kms_crtc = drmModeGetCrtc(data->drm_fd, primary->pipe->crtc_id);
-		legacy_lut_size = kms_crtc->gamma_size;
-		drmModeFreeCrtc(kms_crtc);
+	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM)) {
+		blob = get_blob(data, primary->pipe, IGT_CRTC_CTM);
+		igt_assert(blob &&
+			   blob->length == sizeof(struct drm_color_ctm));
+		drmModeFreePropertyBlob(blob);
+	}
 
-		red_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
-		green_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
-		blue_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
+	blob = get_blob(data, primary->pipe, IGT_CRTC_GAMMA_LUT);
+	igt_assert(blob &&
+		   blob->length == (sizeof(struct drm_color_lut) *
+				    data->gamma_lut_size));
+	lut = (struct drm_color_lut *) blob->data;
+	for (i = 0; i < data->gamma_lut_size; i++)
+		igt_assert(lut[i].red == 0 &&
+			   lut[i].green == 0 &&
+			   lut[i].blue == 0);
+	drmModeFreePropertyBlob(blob);
 
-		for (i = 0; i < legacy_lut_size; i++)
-			red_lut[i] = green_lut[i] = blue_lut[i] = 0xffff;
+	/* Set a gamma LUT using the legacy ioctl and verify
+	 * the content of the GAMMA_LUT property is changed
+	 * and that CTM and DEGAMMA_LUT are empty. */
+	kms_crtc = drmModeGetCrtc(data->drm_fd, primary->pipe->crtc_id);
+	legacy_lut_size = kms_crtc->gamma_size;
+	drmModeFreeCrtc(kms_crtc);
 
-		igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd,
-						  primary->pipe->crtc_id,
-						  legacy_lut_size,
-						  red_lut, green_lut, blue_lut),
-			      0);
-		igt_display_commit(&data->display);
+	red_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
+	green_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
+	blue_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
 
-		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT))
-			igt_assert(get_blob(data, primary->pipe,
-					    IGT_CRTC_DEGAMMA_LUT) == NULL);
+	for (i = 0; i < legacy_lut_size; i++)
+		red_lut[i] = green_lut[i] = blue_lut[i] = 0xffff;
 
-		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM))
-			igt_assert(get_blob(data, primary->pipe, IGT_CRTC_CTM) == NULL);
+	igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd,
+					  primary->pipe->crtc_id,
+					  legacy_lut_size,
+					  red_lut, green_lut, blue_lut), 0);
+	igt_display_commit(&data->display);
 
-		blob = get_blob(data, primary->pipe, IGT_CRTC_GAMMA_LUT);
-		igt_assert(blob &&
-			   blob->length == (sizeof(struct drm_color_lut) *
-					    legacy_lut_size));
-		lut = (struct drm_color_lut *) blob->data;
-		for (i = 0; i < legacy_lut_size; i++)
-			igt_assert(lut[i].red == 0xffff &&
-				   lut[i].green == 0xffff &&
-				   lut[i].blue == 0xffff);
-		drmModeFreePropertyBlob(blob);
+	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT))
+		igt_assert(get_blob(data, primary->pipe,
+				    IGT_CRTC_DEGAMMA_LUT) == NULL);
 
-		igt_plane_set_fb(primary, NULL);
-		igt_output_set_pipe(output, PIPE_NONE);
-	}
+	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM))
+		igt_assert(get_blob(data, primary->pipe, IGT_CRTC_CTM) == NULL);
+
+	blob = get_blob(data, primary->pipe, IGT_CRTC_GAMMA_LUT);
+	igt_assert(blob &&
+		   blob->length == (sizeof(struct drm_color_lut) *
+				    legacy_lut_size));
+	lut = (struct drm_color_lut *) blob->data;
+	for (i = 0; i < legacy_lut_size; i++)
+		igt_assert(lut[i].red == 0xffff &&
+			   lut[i].green == 0xffff &&
+			   lut[i].blue == 0xffff);
+	drmModeFreePropertyBlob(blob);
+
+	igt_plane_set_fb(primary, NULL);
+	igt_output_set_pipe(output, PIPE_NONE);
 
 	free_lut(degamma_linear);
 	free_lut(gamma_zero);
@@ -442,84 +442,84 @@ static bool test_pipe_ctm(data_t *data,
 	igt_output_t *output;
 	bool ret = true;
 	igt_display_t *display = &data->display;
+	drmModeModeInfo *mode;
+	struct igt_fb fb_modeset, fb;
+	igt_crc_t crc_software, crc_hardware;
+	int fb_id, fb_modeset_id;
 
 	igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM));
 
 	degamma_linear = generate_table(data->degamma_lut_size, 1.0);
 	gamma_linear = generate_table(data->gamma_lut_size, 1.0);
 
-	for_each_valid_output_on_pipe(&data->display, primary->pipe->pipe, output) {
-		drmModeModeInfo *mode;
-		struct igt_fb fb_modeset, fb;
-		igt_crc_t crc_software, crc_hardware;
-		int fb_id, fb_modeset_id;
+	output = igt_get_single_output_for_pipe(&data->display, primary->pipe->pipe);
+	igt_require(output);
 
-		igt_output_set_pipe(output, primary->pipe->pipe);
-		mode = igt_output_get_mode(output);
+	igt_output_set_pipe(output, primary->pipe->pipe);
+	mode = igt_output_get_mode(output);
 
-		/* Create a framebuffer at the size of the output. */
-		fb_id = igt_create_fb(data->drm_fd,
+	/* Create a framebuffer at the size of the output. */
+	fb_id = igt_create_fb(data->drm_fd,
+			      mode->hdisplay,
+			      mode->vdisplay,
+			      DRM_FORMAT_XRGB8888,
+			      DRM_FORMAT_MOD_NONE,
+			      &fb);
+	igt_assert(fb_id);
+
+	fb_modeset_id = igt_create_fb(data->drm_fd,
 				      mode->hdisplay,
 				      mode->vdisplay,
 				      DRM_FORMAT_XRGB8888,
 				      DRM_FORMAT_MOD_NONE,
-				      &fb);
-		igt_assert(fb_id);
+				      &fb_modeset);
+	igt_assert(fb_modeset_id);
+	igt_plane_set_fb(primary, &fb_modeset);
 
-		fb_modeset_id = igt_create_fb(data->drm_fd,
-					      mode->hdisplay,
-					      mode->vdisplay,
-					      DRM_FORMAT_XRGB8888,
-					      DRM_FORMAT_MOD_NONE,
-					      &fb_modeset);
-		igt_assert(fb_modeset_id);
-		igt_plane_set_fb(primary, &fb_modeset);
-
-		/*
-		 * Don't program LUT's for max CTM cases, as limitation of
-		 * representing intermediate values between 0 and 1.0 causes
-		 * rounding issues and inaccuracies leading to crc mismatch.
-		 */
-		if (memcmp(before, after, sizeof(color_t))) {
-			set_degamma(data, primary->pipe, degamma_linear);
-			set_gamma(data, primary->pipe, gamma_linear);
-		} else {
-			/* Disable Degamma and Gamma for ctm max test */
-			disable_degamma(primary->pipe);
-			disable_gamma(primary->pipe);
-		}
-
-		disable_ctm(primary->pipe);
-		igt_display_commit(&data->display);
-
-		paint_rectangles(data, mode, after, &fb);
-		igt_plane_set_fb(primary, &fb);
-		set_ctm(primary->pipe, ctm_identity);
-		igt_display_commit(&data->display);
-		igt_wait_for_vblank(data->drm_fd,
-				display->pipes[primary->pipe->pipe].crtc_offset);
-		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_software);
-
-		/* With CTM transformation. */
-		paint_rectangles(data, mode, before, &fb);
-		igt_plane_set_fb(primary, &fb);
-		set_ctm(primary->pipe, ctm_matrix);
-		igt_display_commit(&data->display);
-		igt_wait_for_vblank(data->drm_fd,
-				display->pipes[primary->pipe->pipe].crtc_offset);
-		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_hardware);
-
-		/* Verify that the CRC of the software computed output is
-		 * equal to the CRC of the CTM matrix transformation output.
-		 */
-		ret &= !igt_skip_crc_compare || igt_check_crc_equal(&crc_software, &crc_hardware);
-
-		igt_plane_set_fb(primary, NULL);
-		igt_output_set_pipe(output, PIPE_NONE);
-		igt_remove_fb(data->drm_fd, &fb);
-		igt_remove_fb(data->drm_fd, &fb_modeset);
+	/*
+	 * Don't program LUT's for max CTM cases, as limitation of
+	 * representing intermediate values between 0 and 1.0 causes
+	 * rounding issues and inaccuracies leading to crc mismatch.
+	 */
+	if (memcmp(before, after, sizeof(color_t))) {
+		set_degamma(data, primary->pipe, degamma_linear);
+		set_gamma(data, primary->pipe, gamma_linear);
+	} else {
+		/* Disable Degamma and Gamma for ctm max test */
+		disable_degamma(primary->pipe);
+		disable_gamma(primary->pipe);
 	}
 
+	disable_ctm(primary->pipe);
+	igt_display_commit(&data->display);
+
+	paint_rectangles(data, mode, after, &fb);
+	igt_plane_set_fb(primary, &fb);
+	set_ctm(primary->pipe, ctm_identity);
+	igt_display_commit(&data->display);
+	igt_wait_for_vblank(data->drm_fd,
+			    display->pipes[primary->pipe->pipe].crtc_offset);
+	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_software);
+
+	/* With CTM transformation. */
+	paint_rectangles(data, mode, before, &fb);
+	igt_plane_set_fb(primary, &fb);
+	set_ctm(primary->pipe, ctm_matrix);
+	igt_display_commit(&data->display);
+	igt_wait_for_vblank(data->drm_fd,
+			    display->pipes[primary->pipe->pipe].crtc_offset);
+	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_hardware);
+
+	/* Verify that the CRC of the software computed output is
+	 * equal to the CRC of the CTM matrix transformation output.
+	 */
+	ret &= !igt_skip_crc_compare || igt_check_crc_equal(&crc_software, &crc_hardware);
+
+	igt_plane_set_fb(primary, NULL);
+	igt_output_set_pipe(output, PIPE_NONE);
+	igt_remove_fb(data->drm_fd, &fb);
+	igt_remove_fb(data->drm_fd, &fb_modeset);
+
 	free_lut(degamma_linear);
 	free_lut(gamma_linear);
 
-- 
2.31.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [igt-dev] [PATCH i-g-t v3 6/7] lib/kms: Add GAMMA_LUT_3D support
  2021-09-03 16:27 [igt-dev] [PATCH i-g-t v3 0/7] tests/kms_color: 3D LUT tests Ville Syrjala
                   ` (4 preceding siblings ...)
  2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 5/7] tests/kms_color: Run each subtest only for a single connector Ville Syrjala
@ 2021-09-03 16:27 ` Ville Syrjala
  2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 7/7] tests/kms_color: Add GAMMA_LUT_3D tests Ville Syrjala
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 19+ messages in thread
From: Ville Syrjala @ 2021-09-03 16:27 UTC (permalink / raw)
  To: igt-dev; +Cc: Bhanuprakash Modem

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Add basic plumbing for the GAMMA_LUT_3D/GAMMA_LUT_3D_SIZE crtc props.

Reviewed-by: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 lib/igt_kms.c | 5 +++++
 lib/igt_kms.h | 2 ++
 2 files changed, 7 insertions(+)

diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index cc38f5a25334..5b1f55a50840 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -589,6 +589,8 @@ const char * const igt_crtc_prop_names[IGT_NUM_CRTC_PROPS] = {
 	[IGT_CRTC_GAMMA_LUT_SIZE] = "GAMMA_LUT_SIZE",
 	[IGT_CRTC_DEGAMMA_LUT] = "DEGAMMA_LUT",
 	[IGT_CRTC_DEGAMMA_LUT_SIZE] = "DEGAMMA_LUT_SIZE",
+	[IGT_CRTC_GAMMA_LUT_3D] = "GAMMA_LUT_3D",
+	[IGT_CRTC_GAMMA_LUT_3D_SIZE] = "GAMMA_LUT_3D_SIZE",
 	[IGT_CRTC_MODE_ID] = "MODE_ID",
 	[IGT_CRTC_ACTIVE] = "ACTIVE",
 	[IGT_CRTC_OUT_FENCE_PTR] = "OUT_FENCE_PTR",
@@ -1983,6 +1985,9 @@ static void igt_pipe_reset(igt_pipe_t *pipe)
 	if (igt_pipe_obj_has_prop(pipe, IGT_CRTC_DEGAMMA_LUT))
 		igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_DEGAMMA_LUT, 0);
 
+	if (igt_pipe_obj_has_prop(pipe, IGT_CRTC_GAMMA_LUT_3D))
+		igt_pipe_obj_set_prop_value(pipe, IGT_CRTC_GAMMA_LUT_3D, 0);
+
 	pipe->out_fence_fd = -1;
 }
 
diff --git a/lib/igt_kms.h b/lib/igt_kms.h
index ed598f164a59..9608097142bd 100644
--- a/lib/igt_kms.h
+++ b/lib/igt_kms.h
@@ -121,6 +121,8 @@ enum igt_atomic_crtc_properties {
        IGT_CRTC_GAMMA_LUT_SIZE,
        IGT_CRTC_DEGAMMA_LUT,
        IGT_CRTC_DEGAMMA_LUT_SIZE,
+       IGT_CRTC_GAMMA_LUT_3D,
+       IGT_CRTC_GAMMA_LUT_3D_SIZE,
        IGT_CRTC_MODE_ID,
        IGT_CRTC_ACTIVE,
        IGT_CRTC_OUT_FENCE_PTR,
-- 
2.31.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [igt-dev] [PATCH i-g-t v3 7/7] tests/kms_color: Add GAMMA_LUT_3D tests
  2021-09-03 16:27 [igt-dev] [PATCH i-g-t v3 0/7] tests/kms_color: 3D LUT tests Ville Syrjala
                   ` (5 preceding siblings ...)
  2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 6/7] lib/kms: Add GAMMA_LUT_3D support Ville Syrjala
@ 2021-09-03 16:27 ` Ville Syrjala
  2021-09-06  6:38   ` Modem, Bhanuprakash
  2021-09-03 17:25 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_color: 3D LUT tests (rev5) Patchwork
                   ` (2 subsequent siblings)
  9 siblings, 1 reply; 19+ messages in thread
From: Ville Syrjala @ 2021-09-03 16:27 UTC (permalink / raw)
  To: igt-dev; +Cc: Bhanuprakash Modem

From: Ville Syrjälä <ville.syrjala@linux.intel.com>

Add some basic tests for 3D LUTs.

v2: Add missing igt_describe()s
    s/degamma/3D LUT/ in some comments
    Run the test for a single connector only
    Run the invalid LUT size test for each pipe

Cc: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
---
 tests/kms_color.c        | 97 ++++++++++++++++++++++++++++++++++++++++
 tests/kms_color_helper.c | 58 +++++++++++++++++++++++-
 tests/kms_color_helper.h | 18 ++++++++
 3 files changed, 172 insertions(+), 1 deletion(-)

diff --git a/tests/kms_color.c b/tests/kms_color.c
index d78c7e211511..2e250ffe8ae8 100644
--- a/tests/kms_color.c
+++ b/tests/kms_color.c
@@ -198,6 +198,88 @@ static void test_pipe_gamma(data_t *data,
 	free_lut(gamma_full);
 }
 
+static void test_pipe_gamma_lut_3d(data_t *data,
+				   igt_plane_t *primary)
+{
+	igt_output_t *output;
+	igt_display_t *display = &data->display;
+	gamma_lut_t *gamma_lut_3d_linear, *gamma_lut_3d_full;
+	color_t red_green_blue[] = {
+		{ 1.0, 0.0, 0.0 },
+		{ 0.0, 1.0, 0.0 },
+		{ 0.0, 0.0, 1.0 }
+	};
+	drmModeModeInfo *mode;
+	struct igt_fb fb_modeset, fb;
+	igt_crc_t crc_fulllut3d, crc_fullcolors;
+	int fb_id, fb_modeset_id;
+
+	igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_GAMMA_LUT_3D));
+
+	gamma_lut_3d_linear = generate_lut_3d(data->gamma_lut_3d_size, 1.0);
+	gamma_lut_3d_full = generate_lut_3d_max(data->gamma_lut_3d_size);
+
+	output = igt_get_single_output_for_pipe(&data->display, primary->pipe->pipe);
+	igt_require(output);
+
+	igt_output_set_pipe(output, primary->pipe->pipe);
+	mode = igt_output_get_mode(output);
+
+	/* Create a framebuffer at the size of the output. */
+	fb_id = igt_create_fb(data->drm_fd,
+			      mode->hdisplay,
+			      mode->vdisplay,
+			      DRM_FORMAT_XRGB8888,
+			      DRM_FORMAT_MOD_NONE,
+			      &fb);
+	igt_assert(fb_id);
+
+	fb_modeset_id = igt_create_fb(data->drm_fd,
+				      mode->hdisplay,
+				      mode->vdisplay,
+				      DRM_FORMAT_XRGB8888,
+				      DRM_FORMAT_MOD_NONE,
+				      &fb_modeset);
+	igt_assert(fb_modeset_id);
+
+	igt_plane_set_fb(primary, &fb_modeset);
+	disable_ctm(primary->pipe);
+	disable_degamma(primary->pipe);
+	disable_gamma(primary->pipe);
+	set_gamma_lut_3d(data, primary->pipe, gamma_lut_3d_linear);
+	igt_display_commit(&data->display);
+
+	/* Draw solid colors with no 3D LUT transformation. */
+	paint_rectangles(data, mode, red_green_blue, &fb);
+	igt_plane_set_fb(primary, &fb);
+	igt_display_commit(&data->display);
+	igt_wait_for_vblank(data->drm_fd,
+			    display->pipes[primary->pipe->pipe].crtc_offset);
+	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
+
+	/* Draw a gradient with 3D LUT to remap all
+	 * values to max red/green/blue.
+	 */
+	paint_gradient_rectangles(data, mode, red_green_blue, &fb);
+	igt_plane_set_fb(primary, &fb);
+	set_gamma_lut_3d(data, primary->pipe, gamma_lut_3d_full);
+	igt_display_commit(&data->display);
+	igt_wait_for_vblank(data->drm_fd,
+			    display->pipes[primary->pipe->pipe].crtc_offset);
+	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fulllut3d);
+
+	/* Verify that the CRC of the software computed output is
+	 * equal to the CRC of the 3D LUT transformation output.
+	 */
+	igt_assert_crc_equal(&crc_fulllut3d, &crc_fullcolors);
+
+	igt_plane_set_fb(primary, NULL);
+	igt_output_set_pipe(output, PIPE_NONE);
+
+	free_lut(gamma_lut_3d_linear);
+	free_lut(gamma_lut_3d_full);
+}
+
 /*
  * Draw 3 gradient rectangles in red, green and blue, with a maxed out legacy
  * gamma LUT and verify we have the same CRC as drawing solid color rectangles
@@ -656,6 +738,13 @@ prep_pipe(data_t *data, enum pipe p)
 					      IGT_CRTC_GAMMA_LUT_SIZE);
 		igt_assert_lt(0, data->gamma_lut_size);
 	}
+
+	if (igt_pipe_obj_has_prop(&data->display.pipes[p], IGT_CRTC_GAMMA_LUT_3D_SIZE)) {
+		data->gamma_lut_3d_size =
+			igt_pipe_obj_get_prop(&data->display.pipes[p],
+					      IGT_CRTC_GAMMA_LUT_3D_SIZE);
+		igt_assert_lt(0, data->gamma_lut_3d_size);
+	}
 }
 
 static void
@@ -860,6 +949,10 @@ run_tests_for_pipe(data_t *data, enum pipe p)
 	igt_subtest_f("pipe-%s-legacy-gamma-reset", kmstest_pipe_name(p))
 		test_pipe_legacy_gamma_reset(data, primary);
 
+	igt_describe("Verify that gamma LUT 3D transformation works correctly");
+	igt_subtest_f("pipe-%s-gamma-lut-3d", kmstest_pipe_name(p))
+		test_pipe_gamma_lut_3d(data, primary);
+
 	igt_fixture {
 		disable_degamma(primary->pipe);
 		disable_gamma(primary->pipe);
@@ -888,6 +981,10 @@ run_invalid_tests_for_pipe(data_t *data, enum pipe p)
 	igt_describe("Negative check for color tranformation matrix sizes");
 	igt_subtest_f("pipe-%s-invalid-ctm-matrix-sizes", kmstest_pipe_name(p))
 		invalid_ctm_matrix_sizes(data, p);
+
+	igt_describe("Negative check for invalid gamma lut 3D sizes");
+	igt_subtest_f("pipe-%s-invalid-gamma-lut-3d-sizes", kmstest_pipe_name(p))
+		invalid_gamma_lut_3d_sizes(data, p);
 }
 
 igt_main
diff --git a/tests/kms_color_helper.c b/tests/kms_color_helper.c
index d71e7bb2e6f9..38e388c54ee8 100644
--- a/tests/kms_color_helper.c
+++ b/tests/kms_color_helper.c
@@ -143,6 +143,44 @@ gamma_lut_t *generate_table_zero(int lut_size)
 	return gamma;
 }
 
+gamma_lut_t *generate_lut_3d(int lut_size, double exp)
+{
+	gamma_lut_t *gamma = alloc_lut(lut_3d_size(lut_size));
+
+	for (int r = 0; r < lut_size; r++) {
+		for (int g = 0; g < lut_size; g++) {
+			for (int b = 0; b < lut_size; b++) {
+				int i = lut_3d_index(r, g, b, lut_size);
+
+				gamma->coeffs[i].r = pow(r * 1.0 / (lut_size - 1), exp);
+				gamma->coeffs[i].g = pow(g * 1.0 / (lut_size - 1), exp);
+				gamma->coeffs[i].b = pow(b * 1.0 / (lut_size - 1), exp);
+			}
+		}
+	}
+
+	return gamma;
+}
+
+gamma_lut_t *generate_lut_3d_max(int lut_size)
+{
+	gamma_lut_t *gamma = alloc_lut(lut_3d_size(lut_size));
+
+	for (int r = 0; r < lut_size; r++) {
+		for (int g = 0; g < lut_size; g++) {
+			for (int b = 0; b < lut_size; b++) {
+				int i = lut_3d_index(r, g, b, lut_size);
+
+				gamma->coeffs[i].r = r == 0 ? 0.0 : 1.0;
+				gamma->coeffs[i].g = g == 0 ? 0.0 : 1.0;
+				gamma->coeffs[i].b = b == 0 ? 0.0 : 1.0;
+			}
+		}
+	}
+
+	return gamma;
+}
+
 struct drm_color_lut *coeffs_to_lut(data_t *data,
 				    const gamma_lut_t *gamma,
 				    uint32_t color_depth,
@@ -215,6 +253,19 @@ void set_gamma(data_t *data,
 	free(lut);
 }
 
+void set_gamma_lut_3d(data_t *data,
+		      igt_pipe_t *pipe,
+		      const gamma_lut_t *gamma_lut_3d)
+{
+	size_t size = sizeof(struct drm_color_lut) * gamma_lut_3d->size;
+	struct drm_color_lut *lut = coeffs_to_lut(data, gamma_lut_3d,
+						  data->color_depth, 0);
+
+	igt_pipe_obj_replace_prop_blob(pipe, IGT_CRTC_GAMMA_LUT_3D, lut, size);
+
+	free(lut);
+}
+
 void set_ctm(igt_pipe_t *pipe, const double *coefficients)
 {
 	struct drm_color_ctm ctm;
@@ -331,6 +382,12 @@ invalid_degamma_lut_sizes(data_t *data, enum pipe p)
 	invalid_lut_sizes(data, p, IGT_CRTC_DEGAMMA_LUT, data->degamma_lut_size);
 }
 
+void
+invalid_gamma_lut_3d_sizes(data_t *data, enum pipe p)
+{
+	invalid_lut_sizes(data, p, IGT_CRTC_GAMMA_LUT_3D, lut_3d_size(data->gamma_lut_3d_size));
+}
+
 void invalid_ctm_matrix_sizes(data_t *data, enum pipe p)
 {
 	igt_display_t *display = &data->display;
@@ -359,4 +416,3 @@ void invalid_ctm_matrix_sizes(data_t *data, enum pipe p)
 
 	free(ptr);
 }
-
diff --git a/tests/kms_color_helper.h b/tests/kms_color_helper.h
index bb6f0054f388..7406820b6955 100644
--- a/tests/kms_color_helper.h
+++ b/tests/kms_color_helper.h
@@ -52,6 +52,7 @@ typedef struct {
 	uint32_t color_depth;
 	uint64_t degamma_lut_size;
 	uint64_t gamma_lut_size;
+	uint64_t gamma_lut_3d_size;
 	#ifdef HAVE_CHAMELIUM
 	struct chamelium *chamelium;
 	struct chamelium_port **ports;
@@ -77,6 +78,8 @@ void free_lut(gamma_lut_t *gamma);
 gamma_lut_t *generate_table(int lut_size, double exp);
 gamma_lut_t *generate_table_max(int lut_size);
 gamma_lut_t *generate_table_zero(int lut_size);
+gamma_lut_t *generate_lut_3d(int lut_size, double exp);
+gamma_lut_t *generate_lut_3d_max(int lut_size);
 struct drm_color_lut *coeffs_to_lut(data_t *data,
 				    const gamma_lut_t *gamma,
 				    uint32_t color_depth,
@@ -87,13 +90,27 @@ void set_degamma(data_t *data,
 void set_gamma(data_t *data,
 	       igt_pipe_t *pipe,
 	       const gamma_lut_t *gamma);
+void set_gamma_lut_3d(data_t *data,
+		      igt_pipe_t *pipe,
+		      const gamma_lut_t *gamma);
 void set_ctm(igt_pipe_t *pipe, const double *coefficients);
 void disable_prop(igt_pipe_t *pipe, enum igt_atomic_crtc_properties prop);
 
 #define disable_degamma(pipe) disable_prop(pipe, IGT_CRTC_DEGAMMA_LUT)
 #define disable_gamma(pipe) disable_prop(pipe, IGT_CRTC_GAMMA_LUT)
+#define disable_lut_3d(pipe) disable_prop(pipe, IGT_CRTC_LUT_3D)
 #define disable_ctm(pipe) disable_prop(pipe, IGT_CRTC_CTM)
 
+static inline int lut_3d_size(int lut_size)
+{
+	return lut_size * lut_size * lut_size;
+}
+
+static inline int lut_3d_index(int r, int g, int b, int lut_size)
+{
+	return r * lut_size * lut_size + g * lut_size + b;
+}
+
 drmModePropertyBlobPtr get_blob(data_t *data, igt_pipe_t *pipe,
 				enum igt_atomic_crtc_properties prop);
 bool crc_equal(igt_crc_t *a, igt_crc_t *b);
@@ -105,6 +122,7 @@ int pipe_set_property_blob(igt_pipe_t *pipe,
 			   void *ptr, size_t length);
 void invalid_gamma_lut_sizes(data_t *data, enum pipe p);
 void invalid_degamma_lut_sizes(data_t *data, enum pipe p);
+void invalid_gamma_lut_3d_sizes(data_t *data, enum pipe p);
 void invalid_ctm_matrix_sizes(data_t *data, enum pipe p);
 
 #endif
-- 
2.31.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_color: 3D LUT tests (rev5)
  2021-09-03 16:27 [igt-dev] [PATCH i-g-t v3 0/7] tests/kms_color: 3D LUT tests Ville Syrjala
                   ` (6 preceding siblings ...)
  2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 7/7] tests/kms_color: Add GAMMA_LUT_3D tests Ville Syrjala
@ 2021-09-03 17:25 ` Patchwork
  2021-09-03 19:46 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
  2021-09-06  6:37 ` [igt-dev] [PATCH i-g-t v3 0/7] tests/kms_color: 3D LUT tests Modem, Bhanuprakash
  9 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2021-09-03 17:25 UTC (permalink / raw)
  To: Ville Syrjala; +Cc: igt-dev

[-- Attachment #1: Type: text/plain, Size: 4079 bytes --]

== Series Details ==

Series: tests/kms_color: 3D LUT tests (rev5)
URL   : https://patchwork.freedesktop.org/series/90165/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_10550 -> IGTPW_6197
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/index.html

Known issues
------------

  Here are the changes found in IGTPW_6197 that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@gem_exec_suspend@basic-s0:
    - fi-kbl-soraka:      [PASS][1] -> [INCOMPLETE][2] ([i915#155])
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10550/fi-kbl-soraka/igt@gem_exec_suspend@basic-s0.html
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/fi-kbl-soraka/igt@gem_exec_suspend@basic-s0.html

  
#### Possible fixes ####

  * igt@i915_selftest@live@execlists:
    - fi-icl-y:           [DMESG-FAIL][3] ([i915#1993]) -> [PASS][4]
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10550/fi-icl-y/igt@i915_selftest@live@execlists.html
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/fi-icl-y/igt@i915_selftest@live@execlists.html

  * igt@kms_chamelium@hdmi-edid-read:
    - fi-kbl-7500u:       [FAIL][5] ([i915#3449]) -> [PASS][6]
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10550/fi-kbl-7500u/igt@kms_chamelium@hdmi-edid-read.html
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/fi-kbl-7500u/igt@kms_chamelium@hdmi-edid-read.html

  
  [i915#155]: https://gitlab.freedesktop.org/drm/intel/issues/155
  [i915#1993]: https://gitlab.freedesktop.org/drm/intel/issues/1993
  [i915#3449]: https://gitlab.freedesktop.org/drm/intel/issues/3449


Participating hosts (45 -> 39)
------------------------------

  Missing    (6): bat-adls-5 bat-dg1-5 fi-bsw-cyan bat-adlp-4 fi-bdw-samus bat-jsl-1 


Build changes
-------------

  * CI: CI-20190529 -> None
  * IGT: IGT_6197 -> IGTPW_6197

  CI-20190529: 20190529
  CI_DRM_10550: 07f6ce3dba287a2aa8a62cdd3b7d46ea0676007f @ git://anongit.freedesktop.org/gfx-ci/linux
  IGTPW_6197: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/index.html
  IGT_6197: 40888f97a6ad219f4ed48a1830d0ef3c9617d006 @ https://gitlab.freedesktop.org/drm/igt-gpu-tools.git



== Testlist changes ==

+igt@kms_color@pipe-a-gamma-lut-3d
+igt@kms_color@pipe-a-invalid-ctm-matrix-sizes
+igt@kms_color@pipe-a-invalid-degamma-lut-sizes
+igt@kms_color@pipe-a-invalid-gamma-lut-3d-sizes
+igt@kms_color@pipe-a-invalid-gamma-lut-sizes
+igt@kms_color@pipe-b-gamma-lut-3d
+igt@kms_color@pipe-b-invalid-ctm-matrix-sizes
+igt@kms_color@pipe-b-invalid-degamma-lut-sizes
+igt@kms_color@pipe-b-invalid-gamma-lut-3d-sizes
+igt@kms_color@pipe-b-invalid-gamma-lut-sizes
+igt@kms_color@pipe-c-gamma-lut-3d
+igt@kms_color@pipe-c-invalid-ctm-matrix-sizes
+igt@kms_color@pipe-c-invalid-degamma-lut-sizes
+igt@kms_color@pipe-c-invalid-gamma-lut-3d-sizes
+igt@kms_color@pipe-c-invalid-gamma-lut-sizes
+igt@kms_color@pipe-d-gamma-lut-3d
+igt@kms_color@pipe-d-invalid-ctm-matrix-sizes
+igt@kms_color@pipe-d-invalid-degamma-lut-sizes
+igt@kms_color@pipe-d-invalid-gamma-lut-3d-sizes
+igt@kms_color@pipe-d-invalid-gamma-lut-sizes
+igt@kms_color@pipe-e-gamma-lut-3d
+igt@kms_color@pipe-e-invalid-ctm-matrix-sizes
+igt@kms_color@pipe-e-invalid-degamma-lut-sizes
+igt@kms_color@pipe-e-invalid-gamma-lut-3d-sizes
+igt@kms_color@pipe-e-invalid-gamma-lut-sizes
+igt@kms_color@pipe-f-gamma-lut-3d
+igt@kms_color@pipe-f-invalid-ctm-matrix-sizes
+igt@kms_color@pipe-f-invalid-degamma-lut-sizes
+igt@kms_color@pipe-f-invalid-gamma-lut-3d-sizes
+igt@kms_color@pipe-f-invalid-gamma-lut-sizes
-igt@kms_color@pipe-invalid-ctm-matrix-sizes
-igt@kms_color@pipe-invalid-degamma-lut-sizes
-igt@kms_color@pipe-invalid-gamma-lut-sizes
-igt@kms_color_chamelium@pipe-invalid-ctm-matrix-sizes
-igt@kms_color_chamelium@pipe-invalid-degamma-lut-sizes
-igt@kms_color_chamelium@pipe-invalid-gamma-lut-sizes

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/index.html

[-- Attachment #2: Type: text/html, Size: 4948 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [igt-dev] ✓ Fi.CI.IGT: success for tests/kms_color: 3D LUT tests (rev5)
  2021-09-03 16:27 [igt-dev] [PATCH i-g-t v3 0/7] tests/kms_color: 3D LUT tests Ville Syrjala
                   ` (7 preceding siblings ...)
  2021-09-03 17:25 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_color: 3D LUT tests (rev5) Patchwork
@ 2021-09-03 19:46 ` Patchwork
  2021-09-06  6:37 ` [igt-dev] [PATCH i-g-t v3 0/7] tests/kms_color: 3D LUT tests Modem, Bhanuprakash
  9 siblings, 0 replies; 19+ messages in thread
From: Patchwork @ 2021-09-03 19:46 UTC (permalink / raw)
  To: Ville Syrjala; +Cc: igt-dev

[-- Attachment #1: Type: text/plain, Size: 30252 bytes --]

== Series Details ==

Series: tests/kms_color: 3D LUT tests (rev5)
URL   : https://patchwork.freedesktop.org/series/90165/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_10550_full -> IGTPW_6197_full
====================================================

Summary
-------

  **SUCCESS**

  No regressions found.

  External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/index.html

Possible new issues
-------------------

  Here are the unknown changes that may have been introduced in IGTPW_6197_full:

### IGT changes ###

#### Possible regressions ####

  * {igt@kms_color@pipe-d-gamma-lut-3d} (NEW):
    - shard-tglb:         NOTRUN -> [SKIP][1] +6 similar issues
   [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb1/igt@kms_color@pipe-d-gamma-lut-3d.html

  
New tests
---------

  New tests have been introduced between CI_DRM_10550_full and IGTPW_6197_full:

### New IGT tests (20) ###

  * igt@kms_color@pipe-a-gamma-lut-3d:
    - Statuses : 6 skip(s)
    - Exec time: [0.0] s

  * igt@kms_color@pipe-a-invalid-ctm-matrix-sizes:
    - Statuses : 4 pass(s) 1 skip(s)
    - Exec time: [0.0, 0.00] s

  * igt@kms_color@pipe-a-invalid-degamma-lut-sizes:
    - Statuses : 4 pass(s) 1 skip(s)
    - Exec time: [0.0, 0.01] s

  * igt@kms_color@pipe-a-invalid-gamma-lut-3d-sizes:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@kms_color@pipe-a-invalid-gamma-lut-sizes:
    - Statuses : 6 pass(s)
    - Exec time: [0.00] s

  * igt@kms_color@pipe-b-gamma-lut-3d:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@kms_color@pipe-b-invalid-ctm-matrix-sizes:
    - Statuses : 5 pass(s) 1 skip(s)
    - Exec time: [0.0, 0.00] s

  * igt@kms_color@pipe-b-invalid-degamma-lut-sizes:
    - Statuses : 4 pass(s) 1 skip(s)
    - Exec time: [0.0, 0.00] s

  * igt@kms_color@pipe-b-invalid-gamma-lut-3d-sizes:
    - Statuses : 4 skip(s)
    - Exec time: [0.0] s

  * igt@kms_color@pipe-b-invalid-gamma-lut-sizes:
    - Statuses : 5 pass(s)
    - Exec time: [0.00, 0.01] s

  * igt@kms_color@pipe-c-gamma-lut-3d:
    - Statuses :
    - Exec time: [None] s

  * igt@kms_color@pipe-c-invalid-ctm-matrix-sizes:
    - Statuses : 5 pass(s) 1 skip(s)
    - Exec time: [0.0, 0.00] s

  * igt@kms_color@pipe-c-invalid-degamma-lut-sizes:
    - Statuses : 5 pass(s)
    - Exec time: [0.00] s

  * igt@kms_color@pipe-c-invalid-gamma-lut-3d-sizes:
    - Statuses : 5 skip(s)
    - Exec time: [0.0] s

  * igt@kms_color@pipe-c-invalid-gamma-lut-sizes:
    - Statuses : 3 pass(s) 1 skip(s)
    - Exec time: [0.0, 0.00] s

  * igt@kms_color@pipe-d-gamma-lut-3d:
    - Statuses : 6 skip(s)
    - Exec time: [0.0] s

  * igt@kms_color@pipe-d-invalid-ctm-matrix-sizes:
    - Statuses : 1 pass(s) 4 skip(s)
    - Exec time: [0.0, 0.00] s

  * igt@kms_color@pipe-d-invalid-degamma-lut-sizes:
    - Statuses : 1 pass(s) 5 skip(s)
    - Exec time: [0.0, 0.00] s

  * igt@kms_color@pipe-d-invalid-gamma-lut-3d-sizes:
    - Statuses : 6 skip(s)
    - Exec time: [0.0] s

  * igt@kms_color@pipe-d-invalid-gamma-lut-sizes:
    - Statuses : 1 pass(s) 3 skip(s)
    - Exec time: [0.0, 0.00] s

  

Known issues
------------

  Here are the changes found in IGTPW_6197_full that come from known issues:

### IGT changes ###

#### Issues hit ####

  * igt@feature_discovery@chamelium:
    - shard-tglb:         NOTRUN -> [SKIP][2] ([fdo#111827])
   [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb1/igt@feature_discovery@chamelium.html

  * igt@feature_discovery@display-2x:
    - shard-iclb:         NOTRUN -> [SKIP][3] ([i915#1839])
   [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb3/igt@feature_discovery@display-2x.html

  * igt@gem_create@create-massive:
    - shard-snb:          NOTRUN -> [DMESG-WARN][4] ([i915#3002])
   [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-snb5/igt@gem_create@create-massive.html
    - shard-apl:          NOTRUN -> [DMESG-WARN][5] ([i915#3002])
   [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-apl2/igt@gem_create@create-massive.html

  * igt@gem_ctx_persistence@smoketest:
    - shard-snb:          NOTRUN -> [SKIP][6] ([fdo#109271] / [i915#1099]) +5 similar issues
   [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-snb7/igt@gem_ctx_persistence@smoketest.html

  * igt@gem_eio@unwedge-stress:
    - shard-iclb:         [PASS][7] -> [TIMEOUT][8] ([i915#2369] / [i915#2481] / [i915#3070])
   [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10550/shard-iclb6/igt@gem_eio@unwedge-stress.html
   [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb1/igt@gem_eio@unwedge-stress.html

  * igt@gem_exec_fair@basic-deadline:
    - shard-kbl:          [PASS][9] -> [FAIL][10] ([i915#2846])
   [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10550/shard-kbl7/igt@gem_exec_fair@basic-deadline.html
   [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-kbl4/igt@gem_exec_fair@basic-deadline.html
    - shard-glk:          [PASS][11] -> [FAIL][12] ([i915#2846])
   [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10550/shard-glk2/igt@gem_exec_fair@basic-deadline.html
   [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-glk9/igt@gem_exec_fair@basic-deadline.html

  * igt@gem_exec_fair@basic-none-rrul@rcs0:
    - shard-glk:          NOTRUN -> [FAIL][13] ([i915#2842])
   [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-glk2/igt@gem_exec_fair@basic-none-rrul@rcs0.html

  * igt@gem_exec_fair@basic-pace@vecs0:
    - shard-glk:          [PASS][14] -> [FAIL][15] ([i915#2842]) +2 similar issues
   [14]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10550/shard-glk4/igt@gem_exec_fair@basic-pace@vecs0.html
   [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-glk7/igt@gem_exec_fair@basic-pace@vecs0.html

  * igt@gem_exec_fair@basic-throttle@rcs0:
    - shard-iclb:         [PASS][16] -> [FAIL][17] ([i915#2849])
   [16]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10550/shard-iclb8/igt@gem_exec_fair@basic-throttle@rcs0.html
   [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb7/igt@gem_exec_fair@basic-throttle@rcs0.html

  * igt@gem_exec_params@secure-non-master:
    - shard-iclb:         NOTRUN -> [SKIP][18] ([fdo#112283])
   [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb5/igt@gem_exec_params@secure-non-master.html

  * igt@gem_exec_whisper@basic-contexts-all:
    - shard-glk:          [PASS][19] -> [DMESG-WARN][20] ([i915#118] / [i915#95])
   [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10550/shard-glk5/igt@gem_exec_whisper@basic-contexts-all.html
   [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-glk5/igt@gem_exec_whisper@basic-contexts-all.html

  * igt@gem_pread@exhaustion:
    - shard-apl:          NOTRUN -> [WARN][21] ([i915#2658]) +1 similar issue
   [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-apl6/igt@gem_pread@exhaustion.html

  * igt@gem_pwrite@basic-exhaustion:
    - shard-kbl:          NOTRUN -> [WARN][22] ([i915#2658]) +1 similar issue
   [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-kbl4/igt@gem_pwrite@basic-exhaustion.html

  * igt@gem_render_copy@yf-tiled-mc-ccs-to-vebox-yf-tiled:
    - shard-iclb:         NOTRUN -> [SKIP][23] ([i915#768]) +3 similar issues
   [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb3/igt@gem_render_copy@yf-tiled-mc-ccs-to-vebox-yf-tiled.html

  * igt@gem_softpin@evict-snoop:
    - shard-iclb:         NOTRUN -> [SKIP][24] ([fdo#109312])
   [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb3/igt@gem_softpin@evict-snoop.html

  * igt@gen3_render_tiledy_blits:
    - shard-tglb:         NOTRUN -> [SKIP][25] ([fdo#109289]) +1 similar issue
   [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb5/igt@gen3_render_tiledy_blits.html
    - shard-iclb:         NOTRUN -> [SKIP][26] ([fdo#109289]) +1 similar issue
   [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb7/igt@gen3_render_tiledy_blits.html

  * igt@gen9_exec_parse@batch-invalid-length:
    - shard-snb:          NOTRUN -> [SKIP][27] ([fdo#109271]) +370 similar issues
   [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-snb5/igt@gen9_exec_parse@batch-invalid-length.html

  * igt@gen9_exec_parse@bb-oversize:
    - shard-tglb:         NOTRUN -> [SKIP][28] ([i915#2856])
   [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb1/igt@gen9_exec_parse@bb-oversize.html
    - shard-iclb:         NOTRUN -> [SKIP][29] ([i915#2856])
   [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb4/igt@gen9_exec_parse@bb-oversize.html

  * igt@i915_pm_rc6_residency@rc6-fence:
    - shard-tglb:         NOTRUN -> [WARN][30] ([i915#2681])
   [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb7/igt@i915_pm_rc6_residency@rc6-fence.html
    - shard-iclb:         NOTRUN -> [WARN][31] ([i915#1804] / [i915#2684])
   [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb3/igt@i915_pm_rc6_residency@rc6-fence.html

  * igt@i915_suspend@sysfs-reader:
    - shard-apl:          [PASS][32] -> [DMESG-WARN][33] ([i915#180])
   [32]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10550/shard-apl6/igt@i915_suspend@sysfs-reader.html
   [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-apl8/igt@i915_suspend@sysfs-reader.html

  * igt@kms_atomic@plane-primary-overlay-mutable-zpos:
    - shard-tglb:         NOTRUN -> [SKIP][34] ([i915#404])
   [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb7/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html
    - shard-iclb:         NOTRUN -> [SKIP][35] ([i915#404])
   [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb3/igt@kms_atomic@plane-primary-overlay-mutable-zpos.html

  * igt@kms_big_fb@linear-32bpp-rotate-180:
    - shard-glk:          NOTRUN -> [DMESG-WARN][36] ([i915#118] / [i915#95])
   [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-glk7/igt@kms_big_fb@linear-32bpp-rotate-180.html

  * igt@kms_big_fb@x-tiled-64bpp-rotate-270:
    - shard-iclb:         NOTRUN -> [SKIP][37] ([fdo#110725] / [fdo#111614]) +2 similar issues
   [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb5/igt@kms_big_fb@x-tiled-64bpp-rotate-270.html

  * igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-hflip:
    - shard-glk:          NOTRUN -> [SKIP][38] ([fdo#109271] / [i915#3777])
   [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-glk5/igt@kms_big_fb@x-tiled-max-hw-stride-32bpp-rotate-180-hflip.html

  * igt@kms_big_fb@y-tiled-64bpp-rotate-270:
    - shard-tglb:         NOTRUN -> [SKIP][39] ([fdo#111614]) +1 similar issue
   [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb5/igt@kms_big_fb@y-tiled-64bpp-rotate-270.html

  * igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip:
    - shard-kbl:          NOTRUN -> [SKIP][40] ([fdo#109271] / [i915#3777]) +1 similar issue
   [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-kbl6/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-0-hflip.html

  * igt@kms_big_fb@yf-tiled-64bpp-rotate-0:
    - shard-tglb:         NOTRUN -> [SKIP][41] ([fdo#111615]) +2 similar issues
   [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb2/igt@kms_big_fb@yf-tiled-64bpp-rotate-0.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip:
    - shard-apl:          NOTRUN -> [SKIP][42] ([fdo#109271] / [i915#3777]) +2 similar issues
   [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-apl1/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip.html

  * igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip:
    - shard-iclb:         NOTRUN -> [SKIP][43] ([fdo#110723]) +2 similar issues
   [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb5/igt@kms_big_fb@yf-tiled-max-hw-stride-64bpp-rotate-0-hflip-async-flip.html

  * igt@kms_ccs@pipe-a-bad-aux-stride-y_tiled_gen12_rc_ccs_cc:
    - shard-iclb:         NOTRUN -> [SKIP][44] ([fdo#109278] / [i915#3886]) +8 similar issues
   [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb5/igt@kms_ccs@pipe-a-bad-aux-stride-y_tiled_gen12_rc_ccs_cc.html

  * igt@kms_ccs@pipe-a-bad-pixel-format-y_tiled_gen12_mc_ccs:
    - shard-tglb:         NOTRUN -> [SKIP][45] ([i915#3689] / [i915#3886]) +2 similar issues
   [45]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb8/igt@kms_ccs@pipe-a-bad-pixel-format-y_tiled_gen12_mc_ccs.html

  * igt@kms_ccs@pipe-a-missing-ccs-buffer-y_tiled_gen12_mc_ccs:
    - shard-kbl:          NOTRUN -> [SKIP][46] ([fdo#109271] / [i915#3886]) +10 similar issues
   [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-kbl2/igt@kms_ccs@pipe-a-missing-ccs-buffer-y_tiled_gen12_mc_ccs.html

  * igt@kms_ccs@pipe-b-ccs-on-another-bo-y_tiled_gen12_mc_ccs:
    - shard-glk:          NOTRUN -> [SKIP][47] ([fdo#109271] / [i915#3886]) +6 similar issues
   [47]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-glk2/igt@kms_ccs@pipe-b-ccs-on-another-bo-y_tiled_gen12_mc_ccs.html

  * igt@kms_ccs@pipe-c-bad-rotation-90-y_tiled_gen12_mc_ccs:
    - shard-apl:          NOTRUN -> [SKIP][48] ([fdo#109271] / [i915#3886]) +12 similar issues
   [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-apl7/igt@kms_ccs@pipe-c-bad-rotation-90-y_tiled_gen12_mc_ccs.html

  * igt@kms_ccs@pipe-d-bad-aux-stride-y_tiled_gen12_mc_ccs:
    - shard-tglb:         NOTRUN -> [SKIP][49] ([i915#3689]) +8 similar issues
   [49]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb3/igt@kms_ccs@pipe-d-bad-aux-stride-y_tiled_gen12_mc_ccs.html

  * igt@kms_chamelium@hdmi-cmp-planar-formats:
    - shard-iclb:         NOTRUN -> [SKIP][50] ([fdo#109284] / [fdo#111827]) +5 similar issues
   [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb6/igt@kms_chamelium@hdmi-cmp-planar-formats.html

  * igt@kms_chamelium@vga-edid-read:
    - shard-glk:          NOTRUN -> [SKIP][51] ([fdo#109271] / [fdo#111827]) +6 similar issues
   [51]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-glk7/igt@kms_chamelium@vga-edid-read.html

  * igt@kms_color_chamelium@pipe-a-ctm-0-75:
    - shard-kbl:          NOTRUN -> [SKIP][52] ([fdo#109271] / [fdo#111827]) +12 similar issues
   [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-kbl1/igt@kms_color_chamelium@pipe-a-ctm-0-75.html

  * igt@kms_color_chamelium@pipe-a-ctm-blue-to-red:
    - shard-snb:          NOTRUN -> [SKIP][53] ([fdo#109271] / [fdo#111827]) +15 similar issues
   [53]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-snb5/igt@kms_color_chamelium@pipe-a-ctm-blue-to-red.html

  * igt@kms_color_chamelium@pipe-a-ctm-limited-range:
    - shard-apl:          NOTRUN -> [SKIP][54] ([fdo#109271] / [fdo#111827]) +18 similar issues
   [54]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-apl1/igt@kms_color_chamelium@pipe-a-ctm-limited-range.html

  * igt@kms_color_chamelium@pipe-b-ctm-negative:
    - shard-tglb:         NOTRUN -> [SKIP][55] ([fdo#109284] / [fdo#111827]) +5 similar issues
   [55]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb3/igt@kms_color_chamelium@pipe-b-ctm-negative.html

  * igt@kms_content_protection@dp-mst-type-0:
    - shard-iclb:         NOTRUN -> [SKIP][56] ([i915#3116])
   [56]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb7/igt@kms_content_protection@dp-mst-type-0.html

  * igt@kms_content_protection@lic:
    - shard-apl:          NOTRUN -> [TIMEOUT][57] ([i915#1319])
   [57]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-apl7/igt@kms_content_protection@lic.html

  * igt@kms_cursor_crc@pipe-a-cursor-512x170-offscreen:
    - shard-iclb:         NOTRUN -> [SKIP][58] ([fdo#109278] / [fdo#109279]) +3 similar issues
   [58]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb8/igt@kms_cursor_crc@pipe-a-cursor-512x170-offscreen.html

  * igt@kms_cursor_crc@pipe-a-cursor-512x512-onscreen:
    - shard-tglb:         NOTRUN -> [SKIP][59] ([fdo#109279] / [i915#3359]) +3 similar issues
   [59]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb8/igt@kms_cursor_crc@pipe-a-cursor-512x512-onscreen.html

  * igt@kms_cursor_crc@pipe-a-cursor-suspend:
    - shard-kbl:          [PASS][60] -> [DMESG-WARN][61] ([i915#180])
   [60]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10550/shard-kbl2/igt@kms_cursor_crc@pipe-a-cursor-suspend.html
   [61]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-kbl4/igt@kms_cursor_crc@pipe-a-cursor-suspend.html

  * igt@kms_cursor_crc@pipe-b-cursor-32x32-sliding:
    - shard-tglb:         NOTRUN -> [SKIP][62] ([i915#3319]) +1 similar issue
   [62]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb1/igt@kms_cursor_crc@pipe-b-cursor-32x32-sliding.html

  * igt@kms_cursor_crc@pipe-b-cursor-max-size-sliding:
    - shard-tglb:         NOTRUN -> [SKIP][63] ([i915#3359]) +1 similar issue
   [63]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb2/igt@kms_cursor_crc@pipe-b-cursor-max-size-sliding.html

  * igt@kms_cursor_crc@pipe-b-cursor-size-change:
    - shard-glk:          [PASS][64] -> [FAIL][65] ([i915#3444])
   [64]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10550/shard-glk8/igt@kms_cursor_crc@pipe-b-cursor-size-change.html
   [65]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-glk1/igt@kms_cursor_crc@pipe-b-cursor-size-change.html

  * igt@kms_cursor_crc@pipe-c-cursor-suspend:
    - shard-apl:          NOTRUN -> [DMESG-WARN][66] ([i915#180])
   [66]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-apl2/igt@kms_cursor_crc@pipe-c-cursor-suspend.html

  * igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size:
    - shard-iclb:         NOTRUN -> [SKIP][67] ([fdo#109274] / [fdo#109278]) +1 similar issue
   [67]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb3/igt@kms_cursor_legacy@cursorb-vs-flipa-atomic-transitions-varying-size.html

  * igt@kms_cursor_legacy@pipe-d-single-bo:
    - shard-glk:          NOTRUN -> [SKIP][68] ([fdo#109271] / [i915#533]) +1 similar issue
   [68]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-glk7/igt@kms_cursor_legacy@pipe-d-single-bo.html
    - shard-apl:          NOTRUN -> [SKIP][69] ([fdo#109271] / [i915#533])
   [69]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-apl7/igt@kms_cursor_legacy@pipe-d-single-bo.html

  * igt@kms_cursor_legacy@pipe-d-single-move:
    - shard-iclb:         NOTRUN -> [SKIP][70] ([fdo#109278]) +35 similar issues
   [70]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb6/igt@kms_cursor_legacy@pipe-d-single-move.html

  * igt@kms_flip@2x-plain-flip-fb-recreate-interruptible:
    - shard-iclb:         NOTRUN -> [SKIP][71] ([fdo#109274]) +2 similar issues
   [71]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb2/igt@kms_flip@2x-plain-flip-fb-recreate-interruptible.html

  * igt@kms_flip@flip-vs-suspend@a-dp1:
    - shard-kbl:          [PASS][72] -> [INCOMPLETE][73] ([i915#155])
   [72]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10550/shard-kbl7/igt@kms_flip@flip-vs-suspend@a-dp1.html
   [73]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-kbl3/igt@kms_flip@flip-vs-suspend@a-dp1.html

  * igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs:
    - shard-kbl:          NOTRUN -> [SKIP][74] ([fdo#109271] / [i915#2672])
   [74]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-kbl3/igt@kms_flip_scaled_crc@flip-32bpp-ytile-to-32bpp-ytilegen12rcccs.html

  * igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-mmap-cpu:
    - shard-glk:          NOTRUN -> [SKIP][75] ([fdo#109271]) +103 similar issues
   [75]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-glk2/igt@kms_frontbuffer_tracking@fbcpsr-1p-offscren-pri-indfb-draw-mmap-cpu.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-indfb-plflip-blt:
    - shard-tglb:         NOTRUN -> [SKIP][76] ([fdo#111825]) +27 similar issues
   [76]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb2/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-indfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-plflip-blt:
    - shard-iclb:         NOTRUN -> [SKIP][77] ([fdo#109280]) +22 similar issues
   [77]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb7/igt@kms_frontbuffer_tracking@fbcpsr-2p-scndscrn-shrfb-plflip-blt.html

  * igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-wc:
    - shard-kbl:          NOTRUN -> [SKIP][78] ([fdo#109271]) +203 similar issues
   [78]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-kbl7/igt@kms_frontbuffer_tracking@psr-rgb101010-draw-mmap-wc.html

  * igt@kms_hdr@static-swap:
    - shard-tglb:         NOTRUN -> [SKIP][79] ([i915#1187])
   [79]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb3/igt@kms_hdr@static-swap.html
    - shard-iclb:         NOTRUN -> [SKIP][80] ([i915#1187])
   [80]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb8/igt@kms_hdr@static-swap.html

  * igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-d:
    - shard-kbl:          NOTRUN -> [SKIP][81] ([fdo#109271] / [i915#533])
   [81]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-kbl7/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-d.html

  * igt@kms_plane_alpha_blend@pipe-c-alpha-7efc:
    - shard-kbl:          NOTRUN -> [FAIL][82] ([fdo#108145] / [i915#265]) +1 similar issue
   [82]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-kbl6/igt@kms_plane_alpha_blend@pipe-c-alpha-7efc.html
    - shard-apl:          NOTRUN -> [FAIL][83] ([fdo#108145] / [i915#265]) +1 similar issue
   [83]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-apl1/igt@kms_plane_alpha_blend@pipe-c-alpha-7efc.html

  * igt@kms_plane_lowres@pipe-b-tiling-yf:
    - shard-tglb:         NOTRUN -> [SKIP][84] ([fdo#112054])
   [84]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb1/igt@kms_plane_lowres@pipe-b-tiling-yf.html

  * igt@kms_plane_scaling@scaler-with-clipping-clamping@pipe-c-scaler-with-clipping-clamping:
    - shard-kbl:          NOTRUN -> [SKIP][85] ([fdo#109271] / [i915#2733])
   [85]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-kbl7/igt@kms_plane_scaling@scaler-with-clipping-clamping@pipe-c-scaler-with-clipping-clamping.html

  * igt@kms_prime@basic-crc@first-to-second:
    - shard-iclb:         NOTRUN -> [SKIP][86] ([i915#1836])
   [86]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb6/igt@kms_prime@basic-crc@first-to-second.html

  * igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-1:
    - shard-apl:          NOTRUN -> [SKIP][87] ([fdo#109271] / [i915#658]) +2 similar issues
   [87]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-apl2/igt@kms_psr2_sf@overlay-plane-update-sf-dmg-area-1.html

  * igt@kms_psr2_sf@plane-move-sf-dmg-area-0:
    - shard-tglb:         NOTRUN -> [SKIP][88] ([i915#2920]) +1 similar issue
   [88]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb5/igt@kms_psr2_sf@plane-move-sf-dmg-area-0.html
    - shard-iclb:         NOTRUN -> [SKIP][89] ([i915#658]) +1 similar issue
   [89]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb6/igt@kms_psr2_sf@plane-move-sf-dmg-area-0.html

  * igt@kms_psr2_sf@plane-move-sf-dmg-area-2:
    - shard-glk:          NOTRUN -> [SKIP][90] ([fdo#109271] / [i915#658]) +3 similar issues
   [90]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-glk5/igt@kms_psr2_sf@plane-move-sf-dmg-area-2.html

  * igt@kms_psr2_sf@plane-move-sf-dmg-area-3:
    - shard-iclb:         NOTRUN -> [SKIP][91] ([i915#2920])
   [91]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb2/igt@kms_psr2_sf@plane-move-sf-dmg-area-3.html

  * igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-1:
    - shard-kbl:          NOTRUN -> [SKIP][92] ([fdo#109271] / [i915#658]) +1 similar issue
   [92]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-kbl1/igt@kms_psr2_sf@primary-plane-update-sf-dmg-area-1.html

  * igt@kms_psr@psr2_sprite_mmap_gtt:
    - shard-iclb:         NOTRUN -> [SKIP][93] ([fdo#109441])
   [93]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb5/igt@kms_psr@psr2_sprite_mmap_gtt.html

  * igt@kms_vblank@pipe-c-ts-continuation-suspend:
    - shard-kbl:          NOTRUN -> [DMESG-WARN][94] ([i915#180])
   [94]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-kbl3/igt@kms_vblank@pipe-c-ts-continuation-suspend.html

  * igt@kms_vrr@flip-dpms:
    - shard-iclb:         NOTRUN -> [SKIP][95] ([fdo#109502])
   [95]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb3/igt@kms_vrr@flip-dpms.html

  * igt@kms_writeback@writeback-check-output:
    - shard-apl:          NOTRUN -> [SKIP][96] ([fdo#109271] / [i915#2437]) +1 similar issue
   [96]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-apl6/igt@kms_writeback@writeback-check-output.html
    - shard-iclb:         NOTRUN -> [SKIP][97] ([i915#2437])
   [97]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb8/igt@kms_writeback@writeback-check-output.html
    - shard-kbl:          NOTRUN -> [SKIP][98] ([fdo#109271] / [i915#2437])
   [98]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-kbl2/igt@kms_writeback@writeback-check-output.html
    - shard-tglb:         NOTRUN -> [SKIP][99] ([i915#2437])
   [99]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb6/igt@kms_writeback@writeback-check-output.html
    - shard-glk:          NOTRUN -> [SKIP][100] ([fdo#109271] / [i915#2437])
   [100]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-glk1/igt@kms_writeback@writeback-check-output.html

  * igt@nouveau_crc@pipe-b-ctx-flip-skip-current-frame:
    - shard-apl:          NOTRUN -> [SKIP][101] ([fdo#109271]) +234 similar issues
   [101]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-apl2/igt@nouveau_crc@pipe-b-ctx-flip-skip-current-frame.html

  * igt@nouveau_crc@pipe-c-ctx-flip-skip-current-frame:
    - shard-tglb:         NOTRUN -> [SKIP][102] ([i915#2530])
   [102]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb3/igt@nouveau_crc@pipe-c-ctx-flip-skip-current-frame.html

  * igt@nouveau_crc@pipe-c-source-rg:
    - shard-iclb:         NOTRUN -> [SKIP][103] ([i915#2530]) +1 similar issue
   [103]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb2/igt@nouveau_crc@pipe-c-source-rg.html

  * igt@prime_nv_pcopy@test3_2:
    - shard-tglb:         NOTRUN -> [SKIP][104] ([fdo#109291]) +3 similar issues
   [104]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb8/igt@prime_nv_pcopy@test3_2.html

  * igt@prime_udl:
    - shard-iclb:         NOTRUN -> [SKIP][105] ([fdo#109291]) +1 similar issue
   [105]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb4/igt@prime_udl.html

  * igt@sysfs_clients@fair-0:
    - shard-glk:          NOTRUN -> [SKIP][106] ([fdo#109271] / [i915#2994])
   [106]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-glk5/igt@sysfs_clients@fair-0.html

  * igt@sysfs_clients@fair-7:
    - shard-apl:          NOTRUN -> [SKIP][107] ([fdo#109271] / [i915#2994]) +2 similar issues
   [107]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-apl1/igt@sysfs_clients@fair-7.html

  * igt@sysfs_clients@split-10:
    - shard-iclb:         NOTRUN -> [SKIP][108] ([i915#2994])
   [108]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb2/igt@sysfs_clients@split-10.html

  * igt@sysfs_clients@split-25:
    - shard-kbl:          NOTRUN -> [SKIP][109] ([fdo#109271] / [i915#2994]) +1 similar issue
   [109]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-kbl6/igt@sysfs_clients@split-25.html

  * igt@sysfs_timeslice_duration@timeout@vecs0:
    - shard-iclb:         [PASS][110] -> [FAIL][111] ([i915#1755])
   [110]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10550/shard-iclb3/igt@sysfs_timeslice_duration@timeout@vecs0.html
   [111]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb3/igt@sysfs_timeslice_duration@timeout@vecs0.html
    - shard-glk:          [PASS][112] -> [FAIL][113] ([i915#1755])
   [112]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10550/shard-glk7/igt@sysfs_timeslice_duration@timeout@vecs0.html
   [113]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-glk4/igt@sysfs_timeslice_duration@timeout@vecs0.html
    - shard-apl:          NOTRUN -> [FAIL][114] ([i915#1755])
   [114]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-apl3/igt@sysfs_timeslice_duration@timeout@vecs0.html
    - shard-tglb:         [PASS][115] -> [FAIL][116] ([i915#1755])
   [115]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10550/shard-tglb1/igt@sysfs_timeslice_duration@timeout@vecs0.html
   [116]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb7/igt@sysfs_timeslice_duration@timeout@vecs0.html

  
#### Possible fixes ####

  * igt@feature_discovery@psr2:
    - shard-iclb:         [SKIP][117] ([i915#658]) -> [PASS][118]
   [117]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10550/shard-iclb4/igt@feature_discovery@psr2.html
   [118]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-iclb2/igt@feature_discovery@psr2.html

  * igt@gem_exec_fair@basic-pace@rcs0:
    - shard-kbl:          [FAIL][119] ([i915#2842]) -> [PASS][120]
   [119]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10550/shard-kbl2/igt@gem_exec_fair@basic-pace@rcs0.html
   [120]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-kbl6/igt@gem_exec_fair@basic-pace@rcs0.html

  * igt@gem_exec_fair@basic-pace@vcs0:
    - shard-tglb:         [FAIL][121] ([i915#2842]) -> [PASS][122]
   [121]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_10550/shard-tglb3/igt@gem_exec_fair@basic-pace@vcs0.html
   [122]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/shard-tglb8/igt@gem_exec_fair@basic-pace@vcs0.html

  * igt@gem_exec_fair@basic-throttle@rcs0:

== Logs ==

For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_6197/index.html

[-- Attachment #2: Type: text/html, Size: 34296 bytes --]

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [igt-dev] [PATCH i-g-t v3 0/7] tests/kms_color: 3D LUT tests
  2021-09-03 16:27 [igt-dev] [PATCH i-g-t v3 0/7] tests/kms_color: 3D LUT tests Ville Syrjala
                   ` (8 preceding siblings ...)
  2021-09-03 19:46 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
@ 2021-09-06  6:37 ` Modem, Bhanuprakash
  9 siblings, 0 replies; 19+ messages in thread
From: Modem, Bhanuprakash @ 2021-09-06  6:37 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

> From: Ville Syrjala <ville.syrjala@linux.intel.com>
> Sent: Friday, September 3, 2021 9:58 PM
> To: igt-dev@lists.freedesktop.org
> Cc: Modem, Bhanuprakash <bhanuprakash.modem@intel.com>
> Subject: [PATCH i-g-t v3 0/7] tests/kms_color: 3D LUT tests
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Updated set of 3D LUT tests and associated refactoring/fixes.
> 
> Cc: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>
> 
> Ville Syrjälä (7):
>   tests/kms_color_chamelium: Remove invalid LUT size tests
>   tests/kms_color: Refactor invalid LUT size tests
>   tests/kms_color: Store r/g/b separately for LUT color tests
>   tests/kms_color: Pass pipe to invalid LUT size tests
>   tests/kms_color: Run each subtest only for a single connector
>   lib/kms: Add GAMMA_LUT_3D support
>   tests/kms_color: Add GAMMA_LUT_3D tests
 
Except few minor comments, overall this series is looks good to me.

-Bhanu

> 
>  lib/igt_kms.c               |   5 +
>  lib/igt_kms.h               |   2 +
>  tests/kms_color.c           | 782 +++++++++++++++++++++---------------
>  tests/kms_color_chamelium.c |  11 -
>  tests/kms_color_helper.c    | 181 +++++----
>  tests/kms_color_helper.h    |  27 +-
>  6 files changed, 587 insertions(+), 421 deletions(-)
> 
> --
> 2.31.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [igt-dev] [PATCH i-g-t v3 2/7] tests/kms_color: Refactor invalid LUT size tests
  2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 2/7] tests/kms_color: Refactor " Ville Syrjala
@ 2021-09-06  6:37   ` Modem, Bhanuprakash
  0 siblings, 0 replies; 19+ messages in thread
From: Modem, Bhanuprakash @ 2021-09-06  6:37 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

> From: Ville Syrjala <ville.syrjala@linux.intel.com>
> Sent: Friday, September 3, 2021 9:58 PM
> To: igt-dev@lists.freedesktop.org
> Cc: Modem, Bhanuprakash <bhanuprakash.modem@intel.com>
> Subject: [PATCH i-g-t v3 2/7] tests/kms_color: Refactor invalid LUT size tests
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Reuse the same code for all invalid LUT size tests.
> 
> v2: Drop the pointless return statements in void functions
> 
> Cc: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

LGTM
Reviewed-by: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>

> ---
>  tests/kms_color_helper.c | 81 +++++++++++++---------------------------
>  1 file changed, 26 insertions(+), 55 deletions(-)
> 
> diff --git a/tests/kms_color_helper.c b/tests/kms_color_helper.c
> index 5f223a88129f..68fa5f0e42ea 100644
> --- a/tests/kms_color_helper.c
> +++ b/tests/kms_color_helper.c
> @@ -277,77 +277,48 @@ pipe_set_property_blob(igt_pipe_t *pipe,
>  				       COMMIT_ATOMIC : COMMIT_LEGACY);
>  }
> 
> -void
> -invalid_gamma_lut_sizes(data_t *data)
> +static void
> +invalid_lut_sizes(data_t *data, enum igt_atomic_crtc_properties prop, int
> size)
>  {
>  	igt_display_t *display = &data->display;
>  	igt_pipe_t *pipe = &display->pipes[0];
> -	size_t gamma_lut_size = data->gamma_lut_size *
> -				sizeof(struct drm_color_lut);
> -	struct drm_color_lut *gamma_lut;
> +	struct drm_color_lut *lut;
> +	size_t lut_size = size * sizeof(lut[0]);
> 
> -	igt_require(igt_pipe_obj_has_prop(pipe, IGT_CRTC_GAMMA_LUT));
> +	igt_require(igt_pipe_obj_has_prop(pipe, prop));
> 
> -	gamma_lut = malloc(gamma_lut_size * 2);
> +	lut = malloc(lut_size * 2);
> 
>  	igt_display_commit2(display,
>  			    display->is_atomic ?
>  			    COMMIT_ATOMIC : COMMIT_LEGACY);
> 
> -	igt_assert_eq(pipe_set_property_blob(pipe, IGT_CRTC_GAMMA_LUT,
> -					     gamma_lut, 1), -EINVAL);
> -	igt_assert_eq(pipe_set_property_blob(pipe, IGT_CRTC_GAMMA_LUT,
> -					     gamma_lut, gamma_lut_size + 1),
> -					     -EINVAL);
> -	igt_assert_eq(pipe_set_property_blob(pipe, IGT_CRTC_GAMMA_LUT,
> -					     gamma_lut, gamma_lut_size - 1),
> -					     -EINVAL);
> -	igt_assert_eq(pipe_set_property_blob(pipe, IGT_CRTC_GAMMA_LUT,
> -					     gamma_lut, gamma_lut_size +
> -					     sizeof(struct drm_color_lut)),
> -					     -EINVAL);
> -	igt_assert_eq(pipe_set_property_blob_id(pipe, IGT_CRTC_GAMMA_LUT,
> -		      pipe->crtc_id), -EINVAL);
> -	igt_assert_eq(pipe_set_property_blob_id(pipe, IGT_CRTC_GAMMA_LUT,
> -		      4096 * 4096), -EINVAL);
> +	igt_assert_eq(pipe_set_property_blob(pipe, prop, lut,
> +					     1), -EINVAL);
> +	igt_assert_eq(pipe_set_property_blob(pipe, prop, lut,
> +					     lut_size + 1), -EINVAL);
> +	igt_assert_eq(pipe_set_property_blob(pipe, prop, lut,
> +					     lut_size - 1), -EINVAL);
> +	igt_assert_eq(pipe_set_property_blob(pipe, prop, lut,
> +					     lut_size + sizeof(struct drm_color_lut)), -
> EINVAL);
> +	igt_assert_eq(pipe_set_property_blob_id(pipe, prop,
> +						pipe->crtc_id), -EINVAL);
> +	igt_assert_eq(pipe_set_property_blob_id(pipe, prop,
> +						4096 * 4096), -EINVAL);
> 
> -	free(gamma_lut);
> +	free(lut);
> +}
> +
> +void
> +invalid_gamma_lut_sizes(data_t *data)
> +{
> +	invalid_lut_sizes(data, IGT_CRTC_GAMMA_LUT, data->gamma_lut_size);
>  }
> 
>  void
>  invalid_degamma_lut_sizes(data_t *data)
>  {
> -	igt_display_t *display = &data->display;
> -	igt_pipe_t *pipe = &display->pipes[0];
> -	size_t degamma_lut_size = data->degamma_lut_size *
> -				  sizeof(struct drm_color_lut);
> -	struct drm_color_lut *degamma_lut;
> -
> -	igt_require(igt_pipe_obj_has_prop(pipe, IGT_CRTC_DEGAMMA_LUT));
> -
> -	degamma_lut = malloc(degamma_lut_size * 2);
> -
> -	igt_display_commit2(display, display->is_atomic ?
> -			    COMMIT_ATOMIC : COMMIT_LEGACY);
> -
> -	igt_assert_eq(pipe_set_property_blob(pipe, IGT_CRTC_DEGAMMA_LUT,
> -					     degamma_lut, 1), -EINVAL);
> -	igt_assert_eq(pipe_set_property_blob(pipe, IGT_CRTC_DEGAMMA_LUT,
> -					     degamma_lut, degamma_lut_size + 1),
> -					     -EINVAL);
> -	igt_assert_eq(pipe_set_property_blob(pipe, IGT_CRTC_DEGAMMA_LUT,
> -					     degamma_lut, degamma_lut_size - 1),
> -					     -EINVAL);
> -	igt_assert_eq(pipe_set_property_blob(pipe, IGT_CRTC_DEGAMMA_LUT,
> -					     degamma_lut, degamma_lut_size +
> -					     sizeof(struct drm_color_lut)),
> -					     -EINVAL);
> -	igt_assert_eq(pipe_set_property_blob_id(pipe, IGT_CRTC_DEGAMMA_LUT,
> -						pipe->crtc_id), -EINVAL);
> -	igt_assert_eq(pipe_set_property_blob_id(pipe, IGT_CRTC_DEGAMMA_LUT,
> -						4096 * 4096), -EINVAL);
> -
> -	free(degamma_lut);
> +	invalid_lut_sizes(data, IGT_CRTC_DEGAMMA_LUT, data->degamma_lut_size);
>  }
> 
>  void invalid_ctm_matrix_sizes(data_t *data)
> --
> 2.31.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [igt-dev] [PATCH i-g-t v3 4/7] tests/kms_color: Pass pipe to invalid LUT size tests
  2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 4/7] tests/kms_color: Pass pipe to invalid LUT size tests Ville Syrjala
@ 2021-09-06  6:37   ` Modem, Bhanuprakash
  2021-09-07 17:26     ` Ville Syrjälä
  0 siblings, 1 reply; 19+ messages in thread
From: Modem, Bhanuprakash @ 2021-09-06  6:37 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

> From: Ville Syrjala <ville.syrjala@linux.intel.com>
> Sent: Friday, September 3, 2021 9:58 PM
> To: igt-dev@lists.freedesktop.org
> Cc: Modem, Bhanuprakash <bhanuprakash.modem@intel.com>
> Subject: [PATCH i-g-t v3 4/7] tests/kms_color: Pass pipe to invalid LUT size
> tests
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Each pipe can have a different LUT sizes, so run the invalid LUT
> size tests once for each pipe.
> 
> This also makes sure data->(de)gamma_lut_size are properly initialized
> prior to running these subtests.
> 
> Cc: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  tests/kms_color.c        | 73 +++++++++++++++++++++++++---------------
>  tests/kms_color_helper.c | 17 +++++-----
>  tests/kms_color_helper.h |  7 ++--
>  3 files changed, 58 insertions(+), 39 deletions(-)
> 
> diff --git a/tests/kms_color.c b/tests/kms_color.c
> index 9105076aba4f..dabc6963e9e0 100644
> --- a/tests/kms_color.c
> +++ b/tests/kms_color.c
> @@ -638,6 +638,26 @@ static void test_pipe_limited_range_ctm(data_t *data,
>  }
>  #endif
> 
> +static void
> +prep_pipe(data_t *data, enum pipe p)
> +{
> +	igt_require_pipe(&data->display, p);
> +
> +	if (igt_pipe_obj_has_prop(&data->display.pipes[p],
> IGT_CRTC_DEGAMMA_LUT_SIZE)) {
> +		data->degamma_lut_size =
> +			igt_pipe_obj_get_prop(&data->display.pipes[p],
> +					      IGT_CRTC_DEGAMMA_LUT_SIZE);
> +		igt_assert_lt(0, data->degamma_lut_size);
> +	}
> +
> +	if (igt_pipe_obj_has_prop(&data->display.pipes[p],
> IGT_CRTC_GAMMA_LUT_SIZE)) {
> +		data->gamma_lut_size =
> +			igt_pipe_obj_get_prop(&data->display.pipes[p],
> +					      IGT_CRTC_GAMMA_LUT_SIZE);
> +		igt_assert_lt(0, data->gamma_lut_size);
> +	}
> +}
> +
>  static void
>  run_tests_for_pipe(data_t *data, enum pipe p)
>  {
> @@ -652,10 +672,10 @@ run_tests_for_pipe(data_t *data, enum pipe p)
>  	};
> 
>  	igt_fixture {
> +		prep_pipe(data, p);
> +
>  		igt_require_pipe_crc(data->drm_fd);
> 
> -		igt_require_pipe(&data->display, p);
> -
>  		pipe = &data->display.pipes[p];
>  		igt_require(pipe->n_planes >= 0);
> 
> @@ -665,20 +685,6 @@ run_tests_for_pipe(data_t *data, enum pipe p)
>  						  primary->pipe->pipe,
>  						  INTEL_PIPE_CRC_SOURCE_AUTO);
> 
> -		if (igt_pipe_obj_has_prop(&data->display.pipes[p],
> IGT_CRTC_DEGAMMA_LUT_SIZE)) {
> -			data->degamma_lut_size =
> -				igt_pipe_obj_get_prop(&data->display.pipes[p],
> -						      IGT_CRTC_DEGAMMA_LUT_SIZE);
> -			igt_assert_lt(0, data->degamma_lut_size);
> -		}
> -
> -		if (igt_pipe_obj_has_prop(&data->display.pipes[p],
> IGT_CRTC_GAMMA_LUT_SIZE)) {
> -			data->gamma_lut_size =
> -				igt_pipe_obj_get_prop(&data->display.pipes[p],
> -						      IGT_CRTC_GAMMA_LUT_SIZE);
> -			igt_assert_lt(0, data->gamma_lut_size);
> -		}
> -
>  		igt_display_require_output_on_pipe(&data->display, p);
>  	}
> 
> @@ -865,6 +871,25 @@ run_tests_for_pipe(data_t *data, enum pipe p)
>  	}
>  }
> 
> +static void
> +run_invalid_tests_for_pipe(data_t *data, enum pipe p)
> +{
> +	igt_fixture
> +		prep_pipe(data, p);
> +
> +	igt_describe("Negative check for invalid gamma lut sizes");
> +	igt_subtest_f("pipe-%s-invalid-gamma-lut-sizes", kmstest_pipe_name(p))
> +		invalid_gamma_lut_sizes(data, p);
> +
> +	igt_describe("Negative check for invalid degamma lut sizes");
> +	igt_subtest_f("pipe-%s-invalid-degamma-lut-sizes", kmstest_pipe_name(p))
> +		invalid_degamma_lut_sizes(data, p);
> +
> +	igt_describe("Negative check for color tranformation matrix sizes");
> +	igt_subtest_f("pipe-%s-invalid-ctm-matrix-sizes", kmstest_pipe_name(p))
> +		invalid_ctm_matrix_sizes(data, p);
> +}
> +
>  igt_main
>  {
>  	data_t data = {};
> @@ -879,21 +904,13 @@ igt_main
>  		igt_display_require(&data.display, data.drm_fd);
>  	}
> 
> -	for_each_pipe_static(pipe)
> +	for_each_pipe_static(pipe) {
>  		igt_subtest_group
>  			run_tests_for_pipe(&data, pipe);
> 
> -	igt_describe("Negative check for invalid gamma lut sizes");
> -	igt_subtest_f("pipe-invalid-gamma-lut-sizes")
> -		invalid_gamma_lut_sizes(&data);
> -
> -	igt_describe("Negative check for invalid degamma lut sizes");
> -	igt_subtest_f("pipe-invalid-degamma-lut-sizes")
> -		invalid_degamma_lut_sizes(&data);
> -
> -	igt_describe("Negative check for color tranformation matrix sizes");
> -	igt_subtest_f("pipe-invalid-ctm-matrix-sizes")
> -		invalid_ctm_matrix_sizes(&data);
> +		igt_subtest_group
> +			run_invalid_tests_for_pipe(&data, pipe);
> +	}
> 
>  	igt_fixture {
>  		igt_display_fini(&data.display);
> diff --git a/tests/kms_color_helper.c b/tests/kms_color_helper.c
> index 8b08cdaeea5f..d71e7bb2e6f9 100644
> --- a/tests/kms_color_helper.c
> +++ b/tests/kms_color_helper.c
> @@ -287,10 +287,11 @@ pipe_set_property_blob(igt_pipe_t *pipe,
>  }
> 
>  static void
> -invalid_lut_sizes(data_t *data, enum igt_atomic_crtc_properties prop, int
> size)
> +invalid_lut_sizes(data_t *data, enum pipe p,
> +		  enum igt_atomic_crtc_properties prop, int size)
>  {
>  	igt_display_t *display = &data->display;
> -	igt_pipe_t *pipe = &display->pipes[0];
> +	igt_pipe_t *pipe = &display->pipes[p];
>  	struct drm_color_lut *lut;
>  	size_t lut_size = size * sizeof(lut[0]);
> 
> @@ -319,21 +320,21 @@ invalid_lut_sizes(data_t *data, enum
> igt_atomic_crtc_properties prop, int size)
>  }
> 
>  void
> -invalid_gamma_lut_sizes(data_t *data)
> +invalid_gamma_lut_sizes(data_t *data, enum pipe p)
>  {
> -	invalid_lut_sizes(data, IGT_CRTC_GAMMA_LUT, data->gamma_lut_size);
> +	invalid_lut_sizes(data, p, IGT_CRTC_GAMMA_LUT, data->gamma_lut_size);
 
Still, it is possible to get data->gamma_lut_size as NULL, b'coz prep_pipe()
will not initialize if GAMMA_LUT_SIZE prop is not present.

`igt_require(data->gamma_lut_size);` or
`igt_require(igt_pipe_obj_has_prop(p, IGT_CRTC_GAMMA_LUT_SIZE));` before
calling invalid_lut_sizes() can fix this.

>  }
> 
>  void
> -invalid_degamma_lut_sizes(data_t *data)
> +invalid_degamma_lut_sizes(data_t *data, enum pipe p)
>  {
> -	invalid_lut_sizes(data, IGT_CRTC_DEGAMMA_LUT, data->degamma_lut_size);
> +	invalid_lut_sizes(data, p, IGT_CRTC_DEGAMMA_LUT, data-
> >degamma_lut_size);
 
Please consider the above comment.

With above change, this patch is
Reviewed-by: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>

- Bhanu

>  }
> 
> -void invalid_ctm_matrix_sizes(data_t *data)
> +void invalid_ctm_matrix_sizes(data_t *data, enum pipe p)
>  {
>  	igt_display_t *display = &data->display;
> -	igt_pipe_t *pipe = &display->pipes[0];
> +	igt_pipe_t *pipe = &display->pipes[p];
>  	void *ptr;
> 
>  	igt_require(igt_pipe_obj_has_prop(pipe, IGT_CRTC_CTM));
> diff --git a/tests/kms_color_helper.h b/tests/kms_color_helper.h
> index 3f49e7cae4c0..bb6f0054f388 100644
> --- a/tests/kms_color_helper.h
> +++ b/tests/kms_color_helper.h
> @@ -103,8 +103,9 @@ int pipe_set_property_blob_id(igt_pipe_t *pipe,
>  int pipe_set_property_blob(igt_pipe_t *pipe,
>  			   enum igt_atomic_crtc_properties prop,
>  			   void *ptr, size_t length);
> -void invalid_gamma_lut_sizes(data_t *data);
> -void invalid_degamma_lut_sizes(data_t *data);
> -void invalid_ctm_matrix_sizes(data_t *data);
> +void invalid_gamma_lut_sizes(data_t *data, enum pipe p);
> +void invalid_degamma_lut_sizes(data_t *data, enum pipe p);
> +void invalid_ctm_matrix_sizes(data_t *data, enum pipe p);
> +
>  #endif
> 
> --
> 2.31.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [igt-dev] [PATCH i-g-t v3 5/7] tests/kms_color: Run each subtest only for a single connector
  2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 5/7] tests/kms_color: Run each subtest only for a single connector Ville Syrjala
@ 2021-09-06  6:38   ` Modem, Bhanuprakash
  2021-09-07 17:34     ` Ville Syrjälä
  0 siblings, 1 reply; 19+ messages in thread
From: Modem, Bhanuprakash @ 2021-09-06  6:38 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

> From: Ville Syrjala <ville.syrjala@linux.intel.com>
> Sent: Friday, September 3, 2021 9:58 PM
> To: igt-dev@lists.freedesktop.org
> Cc: Modem, Bhanuprakash <bhanuprakash.modem@intel.com>
> Subject: [PATCH i-g-t v3 5/7] tests/kms_color: Run each subtest only for a
> single connector
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> For most of the subtests the used connector should not matter,
> so run each subtest just for a single connector.
> 
> Suggested-by: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  tests/kms_color.c | 612 +++++++++++++++++++++++-----------------------
>  1 file changed, 306 insertions(+), 306 deletions(-)
> 
> diff --git a/tests/kms_color.c b/tests/kms_color.c
> index dabc6963e9e0..d78c7e211511 100644
> --- a/tests/kms_color.c
> +++ b/tests/kms_color.c
> @@ -37,6 +37,10 @@ static void test_pipe_degamma(data_t *data,
>  		{ 0.0, 1.0, 0.0 },
>  		{ 0.0, 0.0, 1.0 }
>  	};
> +	drmModeModeInfo *mode;
> +	struct igt_fb fb_modeset, fb;
> +	igt_crc_t crc_fullgamma, crc_fullcolors;
> +	int fb_id, fb_modeset_id;
> 
>  	igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT));
>  	igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_GAMMA_LUT));
> @@ -44,69 +48,65 @@ static void test_pipe_degamma(data_t *data,
>  	degamma_linear = generate_table(data->degamma_lut_size, 1.0);
>  	degamma_full = generate_table_max(data->degamma_lut_size);
> 
> -	for_each_valid_output_on_pipe(&data->display, primary->pipe->pipe,
> output) {
> -		drmModeModeInfo *mode;
> -		struct igt_fb fb_modeset, fb;
> -		igt_crc_t crc_fullgamma, crc_fullcolors;
> -		int fb_id, fb_modeset_id;
> +	output = igt_get_single_output_for_pipe(&data->display, primary->pipe-
> >pipe);
> +	igt_require(output);
> 
> -		igt_output_set_pipe(output, primary->pipe->pipe);
> -		mode = igt_output_get_mode(output);
> +	igt_output_set_pipe(output, primary->pipe->pipe);
> +	mode = igt_output_get_mode(output);
> 
> -		/* Create a framebuffer at the size of the output. */
> -		fb_id = igt_create_fb(data->drm_fd,
> +	/* Create a framebuffer at the size of the output. */
> +	fb_id = igt_create_fb(data->drm_fd,
> +			      mode->hdisplay,
> +			      mode->vdisplay,
> +			      DRM_FORMAT_XRGB8888,
> +			      DRM_FORMAT_MOD_NONE,
> +			      &fb);
> +	igt_assert(fb_id);
 
Minor: we can get rid of extra variables by updating like
`igt_assert(igt_create_fb());`

And this is applicable for all the places.

> +
> +	fb_modeset_id = igt_create_fb(data->drm_fd,
>  				      mode->hdisplay,
>  				      mode->vdisplay,
>  				      DRM_FORMAT_XRGB8888,
>  				      DRM_FORMAT_MOD_NONE,
> -				      &fb);
> -		igt_assert(fb_id);
> +				      &fb_modeset);
> +	igt_assert(fb_modeset_id);
> 
> -		fb_modeset_id = igt_create_fb(data->drm_fd,
> -					      mode->hdisplay,
> -					      mode->vdisplay,
> -					      DRM_FORMAT_XRGB8888,
> -					      DRM_FORMAT_MOD_NONE,
> -					      &fb_modeset);
> -		igt_assert(fb_modeset_id);
> +	igt_plane_set_fb(primary, &fb_modeset);
> +	disable_ctm(primary->pipe);
> +	disable_gamma(primary->pipe);
> +	set_degamma(data, primary->pipe, degamma_linear);
> +	igt_display_commit(&data->display);
> 
> -		igt_plane_set_fb(primary, &fb_modeset);
> -		disable_ctm(primary->pipe);
> -		disable_gamma(primary->pipe);
> -		set_degamma(data, primary->pipe, degamma_linear);
> -		igt_display_commit(&data->display);
> +	/* Draw solid colors with linear degamma transformation. */
> +	paint_rectangles(data, mode, red_green_blue, &fb);
> +	igt_plane_set_fb(primary, &fb);
> +	igt_display_commit(&data->display);
> +	igt_wait_for_vblank(data->drm_fd,
> +			    display->pipes[primary->pipe->pipe].crtc_offset);
> +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
> 
> -		/* Draw solid colors with linear degamma transformation. */
> -		paint_rectangles(data, mode, red_green_blue, &fb);
> -		igt_plane_set_fb(primary, &fb);
> -		igt_display_commit(&data->display);
> -		igt_wait_for_vblank(data->drm_fd,
> -				display->pipes[primary->pipe->pipe].crtc_offset);
> -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
> +	/* Draw a gradient with degamma LUT to remap all
> +	 * values to max red/green/blue.
> +	 */
> +	paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> +	igt_plane_set_fb(primary, &fb);
> +	set_degamma(data, primary->pipe, degamma_full);
> +	igt_display_commit(&data->display);
> +	igt_wait_for_vblank(data->drm_fd,
> +			    display->pipes[primary->pipe->pipe].crtc_offset);
> +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
> 
> -		/* Draw a gradient with degamma LUT to remap all
> -		 * values to max red/green/blue.
> -		 */
> -		paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> -		igt_plane_set_fb(primary, &fb);
> -		set_degamma(data, primary->pipe, degamma_full);
> -		igt_display_commit(&data->display);
> -		igt_wait_for_vblank(data->drm_fd,
> -				display->pipes[primary->pipe->pipe].crtc_offset);
> -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
> +	/* Verify that the CRC of the software computed output is
> +	 * equal to the CRC of the degamma LUT transformation output.
> +	 */
> +	igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
> 
> -		/* Verify that the CRC of the software computed output is
> -		 * equal to the CRC of the degamma LUT transformation output.
> -		 */
> -		igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
> -
> -		disable_degamma(primary->pipe);
> -		igt_plane_set_fb(primary, NULL);
> -		igt_output_set_pipe(output, PIPE_NONE);
> -		igt_display_commit(&data->display);
> -		igt_remove_fb(data->drm_fd, &fb);
> -		igt_remove_fb(data->drm_fd, &fb_modeset);
> -	}
> +	disable_degamma(primary->pipe);
> +	igt_plane_set_fb(primary, NULL);
> +	igt_output_set_pipe(output, PIPE_NONE);
> +	igt_display_commit(&data->display);
> +	igt_remove_fb(data->drm_fd, &fb);
> +	igt_remove_fb(data->drm_fd, &fb_modeset);
> 
>  	free_lut(degamma_linear);
>  	free_lut(degamma_full);
> @@ -127,73 +127,73 @@ static void test_pipe_gamma(data_t *data,
>  		{ 0.0, 1.0, 0.0 },
>  		{ 0.0, 0.0, 1.0 }
>  	};
> +	drmModeModeInfo *mode;
> +	struct igt_fb fb_modeset, fb;
> +	igt_crc_t crc_fullgamma, crc_fullcolors;
> +	int fb_id, fb_modeset_id;
> 
>  	igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_GAMMA_LUT));
> 
>  	gamma_full = generate_table_max(data->gamma_lut_size);
> 
> -	for_each_valid_output_on_pipe(&data->display, primary->pipe->pipe,
> output) {
> -		drmModeModeInfo *mode;
> -		struct igt_fb fb_modeset, fb;
> -		igt_crc_t crc_fullgamma, crc_fullcolors;
> -		int fb_id, fb_modeset_id;
> +	output = igt_get_single_output_for_pipe(&data->display, primary->pipe-
> >pipe);
> +	igt_require(output);
> 
> -		igt_output_set_pipe(output, primary->pipe->pipe);
> -		mode = igt_output_get_mode(output);
> +	igt_output_set_pipe(output, primary->pipe->pipe);
> +	mode = igt_output_get_mode(output);
> 
> -		/* Create a framebuffer at the size of the output. */
> -		fb_id = igt_create_fb(data->drm_fd,
> +	/* Create a framebuffer at the size of the output. */
> +	fb_id = igt_create_fb(data->drm_fd,
> +			      mode->hdisplay,
> +			      mode->vdisplay,
> +			      DRM_FORMAT_XRGB8888,
> +			      DRM_FORMAT_MOD_NONE,
> +			      &fb);
> +	igt_assert(fb_id);
> +
> +	fb_modeset_id = igt_create_fb(data->drm_fd,
>  				      mode->hdisplay,
>  				      mode->vdisplay,
>  				      DRM_FORMAT_XRGB8888,
>  				      DRM_FORMAT_MOD_NONE,
> -				      &fb);
> -		igt_assert(fb_id);
> +				      &fb_modeset);
> +	igt_assert(fb_modeset_id);
> 
> -		fb_modeset_id = igt_create_fb(data->drm_fd,
> -					      mode->hdisplay,
> -					      mode->vdisplay,
> -					      DRM_FORMAT_XRGB8888,
> -					      DRM_FORMAT_MOD_NONE,
> -					      &fb_modeset);
> -		igt_assert(fb_modeset_id);
> +	igt_plane_set_fb(primary, &fb_modeset);
> +	disable_ctm(primary->pipe);
> +	disable_degamma(primary->pipe);
> +	set_gamma(data, primary->pipe, gamma_full);
 
This could be disable_gamma(), right?

> +	igt_display_commit(&data->display);
> 
> -		igt_plane_set_fb(primary, &fb_modeset);
> -		disable_ctm(primary->pipe);
> -		disable_degamma(primary->pipe);
> -		set_gamma(data, primary->pipe, gamma_full);
> -		igt_display_commit(&data->display);
> +	/* Draw solid colors with no gamma transformation. */
> +	paint_rectangles(data, mode, red_green_blue, &fb);
> +	igt_plane_set_fb(primary, &fb);
> +	igt_display_commit(&data->display);
> +	igt_wait_for_vblank(data->drm_fd,
> +			    display->pipes[primary->pipe->pipe].crtc_offset);
> +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
> 
> -		/* Draw solid colors with no gamma transformation. */
> -		paint_rectangles(data, mode, red_green_blue, &fb);
> -		igt_plane_set_fb(primary, &fb);
> -		igt_display_commit(&data->display);
> -		igt_wait_for_vblank(data->drm_fd,
> -				display->pipes[primary->pipe->pipe].crtc_offset);
> -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
> +	/* Draw a gradient with gamma LUT to remap all values
> +	 * to max red/green/blue.
> +	 */
> +	paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> +	igt_plane_set_fb(primary, &fb);
 
And here we need to set the gamma: set_gamma(gamma_max)

With these changes, this patch is
Reviewed-by: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>

- Bhanu

> +	igt_display_commit(&data->display);
> +	igt_wait_for_vblank(data->drm_fd,
> +			    display->pipes[primary->pipe->pipe].crtc_offset);
> +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
> 
> -		/* Draw a gradient with gamma LUT to remap all values
> -		 * to max red/green/blue.
> -		 */
> -		paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> -		igt_plane_set_fb(primary, &fb);
> -		igt_display_commit(&data->display);
> -		igt_wait_for_vblank(data->drm_fd,
> -				display->pipes[primary->pipe->pipe].crtc_offset);
> -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
> +	/* Verify that the CRC of the software computed output is
> +	 * equal to the CRC of the gamma LUT transformation output.
> +	 */
> +	igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
> 
> -		/* Verify that the CRC of the software computed output is
> -		 * equal to the CRC of the gamma LUT transformation output.
> -		 */
> -		igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
> -
> -		disable_gamma(primary->pipe);
> -		igt_plane_set_fb(primary, NULL);
> -		igt_output_set_pipe(output, PIPE_NONE);
> -		igt_display_commit(&data->display);
> -		igt_remove_fb(data->drm_fd, &fb);
> -		igt_remove_fb(data->drm_fd, &fb_modeset);
> -	}
> +	disable_gamma(primary->pipe);
> +	igt_plane_set_fb(primary, NULL);
> +	igt_output_set_pipe(output, PIPE_NONE);
> +	igt_display_commit(&data->display);
> +	igt_remove_fb(data->drm_fd, &fb);
> +	igt_remove_fb(data->drm_fd, &fb_modeset);
> 
>  	free_lut(gamma_full);
>  }
> @@ -216,6 +216,10 @@ static void test_pipe_legacy_gamma(data_t *data,
>  	drmModeCrtc *kms_crtc;
>  	uint32_t i, legacy_lut_size;
>  	uint16_t *red_lut, *green_lut, *blue_lut;
> +	drmModeModeInfo *mode;
> +	struct igt_fb fb_modeset, fb;
> +	igt_crc_t crc_fullgamma, crc_fullcolors;
> +	int fb_id, fb_modeset_id;
> 
>  	kms_crtc = drmModeGetCrtc(data->drm_fd, primary->pipe->crtc_id);
>  	legacy_lut_size = kms_crtc->gamma_size;
> @@ -225,80 +229,76 @@ static void test_pipe_legacy_gamma(data_t *data,
>  	green_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
>  	blue_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> 
> -	for_each_valid_output_on_pipe(&data->display, primary->pipe->pipe,
> output) {
> -		drmModeModeInfo *mode;
> -		struct igt_fb fb_modeset, fb;
> -		igt_crc_t crc_fullgamma, crc_fullcolors;
> -		int fb_id, fb_modeset_id;
> +	output = igt_get_single_output_for_pipe(&data->display, primary->pipe-
> >pipe);
> +	igt_require(output);
> 
> -		igt_output_set_pipe(output, primary->pipe->pipe);
> -		mode = igt_output_get_mode(output);
> +	igt_output_set_pipe(output, primary->pipe->pipe);
> +	mode = igt_output_get_mode(output);
> 
> -		/* Create a framebuffer at the size of the output. */
> -		fb_id = igt_create_fb(data->drm_fd,
> +	/* Create a framebuffer at the size of the output. */
> +	fb_id = igt_create_fb(data->drm_fd,
> +			      mode->hdisplay,
> +			      mode->vdisplay,
> +			      DRM_FORMAT_XRGB8888,
> +			      DRM_FORMAT_MOD_NONE,
> +			      &fb);
> +	igt_assert(fb_id);
> +
> +	fb_modeset_id = igt_create_fb(data->drm_fd,
>  				      mode->hdisplay,
>  				      mode->vdisplay,
>  				      DRM_FORMAT_XRGB8888,
>  				      DRM_FORMAT_MOD_NONE,
> -				      &fb);
> -		igt_assert(fb_id);
> -
> -		fb_modeset_id = igt_create_fb(data->drm_fd,
> -					      mode->hdisplay,
> -					      mode->vdisplay,
> -					      DRM_FORMAT_XRGB8888,
> -					      DRM_FORMAT_MOD_NONE,
> -					      &fb_modeset);
> -		igt_assert(fb_modeset_id);
> -
> -		igt_plane_set_fb(primary, &fb_modeset);
> -		disable_degamma(primary->pipe);
> -		disable_gamma(primary->pipe);
> -		disable_ctm(primary->pipe);
> -		igt_display_commit(&data->display);
> -
> -		/* Draw solid colors with no gamma transformation. */
> -		paint_rectangles(data, mode, red_green_blue, &fb);
> -		igt_plane_set_fb(primary, &fb);
> -		igt_display_commit(&data->display);
> -		igt_wait_for_vblank(data->drm_fd,
> -				display->pipes[primary->pipe->pipe].crtc_offset);
> -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
> -
> -		/* Draw a gradient with gamma LUT to remap all values
> -		 * to max red/green/blue.
> -		 */
> -		paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> -		igt_plane_set_fb(primary, &fb);
> -
> -		red_lut[0] = green_lut[0] = blue_lut[0] = 0;
> -		for (i = 1; i < legacy_lut_size; i++)
> -			red_lut[i] = green_lut[i] = blue_lut[i] = 0xffff;
> -		igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd, primary->pipe-
> >crtc_id,
> -						  legacy_lut_size, red_lut, green_lut,
> blue_lut), 0);
> -		igt_display_commit(&data->display);
> -		igt_wait_for_vblank(data->drm_fd,
> -				display->pipes[primary->pipe->pipe].crtc_offset);
> -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
> -
> -		/* Verify that the CRC of the software computed output is
> -		 * equal to the CRC of the gamma LUT transformation output.
> -		 */
> -		igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
> -
> -		/* Reset output. */
> -		for (i = 1; i < legacy_lut_size; i++)
> -			red_lut[i] = green_lut[i] = blue_lut[i] = i << 8;
> -
> -		igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd, primary->pipe-
> >crtc_id,
> -						  legacy_lut_size, red_lut, green_lut,
> blue_lut), 0);
> -		igt_display_commit(&data->display);
> -
> -		igt_plane_set_fb(primary, NULL);
> -		igt_output_set_pipe(output, PIPE_NONE);
> -		igt_remove_fb(data->drm_fd, &fb);
> -		igt_remove_fb(data->drm_fd, &fb_modeset);
> -	}
> +				      &fb_modeset);
> +	igt_assert(fb_modeset_id);
> +
> +	igt_plane_set_fb(primary, &fb_modeset);
> +	disable_degamma(primary->pipe);
> +	disable_gamma(primary->pipe);
> +	disable_ctm(primary->pipe);
> +	igt_display_commit(&data->display);
> +
> +	/* Draw solid colors with no gamma transformation. */
> +	paint_rectangles(data, mode, red_green_blue, &fb);
> +	igt_plane_set_fb(primary, &fb);
> +	igt_display_commit(&data->display);
> +	igt_wait_for_vblank(data->drm_fd,
> +			    display->pipes[primary->pipe->pipe].crtc_offset);
> +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
> +
> +	/* Draw a gradient with gamma LUT to remap all values
> +	 * to max red/green/blue.
> +	 */
> +	paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> +	igt_plane_set_fb(primary, &fb);
> +
> +	red_lut[0] = green_lut[0] = blue_lut[0] = 0;
> +	for (i = 1; i < legacy_lut_size; i++)
> +		red_lut[i] = green_lut[i] = blue_lut[i] = 0xffff;
> +	igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd, primary->pipe->crtc_id,
> +					  legacy_lut_size, red_lut, green_lut, blue_lut),
> 0);
> +	igt_display_commit(&data->display);
> +	igt_wait_for_vblank(data->drm_fd,
> +			    display->pipes[primary->pipe->pipe].crtc_offset);
> +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
> +
> +	/* Verify that the CRC of the software computed output is
> +	 * equal to the CRC of the gamma LUT transformation output.
> +	 */
> +	igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
> +
> +	/* Reset output. */
> +	for (i = 1; i < legacy_lut_size; i++)
> +		red_lut[i] = green_lut[i] = blue_lut[i] = i << 8;
> +
> +	igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd, primary->pipe->crtc_id,
> +					  legacy_lut_size, red_lut, green_lut, blue_lut),
> 0);
> +	igt_display_commit(&data->display);
> +
> +	igt_plane_set_fb(primary, NULL);
> +	igt_output_set_pipe(output, PIPE_NONE);
> +	igt_remove_fb(data->drm_fd, &fb);
> +	igt_remove_fb(data->drm_fd, &fb_modeset);
> 
>  	free(red_lut);
>  	free(green_lut);
> @@ -331,93 +331,93 @@ static void test_pipe_legacy_gamma_reset(data_t *data,
>  		degamma_linear = generate_table(data->degamma_lut_size, 1.0);
>  	gamma_zero = generate_table_zero(data->gamma_lut_size);
> 
> -	for_each_valid_output_on_pipe(&data->display, primary->pipe->pipe,
> output) {
> -		igt_output_set_pipe(output, primary->pipe->pipe);
> +	output = igt_get_single_output_for_pipe(&data->display, primary->pipe-
> >pipe);
> +	igt_require(output);
> 
> -		/* Ensure we have a clean state to start with. */
> -		disable_degamma(primary->pipe);
> -		disable_ctm(primary->pipe);
> -		disable_gamma(primary->pipe);
> -		igt_display_commit(&data->display);
> +	igt_output_set_pipe(output, primary->pipe->pipe);
> 
> -		/* Set a degama & gamma LUT and a CTM using the
> -		 * properties and verify the content of the
> -		 * properties. */
> -		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT))
> -			set_degamma(data, primary->pipe, degamma_linear);
> -		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM))
> -			set_ctm(primary->pipe, ctm_identity);
> -		set_gamma(data, primary->pipe, gamma_zero);
> -		igt_display_commit(&data->display);
> +	/* Ensure we have a clean state to start with. */
> +	disable_degamma(primary->pipe);
> +	disable_ctm(primary->pipe);
> +	disable_gamma(primary->pipe);
> +	igt_display_commit(&data->display);
> 
> -		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT)) {
> -			blob = get_blob(data, primary->pipe, IGT_CRTC_DEGAMMA_LUT);
> -			igt_assert(blob &&
> -				   blob->length == (sizeof(struct drm_color_lut) *
> -						    data->degamma_lut_size));
> -			drmModeFreePropertyBlob(blob);
> -		}
> +	/* Set a degama & gamma LUT and a CTM using the
> +	 * properties and verify the content of the
> +	 * properties. */
> +	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT))
> +		set_degamma(data, primary->pipe, degamma_linear);
> +	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM))
> +		set_ctm(primary->pipe, ctm_identity);
> +	set_gamma(data, primary->pipe, gamma_zero);
> +	igt_display_commit(&data->display);
> 
> -		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM)) {
> -			blob = get_blob(data, primary->pipe, IGT_CRTC_CTM);
> -			igt_assert(blob &&
> -				   blob->length == sizeof(struct drm_color_ctm));
> -			drmModeFreePropertyBlob(blob);
> -		}
> -
> -		blob = get_blob(data, primary->pipe, IGT_CRTC_GAMMA_LUT);
> +	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT)) {
> +		blob = get_blob(data, primary->pipe, IGT_CRTC_DEGAMMA_LUT);
>  		igt_assert(blob &&
>  			   blob->length == (sizeof(struct drm_color_lut) *
> -					    data->gamma_lut_size));
> -		lut = (struct drm_color_lut *) blob->data;
> -		for (i = 0; i < data->gamma_lut_size; i++)
> -			igt_assert(lut[i].red == 0 &&
> -				   lut[i].green == 0 &&
> -				   lut[i].blue == 0);
> +					    data->degamma_lut_size));
>  		drmModeFreePropertyBlob(blob);
> +	}
> 
> -		/* Set a gamma LUT using the legacy ioctl and verify
> -		 * the content of the GAMMA_LUT property is changed
> -		 * and that CTM and DEGAMMA_LUT are empty. */
> -		kms_crtc = drmModeGetCrtc(data->drm_fd, primary->pipe->crtc_id);
> -		legacy_lut_size = kms_crtc->gamma_size;
> -		drmModeFreeCrtc(kms_crtc);
> +	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM)) {
> +		blob = get_blob(data, primary->pipe, IGT_CRTC_CTM);
> +		igt_assert(blob &&
> +			   blob->length == sizeof(struct drm_color_ctm));
> +		drmModeFreePropertyBlob(blob);
> +	}
> 
> -		red_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> -		green_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> -		blue_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> +	blob = get_blob(data, primary->pipe, IGT_CRTC_GAMMA_LUT);
> +	igt_assert(blob &&
> +		   blob->length == (sizeof(struct drm_color_lut) *
> +				    data->gamma_lut_size));
> +	lut = (struct drm_color_lut *) blob->data;
> +	for (i = 0; i < data->gamma_lut_size; i++)
> +		igt_assert(lut[i].red == 0 &&
> +			   lut[i].green == 0 &&
> +			   lut[i].blue == 0);
> +	drmModeFreePropertyBlob(blob);
> 
> -		for (i = 0; i < legacy_lut_size; i++)
> -			red_lut[i] = green_lut[i] = blue_lut[i] = 0xffff;
> +	/* Set a gamma LUT using the legacy ioctl and verify
> +	 * the content of the GAMMA_LUT property is changed
> +	 * and that CTM and DEGAMMA_LUT are empty. */
> +	kms_crtc = drmModeGetCrtc(data->drm_fd, primary->pipe->crtc_id);
> +	legacy_lut_size = kms_crtc->gamma_size;
> +	drmModeFreeCrtc(kms_crtc);
> 
> -		igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd,
> -						  primary->pipe->crtc_id,
> -						  legacy_lut_size,
> -						  red_lut, green_lut, blue_lut),
> -			      0);
> -		igt_display_commit(&data->display);
> +	red_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> +	green_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> +	blue_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> 
> -		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT))
> -			igt_assert(get_blob(data, primary->pipe,
> -					    IGT_CRTC_DEGAMMA_LUT) == NULL);
> +	for (i = 0; i < legacy_lut_size; i++)
> +		red_lut[i] = green_lut[i] = blue_lut[i] = 0xffff;
> 
> -		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM))
> -			igt_assert(get_blob(data, primary->pipe, IGT_CRTC_CTM) ==
> NULL);
> +	igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd,
> +					  primary->pipe->crtc_id,
> +					  legacy_lut_size,
> +					  red_lut, green_lut, blue_lut), 0);
> +	igt_display_commit(&data->display);
> 
> -		blob = get_blob(data, primary->pipe, IGT_CRTC_GAMMA_LUT);
> -		igt_assert(blob &&
> -			   blob->length == (sizeof(struct drm_color_lut) *
> -					    legacy_lut_size));
> -		lut = (struct drm_color_lut *) blob->data;
> -		for (i = 0; i < legacy_lut_size; i++)
> -			igt_assert(lut[i].red == 0xffff &&
> -				   lut[i].green == 0xffff &&
> -				   lut[i].blue == 0xffff);
> -		drmModeFreePropertyBlob(blob);
> +	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT))
> +		igt_assert(get_blob(data, primary->pipe,
> +				    IGT_CRTC_DEGAMMA_LUT) == NULL);
> 
> -		igt_plane_set_fb(primary, NULL);
> -		igt_output_set_pipe(output, PIPE_NONE);
> -	}
> +	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM))
> +		igt_assert(get_blob(data, primary->pipe, IGT_CRTC_CTM) == NULL);
> +
> +	blob = get_blob(data, primary->pipe, IGT_CRTC_GAMMA_LUT);
> +	igt_assert(blob &&
> +		   blob->length == (sizeof(struct drm_color_lut) *
> +				    legacy_lut_size));
> +	lut = (struct drm_color_lut *) blob->data;
> +	for (i = 0; i < legacy_lut_size; i++)
> +		igt_assert(lut[i].red == 0xffff &&
> +			   lut[i].green == 0xffff &&
> +			   lut[i].blue == 0xffff);
> +	drmModeFreePropertyBlob(blob);
> +
> +	igt_plane_set_fb(primary, NULL);
> +	igt_output_set_pipe(output, PIPE_NONE);
> 
>  	free_lut(degamma_linear);
>  	free_lut(gamma_zero);
> @@ -442,84 +442,84 @@ static bool test_pipe_ctm(data_t *data,
>  	igt_output_t *output;
>  	bool ret = true;
>  	igt_display_t *display = &data->display;
> +	drmModeModeInfo *mode;
> +	struct igt_fb fb_modeset, fb;
> +	igt_crc_t crc_software, crc_hardware;
> +	int fb_id, fb_modeset_id;
> 
>  	igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM));
> 
>  	degamma_linear = generate_table(data->degamma_lut_size, 1.0);
>  	gamma_linear = generate_table(data->gamma_lut_size, 1.0);
> 
> -	for_each_valid_output_on_pipe(&data->display, primary->pipe->pipe,
> output) {
> -		drmModeModeInfo *mode;
> -		struct igt_fb fb_modeset, fb;
> -		igt_crc_t crc_software, crc_hardware;
> -		int fb_id, fb_modeset_id;
> +	output = igt_get_single_output_for_pipe(&data->display, primary->pipe-
> >pipe);
> +	igt_require(output);
> 
> -		igt_output_set_pipe(output, primary->pipe->pipe);
> -		mode = igt_output_get_mode(output);
> +	igt_output_set_pipe(output, primary->pipe->pipe);
> +	mode = igt_output_get_mode(output);
> 
> -		/* Create a framebuffer at the size of the output. */
> -		fb_id = igt_create_fb(data->drm_fd,
> +	/* Create a framebuffer at the size of the output. */
> +	fb_id = igt_create_fb(data->drm_fd,
> +			      mode->hdisplay,
> +			      mode->vdisplay,
> +			      DRM_FORMAT_XRGB8888,
> +			      DRM_FORMAT_MOD_NONE,
> +			      &fb);
> +	igt_assert(fb_id);
> +
> +	fb_modeset_id = igt_create_fb(data->drm_fd,
>  				      mode->hdisplay,
>  				      mode->vdisplay,
>  				      DRM_FORMAT_XRGB8888,
>  				      DRM_FORMAT_MOD_NONE,
> -				      &fb);
> -		igt_assert(fb_id);
> +				      &fb_modeset);
> +	igt_assert(fb_modeset_id);
> +	igt_plane_set_fb(primary, &fb_modeset);
> 
> -		fb_modeset_id = igt_create_fb(data->drm_fd,
> -					      mode->hdisplay,
> -					      mode->vdisplay,
> -					      DRM_FORMAT_XRGB8888,
> -					      DRM_FORMAT_MOD_NONE,
> -					      &fb_modeset);
> -		igt_assert(fb_modeset_id);
> -		igt_plane_set_fb(primary, &fb_modeset);
> -
> -		/*
> -		 * Don't program LUT's for max CTM cases, as limitation of
> -		 * representing intermediate values between 0 and 1.0 causes
> -		 * rounding issues and inaccuracies leading to crc mismatch.
> -		 */
> -		if (memcmp(before, after, sizeof(color_t))) {
> -			set_degamma(data, primary->pipe, degamma_linear);
> -			set_gamma(data, primary->pipe, gamma_linear);
> -		} else {
> -			/* Disable Degamma and Gamma for ctm max test */
> -			disable_degamma(primary->pipe);
> -			disable_gamma(primary->pipe);
> -		}
> -
> -		disable_ctm(primary->pipe);
> -		igt_display_commit(&data->display);
> -
> -		paint_rectangles(data, mode, after, &fb);
> -		igt_plane_set_fb(primary, &fb);
> -		set_ctm(primary->pipe, ctm_identity);
> -		igt_display_commit(&data->display);
> -		igt_wait_for_vblank(data->drm_fd,
> -				display->pipes[primary->pipe->pipe].crtc_offset);
> -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_software);
> -
> -		/* With CTM transformation. */
> -		paint_rectangles(data, mode, before, &fb);
> -		igt_plane_set_fb(primary, &fb);
> -		set_ctm(primary->pipe, ctm_matrix);
> -		igt_display_commit(&data->display);
> -		igt_wait_for_vblank(data->drm_fd,
> -				display->pipes[primary->pipe->pipe].crtc_offset);
> -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_hardware);
> -
> -		/* Verify that the CRC of the software computed output is
> -		 * equal to the CRC of the CTM matrix transformation output.
> -		 */
> -		ret &= !igt_skip_crc_compare || igt_check_crc_equal(&crc_software,
> &crc_hardware);
> -
> -		igt_plane_set_fb(primary, NULL);
> -		igt_output_set_pipe(output, PIPE_NONE);
> -		igt_remove_fb(data->drm_fd, &fb);
> -		igt_remove_fb(data->drm_fd, &fb_modeset);
> +	/*
> +	 * Don't program LUT's for max CTM cases, as limitation of
> +	 * representing intermediate values between 0 and 1.0 causes
> +	 * rounding issues and inaccuracies leading to crc mismatch.
> +	 */
> +	if (memcmp(before, after, sizeof(color_t))) {
> +		set_degamma(data, primary->pipe, degamma_linear);
> +		set_gamma(data, primary->pipe, gamma_linear);
> +	} else {
> +		/* Disable Degamma and Gamma for ctm max test */
> +		disable_degamma(primary->pipe);
> +		disable_gamma(primary->pipe);
>  	}
> 
> +	disable_ctm(primary->pipe);
> +	igt_display_commit(&data->display);
> +
> +	paint_rectangles(data, mode, after, &fb);
> +	igt_plane_set_fb(primary, &fb);
> +	set_ctm(primary->pipe, ctm_identity);
> +	igt_display_commit(&data->display);
> +	igt_wait_for_vblank(data->drm_fd,
> +			    display->pipes[primary->pipe->pipe].crtc_offset);
> +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_software);
> +
> +	/* With CTM transformation. */
> +	paint_rectangles(data, mode, before, &fb);
> +	igt_plane_set_fb(primary, &fb);
> +	set_ctm(primary->pipe, ctm_matrix);
> +	igt_display_commit(&data->display);
> +	igt_wait_for_vblank(data->drm_fd,
> +			    display->pipes[primary->pipe->pipe].crtc_offset);
> +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_hardware);
> +
> +	/* Verify that the CRC of the software computed output is
> +	 * equal to the CRC of the CTM matrix transformation output.
> +	 */
> +	ret &= !igt_skip_crc_compare || igt_check_crc_equal(&crc_software,
> &crc_hardware);
> +
> +	igt_plane_set_fb(primary, NULL);
> +	igt_output_set_pipe(output, PIPE_NONE);
> +	igt_remove_fb(data->drm_fd, &fb);
> +	igt_remove_fb(data->drm_fd, &fb_modeset);
> +
>  	free_lut(degamma_linear);
>  	free_lut(gamma_linear);
> 
> --
> 2.31.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [igt-dev] [PATCH i-g-t v3 7/7] tests/kms_color: Add GAMMA_LUT_3D tests
  2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 7/7] tests/kms_color: Add GAMMA_LUT_3D tests Ville Syrjala
@ 2021-09-06  6:38   ` Modem, Bhanuprakash
  0 siblings, 0 replies; 19+ messages in thread
From: Modem, Bhanuprakash @ 2021-09-06  6:38 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

> From: Ville Syrjala <ville.syrjala@linux.intel.com>
> Sent: Friday, September 3, 2021 9:58 PM
> To: igt-dev@lists.freedesktop.org
> Cc: Modem, Bhanuprakash <bhanuprakash.modem@intel.com>
> Subject: [PATCH i-g-t v3 7/7] tests/kms_color: Add GAMMA_LUT_3D tests
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> Add some basic tests for 3D LUTs.
> 
> v2: Add missing igt_describe()s
>     s/degamma/3D LUT/ in some comments
>     Run the test for a single connector only
>     Run the invalid LUT size test for each pipe
> 
> Cc: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> ---
>  tests/kms_color.c        | 97 ++++++++++++++++++++++++++++++++++++++++
>  tests/kms_color_helper.c | 58 +++++++++++++++++++++++-
>  tests/kms_color_helper.h | 18 ++++++++
>  3 files changed, 172 insertions(+), 1 deletion(-)
> 
> diff --git a/tests/kms_color.c b/tests/kms_color.c
> index d78c7e211511..2e250ffe8ae8 100644
> --- a/tests/kms_color.c
> +++ b/tests/kms_color.c
> @@ -198,6 +198,88 @@ static void test_pipe_gamma(data_t *data,
>  	free_lut(gamma_full);
>  }
> 
> +static void test_pipe_gamma_lut_3d(data_t *data,
> +				   igt_plane_t *primary)
> +{
> +	igt_output_t *output;
> +	igt_display_t *display = &data->display;
> +	gamma_lut_t *gamma_lut_3d_linear, *gamma_lut_3d_full;
> +	color_t red_green_blue[] = {
> +		{ 1.0, 0.0, 0.0 },
> +		{ 0.0, 1.0, 0.0 },
> +		{ 0.0, 0.0, 1.0 }
> +	};
> +	drmModeModeInfo *mode;
> +	struct igt_fb fb_modeset, fb;
> +	igt_crc_t crc_fulllut3d, crc_fullcolors;
> +	int fb_id, fb_modeset_id;
> +
> +	igt_require(igt_pipe_obj_has_prop(primary->pipe,
> IGT_CRTC_GAMMA_LUT_3D));
> +
> +	gamma_lut_3d_linear = generate_lut_3d(data->gamma_lut_3d_size, 1.0);
> +	gamma_lut_3d_full = generate_lut_3d_max(data->gamma_lut_3d_size);
> +
> +	output = igt_get_single_output_for_pipe(&data->display, primary->pipe-
> >pipe);
> +	igt_require(output);
> +
> +	igt_output_set_pipe(output, primary->pipe->pipe);
> +	mode = igt_output_get_mode(output);
> +
> +	/* Create a framebuffer at the size of the output. */
> +	fb_id = igt_create_fb(data->drm_fd,
> +			      mode->hdisplay,
> +			      mode->vdisplay,
> +			      DRM_FORMAT_XRGB8888,
> +			      DRM_FORMAT_MOD_NONE,
> +			      &fb);
> +	igt_assert(fb_id);
 
We can get rid of these variables:
igt_assert(igt_create_fb());

> +
> +	fb_modeset_id = igt_create_fb(data->drm_fd,
> +				      mode->hdisplay,
> +				      mode->vdisplay,
> +				      DRM_FORMAT_XRGB8888,
> +				      DRM_FORMAT_MOD_NONE,
> +				      &fb_modeset);
> +	igt_assert(fb_modeset_id);
> +
> +	igt_plane_set_fb(primary, &fb_modeset);
> +	disable_ctm(primary->pipe);
> +	disable_degamma(primary->pipe);
> +	disable_gamma(primary->pipe);
> +	set_gamma_lut_3d(data, primary->pipe, gamma_lut_3d_linear);
> +	igt_display_commit(&data->display);
> +
> +	/* Draw solid colors with no 3D LUT transformation. */
> +	paint_rectangles(data, mode, red_green_blue, &fb);
> +	igt_plane_set_fb(primary, &fb);
> +	igt_display_commit(&data->display);
> +	igt_wait_for_vblank(data->drm_fd,
> +			    display->pipes[primary->pipe->pipe].crtc_offset);
> +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
> +
> +	/* Draw a gradient with 3D LUT to remap all
> +	 * values to max red/green/blue.
> +	 */
> +	paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> +	igt_plane_set_fb(primary, &fb);
> +	set_gamma_lut_3d(data, primary->pipe, gamma_lut_3d_full);
> +	igt_display_commit(&data->display);
> +	igt_wait_for_vblank(data->drm_fd,
> +			    display->pipes[primary->pipe->pipe].crtc_offset);
> +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fulllut3d);
> +
> +	/* Verify that the CRC of the software computed output is
> +	 * equal to the CRC of the 3D LUT transformation output.
> +	 */
> +	igt_assert_crc_equal(&crc_fulllut3d, &crc_fullcolors);
> +
> +	igt_plane_set_fb(primary, NULL);
> +	igt_output_set_pipe(output, PIPE_NONE);
> +
> +	free_lut(gamma_lut_3d_linear);
> +	free_lut(gamma_lut_3d_full);
> +}
> +
>  /*
>   * Draw 3 gradient rectangles in red, green and blue, with a maxed out legacy
>   * gamma LUT and verify we have the same CRC as drawing solid color
> rectangles
> @@ -656,6 +738,13 @@ prep_pipe(data_t *data, enum pipe p)
>  					      IGT_CRTC_GAMMA_LUT_SIZE);
>  		igt_assert_lt(0, data->gamma_lut_size);
>  	}
> +
> +	if (igt_pipe_obj_has_prop(&data->display.pipes[p],
> IGT_CRTC_GAMMA_LUT_3D_SIZE)) {
> +		data->gamma_lut_3d_size =
> +			igt_pipe_obj_get_prop(&data->display.pipes[p],
> +					      IGT_CRTC_GAMMA_LUT_3D_SIZE);
> +		igt_assert_lt(0, data->gamma_lut_3d_size);
> +	}
>  }
> 
>  static void
> @@ -860,6 +949,10 @@ run_tests_for_pipe(data_t *data, enum pipe p)
>  	igt_subtest_f("pipe-%s-legacy-gamma-reset", kmstest_pipe_name(p))
>  		test_pipe_legacy_gamma_reset(data, primary);
> 
> +	igt_describe("Verify that gamma LUT 3D transformation works correctly");
> +	igt_subtest_f("pipe-%s-gamma-lut-3d", kmstest_pipe_name(p))
> +		test_pipe_gamma_lut_3d(data, primary);
> +
>  	igt_fixture {
>  		disable_degamma(primary->pipe);
>  		disable_gamma(primary->pipe);
> @@ -888,6 +981,10 @@ run_invalid_tests_for_pipe(data_t *data, enum pipe p)
>  	igt_describe("Negative check for color tranformation matrix sizes");
>  	igt_subtest_f("pipe-%s-invalid-ctm-matrix-sizes", kmstest_pipe_name(p))
>  		invalid_ctm_matrix_sizes(data, p);
> +
> +	igt_describe("Negative check for invalid gamma lut 3D sizes");
> +	igt_subtest_f("pipe-%s-invalid-gamma-lut-3d-sizes",
> kmstest_pipe_name(p))
> +		invalid_gamma_lut_3d_sizes(data, p);
>  }
> 
>  igt_main
> diff --git a/tests/kms_color_helper.c b/tests/kms_color_helper.c
> index d71e7bb2e6f9..38e388c54ee8 100644
> --- a/tests/kms_color_helper.c
> +++ b/tests/kms_color_helper.c
> @@ -143,6 +143,44 @@ gamma_lut_t *generate_table_zero(int lut_size)
>  	return gamma;
>  }
> 
> +gamma_lut_t *generate_lut_3d(int lut_size, double exp)
> +{
> +	gamma_lut_t *gamma = alloc_lut(lut_3d_size(lut_size));
> +
> +	for (int r = 0; r < lut_size; r++) {
> +		for (int g = 0; g < lut_size; g++) {
> +			for (int b = 0; b < lut_size; b++) {
> +				int i = lut_3d_index(r, g, b, lut_size);
> +
> +				gamma->coeffs[i].r = pow(r * 1.0 / (lut_size - 1), exp);
> +				gamma->coeffs[i].g = pow(g * 1.0 / (lut_size - 1), exp);
> +				gamma->coeffs[i].b = pow(b * 1.0 / (lut_size - 1), exp);
> +			}
> +		}
> +	}
> +
> +	return gamma;
> +}
> +
> +gamma_lut_t *generate_lut_3d_max(int lut_size)
> +{
> +	gamma_lut_t *gamma = alloc_lut(lut_3d_size(lut_size));
> +
> +	for (int r = 0; r < lut_size; r++) {
> +		for (int g = 0; g < lut_size; g++) {
> +			for (int b = 0; b < lut_size; b++) {
> +				int i = lut_3d_index(r, g, b, lut_size);
> +
> +				gamma->coeffs[i].r = r == 0 ? 0.0 : 1.0;
> +				gamma->coeffs[i].g = g == 0 ? 0.0 : 1.0;
> +				gamma->coeffs[i].b = b == 0 ? 0.0 : 1.0;
> +			}
> +		}
> +	}
> +
> +	return gamma;
> +}
> +
>  struct drm_color_lut *coeffs_to_lut(data_t *data,
>  				    const gamma_lut_t *gamma,
>  				    uint32_t color_depth,
> @@ -215,6 +253,19 @@ void set_gamma(data_t *data,
>  	free(lut);
>  }
> 
> +void set_gamma_lut_3d(data_t *data,
> +		      igt_pipe_t *pipe,
> +		      const gamma_lut_t *gamma_lut_3d)
> +{
> +	size_t size = sizeof(struct drm_color_lut) * gamma_lut_3d->size;
> +	struct drm_color_lut *lut = coeffs_to_lut(data, gamma_lut_3d,
> +						  data->color_depth, 0);
> +
> +	igt_pipe_obj_replace_prop_blob(pipe, IGT_CRTC_GAMMA_LUT_3D, lut, size);
> +
> +	free(lut);
> +}
> +
>  void set_ctm(igt_pipe_t *pipe, const double *coefficients)
>  {
>  	struct drm_color_ctm ctm;
> @@ -331,6 +382,12 @@ invalid_degamma_lut_sizes(data_t *data, enum pipe p)
>  	invalid_lut_sizes(data, p, IGT_CRTC_DEGAMMA_LUT, data-
> >degamma_lut_size);
>  }
> 
> +void
> +invalid_gamma_lut_3d_sizes(data_t *data, enum pipe p)
> +{

Please check the comments in Patch 4/7 in this series:

We need
`igt_require(data->gamma_lut_3d_size);` or
`igt_require(igt_pipe_obj_has_prop(p, IGT_CRTC_GAMMA_LUT_3D_SIZE));` here

With above changes, this patch is
Reviewed-by: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>

- Bhanu

> +	invalid_lut_sizes(data, p, IGT_CRTC_GAMMA_LUT_3D, lut_3d_size(data-
> >gamma_lut_3d_size));
> +}
> +
>  void invalid_ctm_matrix_sizes(data_t *data, enum pipe p)
>  {
>  	igt_display_t *display = &data->display;
> @@ -359,4 +416,3 @@ void invalid_ctm_matrix_sizes(data_t *data, enum pipe p)
> 
>  	free(ptr);
>  }
> -
> diff --git a/tests/kms_color_helper.h b/tests/kms_color_helper.h
> index bb6f0054f388..7406820b6955 100644
> --- a/tests/kms_color_helper.h
> +++ b/tests/kms_color_helper.h
> @@ -52,6 +52,7 @@ typedef struct {
>  	uint32_t color_depth;
>  	uint64_t degamma_lut_size;
>  	uint64_t gamma_lut_size;
> +	uint64_t gamma_lut_3d_size;
>  	#ifdef HAVE_CHAMELIUM
>  	struct chamelium *chamelium;
>  	struct chamelium_port **ports;
> @@ -77,6 +78,8 @@ void free_lut(gamma_lut_t *gamma);
>  gamma_lut_t *generate_table(int lut_size, double exp);
>  gamma_lut_t *generate_table_max(int lut_size);
>  gamma_lut_t *generate_table_zero(int lut_size);
> +gamma_lut_t *generate_lut_3d(int lut_size, double exp);
> +gamma_lut_t *generate_lut_3d_max(int lut_size);
>  struct drm_color_lut *coeffs_to_lut(data_t *data,
>  				    const gamma_lut_t *gamma,
>  				    uint32_t color_depth,
> @@ -87,13 +90,27 @@ void set_degamma(data_t *data,
>  void set_gamma(data_t *data,
>  	       igt_pipe_t *pipe,
>  	       const gamma_lut_t *gamma);
> +void set_gamma_lut_3d(data_t *data,
> +		      igt_pipe_t *pipe,
> +		      const gamma_lut_t *gamma);
>  void set_ctm(igt_pipe_t *pipe, const double *coefficients);
>  void disable_prop(igt_pipe_t *pipe, enum igt_atomic_crtc_properties prop);
> 
>  #define disable_degamma(pipe) disable_prop(pipe, IGT_CRTC_DEGAMMA_LUT)
>  #define disable_gamma(pipe) disable_prop(pipe, IGT_CRTC_GAMMA_LUT)
> +#define disable_lut_3d(pipe) disable_prop(pipe, IGT_CRTC_LUT_3D)
>  #define disable_ctm(pipe) disable_prop(pipe, IGT_CRTC_CTM)
> 
> +static inline int lut_3d_size(int lut_size)
> +{
> +	return lut_size * lut_size * lut_size;
> +}
> +
> +static inline int lut_3d_index(int r, int g, int b, int lut_size)
> +{
> +	return r * lut_size * lut_size + g * lut_size + b;
> +}
> +
>  drmModePropertyBlobPtr get_blob(data_t *data, igt_pipe_t *pipe,
>  				enum igt_atomic_crtc_properties prop);
>  bool crc_equal(igt_crc_t *a, igt_crc_t *b);
> @@ -105,6 +122,7 @@ int pipe_set_property_blob(igt_pipe_t *pipe,
>  			   void *ptr, size_t length);
>  void invalid_gamma_lut_sizes(data_t *data, enum pipe p);
>  void invalid_degamma_lut_sizes(data_t *data, enum pipe p);
> +void invalid_gamma_lut_3d_sizes(data_t *data, enum pipe p);
>  void invalid_ctm_matrix_sizes(data_t *data, enum pipe p);
> 
>  #endif
> --
> 2.31.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [igt-dev] [PATCH i-g-t v3 4/7] tests/kms_color: Pass pipe to invalid LUT size tests
  2021-09-06  6:37   ` Modem, Bhanuprakash
@ 2021-09-07 17:26     ` Ville Syrjälä
  0 siblings, 0 replies; 19+ messages in thread
From: Ville Syrjälä @ 2021-09-07 17:26 UTC (permalink / raw)
  To: Modem, Bhanuprakash; +Cc: igt-dev

On Mon, Sep 06, 2021 at 06:37:39AM +0000, Modem, Bhanuprakash wrote:
> > From: Ville Syrjala <ville.syrjala@linux.intel.com>
> > Sent: Friday, September 3, 2021 9:58 PM
> > To: igt-dev@lists.freedesktop.org
> > Cc: Modem, Bhanuprakash <bhanuprakash.modem@intel.com>
> > Subject: [PATCH i-g-t v3 4/7] tests/kms_color: Pass pipe to invalid LUT size
> > tests
> > 
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > 
> > Each pipe can have a different LUT sizes, so run the invalid LUT
> > size tests once for each pipe.
> > 
> > This also makes sure data->(de)gamma_lut_size are properly initialized
> > prior to running these subtests.
> > 
> > Cc: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> >  tests/kms_color.c        | 73 +++++++++++++++++++++++++---------------
> >  tests/kms_color_helper.c | 17 +++++-----
> >  tests/kms_color_helper.h |  7 ++--
> >  3 files changed, 58 insertions(+), 39 deletions(-)
> > 
> > diff --git a/tests/kms_color.c b/tests/kms_color.c
> > index 9105076aba4f..dabc6963e9e0 100644
> > --- a/tests/kms_color.c
> > +++ b/tests/kms_color.c
> > @@ -638,6 +638,26 @@ static void test_pipe_limited_range_ctm(data_t *data,
> >  }
> >  #endif
> > 
> > +static void
> > +prep_pipe(data_t *data, enum pipe p)
> > +{
> > +	igt_require_pipe(&data->display, p);
> > +
> > +	if (igt_pipe_obj_has_prop(&data->display.pipes[p],
> > IGT_CRTC_DEGAMMA_LUT_SIZE)) {
> > +		data->degamma_lut_size =
> > +			igt_pipe_obj_get_prop(&data->display.pipes[p],
> > +					      IGT_CRTC_DEGAMMA_LUT_SIZE);
> > +		igt_assert_lt(0, data->degamma_lut_size);
> > +	}
> > +
> > +	if (igt_pipe_obj_has_prop(&data->display.pipes[p],
> > IGT_CRTC_GAMMA_LUT_SIZE)) {
> > +		data->gamma_lut_size =
> > +			igt_pipe_obj_get_prop(&data->display.pipes[p],
> > +					      IGT_CRTC_GAMMA_LUT_SIZE);
> > +		igt_assert_lt(0, data->gamma_lut_size);
> > +	}
> > +}
> > +
> >  static void
> >  run_tests_for_pipe(data_t *data, enum pipe p)
> >  {
> > @@ -652,10 +672,10 @@ run_tests_for_pipe(data_t *data, enum pipe p)
> >  	};
> > 
> >  	igt_fixture {
> > +		prep_pipe(data, p);
> > +
> >  		igt_require_pipe_crc(data->drm_fd);
> > 
> > -		igt_require_pipe(&data->display, p);
> > -
> >  		pipe = &data->display.pipes[p];
> >  		igt_require(pipe->n_planes >= 0);
> > 
> > @@ -665,20 +685,6 @@ run_tests_for_pipe(data_t *data, enum pipe p)
> >  						  primary->pipe->pipe,
> >  						  INTEL_PIPE_CRC_SOURCE_AUTO);
> > 
> > -		if (igt_pipe_obj_has_prop(&data->display.pipes[p],
> > IGT_CRTC_DEGAMMA_LUT_SIZE)) {
> > -			data->degamma_lut_size =
> > -				igt_pipe_obj_get_prop(&data->display.pipes[p],
> > -						      IGT_CRTC_DEGAMMA_LUT_SIZE);
> > -			igt_assert_lt(0, data->degamma_lut_size);
> > -		}
> > -
> > -		if (igt_pipe_obj_has_prop(&data->display.pipes[p],
> > IGT_CRTC_GAMMA_LUT_SIZE)) {
> > -			data->gamma_lut_size =
> > -				igt_pipe_obj_get_prop(&data->display.pipes[p],
> > -						      IGT_CRTC_GAMMA_LUT_SIZE);
> > -			igt_assert_lt(0, data->gamma_lut_size);
> > -		}
> > -
> >  		igt_display_require_output_on_pipe(&data->display, p);
> >  	}
> > 
> > @@ -865,6 +871,25 @@ run_tests_for_pipe(data_t *data, enum pipe p)
> >  	}
> >  }
> > 
> > +static void
> > +run_invalid_tests_for_pipe(data_t *data, enum pipe p)
> > +{
> > +	igt_fixture
> > +		prep_pipe(data, p);
> > +
> > +	igt_describe("Negative check for invalid gamma lut sizes");
> > +	igt_subtest_f("pipe-%s-invalid-gamma-lut-sizes", kmstest_pipe_name(p))
> > +		invalid_gamma_lut_sizes(data, p);
> > +
> > +	igt_describe("Negative check for invalid degamma lut sizes");
> > +	igt_subtest_f("pipe-%s-invalid-degamma-lut-sizes", kmstest_pipe_name(p))
> > +		invalid_degamma_lut_sizes(data, p);
> > +
> > +	igt_describe("Negative check for color tranformation matrix sizes");
> > +	igt_subtest_f("pipe-%s-invalid-ctm-matrix-sizes", kmstest_pipe_name(p))
> > +		invalid_ctm_matrix_sizes(data, p);
> > +}
> > +
> >  igt_main
> >  {
> >  	data_t data = {};
> > @@ -879,21 +904,13 @@ igt_main
> >  		igt_display_require(&data.display, data.drm_fd);
> >  	}
> > 
> > -	for_each_pipe_static(pipe)
> > +	for_each_pipe_static(pipe) {
> >  		igt_subtest_group
> >  			run_tests_for_pipe(&data, pipe);
> > 
> > -	igt_describe("Negative check for invalid gamma lut sizes");
> > -	igt_subtest_f("pipe-invalid-gamma-lut-sizes")
> > -		invalid_gamma_lut_sizes(&data);
> > -
> > -	igt_describe("Negative check for invalid degamma lut sizes");
> > -	igt_subtest_f("pipe-invalid-degamma-lut-sizes")
> > -		invalid_degamma_lut_sizes(&data);
> > -
> > -	igt_describe("Negative check for color tranformation matrix sizes");
> > -	igt_subtest_f("pipe-invalid-ctm-matrix-sizes")
> > -		invalid_ctm_matrix_sizes(&data);
> > +		igt_subtest_group
> > +			run_invalid_tests_for_pipe(&data, pipe);
> > +	}
> > 
> >  	igt_fixture {
> >  		igt_display_fini(&data.display);
> > diff --git a/tests/kms_color_helper.c b/tests/kms_color_helper.c
> > index 8b08cdaeea5f..d71e7bb2e6f9 100644
> > --- a/tests/kms_color_helper.c
> > +++ b/tests/kms_color_helper.c
> > @@ -287,10 +287,11 @@ pipe_set_property_blob(igt_pipe_t *pipe,
> >  }
> > 
> >  static void
> > -invalid_lut_sizes(data_t *data, enum igt_atomic_crtc_properties prop, int
> > size)
> > +invalid_lut_sizes(data_t *data, enum pipe p,
> > +		  enum igt_atomic_crtc_properties prop, int size)
> >  {
> >  	igt_display_t *display = &data->display;
> > -	igt_pipe_t *pipe = &display->pipes[0];
> > +	igt_pipe_t *pipe = &display->pipes[p];
> >  	struct drm_color_lut *lut;
> >  	size_t lut_size = size * sizeof(lut[0]);
> > 
> > @@ -319,21 +320,21 @@ invalid_lut_sizes(data_t *data, enum
> > igt_atomic_crtc_properties prop, int size)
> >  }
> > 
> >  void
> > -invalid_gamma_lut_sizes(data_t *data)
> > +invalid_gamma_lut_sizes(data_t *data, enum pipe p)
> >  {
> > -	invalid_lut_sizes(data, IGT_CRTC_GAMMA_LUT, data->gamma_lut_size);
> > +	invalid_lut_sizes(data, p, IGT_CRTC_GAMMA_LUT, data->gamma_lut_size);
>  
> Still, it is possible to get data->gamma_lut_size as NULL, b'coz prep_pipe()
> will not initialize if GAMMA_LUT_SIZE prop is not present.
> 
> `igt_require(data->gamma_lut_size);` or
> `igt_require(igt_pipe_obj_has_prop(p, IGT_CRTC_GAMMA_LUT_SIZE));` before
> calling invalid_lut_sizes() can fix this.

invalid_lut_sizes() already has the necessary igt_require().

> 
> >  }
> > 
> >  void
> > -invalid_degamma_lut_sizes(data_t *data)
> > +invalid_degamma_lut_sizes(data_t *data, enum pipe p)
> >  {
> > -	invalid_lut_sizes(data, IGT_CRTC_DEGAMMA_LUT, data->degamma_lut_size);
> > +	invalid_lut_sizes(data, p, IGT_CRTC_DEGAMMA_LUT, data-
> > >degamma_lut_size);
>  
> Please consider the above comment.
> 
> With above change, this patch is
> Reviewed-by: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>
> 
> - Bhanu
> 
> >  }
> > 
> > -void invalid_ctm_matrix_sizes(data_t *data)
> > +void invalid_ctm_matrix_sizes(data_t *data, enum pipe p)
> >  {
> >  	igt_display_t *display = &data->display;
> > -	igt_pipe_t *pipe = &display->pipes[0];
> > +	igt_pipe_t *pipe = &display->pipes[p];
> >  	void *ptr;
> > 
> >  	igt_require(igt_pipe_obj_has_prop(pipe, IGT_CRTC_CTM));
> > diff --git a/tests/kms_color_helper.h b/tests/kms_color_helper.h
> > index 3f49e7cae4c0..bb6f0054f388 100644
> > --- a/tests/kms_color_helper.h
> > +++ b/tests/kms_color_helper.h
> > @@ -103,8 +103,9 @@ int pipe_set_property_blob_id(igt_pipe_t *pipe,
> >  int pipe_set_property_blob(igt_pipe_t *pipe,
> >  			   enum igt_atomic_crtc_properties prop,
> >  			   void *ptr, size_t length);
> > -void invalid_gamma_lut_sizes(data_t *data);
> > -void invalid_degamma_lut_sizes(data_t *data);
> > -void invalid_ctm_matrix_sizes(data_t *data);
> > +void invalid_gamma_lut_sizes(data_t *data, enum pipe p);
> > +void invalid_degamma_lut_sizes(data_t *data, enum pipe p);
> > +void invalid_ctm_matrix_sizes(data_t *data, enum pipe p);
> > +
> >  #endif
> > 
> > --
> > 2.31.1
> 

-- 
Ville Syrjälä
Intel

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [igt-dev] [PATCH i-g-t v3 5/7] tests/kms_color: Run each subtest only for a single connector
  2021-09-06  6:38   ` Modem, Bhanuprakash
@ 2021-09-07 17:34     ` Ville Syrjälä
  2021-09-12 15:36       ` Modem, Bhanuprakash
  0 siblings, 1 reply; 19+ messages in thread
From: Ville Syrjälä @ 2021-09-07 17:34 UTC (permalink / raw)
  To: Modem, Bhanuprakash; +Cc: igt-dev

On Mon, Sep 06, 2021 at 06:38:26AM +0000, Modem, Bhanuprakash wrote:
> > From: Ville Syrjala <ville.syrjala@linux.intel.com>
> > Sent: Friday, September 3, 2021 9:58 PM
> > To: igt-dev@lists.freedesktop.org
> > Cc: Modem, Bhanuprakash <bhanuprakash.modem@intel.com>
> > Subject: [PATCH i-g-t v3 5/7] tests/kms_color: Run each subtest only for a
> > single connector
> > 
> > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > 
> > For most of the subtests the used connector should not matter,
> > so run each subtest just for a single connector.
> > 
> > Suggested-by: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>
> > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > ---
> >  tests/kms_color.c | 612 +++++++++++++++++++++++-----------------------
> >  1 file changed, 306 insertions(+), 306 deletions(-)
> > 
> > diff --git a/tests/kms_color.c b/tests/kms_color.c
> > index dabc6963e9e0..d78c7e211511 100644
> > --- a/tests/kms_color.c
> > +++ b/tests/kms_color.c
> > @@ -37,6 +37,10 @@ static void test_pipe_degamma(data_t *data,
> >  		{ 0.0, 1.0, 0.0 },
> >  		{ 0.0, 0.0, 1.0 }
> >  	};
> > +	drmModeModeInfo *mode;
> > +	struct igt_fb fb_modeset, fb;
> > +	igt_crc_t crc_fullgamma, crc_fullcolors;
> > +	int fb_id, fb_modeset_id;
> > 
> >  	igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT));
> >  	igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_GAMMA_LUT));
> > @@ -44,69 +48,65 @@ static void test_pipe_degamma(data_t *data,
> >  	degamma_linear = generate_table(data->degamma_lut_size, 1.0);
> >  	degamma_full = generate_table_max(data->degamma_lut_size);
> > 
> > -	for_each_valid_output_on_pipe(&data->display, primary->pipe->pipe,
> > output) {
> > -		drmModeModeInfo *mode;
> > -		struct igt_fb fb_modeset, fb;
> > -		igt_crc_t crc_fullgamma, crc_fullcolors;
> > -		int fb_id, fb_modeset_id;
> > +	output = igt_get_single_output_for_pipe(&data->display, primary->pipe-
> > >pipe);
> > +	igt_require(output);
> > 
> > -		igt_output_set_pipe(output, primary->pipe->pipe);
> > -		mode = igt_output_get_mode(output);
> > +	igt_output_set_pipe(output, primary->pipe->pipe);
> > +	mode = igt_output_get_mode(output);
> > 
> > -		/* Create a framebuffer at the size of the output. */
> > -		fb_id = igt_create_fb(data->drm_fd,
> > +	/* Create a framebuffer at the size of the output. */
> > +	fb_id = igt_create_fb(data->drm_fd,
> > +			      mode->hdisplay,
> > +			      mode->vdisplay,
> > +			      DRM_FORMAT_XRGB8888,
> > +			      DRM_FORMAT_MOD_NONE,
> > +			      &fb);
> > +	igt_assert(fb_id);
>  
> Minor: we can get rid of extra variables by updating like
> `igt_assert(igt_create_fb());`

I'm not going to be doing any unrelated changes in this
patch. The indentation change alone is already bad enough
to review.

> 
> And this is applicable for all the places.
> 
> > +
> > +	fb_modeset_id = igt_create_fb(data->drm_fd,
> >  				      mode->hdisplay,
> >  				      mode->vdisplay,
> >  				      DRM_FORMAT_XRGB8888,
> >  				      DRM_FORMAT_MOD_NONE,
> > -				      &fb);
> > -		igt_assert(fb_id);
> > +				      &fb_modeset);
> > +	igt_assert(fb_modeset_id);
> > 
> > -		fb_modeset_id = igt_create_fb(data->drm_fd,
> > -					      mode->hdisplay,
> > -					      mode->vdisplay,
> > -					      DRM_FORMAT_XRGB8888,
> > -					      DRM_FORMAT_MOD_NONE,
> > -					      &fb_modeset);
> > -		igt_assert(fb_modeset_id);
> > +	igt_plane_set_fb(primary, &fb_modeset);
> > +	disable_ctm(primary->pipe);
> > +	disable_gamma(primary->pipe);
> > +	set_degamma(data, primary->pipe, degamma_linear);
> > +	igt_display_commit(&data->display);
> > 
> > -		igt_plane_set_fb(primary, &fb_modeset);
> > -		disable_ctm(primary->pipe);
> > -		disable_gamma(primary->pipe);
> > -		set_degamma(data, primary->pipe, degamma_linear);
> > -		igt_display_commit(&data->display);
> > +	/* Draw solid colors with linear degamma transformation. */
> > +	paint_rectangles(data, mode, red_green_blue, &fb);
> > +	igt_plane_set_fb(primary, &fb);
> > +	igt_display_commit(&data->display);
> > +	igt_wait_for_vblank(data->drm_fd,
> > +			    display->pipes[primary->pipe->pipe].crtc_offset);
> > +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
> > 
> > -		/* Draw solid colors with linear degamma transformation. */
> > -		paint_rectangles(data, mode, red_green_blue, &fb);
> > -		igt_plane_set_fb(primary, &fb);
> > -		igt_display_commit(&data->display);
> > -		igt_wait_for_vblank(data->drm_fd,
> > -				display->pipes[primary->pipe->pipe].crtc_offset);
> > -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
> > +	/* Draw a gradient with degamma LUT to remap all
> > +	 * values to max red/green/blue.
> > +	 */
> > +	paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> > +	igt_plane_set_fb(primary, &fb);
> > +	set_degamma(data, primary->pipe, degamma_full);
> > +	igt_display_commit(&data->display);
> > +	igt_wait_for_vblank(data->drm_fd,
> > +			    display->pipes[primary->pipe->pipe].crtc_offset);
> > +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
> > 
> > -		/* Draw a gradient with degamma LUT to remap all
> > -		 * values to max red/green/blue.
> > -		 */
> > -		paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> > -		igt_plane_set_fb(primary, &fb);
> > -		set_degamma(data, primary->pipe, degamma_full);
> > -		igt_display_commit(&data->display);
> > -		igt_wait_for_vblank(data->drm_fd,
> > -				display->pipes[primary->pipe->pipe].crtc_offset);
> > -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
> > +	/* Verify that the CRC of the software computed output is
> > +	 * equal to the CRC of the degamma LUT transformation output.
> > +	 */
> > +	igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
> > 
> > -		/* Verify that the CRC of the software computed output is
> > -		 * equal to the CRC of the degamma LUT transformation output.
> > -		 */
> > -		igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
> > -
> > -		disable_degamma(primary->pipe);
> > -		igt_plane_set_fb(primary, NULL);
> > -		igt_output_set_pipe(output, PIPE_NONE);
> > -		igt_display_commit(&data->display);
> > -		igt_remove_fb(data->drm_fd, &fb);
> > -		igt_remove_fb(data->drm_fd, &fb_modeset);
> > -	}
> > +	disable_degamma(primary->pipe);
> > +	igt_plane_set_fb(primary, NULL);
> > +	igt_output_set_pipe(output, PIPE_NONE);
> > +	igt_display_commit(&data->display);
> > +	igt_remove_fb(data->drm_fd, &fb);
> > +	igt_remove_fb(data->drm_fd, &fb_modeset);
> > 
> >  	free_lut(degamma_linear);
> >  	free_lut(degamma_full);
> > @@ -127,73 +127,73 @@ static void test_pipe_gamma(data_t *data,
> >  		{ 0.0, 1.0, 0.0 },
> >  		{ 0.0, 0.0, 1.0 }
> >  	};
> > +	drmModeModeInfo *mode;
> > +	struct igt_fb fb_modeset, fb;
> > +	igt_crc_t crc_fullgamma, crc_fullcolors;
> > +	int fb_id, fb_modeset_id;
> > 
> >  	igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_GAMMA_LUT));
> > 
> >  	gamma_full = generate_table_max(data->gamma_lut_size);
> > 
> > -	for_each_valid_output_on_pipe(&data->display, primary->pipe->pipe,
> > output) {
> > -		drmModeModeInfo *mode;
> > -		struct igt_fb fb_modeset, fb;
> > -		igt_crc_t crc_fullgamma, crc_fullcolors;
> > -		int fb_id, fb_modeset_id;
> > +	output = igt_get_single_output_for_pipe(&data->display, primary->pipe-
> > >pipe);
> > +	igt_require(output);
> > 
> > -		igt_output_set_pipe(output, primary->pipe->pipe);
> > -		mode = igt_output_get_mode(output);
> > +	igt_output_set_pipe(output, primary->pipe->pipe);
> > +	mode = igt_output_get_mode(output);
> > 
> > -		/* Create a framebuffer at the size of the output. */
> > -		fb_id = igt_create_fb(data->drm_fd,
> > +	/* Create a framebuffer at the size of the output. */
> > +	fb_id = igt_create_fb(data->drm_fd,
> > +			      mode->hdisplay,
> > +			      mode->vdisplay,
> > +			      DRM_FORMAT_XRGB8888,
> > +			      DRM_FORMAT_MOD_NONE,
> > +			      &fb);
> > +	igt_assert(fb_id);
> > +
> > +	fb_modeset_id = igt_create_fb(data->drm_fd,
> >  				      mode->hdisplay,
> >  				      mode->vdisplay,
> >  				      DRM_FORMAT_XRGB8888,
> >  				      DRM_FORMAT_MOD_NONE,
> > -				      &fb);
> > -		igt_assert(fb_id);
> > +				      &fb_modeset);
> > +	igt_assert(fb_modeset_id);
> > 
> > -		fb_modeset_id = igt_create_fb(data->drm_fd,
> > -					      mode->hdisplay,
> > -					      mode->vdisplay,
> > -					      DRM_FORMAT_XRGB8888,
> > -					      DRM_FORMAT_MOD_NONE,
> > -					      &fb_modeset);
> > -		igt_assert(fb_modeset_id);
> > +	igt_plane_set_fb(primary, &fb_modeset);
> > +	disable_ctm(primary->pipe);
> > +	disable_degamma(primary->pipe);
> > +	set_gamma(data, primary->pipe, gamma_full);
>  
> This could be disable_gamma(), right?

Getting matching crcs has been rather problematic in this
test. I don't recall the specifics on which LUT is needed
in each case to guarantee that.

> 
> > +	igt_display_commit(&data->display);
> > 
> > -		igt_plane_set_fb(primary, &fb_modeset);
> > -		disable_ctm(primary->pipe);
> > -		disable_degamma(primary->pipe);
> > -		set_gamma(data, primary->pipe, gamma_full);
> > -		igt_display_commit(&data->display);
> > +	/* Draw solid colors with no gamma transformation. */
> > +	paint_rectangles(data, mode, red_green_blue, &fb);
> > +	igt_plane_set_fb(primary, &fb);
> > +	igt_display_commit(&data->display);
> > +	igt_wait_for_vblank(data->drm_fd,
> > +			    display->pipes[primary->pipe->pipe].crtc_offset);
> > +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
> > 
> > -		/* Draw solid colors with no gamma transformation. */
> > -		paint_rectangles(data, mode, red_green_blue, &fb);
> > -		igt_plane_set_fb(primary, &fb);
> > -		igt_display_commit(&data->display);
> > -		igt_wait_for_vblank(data->drm_fd,
> > -				display->pipes[primary->pipe->pipe].crtc_offset);
> > -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
> > +	/* Draw a gradient with gamma LUT to remap all values
> > +	 * to max red/green/blue.
> > +	 */
> > +	paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> > +	igt_plane_set_fb(primary, &fb);
>  
> And here we need to set the gamma: set_gamma(gamma_max)

Also a totally unrelated change. If you think there's a bug here
pls submit a separate patch.

> 
> With these changes, this patch is
> Reviewed-by: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>
> 
> - Bhanu
> 
> > +	igt_display_commit(&data->display);
> > +	igt_wait_for_vblank(data->drm_fd,
> > +			    display->pipes[primary->pipe->pipe].crtc_offset);
> > +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
> > 
> > -		/* Draw a gradient with gamma LUT to remap all values
> > -		 * to max red/green/blue.
> > -		 */
> > -		paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> > -		igt_plane_set_fb(primary, &fb);
> > -		igt_display_commit(&data->display);
> > -		igt_wait_for_vblank(data->drm_fd,
> > -				display->pipes[primary->pipe->pipe].crtc_offset);
> > -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
> > +	/* Verify that the CRC of the software computed output is
> > +	 * equal to the CRC of the gamma LUT transformation output.
> > +	 */
> > +	igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
> > 
> > -		/* Verify that the CRC of the software computed output is
> > -		 * equal to the CRC of the gamma LUT transformation output.
> > -		 */
> > -		igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
> > -
> > -		disable_gamma(primary->pipe);
> > -		igt_plane_set_fb(primary, NULL);
> > -		igt_output_set_pipe(output, PIPE_NONE);
> > -		igt_display_commit(&data->display);
> > -		igt_remove_fb(data->drm_fd, &fb);
> > -		igt_remove_fb(data->drm_fd, &fb_modeset);
> > -	}
> > +	disable_gamma(primary->pipe);
> > +	igt_plane_set_fb(primary, NULL);
> > +	igt_output_set_pipe(output, PIPE_NONE);
> > +	igt_display_commit(&data->display);
> > +	igt_remove_fb(data->drm_fd, &fb);
> > +	igt_remove_fb(data->drm_fd, &fb_modeset);
> > 
> >  	free_lut(gamma_full);
> >  }
> > @@ -216,6 +216,10 @@ static void test_pipe_legacy_gamma(data_t *data,
> >  	drmModeCrtc *kms_crtc;
> >  	uint32_t i, legacy_lut_size;
> >  	uint16_t *red_lut, *green_lut, *blue_lut;
> > +	drmModeModeInfo *mode;
> > +	struct igt_fb fb_modeset, fb;
> > +	igt_crc_t crc_fullgamma, crc_fullcolors;
> > +	int fb_id, fb_modeset_id;
> > 
> >  	kms_crtc = drmModeGetCrtc(data->drm_fd, primary->pipe->crtc_id);
> >  	legacy_lut_size = kms_crtc->gamma_size;
> > @@ -225,80 +229,76 @@ static void test_pipe_legacy_gamma(data_t *data,
> >  	green_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> >  	blue_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> > 
> > -	for_each_valid_output_on_pipe(&data->display, primary->pipe->pipe,
> > output) {
> > -		drmModeModeInfo *mode;
> > -		struct igt_fb fb_modeset, fb;
> > -		igt_crc_t crc_fullgamma, crc_fullcolors;
> > -		int fb_id, fb_modeset_id;
> > +	output = igt_get_single_output_for_pipe(&data->display, primary->pipe-
> > >pipe);
> > +	igt_require(output);
> > 
> > -		igt_output_set_pipe(output, primary->pipe->pipe);
> > -		mode = igt_output_get_mode(output);
> > +	igt_output_set_pipe(output, primary->pipe->pipe);
> > +	mode = igt_output_get_mode(output);
> > 
> > -		/* Create a framebuffer at the size of the output. */
> > -		fb_id = igt_create_fb(data->drm_fd,
> > +	/* Create a framebuffer at the size of the output. */
> > +	fb_id = igt_create_fb(data->drm_fd,
> > +			      mode->hdisplay,
> > +			      mode->vdisplay,
> > +			      DRM_FORMAT_XRGB8888,
> > +			      DRM_FORMAT_MOD_NONE,
> > +			      &fb);
> > +	igt_assert(fb_id);
> > +
> > +	fb_modeset_id = igt_create_fb(data->drm_fd,
> >  				      mode->hdisplay,
> >  				      mode->vdisplay,
> >  				      DRM_FORMAT_XRGB8888,
> >  				      DRM_FORMAT_MOD_NONE,
> > -				      &fb);
> > -		igt_assert(fb_id);
> > -
> > -		fb_modeset_id = igt_create_fb(data->drm_fd,
> > -					      mode->hdisplay,
> > -					      mode->vdisplay,
> > -					      DRM_FORMAT_XRGB8888,
> > -					      DRM_FORMAT_MOD_NONE,
> > -					      &fb_modeset);
> > -		igt_assert(fb_modeset_id);
> > -
> > -		igt_plane_set_fb(primary, &fb_modeset);
> > -		disable_degamma(primary->pipe);
> > -		disable_gamma(primary->pipe);
> > -		disable_ctm(primary->pipe);
> > -		igt_display_commit(&data->display);
> > -
> > -		/* Draw solid colors with no gamma transformation. */
> > -		paint_rectangles(data, mode, red_green_blue, &fb);
> > -		igt_plane_set_fb(primary, &fb);
> > -		igt_display_commit(&data->display);
> > -		igt_wait_for_vblank(data->drm_fd,
> > -				display->pipes[primary->pipe->pipe].crtc_offset);
> > -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
> > -
> > -		/* Draw a gradient with gamma LUT to remap all values
> > -		 * to max red/green/blue.
> > -		 */
> > -		paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> > -		igt_plane_set_fb(primary, &fb);
> > -
> > -		red_lut[0] = green_lut[0] = blue_lut[0] = 0;
> > -		for (i = 1; i < legacy_lut_size; i++)
> > -			red_lut[i] = green_lut[i] = blue_lut[i] = 0xffff;
> > -		igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd, primary->pipe-
> > >crtc_id,
> > -						  legacy_lut_size, red_lut, green_lut,
> > blue_lut), 0);
> > -		igt_display_commit(&data->display);
> > -		igt_wait_for_vblank(data->drm_fd,
> > -				display->pipes[primary->pipe->pipe].crtc_offset);
> > -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
> > -
> > -		/* Verify that the CRC of the software computed output is
> > -		 * equal to the CRC of the gamma LUT transformation output.
> > -		 */
> > -		igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
> > -
> > -		/* Reset output. */
> > -		for (i = 1; i < legacy_lut_size; i++)
> > -			red_lut[i] = green_lut[i] = blue_lut[i] = i << 8;
> > -
> > -		igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd, primary->pipe-
> > >crtc_id,
> > -						  legacy_lut_size, red_lut, green_lut,
> > blue_lut), 0);
> > -		igt_display_commit(&data->display);
> > -
> > -		igt_plane_set_fb(primary, NULL);
> > -		igt_output_set_pipe(output, PIPE_NONE);
> > -		igt_remove_fb(data->drm_fd, &fb);
> > -		igt_remove_fb(data->drm_fd, &fb_modeset);
> > -	}
> > +				      &fb_modeset);
> > +	igt_assert(fb_modeset_id);
> > +
> > +	igt_plane_set_fb(primary, &fb_modeset);
> > +	disable_degamma(primary->pipe);
> > +	disable_gamma(primary->pipe);
> > +	disable_ctm(primary->pipe);
> > +	igt_display_commit(&data->display);
> > +
> > +	/* Draw solid colors with no gamma transformation. */
> > +	paint_rectangles(data, mode, red_green_blue, &fb);
> > +	igt_plane_set_fb(primary, &fb);
> > +	igt_display_commit(&data->display);
> > +	igt_wait_for_vblank(data->drm_fd,
> > +			    display->pipes[primary->pipe->pipe].crtc_offset);
> > +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
> > +
> > +	/* Draw a gradient with gamma LUT to remap all values
> > +	 * to max red/green/blue.
> > +	 */
> > +	paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> > +	igt_plane_set_fb(primary, &fb);
> > +
> > +	red_lut[0] = green_lut[0] = blue_lut[0] = 0;
> > +	for (i = 1; i < legacy_lut_size; i++)
> > +		red_lut[i] = green_lut[i] = blue_lut[i] = 0xffff;
> > +	igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd, primary->pipe->crtc_id,
> > +					  legacy_lut_size, red_lut, green_lut, blue_lut),
> > 0);
> > +	igt_display_commit(&data->display);
> > +	igt_wait_for_vblank(data->drm_fd,
> > +			    display->pipes[primary->pipe->pipe].crtc_offset);
> > +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
> > +
> > +	/* Verify that the CRC of the software computed output is
> > +	 * equal to the CRC of the gamma LUT transformation output.
> > +	 */
> > +	igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
> > +
> > +	/* Reset output. */
> > +	for (i = 1; i < legacy_lut_size; i++)
> > +		red_lut[i] = green_lut[i] = blue_lut[i] = i << 8;
> > +
> > +	igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd, primary->pipe->crtc_id,
> > +					  legacy_lut_size, red_lut, green_lut, blue_lut),
> > 0);
> > +	igt_display_commit(&data->display);
> > +
> > +	igt_plane_set_fb(primary, NULL);
> > +	igt_output_set_pipe(output, PIPE_NONE);
> > +	igt_remove_fb(data->drm_fd, &fb);
> > +	igt_remove_fb(data->drm_fd, &fb_modeset);
> > 
> >  	free(red_lut);
> >  	free(green_lut);
> > @@ -331,93 +331,93 @@ static void test_pipe_legacy_gamma_reset(data_t *data,
> >  		degamma_linear = generate_table(data->degamma_lut_size, 1.0);
> >  	gamma_zero = generate_table_zero(data->gamma_lut_size);
> > 
> > -	for_each_valid_output_on_pipe(&data->display, primary->pipe->pipe,
> > output) {
> > -		igt_output_set_pipe(output, primary->pipe->pipe);
> > +	output = igt_get_single_output_for_pipe(&data->display, primary->pipe-
> > >pipe);
> > +	igt_require(output);
> > 
> > -		/* Ensure we have a clean state to start with. */
> > -		disable_degamma(primary->pipe);
> > -		disable_ctm(primary->pipe);
> > -		disable_gamma(primary->pipe);
> > -		igt_display_commit(&data->display);
> > +	igt_output_set_pipe(output, primary->pipe->pipe);
> > 
> > -		/* Set a degama & gamma LUT and a CTM using the
> > -		 * properties and verify the content of the
> > -		 * properties. */
> > -		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT))
> > -			set_degamma(data, primary->pipe, degamma_linear);
> > -		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM))
> > -			set_ctm(primary->pipe, ctm_identity);
> > -		set_gamma(data, primary->pipe, gamma_zero);
> > -		igt_display_commit(&data->display);
> > +	/* Ensure we have a clean state to start with. */
> > +	disable_degamma(primary->pipe);
> > +	disable_ctm(primary->pipe);
> > +	disable_gamma(primary->pipe);
> > +	igt_display_commit(&data->display);
> > 
> > -		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT)) {
> > -			blob = get_blob(data, primary->pipe, IGT_CRTC_DEGAMMA_LUT);
> > -			igt_assert(blob &&
> > -				   blob->length == (sizeof(struct drm_color_lut) *
> > -						    data->degamma_lut_size));
> > -			drmModeFreePropertyBlob(blob);
> > -		}
> > +	/* Set a degama & gamma LUT and a CTM using the
> > +	 * properties and verify the content of the
> > +	 * properties. */
> > +	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT))
> > +		set_degamma(data, primary->pipe, degamma_linear);
> > +	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM))
> > +		set_ctm(primary->pipe, ctm_identity);
> > +	set_gamma(data, primary->pipe, gamma_zero);
> > +	igt_display_commit(&data->display);
> > 
> > -		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM)) {
> > -			blob = get_blob(data, primary->pipe, IGT_CRTC_CTM);
> > -			igt_assert(blob &&
> > -				   blob->length == sizeof(struct drm_color_ctm));
> > -			drmModeFreePropertyBlob(blob);
> > -		}
> > -
> > -		blob = get_blob(data, primary->pipe, IGT_CRTC_GAMMA_LUT);
> > +	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT)) {
> > +		blob = get_blob(data, primary->pipe, IGT_CRTC_DEGAMMA_LUT);
> >  		igt_assert(blob &&
> >  			   blob->length == (sizeof(struct drm_color_lut) *
> > -					    data->gamma_lut_size));
> > -		lut = (struct drm_color_lut *) blob->data;
> > -		for (i = 0; i < data->gamma_lut_size; i++)
> > -			igt_assert(lut[i].red == 0 &&
> > -				   lut[i].green == 0 &&
> > -				   lut[i].blue == 0);
> > +					    data->degamma_lut_size));
> >  		drmModeFreePropertyBlob(blob);
> > +	}
> > 
> > -		/* Set a gamma LUT using the legacy ioctl and verify
> > -		 * the content of the GAMMA_LUT property is changed
> > -		 * and that CTM and DEGAMMA_LUT are empty. */
> > -		kms_crtc = drmModeGetCrtc(data->drm_fd, primary->pipe->crtc_id);
> > -		legacy_lut_size = kms_crtc->gamma_size;
> > -		drmModeFreeCrtc(kms_crtc);
> > +	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM)) {
> > +		blob = get_blob(data, primary->pipe, IGT_CRTC_CTM);
> > +		igt_assert(blob &&
> > +			   blob->length == sizeof(struct drm_color_ctm));
> > +		drmModeFreePropertyBlob(blob);
> > +	}
> > 
> > -		red_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> > -		green_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> > -		blue_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> > +	blob = get_blob(data, primary->pipe, IGT_CRTC_GAMMA_LUT);
> > +	igt_assert(blob &&
> > +		   blob->length == (sizeof(struct drm_color_lut) *
> > +				    data->gamma_lut_size));
> > +	lut = (struct drm_color_lut *) blob->data;
> > +	for (i = 0; i < data->gamma_lut_size; i++)
> > +		igt_assert(lut[i].red == 0 &&
> > +			   lut[i].green == 0 &&
> > +			   lut[i].blue == 0);
> > +	drmModeFreePropertyBlob(blob);
> > 
> > -		for (i = 0; i < legacy_lut_size; i++)
> > -			red_lut[i] = green_lut[i] = blue_lut[i] = 0xffff;
> > +	/* Set a gamma LUT using the legacy ioctl and verify
> > +	 * the content of the GAMMA_LUT property is changed
> > +	 * and that CTM and DEGAMMA_LUT are empty. */
> > +	kms_crtc = drmModeGetCrtc(data->drm_fd, primary->pipe->crtc_id);
> > +	legacy_lut_size = kms_crtc->gamma_size;
> > +	drmModeFreeCrtc(kms_crtc);
> > 
> > -		igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd,
> > -						  primary->pipe->crtc_id,
> > -						  legacy_lut_size,
> > -						  red_lut, green_lut, blue_lut),
> > -			      0);
> > -		igt_display_commit(&data->display);
> > +	red_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> > +	green_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> > +	blue_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> > 
> > -		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT))
> > -			igt_assert(get_blob(data, primary->pipe,
> > -					    IGT_CRTC_DEGAMMA_LUT) == NULL);
> > +	for (i = 0; i < legacy_lut_size; i++)
> > +		red_lut[i] = green_lut[i] = blue_lut[i] = 0xffff;
> > 
> > -		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM))
> > -			igt_assert(get_blob(data, primary->pipe, IGT_CRTC_CTM) ==
> > NULL);
> > +	igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd,
> > +					  primary->pipe->crtc_id,
> > +					  legacy_lut_size,
> > +					  red_lut, green_lut, blue_lut), 0);
> > +	igt_display_commit(&data->display);
> > 
> > -		blob = get_blob(data, primary->pipe, IGT_CRTC_GAMMA_LUT);
> > -		igt_assert(blob &&
> > -			   blob->length == (sizeof(struct drm_color_lut) *
> > -					    legacy_lut_size));
> > -		lut = (struct drm_color_lut *) blob->data;
> > -		for (i = 0; i < legacy_lut_size; i++)
> > -			igt_assert(lut[i].red == 0xffff &&
> > -				   lut[i].green == 0xffff &&
> > -				   lut[i].blue == 0xffff);
> > -		drmModeFreePropertyBlob(blob);
> > +	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT))
> > +		igt_assert(get_blob(data, primary->pipe,
> > +				    IGT_CRTC_DEGAMMA_LUT) == NULL);
> > 
> > -		igt_plane_set_fb(primary, NULL);
> > -		igt_output_set_pipe(output, PIPE_NONE);
> > -	}
> > +	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM))
> > +		igt_assert(get_blob(data, primary->pipe, IGT_CRTC_CTM) == NULL);
> > +
> > +	blob = get_blob(data, primary->pipe, IGT_CRTC_GAMMA_LUT);
> > +	igt_assert(blob &&
> > +		   blob->length == (sizeof(struct drm_color_lut) *
> > +				    legacy_lut_size));
> > +	lut = (struct drm_color_lut *) blob->data;
> > +	for (i = 0; i < legacy_lut_size; i++)
> > +		igt_assert(lut[i].red == 0xffff &&
> > +			   lut[i].green == 0xffff &&
> > +			   lut[i].blue == 0xffff);
> > +	drmModeFreePropertyBlob(blob);
> > +
> > +	igt_plane_set_fb(primary, NULL);
> > +	igt_output_set_pipe(output, PIPE_NONE);
> > 
> >  	free_lut(degamma_linear);
> >  	free_lut(gamma_zero);
> > @@ -442,84 +442,84 @@ static bool test_pipe_ctm(data_t *data,
> >  	igt_output_t *output;
> >  	bool ret = true;
> >  	igt_display_t *display = &data->display;
> > +	drmModeModeInfo *mode;
> > +	struct igt_fb fb_modeset, fb;
> > +	igt_crc_t crc_software, crc_hardware;
> > +	int fb_id, fb_modeset_id;
> > 
> >  	igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM));
> > 
> >  	degamma_linear = generate_table(data->degamma_lut_size, 1.0);
> >  	gamma_linear = generate_table(data->gamma_lut_size, 1.0);
> > 
> > -	for_each_valid_output_on_pipe(&data->display, primary->pipe->pipe,
> > output) {
> > -		drmModeModeInfo *mode;
> > -		struct igt_fb fb_modeset, fb;
> > -		igt_crc_t crc_software, crc_hardware;
> > -		int fb_id, fb_modeset_id;
> > +	output = igt_get_single_output_for_pipe(&data->display, primary->pipe-
> > >pipe);
> > +	igt_require(output);
> > 
> > -		igt_output_set_pipe(output, primary->pipe->pipe);
> > -		mode = igt_output_get_mode(output);
> > +	igt_output_set_pipe(output, primary->pipe->pipe);
> > +	mode = igt_output_get_mode(output);
> > 
> > -		/* Create a framebuffer at the size of the output. */
> > -		fb_id = igt_create_fb(data->drm_fd,
> > +	/* Create a framebuffer at the size of the output. */
> > +	fb_id = igt_create_fb(data->drm_fd,
> > +			      mode->hdisplay,
> > +			      mode->vdisplay,
> > +			      DRM_FORMAT_XRGB8888,
> > +			      DRM_FORMAT_MOD_NONE,
> > +			      &fb);
> > +	igt_assert(fb_id);
> > +
> > +	fb_modeset_id = igt_create_fb(data->drm_fd,
> >  				      mode->hdisplay,
> >  				      mode->vdisplay,
> >  				      DRM_FORMAT_XRGB8888,
> >  				      DRM_FORMAT_MOD_NONE,
> > -				      &fb);
> > -		igt_assert(fb_id);
> > +				      &fb_modeset);
> > +	igt_assert(fb_modeset_id);
> > +	igt_plane_set_fb(primary, &fb_modeset);
> > 
> > -		fb_modeset_id = igt_create_fb(data->drm_fd,
> > -					      mode->hdisplay,
> > -					      mode->vdisplay,
> > -					      DRM_FORMAT_XRGB8888,
> > -					      DRM_FORMAT_MOD_NONE,
> > -					      &fb_modeset);
> > -		igt_assert(fb_modeset_id);
> > -		igt_plane_set_fb(primary, &fb_modeset);
> > -
> > -		/*
> > -		 * Don't program LUT's for max CTM cases, as limitation of
> > -		 * representing intermediate values between 0 and 1.0 causes
> > -		 * rounding issues and inaccuracies leading to crc mismatch.
> > -		 */
> > -		if (memcmp(before, after, sizeof(color_t))) {
> > -			set_degamma(data, primary->pipe, degamma_linear);
> > -			set_gamma(data, primary->pipe, gamma_linear);
> > -		} else {
> > -			/* Disable Degamma and Gamma for ctm max test */
> > -			disable_degamma(primary->pipe);
> > -			disable_gamma(primary->pipe);
> > -		}
> > -
> > -		disable_ctm(primary->pipe);
> > -		igt_display_commit(&data->display);
> > -
> > -		paint_rectangles(data, mode, after, &fb);
> > -		igt_plane_set_fb(primary, &fb);
> > -		set_ctm(primary->pipe, ctm_identity);
> > -		igt_display_commit(&data->display);
> > -		igt_wait_for_vblank(data->drm_fd,
> > -				display->pipes[primary->pipe->pipe].crtc_offset);
> > -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_software);
> > -
> > -		/* With CTM transformation. */
> > -		paint_rectangles(data, mode, before, &fb);
> > -		igt_plane_set_fb(primary, &fb);
> > -		set_ctm(primary->pipe, ctm_matrix);
> > -		igt_display_commit(&data->display);
> > -		igt_wait_for_vblank(data->drm_fd,
> > -				display->pipes[primary->pipe->pipe].crtc_offset);
> > -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_hardware);
> > -
> > -		/* Verify that the CRC of the software computed output is
> > -		 * equal to the CRC of the CTM matrix transformation output.
> > -		 */
> > -		ret &= !igt_skip_crc_compare || igt_check_crc_equal(&crc_software,
> > &crc_hardware);
> > -
> > -		igt_plane_set_fb(primary, NULL);
> > -		igt_output_set_pipe(output, PIPE_NONE);
> > -		igt_remove_fb(data->drm_fd, &fb);
> > -		igt_remove_fb(data->drm_fd, &fb_modeset);
> > +	/*
> > +	 * Don't program LUT's for max CTM cases, as limitation of
> > +	 * representing intermediate values between 0 and 1.0 causes
> > +	 * rounding issues and inaccuracies leading to crc mismatch.
> > +	 */
> > +	if (memcmp(before, after, sizeof(color_t))) {
> > +		set_degamma(data, primary->pipe, degamma_linear);
> > +		set_gamma(data, primary->pipe, gamma_linear);
> > +	} else {
> > +		/* Disable Degamma and Gamma for ctm max test */
> > +		disable_degamma(primary->pipe);
> > +		disable_gamma(primary->pipe);
> >  	}
> > 
> > +	disable_ctm(primary->pipe);
> > +	igt_display_commit(&data->display);
> > +
> > +	paint_rectangles(data, mode, after, &fb);
> > +	igt_plane_set_fb(primary, &fb);
> > +	set_ctm(primary->pipe, ctm_identity);
> > +	igt_display_commit(&data->display);
> > +	igt_wait_for_vblank(data->drm_fd,
> > +			    display->pipes[primary->pipe->pipe].crtc_offset);
> > +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_software);
> > +
> > +	/* With CTM transformation. */
> > +	paint_rectangles(data, mode, before, &fb);
> > +	igt_plane_set_fb(primary, &fb);
> > +	set_ctm(primary->pipe, ctm_matrix);
> > +	igt_display_commit(&data->display);
> > +	igt_wait_for_vblank(data->drm_fd,
> > +			    display->pipes[primary->pipe->pipe].crtc_offset);
> > +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_hardware);
> > +
> > +	/* Verify that the CRC of the software computed output is
> > +	 * equal to the CRC of the CTM matrix transformation output.
> > +	 */
> > +	ret &= !igt_skip_crc_compare || igt_check_crc_equal(&crc_software,
> > &crc_hardware);
> > +
> > +	igt_plane_set_fb(primary, NULL);
> > +	igt_output_set_pipe(output, PIPE_NONE);
> > +	igt_remove_fb(data->drm_fd, &fb);
> > +	igt_remove_fb(data->drm_fd, &fb_modeset);
> > +
> >  	free_lut(degamma_linear);
> >  	free_lut(gamma_linear);
> > 
> > --
> > 2.31.1
> 

-- 
Ville Syrjälä
Intel

^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [igt-dev] [PATCH i-g-t v3 1/7] tests/kms_color_chamelium: Remove invalid LUT size tests
  2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 1/7] tests/kms_color_chamelium: Remove invalid LUT size tests Ville Syrjala
@ 2021-09-12 15:30   ` Modem, Bhanuprakash
  0 siblings, 0 replies; 19+ messages in thread
From: Modem, Bhanuprakash @ 2021-09-12 15:30 UTC (permalink / raw)
  To: Ville Syrjala, igt-dev

> From: Ville Syrjala <ville.syrjala@linux.intel.com>
> Sent: Friday, September 3, 2021 9:58 PM
> To: igt-dev@lists.freedesktop.org
> Cc: Modem, Bhanuprakash <bhanuprakash.modem@intel.com>
> Subject: [PATCH i-g-t v3 1/7] tests/kms_color_chamelium: Remove invalid LUT
> size tests
> 
> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> 
> There is zero point in duplicating the invalid LUT size tests
> in the chamelium test. Get rid of them.
> 
> Cc: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>

LGTM 
Reviewed-by: Bhanuprakash Modem <bhanuprakash.modem@intel.com>

-Bhanu

> ---
>  tests/kms_color_chamelium.c | 11 -----------
>  1 file changed, 11 deletions(-)
> 
> diff --git a/tests/kms_color_chamelium.c b/tests/kms_color_chamelium.c
> index bc4356bfab6a..97741b9c968e 100644
> --- a/tests/kms_color_chamelium.c
> +++ b/tests/kms_color_chamelium.c
> @@ -752,17 +752,6 @@ igt_main
>  	for_each_pipe_static(pipe)
>  		igt_subtest_group
>  			run_tests_for_pipe(&data, pipe);
> -	igt_describe("Negative test case gamma lut size");
> -	igt_subtest_f("pipe-invalid-gamma-lut-sizes")
> -		invalid_gamma_lut_sizes(&data);
> -
> -	igt_describe("Negative test case degamma lut size");
> -	igt_subtest_f("pipe-invalid-degamma-lut-sizes")
> -		invalid_degamma_lut_sizes(&data);
> -
> -	igt_describe("Negative test case ctm matrix size");
> -	igt_subtest_f("pipe-invalid-ctm-matrix-sizes")
> -		invalid_ctm_matrix_sizes(&data);
> 
>  	igt_fixture {
>  		igt_display_fini(&data.display);
> --
> 2.31.1


^ permalink raw reply	[flat|nested] 19+ messages in thread

* Re: [igt-dev] [PATCH i-g-t v3 5/7] tests/kms_color: Run each subtest only for a single connector
  2021-09-07 17:34     ` Ville Syrjälä
@ 2021-09-12 15:36       ` Modem, Bhanuprakash
  0 siblings, 0 replies; 19+ messages in thread
From: Modem, Bhanuprakash @ 2021-09-12 15:36 UTC (permalink / raw)
  To: Ville Syrjälä; +Cc: igt-dev

> From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> Sent: Tuesday, September 7, 2021 11:05 PM
> To: Modem, Bhanuprakash <bhanuprakash.modem@intel.com>
> Cc: igt-dev@lists.freedesktop.org
> Subject: Re: [PATCH i-g-t v3 5/7] tests/kms_color: Run each subtest only for a
> single connector
> 
> On Mon, Sep 06, 2021 at 06:38:26AM +0000, Modem, Bhanuprakash wrote:
> > > From: Ville Syrjala <ville.syrjala@linux.intel.com>
> > > Sent: Friday, September 3, 2021 9:58 PM
> > > To: igt-dev@lists.freedesktop.org
> > > Cc: Modem, Bhanuprakash <bhanuprakash.modem@intel.com>
> > > Subject: [PATCH i-g-t v3 5/7] tests/kms_color: Run each subtest only for a
> > > single connector
> > >
> > > From: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > >
> > > For most of the subtests the used connector should not matter,
> > > so run each subtest just for a single connector.
> > >
> > > Suggested-by: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>
> > > Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
> > > ---
> > >  tests/kms_color.c | 612 +++++++++++++++++++++++-----------------------
> > >  1 file changed, 306 insertions(+), 306 deletions(-)
> > >
> > > diff --git a/tests/kms_color.c b/tests/kms_color.c
> > > index dabc6963e9e0..d78c7e211511 100644
> > > --- a/tests/kms_color.c
> > > +++ b/tests/kms_color.c
> > > @@ -37,6 +37,10 @@ static void test_pipe_degamma(data_t *data,
> > >  		{ 0.0, 1.0, 0.0 },
> > >  		{ 0.0, 0.0, 1.0 }
> > >  	};
> > > +	drmModeModeInfo *mode;
> > > +	struct igt_fb fb_modeset, fb;
> > > +	igt_crc_t crc_fullgamma, crc_fullcolors;
> > > +	int fb_id, fb_modeset_id;
> > >
> > >  	igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT));
> > >  	igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_GAMMA_LUT));
> > > @@ -44,69 +48,65 @@ static void test_pipe_degamma(data_t *data,
> > >  	degamma_linear = generate_table(data->degamma_lut_size, 1.0);
> > >  	degamma_full = generate_table_max(data->degamma_lut_size);
> > >
> > > -	for_each_valid_output_on_pipe(&data->display, primary->pipe->pipe,
> > > output) {
> > > -		drmModeModeInfo *mode;
> > > -		struct igt_fb fb_modeset, fb;
> > > -		igt_crc_t crc_fullgamma, crc_fullcolors;
> > > -		int fb_id, fb_modeset_id;
> > > +	output = igt_get_single_output_for_pipe(&data->display, primary->pipe-
> > > >pipe);
> > > +	igt_require(output);
> > >
> > > -		igt_output_set_pipe(output, primary->pipe->pipe);
> > > -		mode = igt_output_get_mode(output);
> > > +	igt_output_set_pipe(output, primary->pipe->pipe);
> > > +	mode = igt_output_get_mode(output);
> > >
> > > -		/* Create a framebuffer at the size of the output. */
> > > -		fb_id = igt_create_fb(data->drm_fd,
> > > +	/* Create a framebuffer at the size of the output. */
> > > +	fb_id = igt_create_fb(data->drm_fd,
> > > +			      mode->hdisplay,
> > > +			      mode->vdisplay,
> > > +			      DRM_FORMAT_XRGB8888,
> > > +			      DRM_FORMAT_MOD_NONE,
> > > +			      &fb);
> > > +	igt_assert(fb_id);
> >
> > Minor: we can get rid of extra variables by updating like
> > `igt_assert(igt_create_fb());`
> 
> I'm not going to be doing any unrelated changes in this
> patch. The indentation change alone is already bad enough
> to review.
> 
> >
> > And this is applicable for all the places.
> >
> > > +
> > > +	fb_modeset_id = igt_create_fb(data->drm_fd,
> > >  				      mode->hdisplay,
> > >  				      mode->vdisplay,
> > >  				      DRM_FORMAT_XRGB8888,
> > >  				      DRM_FORMAT_MOD_NONE,
> > > -				      &fb);
> > > -		igt_assert(fb_id);
> > > +				      &fb_modeset);
> > > +	igt_assert(fb_modeset_id);
> > >
> > > -		fb_modeset_id = igt_create_fb(data->drm_fd,
> > > -					      mode->hdisplay,
> > > -					      mode->vdisplay,
> > > -					      DRM_FORMAT_XRGB8888,
> > > -					      DRM_FORMAT_MOD_NONE,
> > > -					      &fb_modeset);
> > > -		igt_assert(fb_modeset_id);
> > > +	igt_plane_set_fb(primary, &fb_modeset);
> > > +	disable_ctm(primary->pipe);
> > > +	disable_gamma(primary->pipe);
> > > +	set_degamma(data, primary->pipe, degamma_linear);
> > > +	igt_display_commit(&data->display);
> > >
> > > -		igt_plane_set_fb(primary, &fb_modeset);
> > > -		disable_ctm(primary->pipe);
> > > -		disable_gamma(primary->pipe);
> > > -		set_degamma(data, primary->pipe, degamma_linear);
> > > -		igt_display_commit(&data->display);
> > > +	/* Draw solid colors with linear degamma transformation. */
> > > +	paint_rectangles(data, mode, red_green_blue, &fb);
> > > +	igt_plane_set_fb(primary, &fb);
> > > +	igt_display_commit(&data->display);
> > > +	igt_wait_for_vblank(data->drm_fd,
> > > +			    display->pipes[primary->pipe->pipe].crtc_offset);
> > > +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
> > >
> > > -		/* Draw solid colors with linear degamma transformation. */
> > > -		paint_rectangles(data, mode, red_green_blue, &fb);
> > > -		igt_plane_set_fb(primary, &fb);
> > > -		igt_display_commit(&data->display);
> > > -		igt_wait_for_vblank(data->drm_fd,
> > > -				display->pipes[primary->pipe->pipe].crtc_offset);
> > > -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
> > > +	/* Draw a gradient with degamma LUT to remap all
> > > +	 * values to max red/green/blue.
> > > +	 */
> > > +	paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> > > +	igt_plane_set_fb(primary, &fb);
> > > +	set_degamma(data, primary->pipe, degamma_full);
> > > +	igt_display_commit(&data->display);
> > > +	igt_wait_for_vblank(data->drm_fd,
> > > +			    display->pipes[primary->pipe->pipe].crtc_offset);
> > > +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
> > >
> > > -		/* Draw a gradient with degamma LUT to remap all
> > > -		 * values to max red/green/blue.
> > > -		 */
> > > -		paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> > > -		igt_plane_set_fb(primary, &fb);
> > > -		set_degamma(data, primary->pipe, degamma_full);
> > > -		igt_display_commit(&data->display);
> > > -		igt_wait_for_vblank(data->drm_fd,
> > > -				display->pipes[primary->pipe->pipe].crtc_offset);
> > > -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
> > > +	/* Verify that the CRC of the software computed output is
> > > +	 * equal to the CRC of the degamma LUT transformation output.
> > > +	 */
> > > +	igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
> > >
> > > -		/* Verify that the CRC of the software computed output is
> > > -		 * equal to the CRC of the degamma LUT transformation output.
> > > -		 */
> > > -		igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
> > > -
> > > -		disable_degamma(primary->pipe);
> > > -		igt_plane_set_fb(primary, NULL);
> > > -		igt_output_set_pipe(output, PIPE_NONE);
> > > -		igt_display_commit(&data->display);
> > > -		igt_remove_fb(data->drm_fd, &fb);
> > > -		igt_remove_fb(data->drm_fd, &fb_modeset);
> > > -	}
> > > +	disable_degamma(primary->pipe);
> > > +	igt_plane_set_fb(primary, NULL);
> > > +	igt_output_set_pipe(output, PIPE_NONE);
> > > +	igt_display_commit(&data->display);
> > > +	igt_remove_fb(data->drm_fd, &fb);
> > > +	igt_remove_fb(data->drm_fd, &fb_modeset);
> > >
> > >  	free_lut(degamma_linear);
> > >  	free_lut(degamma_full);
> > > @@ -127,73 +127,73 @@ static void test_pipe_gamma(data_t *data,
> > >  		{ 0.0, 1.0, 0.0 },
> > >  		{ 0.0, 0.0, 1.0 }
> > >  	};
> > > +	drmModeModeInfo *mode;
> > > +	struct igt_fb fb_modeset, fb;
> > > +	igt_crc_t crc_fullgamma, crc_fullcolors;
> > > +	int fb_id, fb_modeset_id;
> > >
> > >  	igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_GAMMA_LUT));
> > >
> > >  	gamma_full = generate_table_max(data->gamma_lut_size);
> > >
> > > -	for_each_valid_output_on_pipe(&data->display, primary->pipe->pipe,
> > > output) {
> > > -		drmModeModeInfo *mode;
> > > -		struct igt_fb fb_modeset, fb;
> > > -		igt_crc_t crc_fullgamma, crc_fullcolors;
> > > -		int fb_id, fb_modeset_id;
> > > +	output = igt_get_single_output_for_pipe(&data->display, primary->pipe-
> > > >pipe);
> > > +	igt_require(output);
> > >
> > > -		igt_output_set_pipe(output, primary->pipe->pipe);
> > > -		mode = igt_output_get_mode(output);
> > > +	igt_output_set_pipe(output, primary->pipe->pipe);
> > > +	mode = igt_output_get_mode(output);
> > >
> > > -		/* Create a framebuffer at the size of the output. */
> > > -		fb_id = igt_create_fb(data->drm_fd,
> > > +	/* Create a framebuffer at the size of the output. */
> > > +	fb_id = igt_create_fb(data->drm_fd,
> > > +			      mode->hdisplay,
> > > +			      mode->vdisplay,
> > > +			      DRM_FORMAT_XRGB8888,
> > > +			      DRM_FORMAT_MOD_NONE,
> > > +			      &fb);
> > > +	igt_assert(fb_id);
> > > +
> > > +	fb_modeset_id = igt_create_fb(data->drm_fd,
> > >  				      mode->hdisplay,
> > >  				      mode->vdisplay,
> > >  				      DRM_FORMAT_XRGB8888,
> > >  				      DRM_FORMAT_MOD_NONE,
> > > -				      &fb);
> > > -		igt_assert(fb_id);
> > > +				      &fb_modeset);
> > > +	igt_assert(fb_modeset_id);
> > >
> > > -		fb_modeset_id = igt_create_fb(data->drm_fd,
> > > -					      mode->hdisplay,
> > > -					      mode->vdisplay,
> > > -					      DRM_FORMAT_XRGB8888,
> > > -					      DRM_FORMAT_MOD_NONE,
> > > -					      &fb_modeset);
> > > -		igt_assert(fb_modeset_id);
> > > +	igt_plane_set_fb(primary, &fb_modeset);
> > > +	disable_ctm(primary->pipe);
> > > +	disable_degamma(primary->pipe);
> > > +	set_gamma(data, primary->pipe, gamma_full);
> >
> > This could be disable_gamma(), right?
> 
> Getting matching crcs has been rather problematic in this
> test. I don't recall the specifics on which LUT is needed
> in each case to guarantee that.
> 
> >
> > > +	igt_display_commit(&data->display);
> > >
> > > -		igt_plane_set_fb(primary, &fb_modeset);
> > > -		disable_ctm(primary->pipe);
> > > -		disable_degamma(primary->pipe);
> > > -		set_gamma(data, primary->pipe, gamma_full);
> > > -		igt_display_commit(&data->display);
> > > +	/* Draw solid colors with no gamma transformation. */
> > > +	paint_rectangles(data, mode, red_green_blue, &fb);
> > > +	igt_plane_set_fb(primary, &fb);
> > > +	igt_display_commit(&data->display);
> > > +	igt_wait_for_vblank(data->drm_fd,
> > > +			    display->pipes[primary->pipe->pipe].crtc_offset);
> > > +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
> > >
> > > -		/* Draw solid colors with no gamma transformation. */
> > > -		paint_rectangles(data, mode, red_green_blue, &fb);
> > > -		igt_plane_set_fb(primary, &fb);
> > > -		igt_display_commit(&data->display);
> > > -		igt_wait_for_vblank(data->drm_fd,
> > > -				display->pipes[primary->pipe->pipe].crtc_offset);
> > > -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
> > > +	/* Draw a gradient with gamma LUT to remap all values
> > > +	 * to max red/green/blue.
> > > +	 */
> > > +	paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> > > +	igt_plane_set_fb(primary, &fb);
> >
> > And here we need to set the gamma: set_gamma(gamma_max)
> 
> Also a totally unrelated change. If you think there's a bug here
> pls submit a separate patch.

Sure I'll submit a new patch, I Think we are in good shape to merge
this series (I already reviewed remaining patches in this series).

- Bhanu

> 
> >
> > With these changes, this patch is
> > Reviewed-by: Bhanuprakash Modem <Bhanuprakash.modem@intel.com>
> >
> > - Bhanu
> >
> > > +	igt_display_commit(&data->display);
> > > +	igt_wait_for_vblank(data->drm_fd,
> > > +			    display->pipes[primary->pipe->pipe].crtc_offset);
> > > +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
> > >
> > > -		/* Draw a gradient with gamma LUT to remap all values
> > > -		 * to max red/green/blue.
> > > -		 */
> > > -		paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> > > -		igt_plane_set_fb(primary, &fb);
> > > -		igt_display_commit(&data->display);
> > > -		igt_wait_for_vblank(data->drm_fd,
> > > -				display->pipes[primary->pipe->pipe].crtc_offset);
> > > -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
> > > +	/* Verify that the CRC of the software computed output is
> > > +	 * equal to the CRC of the gamma LUT transformation output.
> > > +	 */
> > > +	igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
> > >
> > > -		/* Verify that the CRC of the software computed output is
> > > -		 * equal to the CRC of the gamma LUT transformation output.
> > > -		 */
> > > -		igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
> > > -
> > > -		disable_gamma(primary->pipe);
> > > -		igt_plane_set_fb(primary, NULL);
> > > -		igt_output_set_pipe(output, PIPE_NONE);
> > > -		igt_display_commit(&data->display);
> > > -		igt_remove_fb(data->drm_fd, &fb);
> > > -		igt_remove_fb(data->drm_fd, &fb_modeset);
> > > -	}
> > > +	disable_gamma(primary->pipe);
> > > +	igt_plane_set_fb(primary, NULL);
> > > +	igt_output_set_pipe(output, PIPE_NONE);
> > > +	igt_display_commit(&data->display);
> > > +	igt_remove_fb(data->drm_fd, &fb);
> > > +	igt_remove_fb(data->drm_fd, &fb_modeset);
> > >
> > >  	free_lut(gamma_full);
> > >  }
> > > @@ -216,6 +216,10 @@ static void test_pipe_legacy_gamma(data_t *data,
> > >  	drmModeCrtc *kms_crtc;
> > >  	uint32_t i, legacy_lut_size;
> > >  	uint16_t *red_lut, *green_lut, *blue_lut;
> > > +	drmModeModeInfo *mode;
> > > +	struct igt_fb fb_modeset, fb;
> > > +	igt_crc_t crc_fullgamma, crc_fullcolors;
> > > +	int fb_id, fb_modeset_id;
> > >
> > >  	kms_crtc = drmModeGetCrtc(data->drm_fd, primary->pipe->crtc_id);
> > >  	legacy_lut_size = kms_crtc->gamma_size;
> > > @@ -225,80 +229,76 @@ static void test_pipe_legacy_gamma(data_t *data,
> > >  	green_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> > >  	blue_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> > >
> > > -	for_each_valid_output_on_pipe(&data->display, primary->pipe->pipe,
> > > output) {
> > > -		drmModeModeInfo *mode;
> > > -		struct igt_fb fb_modeset, fb;
> > > -		igt_crc_t crc_fullgamma, crc_fullcolors;
> > > -		int fb_id, fb_modeset_id;
> > > +	output = igt_get_single_output_for_pipe(&data->display, primary->pipe-
> > > >pipe);
> > > +	igt_require(output);
> > >
> > > -		igt_output_set_pipe(output, primary->pipe->pipe);
> > > -		mode = igt_output_get_mode(output);
> > > +	igt_output_set_pipe(output, primary->pipe->pipe);
> > > +	mode = igt_output_get_mode(output);
> > >
> > > -		/* Create a framebuffer at the size of the output. */
> > > -		fb_id = igt_create_fb(data->drm_fd,
> > > +	/* Create a framebuffer at the size of the output. */
> > > +	fb_id = igt_create_fb(data->drm_fd,
> > > +			      mode->hdisplay,
> > > +			      mode->vdisplay,
> > > +			      DRM_FORMAT_XRGB8888,
> > > +			      DRM_FORMAT_MOD_NONE,
> > > +			      &fb);
> > > +	igt_assert(fb_id);
> > > +
> > > +	fb_modeset_id = igt_create_fb(data->drm_fd,
> > >  				      mode->hdisplay,
> > >  				      mode->vdisplay,
> > >  				      DRM_FORMAT_XRGB8888,
> > >  				      DRM_FORMAT_MOD_NONE,
> > > -				      &fb);
> > > -		igt_assert(fb_id);
> > > -
> > > -		fb_modeset_id = igt_create_fb(data->drm_fd,
> > > -					      mode->hdisplay,
> > > -					      mode->vdisplay,
> > > -					      DRM_FORMAT_XRGB8888,
> > > -					      DRM_FORMAT_MOD_NONE,
> > > -					      &fb_modeset);
> > > -		igt_assert(fb_modeset_id);
> > > -
> > > -		igt_plane_set_fb(primary, &fb_modeset);
> > > -		disable_degamma(primary->pipe);
> > > -		disable_gamma(primary->pipe);
> > > -		disable_ctm(primary->pipe);
> > > -		igt_display_commit(&data->display);
> > > -
> > > -		/* Draw solid colors with no gamma transformation. */
> > > -		paint_rectangles(data, mode, red_green_blue, &fb);
> > > -		igt_plane_set_fb(primary, &fb);
> > > -		igt_display_commit(&data->display);
> > > -		igt_wait_for_vblank(data->drm_fd,
> > > -				display->pipes[primary->pipe->pipe].crtc_offset);
> > > -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
> > > -
> > > -		/* Draw a gradient with gamma LUT to remap all values
> > > -		 * to max red/green/blue.
> > > -		 */
> > > -		paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> > > -		igt_plane_set_fb(primary, &fb);
> > > -
> > > -		red_lut[0] = green_lut[0] = blue_lut[0] = 0;
> > > -		for (i = 1; i < legacy_lut_size; i++)
> > > -			red_lut[i] = green_lut[i] = blue_lut[i] = 0xffff;
> > > -		igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd, primary->pipe-
> > > >crtc_id,
> > > -						  legacy_lut_size, red_lut, green_lut,
> > > blue_lut), 0);
> > > -		igt_display_commit(&data->display);
> > > -		igt_wait_for_vblank(data->drm_fd,
> > > -				display->pipes[primary->pipe->pipe].crtc_offset);
> > > -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
> > > -
> > > -		/* Verify that the CRC of the software computed output is
> > > -		 * equal to the CRC of the gamma LUT transformation output.
> > > -		 */
> > > -		igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
> > > -
> > > -		/* Reset output. */
> > > -		for (i = 1; i < legacy_lut_size; i++)
> > > -			red_lut[i] = green_lut[i] = blue_lut[i] = i << 8;
> > > -
> > > -		igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd, primary->pipe-
> > > >crtc_id,
> > > -						  legacy_lut_size, red_lut, green_lut,
> > > blue_lut), 0);
> > > -		igt_display_commit(&data->display);
> > > -
> > > -		igt_plane_set_fb(primary, NULL);
> > > -		igt_output_set_pipe(output, PIPE_NONE);
> > > -		igt_remove_fb(data->drm_fd, &fb);
> > > -		igt_remove_fb(data->drm_fd, &fb_modeset);
> > > -	}
> > > +				      &fb_modeset);
> > > +	igt_assert(fb_modeset_id);
> > > +
> > > +	igt_plane_set_fb(primary, &fb_modeset);
> > > +	disable_degamma(primary->pipe);
> > > +	disable_gamma(primary->pipe);
> > > +	disable_ctm(primary->pipe);
> > > +	igt_display_commit(&data->display);
> > > +
> > > +	/* Draw solid colors with no gamma transformation. */
> > > +	paint_rectangles(data, mode, red_green_blue, &fb);
> > > +	igt_plane_set_fb(primary, &fb);
> > > +	igt_display_commit(&data->display);
> > > +	igt_wait_for_vblank(data->drm_fd,
> > > +			    display->pipes[primary->pipe->pipe].crtc_offset);
> > > +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullcolors);
> > > +
> > > +	/* Draw a gradient with gamma LUT to remap all values
> > > +	 * to max red/green/blue.
> > > +	 */
> > > +	paint_gradient_rectangles(data, mode, red_green_blue, &fb);
> > > +	igt_plane_set_fb(primary, &fb);
> > > +
> > > +	red_lut[0] = green_lut[0] = blue_lut[0] = 0;
> > > +	for (i = 1; i < legacy_lut_size; i++)
> > > +		red_lut[i] = green_lut[i] = blue_lut[i] = 0xffff;
> > > +	igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd, primary->pipe->crtc_id,
> > > +					  legacy_lut_size, red_lut, green_lut, blue_lut),
> > > 0);
> > > +	igt_display_commit(&data->display);
> > > +	igt_wait_for_vblank(data->drm_fd,
> > > +			    display->pipes[primary->pipe->pipe].crtc_offset);
> > > +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_fullgamma);
> > > +
> > > +	/* Verify that the CRC of the software computed output is
> > > +	 * equal to the CRC of the gamma LUT transformation output.
> > > +	 */
> > > +	igt_assert_crc_equal(&crc_fullgamma, &crc_fullcolors);
> > > +
> > > +	/* Reset output. */
> > > +	for (i = 1; i < legacy_lut_size; i++)
> > > +		red_lut[i] = green_lut[i] = blue_lut[i] = i << 8;
> > > +
> > > +	igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd, primary->pipe->crtc_id,
> > > +					  legacy_lut_size, red_lut, green_lut, blue_lut),
> > > 0);
> > > +	igt_display_commit(&data->display);
> > > +
> > > +	igt_plane_set_fb(primary, NULL);
> > > +	igt_output_set_pipe(output, PIPE_NONE);
> > > +	igt_remove_fb(data->drm_fd, &fb);
> > > +	igt_remove_fb(data->drm_fd, &fb_modeset);
> > >
> > >  	free(red_lut);
> > >  	free(green_lut);
> > > @@ -331,93 +331,93 @@ static void test_pipe_legacy_gamma_reset(data_t
> *data,
> > >  		degamma_linear = generate_table(data->degamma_lut_size, 1.0);
> > >  	gamma_zero = generate_table_zero(data->gamma_lut_size);
> > >
> > > -	for_each_valid_output_on_pipe(&data->display, primary->pipe->pipe,
> > > output) {
> > > -		igt_output_set_pipe(output, primary->pipe->pipe);
> > > +	output = igt_get_single_output_for_pipe(&data->display, primary->pipe-
> > > >pipe);
> > > +	igt_require(output);
> > >
> > > -		/* Ensure we have a clean state to start with. */
> > > -		disable_degamma(primary->pipe);
> > > -		disable_ctm(primary->pipe);
> > > -		disable_gamma(primary->pipe);
> > > -		igt_display_commit(&data->display);
> > > +	igt_output_set_pipe(output, primary->pipe->pipe);
> > >
> > > -		/* Set a degama & gamma LUT and a CTM using the
> > > -		 * properties and verify the content of the
> > > -		 * properties. */
> > > -		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT))
> > > -			set_degamma(data, primary->pipe, degamma_linear);
> > > -		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM))
> > > -			set_ctm(primary->pipe, ctm_identity);
> > > -		set_gamma(data, primary->pipe, gamma_zero);
> > > -		igt_display_commit(&data->display);
> > > +	/* Ensure we have a clean state to start with. */
> > > +	disable_degamma(primary->pipe);
> > > +	disable_ctm(primary->pipe);
> > > +	disable_gamma(primary->pipe);
> > > +	igt_display_commit(&data->display);
> > >
> > > -		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT)) {
> > > -			blob = get_blob(data, primary->pipe, IGT_CRTC_DEGAMMA_LUT);
> > > -			igt_assert(blob &&
> > > -				   blob->length == (sizeof(struct drm_color_lut) *
> > > -						    data->degamma_lut_size));
> > > -			drmModeFreePropertyBlob(blob);
> > > -		}
> > > +	/* Set a degama & gamma LUT and a CTM using the
> > > +	 * properties and verify the content of the
> > > +	 * properties. */
> > > +	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT))
> > > +		set_degamma(data, primary->pipe, degamma_linear);
> > > +	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM))
> > > +		set_ctm(primary->pipe, ctm_identity);
> > > +	set_gamma(data, primary->pipe, gamma_zero);
> > > +	igt_display_commit(&data->display);
> > >
> > > -		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM)) {
> > > -			blob = get_blob(data, primary->pipe, IGT_CRTC_CTM);
> > > -			igt_assert(blob &&
> > > -				   blob->length == sizeof(struct drm_color_ctm));
> > > -			drmModeFreePropertyBlob(blob);
> > > -		}
> > > -
> > > -		blob = get_blob(data, primary->pipe, IGT_CRTC_GAMMA_LUT);
> > > +	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT)) {
> > > +		blob = get_blob(data, primary->pipe, IGT_CRTC_DEGAMMA_LUT);
> > >  		igt_assert(blob &&
> > >  			   blob->length == (sizeof(struct drm_color_lut) *
> > > -					    data->gamma_lut_size));
> > > -		lut = (struct drm_color_lut *) blob->data;
> > > -		for (i = 0; i < data->gamma_lut_size; i++)
> > > -			igt_assert(lut[i].red == 0 &&
> > > -				   lut[i].green == 0 &&
> > > -				   lut[i].blue == 0);
> > > +					    data->degamma_lut_size));
> > >  		drmModeFreePropertyBlob(blob);
> > > +	}
> > >
> > > -		/* Set a gamma LUT using the legacy ioctl and verify
> > > -		 * the content of the GAMMA_LUT property is changed
> > > -		 * and that CTM and DEGAMMA_LUT are empty. */
> > > -		kms_crtc = drmModeGetCrtc(data->drm_fd, primary->pipe->crtc_id);
> > > -		legacy_lut_size = kms_crtc->gamma_size;
> > > -		drmModeFreeCrtc(kms_crtc);
> > > +	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM)) {
> > > +		blob = get_blob(data, primary->pipe, IGT_CRTC_CTM);
> > > +		igt_assert(blob &&
> > > +			   blob->length == sizeof(struct drm_color_ctm));
> > > +		drmModeFreePropertyBlob(blob);
> > > +	}
> > >
> > > -		red_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> > > -		green_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> > > -		blue_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> > > +	blob = get_blob(data, primary->pipe, IGT_CRTC_GAMMA_LUT);
> > > +	igt_assert(blob &&
> > > +		   blob->length == (sizeof(struct drm_color_lut) *
> > > +				    data->gamma_lut_size));
> > > +	lut = (struct drm_color_lut *) blob->data;
> > > +	for (i = 0; i < data->gamma_lut_size; i++)
> > > +		igt_assert(lut[i].red == 0 &&
> > > +			   lut[i].green == 0 &&
> > > +			   lut[i].blue == 0);
> > > +	drmModeFreePropertyBlob(blob);
> > >
> > > -		for (i = 0; i < legacy_lut_size; i++)
> > > -			red_lut[i] = green_lut[i] = blue_lut[i] = 0xffff;
> > > +	/* Set a gamma LUT using the legacy ioctl and verify
> > > +	 * the content of the GAMMA_LUT property is changed
> > > +	 * and that CTM and DEGAMMA_LUT are empty. */
> > > +	kms_crtc = drmModeGetCrtc(data->drm_fd, primary->pipe->crtc_id);
> > > +	legacy_lut_size = kms_crtc->gamma_size;
> > > +	drmModeFreeCrtc(kms_crtc);
> > >
> > > -		igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd,
> > > -						  primary->pipe->crtc_id,
> > > -						  legacy_lut_size,
> > > -						  red_lut, green_lut, blue_lut),
> > > -			      0);
> > > -		igt_display_commit(&data->display);
> > > +	red_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> > > +	green_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> > > +	blue_lut = malloc(sizeof(uint16_t) * legacy_lut_size);
> > >
> > > -		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT))
> > > -			igt_assert(get_blob(data, primary->pipe,
> > > -					    IGT_CRTC_DEGAMMA_LUT) == NULL);
> > > +	for (i = 0; i < legacy_lut_size; i++)
> > > +		red_lut[i] = green_lut[i] = blue_lut[i] = 0xffff;
> > >
> > > -		if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM))
> > > -			igt_assert(get_blob(data, primary->pipe, IGT_CRTC_CTM) ==
> > > NULL);
> > > +	igt_assert_eq(drmModeCrtcSetGamma(data->drm_fd,
> > > +					  primary->pipe->crtc_id,
> > > +					  legacy_lut_size,
> > > +					  red_lut, green_lut, blue_lut), 0);
> > > +	igt_display_commit(&data->display);
> > >
> > > -		blob = get_blob(data, primary->pipe, IGT_CRTC_GAMMA_LUT);
> > > -		igt_assert(blob &&
> > > -			   blob->length == (sizeof(struct drm_color_lut) *
> > > -					    legacy_lut_size));
> > > -		lut = (struct drm_color_lut *) blob->data;
> > > -		for (i = 0; i < legacy_lut_size; i++)
> > > -			igt_assert(lut[i].red == 0xffff &&
> > > -				   lut[i].green == 0xffff &&
> > > -				   lut[i].blue == 0xffff);
> > > -		drmModeFreePropertyBlob(blob);
> > > +	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_DEGAMMA_LUT))
> > > +		igt_assert(get_blob(data, primary->pipe,
> > > +				    IGT_CRTC_DEGAMMA_LUT) == NULL);
> > >
> > > -		igt_plane_set_fb(primary, NULL);
> > > -		igt_output_set_pipe(output, PIPE_NONE);
> > > -	}
> > > +	if (igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM))
> > > +		igt_assert(get_blob(data, primary->pipe, IGT_CRTC_CTM) == NULL);
> > > +
> > > +	blob = get_blob(data, primary->pipe, IGT_CRTC_GAMMA_LUT);
> > > +	igt_assert(blob &&
> > > +		   blob->length == (sizeof(struct drm_color_lut) *
> > > +				    legacy_lut_size));
> > > +	lut = (struct drm_color_lut *) blob->data;
> > > +	for (i = 0; i < legacy_lut_size; i++)
> > > +		igt_assert(lut[i].red == 0xffff &&
> > > +			   lut[i].green == 0xffff &&
> > > +			   lut[i].blue == 0xffff);
> > > +	drmModeFreePropertyBlob(blob);
> > > +
> > > +	igt_plane_set_fb(primary, NULL);
> > > +	igt_output_set_pipe(output, PIPE_NONE);
> > >
> > >  	free_lut(degamma_linear);
> > >  	free_lut(gamma_zero);
> > > @@ -442,84 +442,84 @@ static bool test_pipe_ctm(data_t *data,
> > >  	igt_output_t *output;
> > >  	bool ret = true;
> > >  	igt_display_t *display = &data->display;
> > > +	drmModeModeInfo *mode;
> > > +	struct igt_fb fb_modeset, fb;
> > > +	igt_crc_t crc_software, crc_hardware;
> > > +	int fb_id, fb_modeset_id;
> > >
> > >  	igt_require(igt_pipe_obj_has_prop(primary->pipe, IGT_CRTC_CTM));
> > >
> > >  	degamma_linear = generate_table(data->degamma_lut_size, 1.0);
> > >  	gamma_linear = generate_table(data->gamma_lut_size, 1.0);
> > >
> > > -	for_each_valid_output_on_pipe(&data->display, primary->pipe->pipe,
> > > output) {
> > > -		drmModeModeInfo *mode;
> > > -		struct igt_fb fb_modeset, fb;
> > > -		igt_crc_t crc_software, crc_hardware;
> > > -		int fb_id, fb_modeset_id;
> > > +	output = igt_get_single_output_for_pipe(&data->display, primary->pipe-
> > > >pipe);
> > > +	igt_require(output);
> > >
> > > -		igt_output_set_pipe(output, primary->pipe->pipe);
> > > -		mode = igt_output_get_mode(output);
> > > +	igt_output_set_pipe(output, primary->pipe->pipe);
> > > +	mode = igt_output_get_mode(output);
> > >
> > > -		/* Create a framebuffer at the size of the output. */
> > > -		fb_id = igt_create_fb(data->drm_fd,
> > > +	/* Create a framebuffer at the size of the output. */
> > > +	fb_id = igt_create_fb(data->drm_fd,
> > > +			      mode->hdisplay,
> > > +			      mode->vdisplay,
> > > +			      DRM_FORMAT_XRGB8888,
> > > +			      DRM_FORMAT_MOD_NONE,
> > > +			      &fb);
> > > +	igt_assert(fb_id);
> > > +
> > > +	fb_modeset_id = igt_create_fb(data->drm_fd,
> > >  				      mode->hdisplay,
> > >  				      mode->vdisplay,
> > >  				      DRM_FORMAT_XRGB8888,
> > >  				      DRM_FORMAT_MOD_NONE,
> > > -				      &fb);
> > > -		igt_assert(fb_id);
> > > +				      &fb_modeset);
> > > +	igt_assert(fb_modeset_id);
> > > +	igt_plane_set_fb(primary, &fb_modeset);
> > >
> > > -		fb_modeset_id = igt_create_fb(data->drm_fd,
> > > -					      mode->hdisplay,
> > > -					      mode->vdisplay,
> > > -					      DRM_FORMAT_XRGB8888,
> > > -					      DRM_FORMAT_MOD_NONE,
> > > -					      &fb_modeset);
> > > -		igt_assert(fb_modeset_id);
> > > -		igt_plane_set_fb(primary, &fb_modeset);
> > > -
> > > -		/*
> > > -		 * Don't program LUT's for max CTM cases, as limitation of
> > > -		 * representing intermediate values between 0 and 1.0 causes
> > > -		 * rounding issues and inaccuracies leading to crc mismatch.
> > > -		 */
> > > -		if (memcmp(before, after, sizeof(color_t))) {
> > > -			set_degamma(data, primary->pipe, degamma_linear);
> > > -			set_gamma(data, primary->pipe, gamma_linear);
> > > -		} else {
> > > -			/* Disable Degamma and Gamma for ctm max test */
> > > -			disable_degamma(primary->pipe);
> > > -			disable_gamma(primary->pipe);
> > > -		}
> > > -
> > > -		disable_ctm(primary->pipe);
> > > -		igt_display_commit(&data->display);
> > > -
> > > -		paint_rectangles(data, mode, after, &fb);
> > > -		igt_plane_set_fb(primary, &fb);
> > > -		set_ctm(primary->pipe, ctm_identity);
> > > -		igt_display_commit(&data->display);
> > > -		igt_wait_for_vblank(data->drm_fd,
> > > -				display->pipes[primary->pipe->pipe].crtc_offset);
> > > -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_software);
> > > -
> > > -		/* With CTM transformation. */
> > > -		paint_rectangles(data, mode, before, &fb);
> > > -		igt_plane_set_fb(primary, &fb);
> > > -		set_ctm(primary->pipe, ctm_matrix);
> > > -		igt_display_commit(&data->display);
> > > -		igt_wait_for_vblank(data->drm_fd,
> > > -				display->pipes[primary->pipe->pipe].crtc_offset);
> > > -		igt_pipe_crc_collect_crc(data->pipe_crc, &crc_hardware);
> > > -
> > > -		/* Verify that the CRC of the software computed output is
> > > -		 * equal to the CRC of the CTM matrix transformation output.
> > > -		 */
> > > -		ret &= !igt_skip_crc_compare || igt_check_crc_equal(&crc_software,
> > > &crc_hardware);
> > > -
> > > -		igt_plane_set_fb(primary, NULL);
> > > -		igt_output_set_pipe(output, PIPE_NONE);
> > > -		igt_remove_fb(data->drm_fd, &fb);
> > > -		igt_remove_fb(data->drm_fd, &fb_modeset);
> > > +	/*
> > > +	 * Don't program LUT's for max CTM cases, as limitation of
> > > +	 * representing intermediate values between 0 and 1.0 causes
> > > +	 * rounding issues and inaccuracies leading to crc mismatch.
> > > +	 */
> > > +	if (memcmp(before, after, sizeof(color_t))) {
> > > +		set_degamma(data, primary->pipe, degamma_linear);
> > > +		set_gamma(data, primary->pipe, gamma_linear);
> > > +	} else {
> > > +		/* Disable Degamma and Gamma for ctm max test */
> > > +		disable_degamma(primary->pipe);
> > > +		disable_gamma(primary->pipe);
> > >  	}
> > >
> > > +	disable_ctm(primary->pipe);
> > > +	igt_display_commit(&data->display);
> > > +
> > > +	paint_rectangles(data, mode, after, &fb);
> > > +	igt_plane_set_fb(primary, &fb);
> > > +	set_ctm(primary->pipe, ctm_identity);
> > > +	igt_display_commit(&data->display);
> > > +	igt_wait_for_vblank(data->drm_fd,
> > > +			    display->pipes[primary->pipe->pipe].crtc_offset);
> > > +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_software);
> > > +
> > > +	/* With CTM transformation. */
> > > +	paint_rectangles(data, mode, before, &fb);
> > > +	igt_plane_set_fb(primary, &fb);
> > > +	set_ctm(primary->pipe, ctm_matrix);
> > > +	igt_display_commit(&data->display);
> > > +	igt_wait_for_vblank(data->drm_fd,
> > > +			    display->pipes[primary->pipe->pipe].crtc_offset);
> > > +	igt_pipe_crc_collect_crc(data->pipe_crc, &crc_hardware);
> > > +
> > > +	/* Verify that the CRC of the software computed output is
> > > +	 * equal to the CRC of the CTM matrix transformation output.
> > > +	 */
> > > +	ret &= !igt_skip_crc_compare || igt_check_crc_equal(&crc_software,
> > > &crc_hardware);
> > > +
> > > +	igt_plane_set_fb(primary, NULL);
> > > +	igt_output_set_pipe(output, PIPE_NONE);
> > > +	igt_remove_fb(data->drm_fd, &fb);
> > > +	igt_remove_fb(data->drm_fd, &fb_modeset);
> > > +
> > >  	free_lut(degamma_linear);
> > >  	free_lut(gamma_linear);
> > >
> > > --
> > > 2.31.1
> >
> 
> --
> Ville Syrjälä
> Intel

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2021-09-12 15:36 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-03 16:27 [igt-dev] [PATCH i-g-t v3 0/7] tests/kms_color: 3D LUT tests Ville Syrjala
2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 1/7] tests/kms_color_chamelium: Remove invalid LUT size tests Ville Syrjala
2021-09-12 15:30   ` Modem, Bhanuprakash
2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 2/7] tests/kms_color: Refactor " Ville Syrjala
2021-09-06  6:37   ` Modem, Bhanuprakash
2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 3/7] tests/kms_color: Store r/g/b separately for LUT color tests Ville Syrjala
2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 4/7] tests/kms_color: Pass pipe to invalid LUT size tests Ville Syrjala
2021-09-06  6:37   ` Modem, Bhanuprakash
2021-09-07 17:26     ` Ville Syrjälä
2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 5/7] tests/kms_color: Run each subtest only for a single connector Ville Syrjala
2021-09-06  6:38   ` Modem, Bhanuprakash
2021-09-07 17:34     ` Ville Syrjälä
2021-09-12 15:36       ` Modem, Bhanuprakash
2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 6/7] lib/kms: Add GAMMA_LUT_3D support Ville Syrjala
2021-09-03 16:27 ` [igt-dev] [PATCH i-g-t v3 7/7] tests/kms_color: Add GAMMA_LUT_3D tests Ville Syrjala
2021-09-06  6:38   ` Modem, Bhanuprakash
2021-09-03 17:25 ` [igt-dev] ✓ Fi.CI.BAT: success for tests/kms_color: 3D LUT tests (rev5) Patchwork
2021-09-03 19:46 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2021-09-06  6:37 ` [igt-dev] [PATCH i-g-t v3 0/7] tests/kms_color: 3D LUT tests Modem, Bhanuprakash

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.