[i-g-t V6 35/41] lib/colorops: Move few helpers to common place to reuse
Bhanuprakash Modem
bhanuprakash.modem at intel.com
Wed Apr 24 10:26:43 UTC 2024
Move few colorops helpers to common place to reuse.
v2:
- Rebase
Signed-off-by: Bhanuprakash Modem <bhanuprakash.modem at intel.com>
---
lib/igt_color.c | 98 +++++++----
lib/igt_color.h | 97 ++++-------
tests/kms_color_helper.c | 196 ++++++++++++++++++++++
tests/kms_color_helper.h | 55 +++++++
tests/kms_colorop.c | 341 ++++++++++++++++++---------------------
tests/kms_colorop.h | 242 ---------------------------
tests/meson.build | 1 +
7 files changed, 502 insertions(+), 528 deletions(-)
delete mode 100644 tests/kms_colorop.h
diff --git a/lib/igt_color.c b/lib/igt_color.c
index 45030d59e..88a63560b 100644
--- a/lib/igt_color.c
+++ b/lib/igt_color.c
@@ -14,6 +14,71 @@
#include "igt_core.h"
#include "igt_x86.h"
+const struct igt_color_tf srgb_tf = {2.4f, (float)(1/1.055), (float)(0.055/1.055), (float)(1/12.92), 0.04045f, 0, 0};
+const struct igt_color_tf srgb_eotf = {2.4f, (float)(1/1.055), (float)(0.055/1.055), (float)(1/12.92), 0.04045f, 0, 0};
+const struct igt_color_tf bt2020_inv_oetf = {(float)(1/0.45f), (float)(1/1.0993f), (float)(0.0993f/1.0993f), (float)(1/4.5f), (float)(0.081), 0, 0};
+const struct igt_color_tf_pq pq_eotf = {-107/128.0f, 1.0f, 32/2523.0f, 2413/128.0f, -2392/128.0f, 8192/1305.0f };
+
+const igt_matrix_3x4_t igt_matrix_3x4_50_desat = { {
+ 0.5, 0.25, 0.25, 0.0,
+ 0.25, 0.5, 0.25, 0.0,
+ 0.25, 0.25, 0.5, 0.0
+} };
+
+const igt_matrix_3x4_t igt_matrix_3x4_overdrive = { {
+ 1.5, 0.0, 0.0, 0.0,
+ 0.0, 1.5, 0.0, 0.0,
+ 0.0, 0.0, 1.5, 0.0
+} };
+
+const igt_matrix_3x4_t igt_matrix_3x4_oversaturate = { {
+ 1.5, -0.25, -0.25, 0.0,
+ -0.25, 1.5, -0.25, 0.0,
+ -0.25, -0.25, 1.5, 0.0
+} };
+
+#if 0
+const igt_matrix_3x4_t igt_matrix_3x4_bt709_enc = { {
+ 0.2126, 0.7152, 0.0722, 0.0,
+ -0.1146, -0.3854, 0.5, 0.0,
+ 0.5, -0.4542, -0.0458, 0.0
+} };
+
+const igt_matrix_3x4_t igt_matrix_3x4_bt709_dec = { {
+ 1.0, 0.0, 1.5748, 0.0,
+ 1.0, -0.1873, -0.4681, 0.0,
+ 1.0, 1.8556, 0.0, 0.0
+} };
+#else
+const igt_matrix_3x4_t igt_matrix_3x4_bt709_enc = { {
+ 0.2126, 0.7152, 0.0722, 0.0,
+ -0.09991, -0.33609, 0.436, 0.0,
+ 0.615, -0.55861, -0.05639, 0.0
+} };
+
+const igt_matrix_3x4_t igt_matrix_3x4_bt709_dec = { {
+ 1.0, 0.0, 1.28033, 0.0,
+ 1.0, -0.21482, -0.38059, 0.0,
+ 1.0, 2.12798, 0.0, 0.0
+} };
+#endif
+
+igt_1dlut_t igt_1dlut_srgb_inv_eotf = { {
+} };
+
+igt_1dlut_t igt_1dlut_srgb_eotf = { {
+} };
+
+const char * const kms_colorop_lut1d_tf_names[KMS_COLOROP_LUT1D_NUM_ENUMS] = {
+ [KMS_COLOROP_LUT1D_SRGB_EOTF] = "sRGB EOTF",
+ [KMS_COLOROP_LUT1D_SRGB_INV_EOTF] = "sRGB Inverse EOTF",
+ [KMS_COLOROP_LUT1D_BT2020_INV_OETF] = "BT.2020 Inverse OETF",
+ [KMS_COLOROP_LUT1D_BT2020_OETF] = "BT.2020 OETF",
+ [KMS_COLOROP_LUT1D_PQ_EOTF] = "PQ EOTF",
+ [KMS_COLOROP_LUT1D_PQ_INV_EOTF] = "PQ Inverse EOTF",
+ [KMS_COLOROP_LUT1D_PQ_125_EOTF] = "PQ 125 EOTF",
+ [KMS_COLOROP_LUT1D_PQ_125_INV_EOTF] = "PQ 125 Inverse EOTF",
+};
static float clamp(float val, float min, float max)
{
@@ -412,7 +477,6 @@ bool igt_cmp_fb_pixels(igt_fb_t *fb1, igt_fb_t *fb2, uint8_t up, uint8_t down)
return matched;
}
-
void igt_dump_fb(igt_display_t *display, igt_fb_t *fb,
const char *path_name, const char *file_name)
{
@@ -426,35 +490,3 @@ void igt_dump_fb(igt_display_t *display, igt_fb_t *fb,
igt_assert_eq(status, CAIRO_STATUS_SUCCESS);
cairo_surface_destroy(fb_surface_out);
}
-
-void igt_colorop_set_ctm_3x4(igt_display_t *display,
- igt_colorop_t *colorop,
- const igt_matrix_3x4_t *matrix)
-{
- struct drm_color_ctm_3x4 ctm;
- int i;
-
- for (i = 0; i < ARRAY_SIZE(ctm.matrix); i++) {
- if (matrix->m[i] < 0) {
- ctm.matrix[i] =
- (int64_t) (-matrix->m[i] *
- ((int64_t) 1L << 32));
- ctm.matrix[i] |= 1ULL << 63;
- } else {
- ctm.matrix[i] =
- (int64_t) (matrix->m[i] *
- ((int64_t) 1L << 32));
- }
- }
-
- /* set blob property */
- igt_colorop_replace_prop_blob(colorop, IGT_COLOROP_DATA, &ctm, sizeof(ctm));
-}
-
-void igt_colorop_set_custom_1dlut(igt_display_t *display,
- igt_colorop_t *colorop,
- const igt_1dlut_t *lut1d,
- const size_t lut_size)
-{
- igt_colorop_replace_prop_blob(colorop, IGT_COLOROP_DATA, lut1d, lut_size);
-}
diff --git a/lib/igt_color.h b/lib/igt_color.h
index a10ab06e8..2a11d1d00 100644
--- a/lib/igt_color.h
+++ b/lib/igt_color.h
@@ -25,28 +25,30 @@ struct igt_color_tf_pq {
float A, B, C, D, E, F, G;
};
-
-const struct igt_color_tf srgb_eotf = {2.4f, (float)(1/1.055), (float)(0.055/1.055), (float)(1/12.92), 0.04045f, 0, 0};
-const struct igt_color_tf bt2020_inv_oetf = {(float)(1/0.45f), (float)(1/1.0993f), (float)(0.0993f/1.0993f), (float)(1/4.5f), (float)(0.081), 0, 0};
-
-const struct igt_color_tf_pq pq_eotf = {-107/128.0f, 1.0f, 32/2523.0f, 2413/128.0f, -2392/128.0f, 8192/1305.0f };
-
typedef struct igt_pixel {
float r;
float g;
float b;
} igt_pixel_t;
+typedef enum kms_colorop_lut1d_tf {
+ KMS_COLOROP_LUT1D_SRGB_EOTF,
+ KMS_COLOROP_LUT1D_SRGB_INV_EOTF,
+ KMS_COLOROP_LUT1D_BT2020_INV_OETF,
+ KMS_COLOROP_LUT1D_BT2020_OETF,
+ KMS_COLOROP_LUT1D_PQ_EOTF,
+ KMS_COLOROP_LUT1D_PQ_INV_EOTF,
+ KMS_COLOROP_LUT1D_PQ_125_EOTF,
+ KMS_COLOROP_LUT1D_PQ_125_INV_EOTF,
+ KMS_COLOROP_LUT1D_NUM_ENUMS
+} kms_colorop_lut1d_tf_t;
+
+extern const char * const kms_colorop_lut1d_tf_names[KMS_COLOROP_LUT1D_NUM_ENUMS];
+
typedef struct igt_1dlut {
struct drm_color_lut lut[MAX_COLOR_LUT_ENTRIES];
} igt_1dlut_t;
-igt_1dlut_t igt_1dlut_srgb_inv_eotf = { {
-} };
-
-igt_1dlut_t igt_1dlut_srgb_eotf = { {
-} };
-
typedef struct igt_matrix_3x4 {
/*
* out matrix in
@@ -58,50 +60,23 @@ typedef struct igt_matrix_3x4 {
float m[12];
} igt_matrix_3x4_t;
-const igt_matrix_3x4_t igt_matrix_3x4_50_desat = { {
- 0.5, 0.25, 0.25, 0.0,
- 0.25, 0.5, 0.25, 0.0,
- 0.25, 0.25, 0.5, 0.0
-} };
-
-const igt_matrix_3x4_t igt_matrix_3x4_overdrive = { {
- 1.5, 0.0, 0.0, 0.0,
- 0.0, 1.5, 0.0, 0.0,
- 0.0, 0.0, 1.5, 0.0
-} };
-
-const igt_matrix_3x4_t igt_matrix_3x4_oversaturate = { {
- 1.5, -0.25, -0.25, 0.0,
- -0.25, 1.5, -0.25, 0.0,
- -0.25, -0.25, 1.5, 0.0
-} };
-
-#if 0
-const igt_matrix_3x4_t igt_matrix_3x4_bt709_enc = { {
- 0.2126, 0.7152, 0.0722, 0.0,
- -0.1146, -0.3854, 0.5, 0.0,
- 0.5, -0.4542, -0.0458, 0.0
-} };
-
-const igt_matrix_3x4_t igt_matrix_3x4_bt709_dec = { {
- 1.0, 0.0, 1.5748, 0.0,
- 1.0, -0.1873, -0.4681, 0.0,
- 1.0, 1.8556, 0.0, 0.0
-} };
-#else
-const igt_matrix_3x4_t igt_matrix_3x4_bt709_enc = { {
- 0.2126, 0.7152, 0.0722, 0.0,
- -0.09991, -0.33609, 0.436, 0.0,
- 0.615, -0.55861, -0.05639, 0.0
-} };
-
-const igt_matrix_3x4_t igt_matrix_3x4_bt709_dec = { {
- 1.0, 0.0, 1.28033, 0.0,
- 1.0, -0.21482, -0.38059, 0.0,
- 1.0, 2.12798, 0.0, 0.0
-} };
-#endif
+typedef bool (*compare_fb_t)(igt_fb_t *in, igt_fb_t *out);
+typedef int (*transform_fb)(igt_fb_t *in);
+typedef int (*transform_pixel)(igt_pixel_t *pixel);
+
+extern const struct igt_color_tf srgb_tf;
+extern const struct igt_color_tf srgb_eotf;
+extern const struct igt_color_tf bt2020_inv_oetf;
+extern const struct igt_color_tf_pq pq_eotf;
+extern const igt_matrix_3x4_t igt_matrix_3x4_50_desat;
+extern const igt_matrix_3x4_t igt_matrix_3x4_overdrive;
+extern const igt_matrix_3x4_t igt_matrix_3x4_oversaturate;
+extern const igt_matrix_3x4_t igt_matrix_3x4_bt709_enc;
+extern const igt_matrix_3x4_t igt_matrix_3x4_bt709_dec;
+
+extern igt_1dlut_t igt_1dlut_srgb_inv_eotf;
+extern igt_1dlut_t igt_1dlut_srgb_eotf;
bool igt_cmp_fb_component(uint16_t comp1, uint16_t comp2, uint8_t up, uint8_t down);
bool igt_cmp_fb_pixels(igt_fb_t *fb1, igt_fb_t *fb2, uint8_t up, uint8_t down);
@@ -113,19 +88,7 @@ typedef void (*igt_pixel_transform)(igt_pixel_t *pixel);
int igt_color_transform_pixels(igt_fb_t *fb, igt_pixel_transform transforms[], int num_transforms);
-/* colorop helpers */
-
-void igt_colorop_set_ctm_3x4(igt_display_t *display,
- igt_colorop_t *colorop,
- const igt_matrix_3x4_t *matrix);
-
-void igt_colorop_set_custom_1dlut(igt_display_t *display,
- igt_colorop_t *colorop,
- const igt_1dlut_t *lut1d,
- const size_t lut_size);
-
/* transformations */
-
void igt_color_srgb_inv_eotf(igt_pixel_t *pixel);
void igt_color_srgb_eotf(igt_pixel_t *pixel);
diff --git a/tests/kms_color_helper.c b/tests/kms_color_helper.c
index 143dff43e..31f433386 100644
--- a/tests/kms_color_helper.c
+++ b/tests/kms_color_helper.c
@@ -388,3 +388,199 @@ void invalid_ctm_matrix_sizes(data_t *data, enum pipe p)
free(ptr);
}
+/* Colorops definitions */
+static bool can_use_colorop(igt_display_t *display, igt_colorop_t *colorop, kms_colorop_t *desired)
+{
+ switch (desired->type) {
+ case KMS_COLOROP_ENUMERATED_LUT1D:
+ if (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_1D_CURVE &&
+ igt_colorop_try_prop_enum(colorop, IGT_COLOROP_CURVE_1D_TYPE, kms_colorop_lut1d_tf_names[desired->enumerated_lut1d_info.tf]))
+ return true;
+ return false;
+ case KMS_COLOROP_CTM_3X4:
+ return (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_CTM_3X4);
+ case KMS_COLOROP_CUSTOM_LUT1D:
+ if (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_1D_LUT)
+ return true;
+ return false;
+ case KMS_COLOROP_MULTIPLIER:
+ return (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_MULTIPLIER);
+ case KMS_COLOROP_LUT3D:
+ default:
+ return false;
+ }
+}
+
+/**
+ * Iterate color pipeline that begins with colorop and try to map
+ * colorops[] to it.
+ */
+static bool map_to_pipeline(igt_display_t *display,
+ igt_colorop_t *colorop,
+ kms_colorop_t *colorops[])
+{
+ igt_colorop_t *next = colorop;
+ kms_colorop_t *current_op;
+ int i = 0;
+ int prop_val = 0;
+
+ current_op = colorops[i++];
+ if (!current_op)
+ return false;
+
+ while (next) {
+ if (can_use_colorop(display, next, current_op)) {
+ current_op->colorop = next;
+ current_op = colorops[i++];
+ if (!current_op)
+ break;
+ }
+ prop_val = igt_colorop_get_prop(display, next,
+ IGT_COLOROP_NEXT);
+ next = igt_find_colorop(display, prop_val);
+ }
+
+ if (current_op) {
+ /* we failed to map the pipeline */
+
+ /* clean up colorops[i].colorop mappings */
+ for(i = 0, current_op = colorops[0]; current_op; current_op = colorops[i++])
+ current_op->colorop = NULL;
+
+ return false;
+ }
+
+ return true;
+}
+
+igt_colorop_t *get_color_pipeline(igt_display_t *display,
+ igt_plane_t *plane,
+ kms_colorop_t *colorops[])
+{
+ igt_colorop_t *colorop = NULL;
+ int i;
+
+ /* go through all color pipelines */
+ for (i = 0; i < plane->num_color_pipelines; ++i) {
+ if (map_to_pipeline(display, plane->color_pipelines[i], colorops)) {
+ colorop = plane->color_pipelines[i];
+ break;
+ }
+ }
+
+ return colorop;
+}
+
+static void fill_custom_1dlut(igt_display_t *display, kms_colorop_t *colorop)
+{
+ uint64_t lut_size = igt_colorop_get_prop(display, colorop->colorop, IGT_COLOROP_SIZE);
+ igt_pixel_t pixel;
+ float index;
+ int i;
+
+ for (i = 0; i < lut_size; i++) {
+ index = i / (float) lut_size;
+
+ pixel.r = index;
+ pixel.g = index;
+ pixel.b = index;
+
+ colorop->transform(&pixel);
+
+ colorop->lut1d->lut[i].red = pixel.r * 0xffff;
+ colorop->lut1d->lut[i].green = pixel.g * 0xffff;
+ colorop->lut1d->lut[i].blue = pixel.b * 0xffff;
+ }
+}
+
+void set_colorop(igt_display_t *display, kms_colorop_t *colorop)
+{
+ uint64_t lut_size = 0;
+ uint64_t mult = 1;
+
+ igt_assert(colorop->colorop);
+ igt_colorop_set_prop_value(colorop->colorop, IGT_COLOROP_BYPASS, 0);
+
+ /* TODO set to desired value from kms_colorop_t */
+ switch (colorop->type) {
+ case KMS_COLOROP_ENUMERATED_LUT1D:
+ igt_colorop_set_prop_enum(colorop->colorop, IGT_COLOROP_CURVE_1D_TYPE, kms_colorop_lut1d_tf_names[colorop->enumerated_lut1d_info.tf]);
+ break;
+ case KMS_COLOROP_CTM_3X4:
+ igt_colorop_set_ctm_3x4(display, colorop->colorop, colorop->matrix_3x4);
+ break;
+ case KMS_COLOROP_CUSTOM_LUT1D:
+ fill_custom_1dlut(display, colorop);
+ lut_size = igt_colorop_get_prop(display, colorop->colorop, IGT_COLOROP_SIZE);
+ igt_colorop_set_custom_1dlut(display, colorop->colorop, colorop->lut1d, lut_size * sizeof(struct drm_color_lut));
+ break;
+ case KMS_COLOROP_MULTIPLIER:
+ mult = colorop->multiplier * (mult << 32); /* convert double to fixed number */
+ igt_colorop_set_prop_value(colorop->colorop, IGT_COLOROP_MULTIPLIER, mult);
+ break;
+ case KMS_COLOROP_LUT3D:
+ default:
+ igt_fail(IGT_EXIT_FAILURE);
+ }
+}
+
+void set_color_pipeline(igt_display_t *display,
+ igt_plane_t *plane,
+ kms_colorop_t *colorops[],
+ igt_colorop_t *color_pipeline)
+{
+ igt_colorop_t *next;
+ int prop_val = 0;
+ int i;
+
+ igt_plane_set_color_pipeline(plane, color_pipeline);
+
+ for(i = 0; colorops[i]; i++)
+ set_colorop(display, colorops[i]);
+
+ /* set unused ops in pipeline to bypass */
+ next = color_pipeline;
+ i = 0;
+ while (next) {
+ if (!colorops[i] || colorops[i]->colorop != next)
+ igt_colorop_set_prop_value(next, IGT_COLOROP_BYPASS, 1);
+ else
+ i++;
+
+ prop_val = igt_colorop_get_prop(display, next,
+ IGT_COLOROP_NEXT);
+ next = igt_find_colorop(display, prop_val);
+ }
+}
+
+void igt_colorop_set_ctm_3x4(igt_display_t *display,
+ igt_colorop_t *colorop,
+ const igt_matrix_3x4_t *matrix)
+{
+ struct drm_color_ctm_3x4 ctm;
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(ctm.matrix); i++) {
+ if (matrix->m[i] < 0) {
+ ctm.matrix[i] =
+ (int64_t) (-matrix->m[i] *
+ ((int64_t) 1L << 32));
+ ctm.matrix[i] |= 1ULL << 63;
+ } else {
+ ctm.matrix[i] =
+ (int64_t) (matrix->m[i] *
+ ((int64_t) 1L << 32));
+ }
+ }
+
+ /* set blob property */
+ igt_colorop_replace_prop_blob(colorop, IGT_COLOROP_DATA, &ctm, sizeof(ctm));
+}
+
+void igt_colorop_set_custom_1dlut(igt_display_t *display,
+ igt_colorop_t *colorop,
+ const igt_1dlut_t *lut1d,
+ const size_t lut_size)
+{
+ igt_colorop_replace_prop_blob(colorop, IGT_COLOROP_DATA, lut1d, lut_size);
+}
diff --git a/tests/kms_color_helper.h b/tests/kms_color_helper.h
index 23463b944..b3b1875a9 100644
--- a/tests/kms_color_helper.h
+++ b/tests/kms_color_helper.h
@@ -36,6 +36,7 @@
#include "drm.h"
#include "drmtest.h"
#include "igt.h"
+#include "igt_color.h"
#include "igt_edid.h"
@@ -53,6 +54,12 @@ typedef struct {
igt_plane_t *primary;
drmModeModeInfo *mode;
+ bool builtin_mode;
+ bool custom_mode;
+ bool list_modes;
+ bool dump_check;
+ int mode_index;
+
uint32_t drm_format;
uint32_t color_depth;
uint64_t degamma_lut_size;
@@ -115,5 +122,53 @@ 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);
+/* Test version definitions */
+typedef enum kms_colorop_type {
+ KMS_COLOROP_ENUMERATED_LUT1D,
+ KMS_COLOROP_CUSTOM_LUT1D,
+ KMS_COLOROP_CTM_3X4,
+ KMS_COLOROP_MULTIPLIER,
+ KMS_COLOROP_LUT3D
+} kms_colorop_type_t;
+
+typedef struct kms_colorop_enumerated_lut1d_info {
+ kms_colorop_lut1d_tf_t tf;
+} kms_colorop_enumerated_lut1d_info_t;
+
+typedef struct kms_colorop {
+ kms_colorop_type_t type;
+
+ union {
+ kms_colorop_enumerated_lut1d_info_t enumerated_lut1d_info;
+ igt_1dlut_t *lut1d;
+ const igt_matrix_3x4_t *matrix_3x4;
+ double multiplier;
+ };
+
+ const char *name;
+
+ igt_pixel_transform transform;
+
+ /* Mapped colorop */
+ igt_colorop_t *colorop;
+
+} kms_colorop_t;
+
+/* colorop helpers */
+igt_colorop_t *get_color_pipeline(igt_display_t *display, igt_plane_t *plane,
+ kms_colorop_t *colorops[]);
+void set_colorop(igt_display_t *display, kms_colorop_t *colorop);
+void set_color_pipeline(igt_display_t *display, igt_plane_t *plane,
+ kms_colorop_t *colorops[], igt_colorop_t *color_pipeline);
+void igt_colorop_set_ctm_3x4(igt_display_t *display,
+ igt_colorop_t *colorop,
+ const igt_matrix_3x4_t *matrix);
+void igt_colorop_set_custom_1dlut(igt_display_t *display,
+ igt_colorop_t *colorop,
+ const igt_1dlut_t *lut1d,
+ const size_t lut_size);
+
+#define set_color_pipeline_bypass(plane) igt_plane_set_prop_enum((plane), IGT_PLANE_COLOR_PIPELINE, "Bypass")
+
#endif
diff --git a/tests/kms_colorop.c b/tests/kms_colorop.c
index 6b60db9d9..d050787d8 100644
--- a/tests/kms_colorop.c
+++ b/tests/kms_colorop.c
@@ -20,12 +20,9 @@
* OTHER DEALINGS IN THE SOFTWARE.
*/
-#include "igt.h"
-#include "igt_color.h"
+#include "kms_color_helper.h"
#include "sw_sync.h"
-#include "kms_colorop.h"
-
/**
* TEST: kms colorop
* Category: Display
@@ -73,6 +70,159 @@
* @multiply_inv_125: Multiplier by inverse of 125
*/
+kms_colorop_t kms_colorop_srgb_eotf = {
+ .type = KMS_COLOROP_ENUMERATED_LUT1D,
+ .enumerated_lut1d_info = {
+ .tf = KMS_COLOROP_LUT1D_SRGB_EOTF
+ },
+ .name = "srgb_eotf",
+ .transform = &igt_color_srgb_eotf
+};
+
+kms_colorop_t kms_colorop_srgb_inv_eotf = {
+ .type = KMS_COLOROP_ENUMERATED_LUT1D,
+ .enumerated_lut1d_info = {
+ .tf = KMS_COLOROP_LUT1D_SRGB_INV_EOTF
+ },
+ .name = "srgb_inv_eotf",
+ .transform = &igt_color_srgb_inv_eotf
+};
+
+kms_colorop_t kms_colorop_ctm_3x4_50_desat = {
+ .type = KMS_COLOROP_CTM_3X4,
+ .matrix_3x4 = &igt_matrix_3x4_50_desat,
+ .name = "ctm_3x4_50_desat",
+ .transform = &igt_color_ctm_3x4_50_desat
+};
+
+kms_colorop_t kms_colorop_ctm_3x4_overdrive = {
+ .type = KMS_COLOROP_CTM_3X4,
+ .matrix_3x4 = &igt_matrix_3x4_overdrive,
+ .name = "ctm_3x4_overdrive",
+ .transform = &igt_color_ctm_3x4_overdrive
+};
+
+kms_colorop_t kms_colorop_ctm_3x4_oversaturate = {
+ .type = KMS_COLOROP_CTM_3X4,
+ .matrix_3x4 = &igt_matrix_3x4_oversaturate,
+ .name = "ctm_3x4_oversaturate",
+ .transform = &igt_color_ctm_3x4_oversaturate
+};
+
+kms_colorop_t kms_colorop_ctm_3x4_bt709_enc = {
+ .type = KMS_COLOROP_CTM_3X4,
+ .matrix_3x4 = &igt_matrix_3x4_bt709_enc,
+ .name = "ctm_3x4_bt709_enc",
+ .transform = &igt_color_ctm_3x4_bt709_enc
+};
+
+kms_colorop_t kms_colorop_ctm_3x4_bt709_dec = {
+ .type = KMS_COLOROP_CTM_3X4,
+ .matrix_3x4 = &igt_matrix_3x4_bt709_dec,
+ .name = "ctm_3x4_bt709_dec",
+ .transform = &igt_color_ctm_3x4_bt709_dec
+};
+
+kms_colorop_t kms_colorop_srgb_eotf_2 = {
+ .type = KMS_COLOROP_ENUMERATED_LUT1D,
+ .enumerated_lut1d_info = {
+ .tf = KMS_COLOROP_LUT1D_SRGB_EOTF
+ },
+ .name = "srgb_eotf",
+ .transform = &igt_color_srgb_eotf
+};
+
+kms_colorop_t kms_colorop_srgb_inv_eotf_lut = {
+ .type = KMS_COLOROP_CUSTOM_LUT1D,
+ .lut1d = &igt_1dlut_srgb_inv_eotf,
+ .name = "srgb_inv_eotf_lut",
+ .transform = &igt_color_srgb_inv_eotf
+};
+
+kms_colorop_t kms_colorop_srgb_eotf_lut = {
+ .type = KMS_COLOROP_CUSTOM_LUT1D,
+ .lut1d = &igt_1dlut_srgb_eotf,
+ .name = "srgb_eotf_lut",
+ .transform = &igt_color_srgb_eotf
+};
+
+kms_colorop_t kms_colorop_bt2020_inv_oetf = {
+ .type = KMS_COLOROP_ENUMERATED_LUT1D,
+ .enumerated_lut1d_info = {
+ .tf = KMS_COLOROP_LUT1D_BT2020_INV_OETF
+ },
+ .name = "bt2020_inv_oetf",
+ .transform = &igt_color_bt2020_inv_oetf
+};
+
+kms_colorop_t kms_colorop_bt2020_oetf = {
+ .type = KMS_COLOROP_ENUMERATED_LUT1D,
+ .enumerated_lut1d_info = {
+ .tf = KMS_COLOROP_LUT1D_BT2020_OETF
+ },
+ .name = "bt2020_oetf",
+ .transform = &igt_color_bt2020_oetf
+};
+
+kms_colorop_t kms_colorop_pq_eotf = {
+ .type = KMS_COLOROP_ENUMERATED_LUT1D,
+ .enumerated_lut1d_info = {
+ .tf = KMS_COLOROP_LUT1D_PQ_EOTF
+ },
+ .name = "pq_eotf",
+ .transform = &igt_color_pq_eotf
+};
+
+kms_colorop_t kms_colorop_pq_inv_eotf = {
+ .type = KMS_COLOROP_ENUMERATED_LUT1D,
+ .enumerated_lut1d_info = {
+ .tf = KMS_COLOROP_LUT1D_PQ_INV_EOTF
+ },
+ .name = "pq_inv_eotf",
+ .transform = &igt_color_pq_inv_eotf
+};
+
+kms_colorop_t kms_colorop_pq_125_eotf = {
+ .type = KMS_COLOROP_ENUMERATED_LUT1D,
+ .enumerated_lut1d_info = {
+ .tf = KMS_COLOROP_LUT1D_PQ_125_EOTF
+ },
+ .name = "pq_125_eotf",
+ .transform = &igt_color_pq_125_eotf
+};
+
+kms_colorop_t kms_colorop_pq_125_eotf_2 = {
+ .type = KMS_COLOROP_ENUMERATED_LUT1D,
+ .enumerated_lut1d_info = {
+ .tf = KMS_COLOROP_LUT1D_PQ_125_EOTF
+ },
+ .name = "pq_125_eotf",
+ .transform = &igt_color_pq_125_eotf
+};
+
+kms_colorop_t kms_colorop_pq_125_inv_eotf = {
+ .type = KMS_COLOROP_ENUMERATED_LUT1D,
+ .enumerated_lut1d_info = {
+ .tf = KMS_COLOROP_LUT1D_PQ_125_INV_EOTF
+ },
+ .name = "pq_125_inv_eotf",
+ .transform = &igt_color_pq_125_inv_eotf
+};
+
+kms_colorop_t kms_colorop_multiply_125 = {
+ .type = KMS_COLOROP_MULTIPLIER,
+ .multiplier = 125.0f,
+ .name = "multiply_125",
+ .transform = &igt_color_multiply_125
+};
+
+kms_colorop_t kms_colorop_multiply_inv_125 = {
+ .type = KMS_COLOROP_MULTIPLIER,
+ .multiplier = 1/125.0f,
+ .name = "multiply_inv_125",
+ .transform = &igt_color_multiply_inv_125
+};
+
/* TODO move to lib for kms_writeback and kms_colorop (and other future) use */
static bool check_writeback_config(igt_display_t *display, igt_output_t *output,
drmModeModeInfo override_mode, __u32 fourcc_in,
@@ -128,16 +278,6 @@ static bool check_writeback_config(igt_display_t *display, igt_output_t *output,
return !ret;
}
-/* TODO move to lib for kms_writeback and kms_colorop (and other future) use */
-typedef struct {
- bool builtin_mode;
- bool custom_mode;
- bool list_modes;
- bool dump_check;
- int mode_index;
- drmModeModeInfo user_mode;
-} data_t;
-
static data_t data;
/* TODO move to lib for kms_writeback and kms_colorop (and other future) use */
@@ -173,7 +313,7 @@ static igt_output_t *kms_writeback_get_output(igt_display_t *display, __u32 four
igt_output_set_pipe(output, pipe);
if (data.custom_mode)
- override_mode = data.user_mode;
+ override_mode = *data.mode;
if (data.builtin_mode)
override_mode = output->config.connector->modes[data.mode_index];
@@ -223,177 +363,6 @@ static void get_and_wait_out_fence(igt_output_t *output)
output->writeback_out_fence_fd = -1;
}
-static bool can_use_colorop(igt_display_t *display, igt_colorop_t *colorop, kms_colorop_t *desired)
-{
- switch (desired->type) {
- case KMS_COLOROP_ENUMERATED_LUT1D:
- if (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_1D_CURVE &&
- igt_colorop_try_prop_enum(colorop, IGT_COLOROP_CURVE_1D_TYPE, kms_colorop_lut1d_tf_names[desired->enumerated_lut1d_info.tf]))
- return true;
- return false;
- case KMS_COLOROP_CTM_3X4:
- return (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_CTM_3X4);
- case KMS_COLOROP_CUSTOM_LUT1D:
- if (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_1D_LUT)
- return true;
- return false;
- case KMS_COLOROP_MULTIPLIER:
- return (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_MULTIPLIER);
- case KMS_COLOROP_LUT3D:
- default:
- return false;
- }
-}
-
-/**
- * Iterate color pipeline that begins with colorop and try to map
- * colorops[] to it.
- */
-static bool map_to_pipeline(igt_display_t *display,
- igt_colorop_t *colorop,
- kms_colorop_t *colorops[])
-{
- igt_colorop_t *next = colorop;
- kms_colorop_t *current_op;
- int i = 0;
- int prop_val = 0;
-
- current_op = colorops[i];
- i++;
- igt_require(current_op);
-
- while (next) {
- if (can_use_colorop(display, next, current_op)) {
- current_op->colorop = next;
- current_op = colorops[i];
- i++;
- if (!current_op)
- break;
- }
- prop_val = igt_colorop_get_prop(display, next,
- IGT_COLOROP_NEXT);
- next = igt_find_colorop(display, prop_val);
- }
-
- if (current_op) {
- /* we failed to map the pipeline */
-
- /* clean up colorops[i].colorop mappings */
- for(i = 0, current_op = colorops[0]; current_op; current_op = colorops[i++])
- current_op->colorop = NULL;
-
- return false;
- }
-
- return true;
-}
-
-static igt_colorop_t *get_color_pipeline(igt_display_t *display,
- igt_plane_t *plane,
- kms_colorop_t *colorops[])
-{
- igt_colorop_t *colorop = NULL;
- int i;
-
- /* go through all color pipelines */
- for (i = 0; i < plane->num_color_pipelines; ++i) {
- if (map_to_pipeline(display, plane->color_pipelines[i], colorops)) {
- colorop = plane->color_pipelines[i];
- break;
- }
- }
-
- return colorop;
-}
-
-static void fill_custom_1dlut(igt_display_t *display, kms_colorop_t *colorop)
-{
- uint64_t lut_size = igt_colorop_get_prop(display, colorop->colorop, IGT_COLOROP_SIZE);
- igt_pixel_t pixel;
- float index;
- int i;
-
- for (i = 0; i < lut_size; i++) {
- index = i / (float) lut_size;
-
- pixel.r = index;
- pixel.g = index;
- pixel.b = index;
-
- colorop->transform(&pixel);
-
- colorop->lut1d->lut[i].red = pixel.r * 0xffff;
- colorop->lut1d->lut[i].green = pixel.g * 0xffff;
- colorop->lut1d->lut[i].blue = pixel.b * 0xffff;
- }
-}
-
-static void set_colorop(igt_display_t *display,
- kms_colorop_t *colorop)
-{
- uint64_t lut_size = 0;
- uint64_t mult = 1;
-
- igt_assert(colorop->colorop);
- igt_colorop_set_prop_value(colorop->colorop, IGT_COLOROP_BYPASS, 0);
-
- /* TODO set to desired value from kms_colorop_t */
- switch (colorop->type) {
- case KMS_COLOROP_ENUMERATED_LUT1D:
- igt_colorop_set_prop_enum(colorop->colorop, IGT_COLOROP_CURVE_1D_TYPE, kms_colorop_lut1d_tf_names[colorop->enumerated_lut1d_info.tf]);
- break;
- case KMS_COLOROP_CTM_3X4:
- igt_colorop_set_ctm_3x4(display, colorop->colorop, colorop->matrix_3x4);
- break;
- case KMS_COLOROP_CUSTOM_LUT1D:
- fill_custom_1dlut(display, colorop);
- lut_size = igt_colorop_get_prop(display, colorop->colorop, IGT_COLOROP_SIZE);
- igt_colorop_set_custom_1dlut(display, colorop->colorop, colorop->lut1d, lut_size * sizeof(struct drm_color_lut));
- break;
- case KMS_COLOROP_MULTIPLIER:
- mult = colorop->multiplier * (mult << 32); /* convert double to fixed number */
- igt_colorop_set_prop_value(colorop->colorop, IGT_COLOROP_MULTIPLIER, mult);
- break;
- case KMS_COLOROP_LUT3D:
- default:
- igt_fail(IGT_EXIT_FAILURE);
- }
-}
-
-static void set_color_pipeline(igt_display_t *display,
- igt_plane_t *plane,
- kms_colorop_t *colorops[],
- igt_colorop_t *color_pipeline)
-{
- igt_colorop_t *next;
- int prop_val = 0;
- int i;
-
- igt_plane_set_color_pipeline(plane, color_pipeline);
-
- for(i = 0; colorops[i]; i++)
- set_colorop(display, colorops[i]);
-
- /* set unused ops in pipeline to bypass */
- next = color_pipeline;
- i = 0;
- while (next) {
- if (!colorops[i] || colorops[i]->colorop != next)
- igt_colorop_set_prop_value(next, IGT_COLOROP_BYPASS, 1);
- else
- i++;
-
- prop_val = igt_colorop_get_prop(display, next,
- IGT_COLOROP_NEXT);
- next = igt_find_colorop(display, prop_val);
- }
-}
-
-static void set_color_pipeline_bypass(igt_plane_t *plane)
-{
- igt_plane_set_prop_enum(plane, IGT_PLANE_COLOR_PIPELINE, "Bypass");
-}
-
static bool compare_with_bracket(igt_fb_t *in, igt_fb_t *out)
{
if (is_vkms_device(in->fd))
diff --git a/tests/kms_colorop.h b/tests/kms_colorop.h
deleted file mode 100644
index 1def86bc3..000000000
--- a/tests/kms_colorop.h
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Copyright 2023 Advanced Micro Devices, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- */
-
-#ifndef __KMS_COLOROP_H__
-#define __KMS_COLOROP_H__
-
-#include "igt_color.h"
-
-typedef bool (*compare_fb_t)(igt_fb_t *in, igt_fb_t *out);
-
-typedef int (*transform_fb)(igt_fb_t *in);
-
-typedef int (*transform_pixel)(igt_pixel_t *pixel);
-
-/* Test version definitions */
-typedef enum kms_colorop_type {
- KMS_COLOROP_ENUMERATED_LUT1D,
- KMS_COLOROP_CUSTOM_LUT1D,
- KMS_COLOROP_CTM_3X4,
- KMS_COLOROP_MULTIPLIER,
- KMS_COLOROP_LUT3D
-} kms_colorop_type_t;
-
-typedef enum kms_colorop_lut1d_tf {
- KMS_COLOROP_LUT1D_SRGB_EOTF,
- KMS_COLOROP_LUT1D_SRGB_INV_EOTF,
- KMS_COLOROP_LUT1D_BT2020_INV_OETF,
- KMS_COLOROP_LUT1D_BT2020_OETF,
- KMS_COLOROP_LUT1D_PQ_EOTF,
- KMS_COLOROP_LUT1D_PQ_INV_EOTF,
- KMS_COLOROP_LUT1D_PQ_125_EOTF,
- KMS_COLOROP_LUT1D_PQ_125_INV_EOTF,
- KMS_COLOROP_LUT1D_NUM_ENUMS
-} kms_colorop_lut1d_tf_t;
-
-const char * const kms_colorop_lut1d_tf_names[KMS_COLOROP_LUT1D_NUM_ENUMS] = {
- [KMS_COLOROP_LUT1D_SRGB_EOTF] = "sRGB EOTF",
- [KMS_COLOROP_LUT1D_SRGB_INV_EOTF] = "sRGB Inverse EOTF",
- [KMS_COLOROP_LUT1D_BT2020_INV_OETF] = "BT.2020 Inverse OETF",
- [KMS_COLOROP_LUT1D_BT2020_OETF] = "BT.2020 OETF",
- [KMS_COLOROP_LUT1D_PQ_EOTF] = "PQ EOTF",
- [KMS_COLOROP_LUT1D_PQ_INV_EOTF] = "PQ Inverse EOTF",
- [KMS_COLOROP_LUT1D_PQ_125_EOTF] = "PQ 125 EOTF",
- [KMS_COLOROP_LUT1D_PQ_125_INV_EOTF] = "PQ 125 Inverse EOTF",
-};
-
-typedef struct kms_colorop_enumerated_lut1d_info {
- kms_colorop_lut1d_tf_t tf;
-} kms_colorop_enumerated_lut1d_info_t;
-
-typedef struct kms_colorop {
- kms_colorop_type_t type;
-
- union {
- kms_colorop_enumerated_lut1d_info_t enumerated_lut1d_info;
- igt_1dlut_t *lut1d;
- const igt_matrix_3x4_t *matrix_3x4;
- double multiplier;
- };
-
- const char *name;
-
- igt_pixel_transform transform;
-
- /* Mapped colorop */
- igt_colorop_t *colorop;
-
-} kms_colorop_t;
-
-kms_colorop_t kms_colorop_srgb_eotf = {
- .type = KMS_COLOROP_ENUMERATED_LUT1D,
- .enumerated_lut1d_info = {
- .tf = KMS_COLOROP_LUT1D_SRGB_EOTF
- },
- .name = "srgb_eotf",
- .transform = &igt_color_srgb_eotf
-};
-
-kms_colorop_t kms_colorop_srgb_eotf_2 = {
- .type = KMS_COLOROP_ENUMERATED_LUT1D,
- .enumerated_lut1d_info = {
- .tf = KMS_COLOROP_LUT1D_SRGB_EOTF
- },
- .name = "srgb_eotf",
- .transform = &igt_color_srgb_eotf
-};
-
-kms_colorop_t kms_colorop_srgb_inv_eotf = {
- .type = KMS_COLOROP_ENUMERATED_LUT1D,
- .enumerated_lut1d_info = {
- .tf = KMS_COLOROP_LUT1D_SRGB_INV_EOTF
- },
- .name = "srgb_inv_eotf",
- .transform = &igt_color_srgb_inv_eotf
-};
-
-kms_colorop_t kms_colorop_srgb_inv_eotf_lut = {
- .type = KMS_COLOROP_CUSTOM_LUT1D,
- .lut1d = &igt_1dlut_srgb_inv_eotf,
- .name = "srgb_inv_eotf_lut",
- .transform = &igt_color_srgb_inv_eotf
-};
-
-kms_colorop_t kms_colorop_srgb_eotf_lut = {
- .type = KMS_COLOROP_CUSTOM_LUT1D,
- .lut1d = &igt_1dlut_srgb_eotf,
- .name = "srgb_eotf_lut",
- .transform = &igt_color_srgb_eotf
-};
-
-kms_colorop_t kms_colorop_bt2020_inv_oetf = {
- .type = KMS_COLOROP_ENUMERATED_LUT1D,
- .enumerated_lut1d_info = {
- .tf = KMS_COLOROP_LUT1D_BT2020_INV_OETF
- },
- .name = "bt2020_inv_oetf",
- .transform = &igt_color_bt2020_inv_oetf
-};
-
-kms_colorop_t kms_colorop_bt2020_oetf = {
- .type = KMS_COLOROP_ENUMERATED_LUT1D,
- .enumerated_lut1d_info = {
- .tf = KMS_COLOROP_LUT1D_BT2020_OETF
- },
- .name = "bt2020_oetf",
- .transform = &igt_color_bt2020_oetf
-};
-
-kms_colorop_t kms_colorop_pq_eotf = {
- .type = KMS_COLOROP_ENUMERATED_LUT1D,
- .enumerated_lut1d_info = {
- .tf = KMS_COLOROP_LUT1D_PQ_EOTF
- },
- .name = "pq_eotf",
- .transform = &igt_color_pq_eotf
-};
-
-kms_colorop_t kms_colorop_pq_inv_eotf = {
- .type = KMS_COLOROP_ENUMERATED_LUT1D,
- .enumerated_lut1d_info = {
- .tf = KMS_COLOROP_LUT1D_PQ_INV_EOTF
- },
- .name = "pq_inv_eotf",
- .transform = &igt_color_pq_inv_eotf
-};
-
-kms_colorop_t kms_colorop_pq_125_eotf = {
- .type = KMS_COLOROP_ENUMERATED_LUT1D,
- .enumerated_lut1d_info = {
- .tf = KMS_COLOROP_LUT1D_PQ_125_EOTF
- },
- .name = "pq_125_eotf",
- .transform = &igt_color_pq_125_eotf
-};
-
-kms_colorop_t kms_colorop_pq_125_eotf_2 = {
- .type = KMS_COLOROP_ENUMERATED_LUT1D,
- .enumerated_lut1d_info = {
- .tf = KMS_COLOROP_LUT1D_PQ_125_EOTF
- },
- .name = "pq_125_eotf",
- .transform = &igt_color_pq_125_eotf
-};
-
-kms_colorop_t kms_colorop_pq_125_inv_eotf = {
- .type = KMS_COLOROP_ENUMERATED_LUT1D,
- .enumerated_lut1d_info = {
- .tf = KMS_COLOROP_LUT1D_PQ_125_INV_EOTF
- },
- .name = "pq_125_inv_eotf",
- .transform = &igt_color_pq_125_inv_eotf
-};
-
-kms_colorop_t kms_colorop_ctm_3x4_50_desat = {
- .type = KMS_COLOROP_CTM_3X4,
- .matrix_3x4 = &igt_matrix_3x4_50_desat,
- .name = "ctm_3x4_50_desat",
- .transform = &igt_color_ctm_3x4_50_desat
-};
-
-kms_colorop_t kms_colorop_ctm_3x4_overdrive = {
- .type = KMS_COLOROP_CTM_3X4,
- .matrix_3x4 = &igt_matrix_3x4_overdrive,
- .name = "ctm_3x4_overdrive",
- .transform = &igt_color_ctm_3x4_overdrive
-};
-
-kms_colorop_t kms_colorop_ctm_3x4_oversaturate = {
- .type = KMS_COLOROP_CTM_3X4,
- .matrix_3x4 = &igt_matrix_3x4_oversaturate,
- .name = "ctm_3x4_oversaturate",
- .transform = &igt_color_ctm_3x4_oversaturate
-};
-
-kms_colorop_t kms_colorop_ctm_3x4_bt709_enc = {
- .type = KMS_COLOROP_CTM_3X4,
- .matrix_3x4 = &igt_matrix_3x4_bt709_enc,
- .name = "ctm_3x4_bt709_enc",
- .transform = &igt_color_ctm_3x4_bt709_enc
-};
-
-kms_colorop_t kms_colorop_ctm_3x4_bt709_dec = {
- .type = KMS_COLOROP_CTM_3X4,
- .matrix_3x4 = &igt_matrix_3x4_bt709_dec,
- .name = "ctm_3x4_bt709_dec",
- .transform = &igt_color_ctm_3x4_bt709_dec
-};
-
-kms_colorop_t kms_colorop_multiply_125 = {
- .type = KMS_COLOROP_MULTIPLIER,
- .multiplier = 125.0f,
- .name = "multiply_125",
- .transform = &igt_color_multiply_125
-};
-
-kms_colorop_t kms_colorop_multiply_inv_125 = {
- .type = KMS_COLOROP_MULTIPLIER,
- .multiplier = 1/125.0f,
- .name = "multiply_inv_125",
- .transform = &igt_color_multiply_inv_125
-};
-
-#endif /* __KMS_COLOROP_H__ */
diff --git a/tests/meson.build b/tests/meson.build
index d2f4214bf..28c4e610d 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -352,6 +352,7 @@ extra_sources = {
'dumb_buffer': ['dumb_buffer.c' ],
'testdisplay': [ 'testdisplay_hotplug.c' ],
'kms_color': [ 'kms_color_helper.c' ],
+ 'kms_colorop': [ 'kms_color_helper.c' ],
'kms_chamelium_audio': [ join_paths ('chamelium', 'kms_chamelium_helper.c') ],
'kms_chamelium_color': [ 'kms_color_helper.c' ],
'kms_chamelium_edid': [ join_paths ('chamelium', 'kms_chamelium_helper.c') ],
--
2.43.2
More information about the Intel-gfx-trybot
mailing list