Re: [PATCH v4 01/11] drm/colorop: Add DRM_COLOROP_FIXED_MATRIX

"Borah, Chaitanya Kumar" <[email protected]> Thu, 30 Jul 2026 20:15:11 +0530
Newsgroups org.freedesktop.lists.amd-gfx,org.freedesktop.lists.dri-devel
Message-ID <[email protected]>
Hi Pekka,

On 7/30/2026 7:57 PM, Pekka Paalanen wrote:
> On Tue, 28 Jul 2026 21:30:14 +0530
> "Borah, Chaitanya Kumar" <[email protected]> wrote:
> 
>> Hello Rober,
>>
>> On 7/28/2026 8:32 PM, Robert Mader wrote:
>>> Hi,
>>>
>>> On 22.07.26 15:45, Harry Wentland wrote:
>>>> From: Chaitanya Kumar Borah <[email protected]>
>>>>
>>>> Introduce DRM_COLOROP_FIXED_MATRIX, a new colorop type representing a
>>>> hardware that performs a fixed matrix operation.
>>>>
>>>> Unlike CTM-based colorops, this block does not expose programmable
>>>> coefficients. Instead, userspace selects one of the predefined
>>>> hardware modes via a new FIXED_MATRIX_TYPE enum property. Supported modes
>>>> include common YCbCr->RGB and RGB709->RGB2020 conversions.
>>>>
>>>> v4:
>>>>    - Add limited-range YCbCr-RGB conversion matrix enums (Robert)
>>>>    - Document matrix values (Pekka)
>>>>    - Clarify RGB709 to RGB2020 is a full-range matrix (Pekka)
>>>>    - Fix confusing "CSC preset" doc (Pekka)
>>>>
>>>> v2:
>>>>    - Naming changes (Pekka)
>>>>
>>>> v3:
>>>>    - Fix NC matrix enum name and string (Melissa)
>>>>    - Rebase
>>>>
>>>> Co-developed-by: Harry Wentland <[email protected]>
>>>> Signed-off-by: Chaitanya Kumar Borah <[email protected]>
>>>> Signed-off-by: Harry Wentland <[email protected]>
>>>> Reviewed-by: Melissa Wen <[email protected]>
>>>> Reviewed-by: Harry Wentland <[email protected]>
>>>> Reviewed-by: Robert Mader <[email protected]>
>>>> ---
>>>>    drivers/gpu/drm/drm_atomic.c      |   4 +
>>>>    drivers/gpu/drm/drm_atomic_uapi.c |   7 ++
>>>>    drivers/gpu/drm/drm_colorop.c     | 109 ++++++++++++++++++++
>>>>    include/drm/drm_colorop.h         | 159 ++++++++++++++++++++++++++++++
>>>>    include/uapi/drm/drm_mode.h       |  12 +++
>>>>    5 files changed, 291 insertions(+)
>>>>
> 
>>>> diff --git a/drivers/gpu/drm/drm_colorop.c b/drivers/gpu/drm/
>>>> drm_colorop.c
>>>> index 682fcc651525..e7ccf7d053b8 100644
>>>> --- a/drivers/gpu/drm/drm_colorop.c
>>>> +++ b/drivers/gpu/drm/drm_colorop.c
>>>> @@ -68,6 +68,7 @@ static const struct drm_prop_enum_list
>>>> drm_colorop_type_enum_list[] = {
>>>>        { DRM_COLOROP_CTM_3X4, "3x4 Matrix"},
>>>>        { DRM_COLOROP_MULTIPLIER, "Multiplier"},
>>>>        { DRM_COLOROP_3D_LUT, "3D LUT"},
>>>> +    { DRM_COLOROP_FIXED_MATRIX, "Fixed Matrix"},
>>>>    };
>>>>    static const char * const colorop_curve_1d_type_names[] = {
>>>> @@ -90,6 +91,17 @@ static const struct drm_prop_enum_list
>>>> drm_colorop_lut3d_interpolation_list[] =
>>>>        { DRM_COLOROP_LUT3D_INTERPOLATION_TETRAHEDRAL, "Tetrahedral" },
>>>>    };
>>>> +static const char * const colorop_fixed_matrix_type_names[] = {
>>>> +    [DRM_COLOROP_FM_YCBCR601_FULL_RGB] = "YCbCr 601 Full to RGB",
>>>> +    [DRM_COLOROP_FM_YCBCR601_LIMITED_RGB] = "YCbCr 601 Limited to RGB",
>>>> +    [DRM_COLOROP_FM_YCBCR709_FULL_RGB] = "YCbCr 709 Full to RGB",
>>>> +    [DRM_COLOROP_FM_YCBCR709_LIMITED_RGB] = "YCbCr 709 Limited to RGB",
>>>> +    [DRM_COLOROP_FM_YCBCR2020_NC_FULL_RGB] = "YCbCr 2020 NC Full to
>>>> RGB",
>>>> +    [DRM_COLOROP_FM_YCBCR2020_NC_LIMITED_RGB] = "YCbCr 2020 NC
>>>> Limited to RGB",
>>>> +    [DRM_COLOROP_FM_YCBCR_LIMITED_FULL] = "YCbCr limited to full",
>>>> +    [DRM_COLOROP_FM_RGB709_RGB2020] = "RGB709 to RGB2020",
>>>
>>> I'm still a bit unsure how useful the later two values are,
>>
>> You can see them being used in [1] and tested by [2]. We split out the
>> "YCbCr limited to full" block because some Intel planes have a 1DLUT
>> between it and the "YCbCr XXX Full to RGB" block. This keeps the color
>> pipeline consistent with the actual HW.
> 
> Hi Chaitanya,
> 
> it would be nice for VKMS to be able to have such a color
> pipeline only. Then userspace authors can test it.
> 

Sure! I will float something soon.

> That gives me the idea, that perhaps there should be a library of color
> pipelines for VKMS that replicates actual hardware pipelines. Maybe it
> would be in the kernel, or maybe it would be in some userspace project
> if VKMS pipelines can be crafted through configfs or something else.
> 

Sounds like a good idea. Worth exploring.

I'll give it some thought, but no promises ;)

>> Based on your experience implementing the colorop in weston, do you
>> foresee any challenges in supporting limited-range framebuffers using
>> the "YCbCr Limited-to-Full" fixed matrix block?
> 
> I cannot imagine a big problem, but it is yet another configuration
> that userspace must be explicitly prepared for.
> 

Thank you for clearing it up. We will check if we can extend Robert's 
implementation to support this.

==
Chaitanya

> 
> Thanks,
> pq
> 
> 
>> As for the "RGB709 to RGB2020" block, I can see it being useful for
>> converting SDR Rec.709 content into the Rec.2020 color space before
>> blending it with an HDR plane.
>>
>> ==
>> Chaitanya
>>
>>
>> [1]
>> https://lore.kernel.org/dri-devel/[email protected]/
>> [2]
>> https://lore.kernel.org/igt-dev/[email protected]/
>>
>> especially
>>> as they are not implemented in this series - IMO they should be left out
>>> and be part of the corresponding Intel series.
>>>
>>> Anyway, still R-B
>>>