Re: [PATCH v3 03/12] tests/kms_colorop_helper: Add Fixed Matrix colorop infrastructure
Alex Hung <[email protected]> Sat, 25 Jul 2026 00:56:40 -0600
| Newsgroups | org.freedesktop.lists.igt-dev |
|---|---|
| Message-ID | <[email protected]> |
Reviewed-by: Alex Hung <[email protected]> On 6/23/26 11:57, Harry Wentland wrote: > Add support for Fixed Matrix colorops: > - Add KMS_COLOROP_FIXED_MATRIX type to the test colorop type enum > - Add kms_colorop_fixed_matrix_info_t struct carrying the DRM enum string > name plus encoding/range for software reference transforms > - Add can_use_colorop() handling: matches DRM_COLOROP_FIXED_MATRIX type and > verifies the specific FIXED_MATRIX enum value is supported > - Add set_colorop() handling: sets FIXED_MATRIX via single enum property > - Define four FIXED_MATRIX colorop instances: BT.709 limited/full, BT.601 > limited, and BT.2020 limited > > Assisted-by: Claude:claude-opus-4-6 > Signed-off-by: Harry Wentland <[email protected]> > --- > tests/kms_colorop_helper.c | 45 ++++++++++++++++++++++++++++++++++++++ > tests/kms_colorop_helper.h | 12 +++++++++- > 2 files changed, 56 insertions(+), 1 deletion(-) > > diff --git a/tests/kms_colorop_helper.c b/tests/kms_colorop_helper.c > index aaee4e567ef6..d12584c9adb1 100644 > --- a/tests/kms_colorop_helper.c > +++ b/tests/kms_colorop_helper.c > @@ -200,6 +200,42 @@ kms_colorop_t kms_colorop_3dlut_17_12_rgb = { > .transform = &igt_color_3dlut_17_12_rgb, > }; > > +kms_colorop_t kms_colorop_bt709_limited_ycbcr_to_rgb = { > + .type = KMS_COLOROP_FIXED_MATRIX, > + .fixed_matrix_info = { > + .fixed_matrix_type_name = "YCbCr 709 Limited to RGB", > + }, > + .name = "YCbCr BT.709 Limited Range to RGB", > + .transform = NULL, > +}; > + > +kms_colorop_t kms_colorop_bt709_full_ycbcr_to_rgb = { > + .type = KMS_COLOROP_FIXED_MATRIX, > + .fixed_matrix_info = { > + .fixed_matrix_type_name = "YCbCr 709 Full to RGB", > + }, > + .name = "YCbCr BT.709 Full Range to RGB", > + .transform = NULL, > +}; > + > +kms_colorop_t kms_colorop_bt601_limited_ycbcr_to_rgb = { > + .type = KMS_COLOROP_FIXED_MATRIX, > + .fixed_matrix_info = { > + .fixed_matrix_type_name = "YCbCr 601 Limited to RGB", > + }, > + .name = "YCbCr BT.601 Limited Range to RGB", > + .transform = NULL, > +}; > + > +kms_colorop_t kms_colorop_bt2020_limited_ycbcr_to_rgb = { > + .type = KMS_COLOROP_FIXED_MATRIX, > + .fixed_matrix_info = { > + .fixed_matrix_type_name = "YCbCr 2020 Limited to RGB NC", > + }, > + .name = "YCbCr BT.2020 Limited Range to RGB", > + .transform = NULL, > +}; > + > static bool can_use_colorop(igt_display_t *display, igt_colorop_t *colorop, kms_colorop_t *desired) > { > switch (desired->type) { > @@ -218,6 +254,11 @@ 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_try_prop_enum(colorop, IGT_COLOROP_FIXED_MATRIX, desired->fixed_matrix_info.fixed_matrix_type_name)) > + return true; > + return false; > default: > return false; > } > @@ -362,6 +403,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, > + colorop->fixed_matrix_info.fixed_matrix_type_name); > + break; > default: > igt_fail(IGT_EXIT_FAILURE); > } > diff --git a/tests/kms_colorop_helper.h b/tests/kms_colorop_helper.h > index a081fa02db8e..68ae1dd05c6f 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,8 +51,13 @@ typedef struct kms_colorop_lut3d_info { > enum drm_colorop_lut3d_interpolation_type interpolation; > } kms_colorop_lut3d_info_t; > > +typedef struct kms_colorop_fixed_matrix_info { > + const char *fixed_matrix_type_name; > +} kms_colorop_fixed_matrix_info_t; > + > typedef struct kms_colorop { > kms_colorop_type_t type; > + kms_colorop_fixed_matrix_info_t fixed_matrix_info; > > union { > kms_colorop_enumerated_lut1d_info_t enumerated_lut1d_info; > @@ -94,6 +100,10 @@ extern kms_colorop_t kms_colorop_ctm_3x4_bt709_dec; > 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 kms_colorop_t kms_colorop_bt709_limited_ycbcr_to_rgb; > +extern kms_colorop_t kms_colorop_bt709_full_ycbcr_to_rgb; > +extern kms_colorop_t kms_colorop_bt601_limited_ycbcr_to_rgb; > +extern kms_colorop_t kms_colorop_bt2020_limited_ycbcr_to_rgb; > > igt_colorop_t *get_color_pipeline(igt_display_t *display, > igt_plane_t *plane,