[PATCH 01/10] drm/drm-crtc: Introduce sharpness strength property
Nautiyal, Ankit K
ankit.k.nautiyal at intel.com
Thu Aug 7 05:51:24 UTC 2025
Hi Nemesa,
Patch looks good to me. Just a couple of minor suggestions in the inline
comments for slight improvements in documentation.
Also, IMO, drm_crtc might be better than drm-crtc in the subject line.
Reviewed-by: Ankit Nautiyal <ankit.k.nautiyal at intel.com>
On 7/24/2025 7:15 PM, Nemesa Garg wrote:
> Introduces the new crtc property "SHARPNESS_STRENGTH" that allows
> the user to set the intensity so as to get the sharpness effect.
> The value of this property can be set from 0-255.
> It is useful in scenario when the output is blurry and user
> want to sharpen the pixels. User can increase/decrease the
> sharpness level depending on the content displayed.
>
> v2: Rename crtc property variable [Arun]
> Add modeset detail in uapi doc[Uma]
> v3: Fix build issue
>
> Signed-off-by: Nemesa Garg <nemesa.garg at intel.com>
> ---
> drivers/gpu/drm/drm_atomic_uapi.c | 4 ++++
> drivers/gpu/drm/drm_crtc.c | 35 +++++++++++++++++++++++++++++++
> include/drm/drm_crtc.h | 17 +++++++++++++++
> 3 files changed, 56 insertions(+)
>
> diff --git a/drivers/gpu/drm/drm_atomic_uapi.c b/drivers/gpu/drm/drm_atomic_uapi.c
> index ecc73d52bfae..2302c2bea28a 100644
> --- a/drivers/gpu/drm/drm_atomic_uapi.c
> +++ b/drivers/gpu/drm/drm_atomic_uapi.c
> @@ -419,6 +419,8 @@ static int drm_atomic_crtc_set_property(struct drm_crtc *crtc,
> set_out_fence_for_crtc(state->state, crtc, fence_ptr);
> } else if (property == crtc->scaling_filter_property) {
> state->scaling_filter = val;
> + } else if (property == crtc->sharpness_strength_property) {
> + state->sharpness_strength = val;
> } else if (crtc->funcs->atomic_set_property) {
> return crtc->funcs->atomic_set_property(crtc, state, property, val);
> } else {
> @@ -456,6 +458,8 @@ drm_atomic_crtc_get_property(struct drm_crtc *crtc,
> *val = 0;
> else if (property == crtc->scaling_filter_property)
> *val = state->scaling_filter;
> + else if (property == crtc->sharpness_strength_property)
> + *val = state->sharpness_strength;
> else if (crtc->funcs->atomic_get_property)
> return crtc->funcs->atomic_get_property(crtc, state, property, val);
> else {
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> index 46655339003d..1b7ce99cea5e 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -229,6 +229,25 @@ struct dma_fence *drm_crtc_create_fence(struct drm_crtc *crtc)
> * Driver's default scaling filter
> * Nearest Neighbor:
> * Nearest Neighbor scaling filter
> + * SHARPNESS_STRENGTH:
> + * Atomic property for setting the sharpness strength/intensity by userspace.
> + *
> + * The value of this property is set as an integer value ranging
> + * from 0 - 255 where:
> + *
> + * 0 means feature is disabled.
Should mention here that this is the default value.
> + *
> + * 1 means minimum sharpness.
> + *
> + * 255 means maximum sharpness.
These can just be:
0: Sharpness feature is disabled (default value).
1: Minimum sharpness.
255: Maximum sharpness.
> + *
> + * User can gradually increase or decrease the sharpness level and can
> + * set the optimum value depending on content and
> this value will be
> + * passed to kernel through the Uapi.
Use UAPI. Also, this can be a separate sentence.
> + * The setting of this property does not require modeset.
> + * The sharpness effect takes place post blending on the final composed output.
> + * If the feature is disabled, the content remains same without any sharpening effect
> + * and when this feature is applied, it enhances the clarity of the content.
> */
>
> __printf(6, 0)
> @@ -940,6 +959,22 @@ int drm_crtc_create_scaling_filter_property(struct drm_crtc *crtc,
> }
> EXPORT_SYMBOL(drm_crtc_create_scaling_filter_property);
>
> +int drm_crtc_create_sharpness_strength_property(struct drm_crtc *crtc)
> +{
> + struct drm_device *dev = crtc->dev;
> + struct drm_property *prop =
> + drm_property_create_range(dev, 0, "SHARPNESS_STRENGTH", 0, 255);
> +
> + if (!prop)
> + return -ENOMEM;
> +
> + crtc->sharpness_strength_property = prop;
> + drm_object_attach_property(&crtc->base, prop, 0);
> +
> + return 0;
> +}
> +EXPORT_SYMBOL(drm_crtc_create_sharpness_strength_property);
> +
> /**
> * drm_crtc_in_clone_mode - check if the given CRTC state is in clone mode
> *
> diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
> index caa56e039da2..2b26b90e82e6 100644
> --- a/include/drm/drm_crtc.h
> +++ b/include/drm/drm_crtc.h
> @@ -317,6 +317,16 @@ struct drm_crtc_state {
> */
> enum drm_scaling_filter scaling_filter;
>
> + /**
> + * @sharpness_strength:
> + *
> + * Used by the user to set the sharpness intensity.
> + * The value ranges from 0-255.
Perhaps we can add about default value:
Default value is 0, which disables the sharpness feature.
> + * Any value greater than 0 means enabling the featuring
can simply be: Any value greater than 0 enables sharpening with the
specified strength.
Regards,
Ankit
> + * along with setting the value for sharpness.
> + */
> + u8 sharpness_strength;
> +
> /**
> * @event:
> *
> @@ -1088,6 +1098,12 @@ struct drm_crtc {
> */
> struct drm_property *scaling_filter_property;
>
> + /**
> + * @sharpness_strength_property: property to apply
> + * the intensity of the sharpness requested.
> + */
> + struct drm_property *sharpness_strength_property;
> +
> /**
> * @state:
> *
> @@ -1324,4 +1340,5 @@ static inline struct drm_crtc *drm_crtc_find(struct drm_device *dev,
> int drm_crtc_create_scaling_filter_property(struct drm_crtc *crtc,
> unsigned int supported_filters);
> bool drm_crtc_in_clone_mode(struct drm_crtc_state *crtc_state);
> +int drm_crtc_create_sharpness_strength_property(struct drm_crtc *crtc);
> #endif /* __DRM_CRTC_H__ */
More information about the dri-devel
mailing list