All of lore.kernel.org
 help / color / mirror / Atom feed
From: Harry Wentland <harry.wentland@amd.com>
To: <dri-devel@lists.freedesktop.org>, <amd-gfx@lists.freedesktop.org>
Cc: <wayland-devel@lists.freedesktop.org>,
	Harry Wentland <harry.wentland@amd.com>,
	Alex Hung <alex.hung@amd.com>
Subject: [RFC PATCH v4 11/42] drm/colorop: Add 1D Curve subtype
Date: Mon, 26 Feb 2024 16:10:25 -0500	[thread overview]
Message-ID: <20240226211100.100108-12-harry.wentland@amd.com> (raw)
In-Reply-To: <20240226211100.100108-1-harry.wentland@amd.com>

v4:
 - Use drm_colorop_curve_1d_type_enum_list to get name (Pekka)
 - Create separate init function for 1D curve
 - Pass supported TFs into 1D curve init function

Signed-off-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Hung <alex.hung@amd.com>
Co-developed-by: Alex Hung <alex.hung@amd.com>
---
 drivers/gpu/drm/drm_atomic_uapi.c | 18 +++++---
 drivers/gpu/drm/drm_colorop.c     | 71 +++++++++++++++++++++++++++++++
 include/drm/drm_colorop.h         | 24 +++++++++++
 3 files changed, 108 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
index e3067c095c72..fdd540cfe24f 100644
--- a/drivers/gpu/drm/drm_atomic_uapi.c
+++ b/drivers/gpu/drm/drm_atomic_uapi.c
@@ -648,11 +648,17 @@ static int drm_atomic_colorop_set_property(struct drm_colorop *colorop,
 		struct drm_colorop_state *state, struct drm_file *file_priv,
 		struct drm_property *property, uint64_t val)
 {
-	drm_dbg_atomic(colorop->dev,
-			"[COLOROP:%d] unknown property [PROP:%d:%s]]\n",
-			colorop->base.id,
-			property->base.id, property->name);
-	return -EINVAL;
+	if (property == colorop->curve_1d_type_property) {
+		state->curve_1d_type = val;
+	} else {
+		drm_dbg_atomic(colorop->dev,
+			       "[COLOROP:%d:%d] unknown property [PROP:%d:%s]]\n",
+			       colorop->base.id, colorop->type,
+			       property->base.id, property->name);
+		return -EINVAL;
+	}
+
+	return 0;
 }
 
 static int
@@ -662,6 +668,8 @@ drm_atomic_colorop_get_property(struct drm_colorop *colorop,
 {
 	if (property == colorop->type_property) {
 		*val = colorop->type;
+	} else if (property == colorop->curve_1d_type_property) {
+		*val = state->curve_1d_type;
 	} else {
 		return -EINVAL;
 	}
diff --git a/drivers/gpu/drm/drm_colorop.c b/drivers/gpu/drm/drm_colorop.c
index 3a07a8fe2842..f4740b6115d1 100644
--- a/drivers/gpu/drm/drm_colorop.c
+++ b/drivers/gpu/drm/drm_colorop.c
@@ -36,6 +36,12 @@ static const struct drm_prop_enum_list drm_colorop_type_enum_list[] = {
 	{ DRM_COLOROP_1D_CURVE, "1D Curve" },
 };
 
+static const char * const colorop_curve_1d_type_names[] = {
+	[DRM_COLOROP_1D_CURVE_SRGB_EOTF] = "sRGB EOTF",
+	[DRM_COLOROP_1D_CURVE_SRGB_INV_EOTF] = "sRGB Inverse EOTF",
+};
+
+
 /* Init Helpers */
 
 int drm_colorop_init(struct drm_device *dev, struct drm_colorop *colorop,
@@ -78,6 +84,56 @@ int drm_colorop_init(struct drm_device *dev, struct drm_colorop *colorop,
 }
 EXPORT_SYMBOL(drm_colorop_init);
 
+int drm_colorop_curve_1d_init(struct drm_device *dev, struct drm_colorop *colorop,
+			      struct drm_plane *plane, u64 supported_tfs)
+{
+	struct drm_prop_enum_list enum_list[DRM_COLOROP_1D_CURVE_COUNT];
+	int i, len;
+
+	struct drm_property *prop;
+	int ret;
+
+	if (!supported_tfs) {
+		drm_err(dev,
+			"No supported TFs for new 1D curve colorop on [PLANE:%d:%s]\n",
+			plane->base.id, plane->name);
+		return -EINVAL;
+	}
+
+	if ((supported_tfs & -BIT(DRM_COLOROP_1D_CURVE_COUNT)) != 0) {
+		drm_err(dev, "Unknown TF provided on [PLANE:%d:%s]\n",
+			plane->base.id, plane->name);
+		return -EINVAL;
+	}
+
+	ret = drm_colorop_init(dev, colorop, plane, DRM_COLOROP_1D_CURVE);
+	if (ret)
+		return ret;
+
+	len = 0;
+	for (i = 0; i < DRM_COLOROP_1D_CURVE_COUNT; i++) {
+		if ((supported_tfs & BIT(i)) == 0)
+			continue;
+
+		enum_list[len].type = i;
+		enum_list[len].name = colorop_curve_1d_type_names[i];
+		len++;
+	}
+
+	/* initialize 1D curve only attribute */
+	prop = drm_property_create_enum(dev, DRM_MODE_PROP_ATOMIC, "CURVE_1D_TYPE",
+					enum_list, len);
+	if (!prop)
+		return -ENOMEM;
+
+	colorop->curve_1d_type_property = prop;
+	drm_object_attach_property(&colorop->base, colorop->curve_1d_type_property, 0);
+	drm_colorop_reset(colorop);
+
+	return 0;
+}
+EXPORT_SYMBOL(drm_colorop_curve_1d_init);
+
 static void __drm_atomic_helper_colorop_duplicate_state(struct drm_colorop *colorop,
 							struct drm_colorop_state *state)
 {
@@ -192,3 +248,18 @@ const char *drm_get_colorop_type_name(enum drm_colorop_type type)
 
 	return colorop_type_name[type];
 }
+
+/**
+ * drm_get_colorop_curve_1d_type_name - return a string for 1D curve type
+ * @range: 1d curve type to compute name of
+ *
+ * In contrast to the other drm_get_*_name functions this one here returns a
+ * const pointer and hence is threadsafe.
+ */
+const char *drm_get_colorop_curve_1d_type_name(enum drm_colorop_curve_1d_type type)
+{
+	if (WARN_ON(type >= ARRAY_SIZE(colorop_curve_1d_type_names)))
+		return "unknown";
+
+	return colorop_curve_1d_type_names[type];
+}
diff --git a/include/drm/drm_colorop.h b/include/drm/drm_colorop.h
index cb98c55f8387..539db900f16f 100644
--- a/include/drm/drm_colorop.h
+++ b/include/drm/drm_colorop.h
@@ -30,6 +30,12 @@
 #include <drm/drm_mode.h>
 #include <drm/drm_property.h>
 
+enum drm_colorop_curve_1d_type {
+	DRM_COLOROP_1D_CURVE_SRGB_EOTF,
+	DRM_COLOROP_1D_CURVE_SRGB_INV_EOTF,
+	DRM_COLOROP_1D_CURVE_COUNT
+};
+
 /**
  * struct drm_colorop_state - mutable colorop state
  */
@@ -39,6 +45,13 @@ struct drm_colorop_state {
 
 	/* colorop properties */
 
+	/**
+	 * @curve_1d_type:
+	 *
+	 * Type of 1D curve.
+	 */
+	enum drm_colorop_curve_1d_type curve_1d_type;
+
 	/** @state: backpointer to global drm_atomic_state */
 	struct drm_atomic_state *state;
 };
@@ -118,6 +131,14 @@ struct drm_colorop {
 	 * this color operation. The type is enum drm_colorop_type.
 	 */
 	struct drm_property *type_property;
+
+	/**
+	 * @curve_1d_type:
+	 *
+	 * Sub-type for DRM_COLOROP_1D_CURVE type.
+	 */
+	struct drm_property *curve_1d_type_property;
+
 };
 
 #define obj_to_colorop(x) container_of(x, struct drm_colorop, base)
@@ -144,6 +165,9 @@ static inline struct drm_colorop *drm_colorop_find(struct drm_device *dev,
 int drm_colorop_init(struct drm_device *dev, struct drm_colorop *colorop,
 		     struct drm_plane *plane, enum drm_colorop_type type);
 
+int drm_colorop_curve_1d_init(struct drm_device *dev, struct drm_colorop *colorop,
+			      struct drm_plane *plane, u64 supported_tfs);
+
 struct drm_colorop_state *
 drm_atomic_helper_colorop_duplicate_state(struct drm_colorop *colorop);
 
-- 
2.44.0


  parent reply	other threads:[~2024-02-26 21:12 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-26 21:10 [RFC PATCH v4 00/42] Color Pipeline API w/ VKMS Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 01/42] drm: Don't treat 0 as -1 in drm_fixp2int_ceil Harry Wentland
2024-03-14 13:41   ` Melissa Wen
2024-02-26 21:10 ` [RFC PATCH v4 02/42] drm: Add helper for conversion from signed-magnitude Harry Wentland
2024-03-14 13:16   ` Melissa Wen
2024-02-26 21:10 ` [RFC PATCH v4 03/42] drm: Correctly round for fixp2int_round Harry Wentland
2024-03-11 13:11   ` Pekka Paalanen
2024-02-26 21:10 ` [RFC PATCH v4 04/42] drm/vkms: Round fixp2int conversion in lerp_u16 Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 05/42] drm/vkms: Create separate Kconfig file for VKMS Harry Wentland
2024-03-12 18:49   ` Melissa Wen
2024-02-26 21:10 ` [RFC PATCH v4 06/42] drm/vkms: Add kunit tests for VKMS LUT handling Harry Wentland
2024-02-27 12:14   ` Arthur Grillo
2024-02-27 14:09     ` Harry Wentland
2024-03-11 13:45   ` Pekka Paalanen
2024-02-26 21:10 ` [RFC PATCH v4 07/42] drm/vkms: Avoid reading beyond LUT array Harry Wentland
2024-03-12 18:54   ` Melissa Wen
2024-02-26 21:10 ` [RFC PATCH v4 08/42] drm/doc/rfc: Describe why prescriptive color pipeline is needed Harry Wentland
2024-03-11 15:11   ` Pekka Paalanen
2024-02-26 21:10 ` [RFC PATCH v4 09/42] drm/colorop: Introduce new drm_colorop mode object Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 10/42] drm/colorop: Add TYPE property Harry Wentland
2024-03-12 15:02   ` Pekka Paalanen
2024-03-12 15:15     ` Simon Ser
2024-03-12 15:55       ` Pekka Paalanen
2024-02-26 21:10 ` Harry Wentland [this message]
2024-02-26 21:10 ` [RFC PATCH v4 12/42] drm/colorop: Add BYPASS property Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 13/42] drm/colorop: Add NEXT property Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 14/42] drm/colorop: Add atomic state print for drm_colorop Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 15/42] drm/plane: Add COLOR PIPELINE property Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 16/42] drm/colorop: Add NEXT to colorop state print Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 17/42] drm/vkms: Add enumerated 1D curve colorop Harry Wentland
2024-03-12 15:27   ` Pekka Paalanen
2024-02-26 21:10 ` [RFC PATCH v4 18/42] drm/vkms: Add kunit tests for linear and sRGB LUTs Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 19/42] drm/colorop: Introduce DRM_CLIENT_CAP_PLANE_COLOR_PIPELINE Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 20/42] drm/colorop: Add 3x4 CTM type Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 21/42] drm/vkms: Pull apply_colorop out of pre_blend_color_transform Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 22/42] drm/vkms: Use s32 for internal color pipeline precision Harry Wentland
2024-03-12 15:50   ` Pekka Paalanen
2024-02-26 21:10 ` [RFC PATCH v4 23/42] drm/vkms: add 3x4 matrix in color pipeline Harry Wentland
2024-03-14 15:23   ` Pekka Paalanen
2024-02-26 21:10 ` [RFC PATCH v4 24/42] drm/tests: Add a few tests around drm_fixed.h Harry Wentland
2024-03-14 15:36   ` Pekka Paalanen
2024-02-26 21:10 ` [RFC PATCH v4 25/42] drm/vkms: Add tests for CTM handling Harry Wentland
2024-03-14 16:02   ` Pekka Paalanen
2024-02-26 21:10 ` [RFC PATCH v4 26/42] drm/colorop: pass plane_color_pipeline client cap to atomic check Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 27/42] drm/colorop: define a new macro for_each_new_colorop_in_state Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 28/42] drm/amd/display: Ignore deprecated props when plane_color_pipeline set Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 29/42] drm/amd/display: Add bypass COLOR PIPELINE Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 30/42] drm/amd/display: Skip color pipeline initialization for cursor plane Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 31/42] drm/amd/display: Add support for sRGB EOTF in DEGAM block Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 32/42] drm/amd/display: Add support for sRGB Inverse EOTF in SHAPER block Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 33/42] drm/amd/display: Add support for sRGB EOTF in BLND block Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 34/42] drm/colorop: Add PQ 125 EOTF and its inverse Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 35/42] drm/amd/display: Enable support for PQ 125 EOTF and Inverse Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 36/42] drm/colorop: add BT2020/BT709 OETF and Inverse OETF Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 37/42] drm/amd/display: Add support for BT.709 and BT.2020 TFs Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 38/42] drm/colorop: Add 1D Curve Custom LUT type Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 39/42] drm/amd/display: add shaper and blend colorops for 1D Curve Custom LUT Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 40/42] drm/amd/display: add 3x4 matrix colorop Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 41/42] drm/colorop: Add mutliplier type Harry Wentland
2024-02-26 21:10 ` [RFC PATCH v4 42/42] drm/amd/display: add multiplier colorop Harry Wentland
2024-02-27 10:26 ` [RFC PATCH v4 00/42] Color Pipeline API w/ VKMS Joshua Ashton
2024-02-27 14:00   ` Harry Wentland
2024-02-29 10:43 ` Daniel Vetter
2024-02-29 15:31   ` Joshua Ashton

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240226211100.100108-12-harry.wentland@amd.com \
    --to=harry.wentland@amd.com \
    --cc=alex.hung@amd.com \
    --cc=amd-gfx@lists.freedesktop.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=wayland-devel@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.