[PATCH v5 31/37] test/kms_colorop: Add tests that exercise the 1D LUT colorops
Harry Wentland
harry.wentland at amd.com
Mon Aug 19 20:58:17 UTC 2024
From: Alex Hung <alex.hung at amd.com>
We'll use the sRGB EOTF and its inverse for convenience.
Signed-off-by: Alex Hung <alex.hung at amd.com>
Signed-off-by: Harry Wentland <harry.wentland at amd.com>
---
tests/kms_colorop.c | 35 +++++++++++++++++++++++++++++++++++
tests/kms_colorop.h | 15 +++++++++++++++
2 files changed, 50 insertions(+)
diff --git a/tests/kms_colorop.c b/tests/kms_colorop.c
index f6738cdcfdf2..436bd085f9a7 100644
--- a/tests/kms_colorop.c
+++ b/tests/kms_colorop.c
@@ -50,6 +50,8 @@
* @srgb_inv_eotf: sRGB Inverse EOTF
* @srgb_eotf-srgb_inv_eotf: sRGB EOTF -> sRGB Inverse EOTF
* @srgb_eotf-srgb_inv_eotf-srgb_eotf: sRGB EOTF -> sRGB Inverse EOTF -> sRGB EOTF
+ * @srgb_inv_eotf_lut: sRGB Inverse EOTF Custom LUT
+ * @srgb_inv_eotf_lut-srgb_eotf_lut: sRGB Inverse EOTF Custom LUT -> sRGB EOTF Custom LUT
* @bt2020_inv_oetf: BT.2020 Inverse OETF
* @bt2020_oetf: BT.2020 OETF
* @bt2020_inv_oetf-bt2020_oetf: BT.2020 Inverse OETF > BT.2020 OETF
@@ -231,6 +233,9 @@ static bool can_use_colorop(igt_display_t *display, igt_colorop_t *colorop, kms_
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_LUT3D:
default:
return false;
@@ -298,9 +303,33 @@ static igt_colorop_t *get_color_pipeline(igt_display_t *display,
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;
+
igt_assert(colorop->colorop);
igt_colorop_set_prop_value(colorop->colorop, IGT_COLOROP_BYPASS, 0);
@@ -313,6 +342,10 @@ static void set_colorop(igt_display_t *display,
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_LUT3D:
default:
igt_fail(IGT_EXIT_FAILURE);
@@ -494,6 +527,8 @@ igt_main
{ { &kms_colorop_srgb_inv_eotf, NULL }, "srgb_inv_eotf" },
{ { &kms_colorop_srgb_eotf, &kms_colorop_srgb_inv_eotf, NULL }, "srgb_eotf-srgb_inv_eotf" },
{ { &kms_colorop_srgb_eotf, &kms_colorop_srgb_inv_eotf, &kms_colorop_srgb_eotf_2, NULL }, "srgb_eotf-srgb_inv_eotf-srgb_eotf" },
+ { { &kms_colorop_srgb_inv_eotf_lut, NULL }, "srgb_inv_eotf_lut" },
+ { { &kms_colorop_srgb_inv_eotf_lut, &kms_colorop_srgb_eotf_lut, NULL }, "srgb_inv_eotf_lut-srgb_eotf_lut" },
{ { &kms_colorop_bt2020_inv_oetf, NULL }, "bt2020_inv_oetf" },
{ { &kms_colorop_bt2020_oetf, NULL }, "bt2020_oetf" },
{ { &kms_colorop_bt2020_inv_oetf, &kms_colorop_bt2020_oetf, NULL }, "bt2020_inv_oetf-bt2020_oetf" },
diff --git a/tests/kms_colorop.h b/tests/kms_colorop.h
index 7b98198f6430..13d15ea6637d 100644
--- a/tests/kms_colorop.h
+++ b/tests/kms_colorop.h
@@ -71,6 +71,7 @@ typedef struct kms_colorop {
union {
kms_colorop_enumerated_lut1d_info_t enumerated_lut1d_info;
+ igt_1dlut_t *lut1d;
const igt_matrix_3x4_t *matrix_3x4;
};
@@ -110,6 +111,20 @@ kms_colorop_t kms_colorop_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 = {
--
2.46.0
More information about the igt-dev
mailing list