Re: [PATCH i-g-t 3/6] tests/kms_colorop_helper: Add FIXED_MATRIX colorop support
"Borah, Chaitanya Kumar" <[email protected]>
| Newsgroups | org.freedesktop.lists.igt-dev |
|---|---|
| Message-ID | <[email protected]> |
On 8/6/2026 5:33 PM, Swati Sharma wrote: > Add KMS_COLOROP_FIXED_MATRIX type and helpers for configuring > fixed-matrix colorops. The FIXED_MATRIX block selects from predefined > hardware modes via the FIXED_MATRIX_TYPE enum property rather than > programmable coefficients. > > Supported FIXED_MATRIX modes: > - YCbCr 601 Full to RGB > - YCbCr 601 Limited to RGB > - YCbCr 709 Full to RGB > - YCbCr 709 Limited to RGB > - YCbCr 2020 NC Full to RGB > - YCbCr 2020 NC Limited to RGB > > Extends can_use_colorop(), set_colorop(), and reset_colorop() to > handle the new FIXED_MATRIX type, and adds the FIXED_MATRIX enum > name table. > This patch will need some reconciliation with [1]. Let's take the good parts of both. I like the idea of having kms_colorop_fixed_matrix_names instead of raw strings. [1] https://lore.kernel.org/igt-dev/[email protected]/ > v2: -Naming changes (CSC_FF -> FIXED_MATRIX) > v3: -Drop YCbCr limited to full and RGB709 to RGB2020 matrices > until we have non-IGT userspace that shows their use > -Add Limited to RGB variants matching KMD enums > > Assisted-by: Claude Opus 4.6 > Signed-off-by: Swati Sharma <[email protected]> > --- > tests/kms_colorop_helper.c | 21 +++++++++++++++++++++ > tests/kms_colorop_helper.h | 21 ++++++++++++++++++++- > 2 files changed, 41 insertions(+), 1 deletion(-) > > diff --git a/tests/kms_colorop_helper.c b/tests/kms_colorop_helper.c > index aaee4e567..f00f6240c 100644 > --- a/tests/kms_colorop_helper.c > +++ b/tests/kms_colorop_helper.c > @@ -200,6 +200,15 @@ kms_colorop_t kms_colorop_3dlut_17_12_rgb = { > .transform = &igt_color_3dlut_17_12_rgb, > }; > > +const char * const kms_colorop_fixed_matrix_names[KMS_COLOROP_FIXED_MATRIX_NUM_ENUMS] = { > + [KMS_COLOROP_FIXED_MATRIX_YCBCR601_FULL_RGB] = "YCbCr 601 Full to RGB", > + [KMS_COLOROP_FIXED_MATRIX_YCBCR601_LIMITED_RGB] = "YCbCr 601 Limited to RGB", > + [KMS_COLOROP_FIXED_MATRIX_YCBCR709_FULL_RGB] = "YCbCr 709 Full to RGB", > + [KMS_COLOROP_FIXED_MATRIX_YCBCR709_LIMITED_RGB] = "YCbCr 709 Limited to RGB", > + [KMS_COLOROP_FIXED_MATRIX_YCBCR2020_NC_FULL_RGB] = "YCbCr 2020 NC Full to RGB", > + [KMS_COLOROP_FIXED_MATRIX_YCBCR2020_NC_LIMITED_RGB] = "YCbCr 2020 NC Limited to RGB", > +}; > + > static bool can_use_colorop(igt_display_t *display, igt_colorop_t *colorop, kms_colorop_t *desired) > { > switch (desired->type) { > @@ -218,6 +227,13 @@ static bool can_use_colorop(igt_display_t *display, igt_colorop_t *colorop, kms_ > return (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_MULTIPLIER); > case KMS_COLOROP_LUT3D: > return (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_3D_LUT); > + case KMS_COLOROP_FIXED_MATRIX: > + if (igt_colorop_get_prop(display, colorop, IGT_COLOROP_TYPE) == DRM_COLOROP_FIXED_MATRIX && > + igt_colorop_has_prop(colorop, IGT_COLOROP_FIXED_MATRIX_TYPE) && > + igt_colorop_try_prop_enum(colorop, IGT_COLOROP_FIXED_MATRIX_TYPE, > + kms_colorop_fixed_matrix_names[desired->fixed_matrix_info.fixed_matrix])) > + return true; > + return false; > default: > return false; > } > @@ -362,6 +378,10 @@ static void set_colorop(igt_display_t *display, kms_colorop_t *colorop) > > configure_3dlut(display, colorop, lut_size); > break; > + case KMS_COLOROP_FIXED_MATRIX: > + igt_colorop_set_prop_enum(colorop->colorop, IGT_COLOROP_FIXED_MATRIX_TYPE, > + kms_colorop_fixed_matrix_names[colorop->fixed_matrix_info.fixed_matrix]); > + break; > default: > igt_fail(IGT_EXIT_FAILURE); > } > @@ -416,6 +436,7 @@ static void reset_colorop(kms_colorop_t *colorop) > igt_colorop_set_prop_value(colorop->colorop, IGT_COLOROP_MULTIPLIER, 1); > break; > case KMS_COLOROP_ENUMERATED_LUT1D: > + case KMS_COLOROP_FIXED_MATRIX: > default: > return; > } > diff --git a/tests/kms_colorop_helper.h b/tests/kms_colorop_helper.h > index a081fa02d..08470f6b0 100644 > --- a/tests/kms_colorop_helper.h > +++ b/tests/kms_colorop_helper.h > @@ -22,7 +22,8 @@ typedef enum kms_colorop_type { > KMS_COLOROP_CUSTOM_LUT1D, > KMS_COLOROP_CTM_3X4, > KMS_COLOROP_MULTIPLIER, > - KMS_COLOROP_LUT3D > + KMS_COLOROP_LUT3D, > + KMS_COLOROP_FIXED_MATRIX, > } kms_colorop_type_t; > > typedef enum kms_colorop_lut1d_tf { > @@ -50,6 +51,20 @@ typedef struct kms_colorop_lut3d_info { > enum drm_colorop_lut3d_interpolation_type interpolation; > } kms_colorop_lut3d_info_t; > > +typedef enum kms_colorop_fixed_matrix { > + KMS_COLOROP_FIXED_MATRIX_YCBCR601_FULL_RGB, > + KMS_COLOROP_FIXED_MATRIX_YCBCR601_LIMITED_RGB, > + KMS_COLOROP_FIXED_MATRIX_YCBCR709_FULL_RGB, > + KMS_COLOROP_FIXED_MATRIX_YCBCR709_LIMITED_RGB, > + KMS_COLOROP_FIXED_MATRIX_YCBCR2020_NC_FULL_RGB, > + KMS_COLOROP_FIXED_MATRIX_YCBCR2020_NC_LIMITED_RGB, > + KMS_COLOROP_FIXED_MATRIX_NUM_ENUMS > +} kms_colorop_fixed_matrix_t; > + > +typedef struct kms_colorop_fixed_matrix_info { > + kms_colorop_fixed_matrix_t fixed_matrix; > +} kms_colorop_fixed_matrix_info_t; > + > typedef struct kms_colorop { > kms_colorop_type_t type; > > @@ -61,6 +76,8 @@ typedef struct kms_colorop { > double multiplier; > }; > > + kms_colorop_fixed_matrix_info_t fixed_matrix_info; > + > kms_colorop_lut3d_info_t lut3d_info; > > const char *name; > @@ -95,6 +112,8 @@ extern kms_colorop_t kms_colorop_multiply_125; > extern kms_colorop_t kms_colorop_multiply_inv_125; > extern kms_colorop_t kms_colorop_3dlut_17_12_rgb; > > +extern const char * const kms_colorop_fixed_matrix_names[KMS_COLOROP_FIXED_MATRIX_NUM_ENUMS]; > + > igt_colorop_t *get_color_pipeline(igt_display_t *display, > igt_plane_t *plane, > kms_colorop_t *colorops[]);