On 4/30/2026 11:49 PM, Harry Wentland wrote:


On 2026-04-23 05:34, Borah, Chaitanya Kumar wrote:


On 3/30/2026 9:04 PM, Harry Wentland wrote:
Add three new limited-range YUV-to-RGB conversion presets to the
CSC Fixed-Function colorop enum:

    - DRM_COLOROP_CSC_FF_YUV601_LIMITED_RGB601
    - DRM_COLOROP_CSC_FF_YUV709_LIMITED_RGB709
    - DRM_COLOROP_CSC_FF_YUV2020_LIMITED_RGB2020

The existing full-range enums (YUV601_RGB601, YUV709_RGB709,
YUV2020_RGB2020) are kept as-is. The limited-range variants are
inserted after their corresponding full-range entries.

This gives drivers the ability to advertise support for both full
and limited range YCbCr framebuffers via the color pipeline,
replacing the need for separate COLOR_ENCODING and COLOR_RANGE
properties on the CSC colorop.

Assisted-by Claude:claude-opus-4.6

Signed-off-by: Harry Wentland <[email protected]>
---
   drivers/gpu/drm/drm_colorop.c | 11 +++++----
   include/drm/drm_colorop.h     | 42 ++++++++++++++++++++++++++++++-----
   2 files changed, 43 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/drm_colorop.c b/drivers/gpu/drm/drm_colorop.c
index 6a345e2e8b15..f0d11cf7e3cd 100644
--- a/drivers/gpu/drm/drm_colorop.c
+++ b/drivers/gpu/drm/drm_colorop.c
@@ -92,10 +92,13 @@ static const struct drm_prop_enum_list 
drm_colorop_lut3d_interpolation_list[] =
   };
     static const char * const colorop_csc_ff_type_names[] = {
-    [DRM_COLOROP_CSC_FF_YUV601_RGB601]   = "YUV601 to RGB601",
-    [DRM_COLOROP_CSC_FF_YUV709_RGB709]   = "YUV709 to RGB709",
-    [DRM_COLOROP_CSC_FF_YUV2020_RGB2020] = "YUV2020 to RGB2020",
-    [DRM_COLOROP_CSC_FF_RGB709_RGB2020]  = "RGB709 to RGB2020",
+    [DRM_COLOROP_CSC_FF_YUV601_RGB601]           = "YUV601 to RGB601",
+    [DRM_COLOROP_CSC_FF_YUV601_LIMITED_RGB601]    = "YUV601 Limited to RGB601",
+    [DRM_COLOROP_CSC_FF_YUV709_RGB709]            = "YUV709 to RGB709",
+    [DRM_COLOROP_CSC_FF_YUV709_LIMITED_RGB709]    = "YUV709 Limited to RGB709",
+    [DRM_COLOROP_CSC_FF_YUV2020_RGB2020]          = "YUV2020 to RGB2020",
+    [DRM_COLOROP_CSC_FF_YUV2020_LIMITED_RGB2020]  = "YUV2020 Limited to 
RGB2020",
+    [DRM_COLOROP_CSC_FF_RGB709_RGB2020]           = "RGB709 to RGB2020",

As I understand, all combinations of input/output ranges are mathematically 
valid (e.g., “YCbCr XXX Limited → RGB Limited” or “YCbCr XXX Full → RGB 
Limited”).

I am not sure how widespread such use-cases are but will it be prudent to have the enums be named as 
"YCbCrXXX <range> to RGB <range>"?

I'm not sure how likely it would be that anyone would need to convert to RGB 
limited. I'd prefer to keep things simpler for now. If anyone does need to add 
enums for conversion to limited RGB they could always add _RGB_LIMITED 
variations of the enums in the future.


Alright makes sense, I will stick to the "RGB" == "RGB Full" nomencature.

Thank you.

==

Chaitanya

Harry


==
Chaitanya

   };
     /* Init Helpers */
diff --git a/include/drm/drm_colorop.h b/include/drm/drm_colorop.h
index 2cd8e0779c2a..c414b9070afb 100644
--- a/include/drm/drm_colorop.h
+++ b/include/drm/drm_colorop.h
@@ -145,31 +145,61 @@ enum drm_colorop_csc_ff_type {
        *
        * enum string "YUV601 to RGB601"
        *
-     * Selects the fixed-function CSC preset that converts YUV
-     * (BT.601) colorimetry to RGB (BT.601).
+     * Selects the fixed-function CSC preset that converts full-range
+     * YUV (BT.601) colorimetry to RGB (BT.601).
        */
       DRM_COLOROP_CSC_FF_YUV601_RGB601,
   +    /**
+     * @DRM_COLOROP_CSC_FF_YUV601_LIMITED_RGB601:
+     *
+     * enum string "YUV601 Limited to RGB601"
+     *
+     * Selects the fixed-function CSC preset that converts limited-range
+     * YUV (BT.601) colorimetry to RGB (BT.601).
+     */
+    DRM_COLOROP_CSC_FF_YUV601_LIMITED_RGB601,
+
       /**
        * @DRM_COLOROP_CSC_FF_YUV709_RGB709:
        *
        * enum string "YUV709 to RGB709"
        *
-     * Selects the fixed-function CSC preset that converts YUV
-     * (BT.709) colorimetry to RGB (BT.709).
+     * Selects the fixed-function CSC preset that converts full-range
+     * YUV (BT.709) colorimetry to RGB (BT.709).
        */
       DRM_COLOROP_CSC_FF_YUV709_RGB709,
   +    /**
+     * @DRM_COLOROP_CSC_FF_YUV709_LIMITED_RGB709:
+     *
+     * enum string "YUV709 Limited to RGB709"
+     *
+     * Selects the fixed-function CSC preset that converts limited-range
+     * YUV (BT.709) colorimetry to RGB (BT.709).
+     */
+    DRM_COLOROP_CSC_FF_YUV709_LIMITED_RGB709,
+
       /**
        * @DRM_COLOROP_CSC_FF_YUV2020_RGB2020:
        *
        * enum string "YUV2020 to RGB2020"
        *
-     * Selects the fixed-function CSC preset that converts YUV
-     * (BT.2020) colorimetry to RGB (BT.2020).
+     * Selects the fixed-function CSC preset that converts full-range
+     * YUV (BT.2020) colorimetry to RGB (BT.2020).
        */
       DRM_COLOROP_CSC_FF_YUV2020_RGB2020,
   +    /**
+     * @DRM_COLOROP_CSC_FF_YUV2020_LIMITED_RGB2020:
+     *
+     * enum string "YUV2020 Limited to RGB2020"
+     *
+     * Selects the fixed-function CSC preset that converts limited-range
+     * YUV (BT.2020) colorimetry to RGB (BT.2020).
+     */
+    DRM_COLOROP_CSC_FF_YUV2020_LIMITED_RGB2020,
+
       /**
        * @DRM_COLOROP_CSC_FF_RGB709_RGB2020:
        *



Reply via email to