From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Arun R Murthy <arun.r.murthy@intel.com>
Cc: intel-xe@lists.freedesktop.org, intel-gfx@lists.freedesktop.org,
dri-devel@lists.freedesktop.org
Subject: Re: [PATCH] drm/i915/display: plane property for async supported modifiers
Date: Wed, 16 Oct 2024 16:54:09 +0300 [thread overview]
Message-ID: <Zw_FgeZFATAk-aMf@intel.com> (raw)
In-Reply-To: <Zw-_6yuy139Zmir3@intel.com>
On Wed, Oct 16, 2024 at 04:30:19PM +0300, Ville Syrjälä wrote:
> On Wed, Oct 16, 2024 at 11:06:26AM +0530, Arun R Murthy wrote:
> > Create a i915 private plane property for sharing the async supported
> > modifiers to the user.
> > UMD related discussion requesting the same
> > https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29618#note_2487123
> >
> > Signed-off-by: Arun R Murthy <arun.r.murthy@intel.com>
> > ---
> > .../gpu/drm/i915/display/intel_atomic_plane.c | 6 +++
> > .../drm/i915/display/intel_display_types.h | 4 ++
> > .../drm/i915/display/skl_universal_plane.c | 49 ++++++++++++++++++-
>
> This whole thing belongs in the drm core.
And I don't even see an actual implementation of anything here.
Why did you even post this when it doesn't do anything?
Anyways, thinking about how we might actually implement this,
we can probably leverage
https://patchwork.freedesktop.org/patch/619047/?series=139807&rev=3
> > 3 files changed, 58 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> > index b7e462075ded..ef41b50cc765 100644
> > --- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> > +++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
> > @@ -117,6 +117,9 @@ intel_plane_duplicate_state(struct drm_plane *plane)
> > intel_state->dpt_vma = NULL;
> > intel_state->flags = 0;
> >
> > + if (intel_state->async_sup_modifiers)
> > + drm_property_blob_get(intel_state->async_sup_modifiers);
> > +
> > /* add reference to fb */
> > if (intel_state->hw.fb)
> > drm_framebuffer_get(intel_state->hw.fb);
> > @@ -141,6 +144,9 @@ intel_plane_destroy_state(struct drm_plane *plane,
> > drm_WARN_ON(plane->dev, plane_state->ggtt_vma);
> > drm_WARN_ON(plane->dev, plane_state->dpt_vma);
> >
> > + if (plane_state->async_sup_modifiers)
> > + drm_property_blob_put(plane_state->async_sup_modifiers);
> > +
> > __drm_atomic_helper_plane_destroy_state(&plane_state->uapi);
> > if (plane_state->hw.fb)
> > drm_framebuffer_put(plane_state->hw.fb);
> > diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
> > index 2bb1fa64da2f..a5a301ca521a 100644
> > --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> > +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> > @@ -683,6 +683,8 @@ struct intel_plane_state {
> > u64 ccval;
> >
> > const char *no_fbc_reason;
> > +
> > + struct drm_property_blob *async_sup_modifiers;
> > };
> >
> > struct intel_initial_plane_config {
> > @@ -1435,6 +1437,8 @@ struct intel_plane {
> >
> > struct intel_fbc *fbc;
> >
> > + struct drm_property *async_modifiers_property;
> > +
> > /*
> > * NOTE: Do not place new plane state fields here (e.g., when adding
> > * new plane properties). New runtime state should now be placed in
> > diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c b/drivers/gpu/drm/i915/display/skl_universal_plane.c
> > index 9557b08ca2e2..6790bdf00c8f 100644
> > --- a/drivers/gpu/drm/i915/display/skl_universal_plane.c
> > +++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c
> > @@ -2383,6 +2383,29 @@ static bool icl_plane_format_mod_supported(struct drm_plane *_plane,
> > }
> > }
> >
> > +static int intel_plane_get_property(struct drm_plane *plane,
> > + const struct drm_plane_state *state,
> > + struct drm_property *property,
> > + uint64_t *val)
> > +{
> > + struct drm_i915_private *i915 = to_i915(plane->dev);
> > + const struct intel_plane_state *intel_plane_state =
> > + to_intel_plane_state(state);
> > + struct intel_plane *intel_plane = to_intel_plane(plane);
> > +
> > + if (property == intel_plane->async_modifiers_property) {
> > + *val = intel_plane_state->async_sup_modifiers ?
> > + intel_plane_state->async_sup_modifiers->base.id : 0;
> > + } else {
> > + drm_err(&i915->drm,
> > + "Unknown property [PROP:%d:%s]\n",
> > + property->base.id, property->name);
> > + return -EINVAL;
> > + }
> > +
> > + return 0;
> > +}
> > +
> > static bool tgl_plane_format_mod_supported(struct drm_plane *_plane,
> > u32 format, u64 modifier)
> > {
> > @@ -2442,6 +2465,7 @@ static const struct drm_plane_funcs skl_plane_funcs = {
> > .atomic_duplicate_state = intel_plane_duplicate_state,
> > .atomic_destroy_state = intel_plane_destroy_state,
> > .format_mod_supported = skl_plane_format_mod_supported,
> > + .atomic_get_property = intel_plane_get_property,
> > };
> >
> > static const struct drm_plane_funcs icl_plane_funcs = {
> > @@ -2451,6 +2475,7 @@ static const struct drm_plane_funcs icl_plane_funcs = {
> > .atomic_duplicate_state = intel_plane_duplicate_state,
> > .atomic_destroy_state = intel_plane_destroy_state,
> > .format_mod_supported = icl_plane_format_mod_supported,
> > + .atomic_get_property = intel_plane_get_property,
> > };
> >
> > static const struct drm_plane_funcs tgl_plane_funcs = {
> > @@ -2460,6 +2485,7 @@ static const struct drm_plane_funcs tgl_plane_funcs = {
> > .atomic_duplicate_state = intel_plane_duplicate_state,
> > .atomic_destroy_state = intel_plane_destroy_state,
> > .format_mod_supported = tgl_plane_format_mod_supported,
> > + .atomic_get_property = intel_plane_get_property,
> > };
> >
> > static void
> > @@ -2549,6 +2575,25 @@ static u8 skl_get_plane_caps(struct drm_i915_private *i915,
> > return caps;
> > }
> >
> > +static void intel_plane_attach_async_modifiers_property(struct intel_plane *intel_plane)
> > +{
> > + struct drm_plane *plane = &intel_plane->base;
> > + struct drm_device *dev = plane->dev;
> > + struct drm_property *prop;
> > +
> > + prop = intel_plane->async_modifiers_property;
> > + if (!prop) {
> > + prop = drm_property_create(dev, DRM_MODE_PROP_BLOB | DRM_MODE_PROP_ATOMIC,
> > + "Async Supported Modifiers", 0);
> > + if (!prop)
> > + return;
> > +
> > + intel_plane->async_modifiers_property = prop;
> > + }
> > +
> > + drm_object_attach_property(&plane->base, prop, 0);
> > +}
> > +
> > struct intel_plane *
> > skl_universal_plane_create(struct drm_i915_private *dev_priv,
> > enum pipe pipe, enum plane_id plane_id)
> > @@ -2694,10 +2739,12 @@ skl_universal_plane_create(struct drm_i915_private *dev_priv,
> > if (DISPLAY_VER(dev_priv) >= 12)
> > drm_plane_enable_fb_damage_clips(&plane->base);
> >
> > - if (DISPLAY_VER(dev_priv) >= 11)
> > + if (DISPLAY_VER(dev_priv) >= 11) {
> > drm_plane_create_scaling_filter_property(&plane->base,
> > BIT(DRM_SCALING_FILTER_DEFAULT) |
> > BIT(DRM_SCALING_FILTER_NEAREST_NEIGHBOR));
> > + intel_plane_attach_async_modifiers_property(plane);
> > + }
> >
> > intel_plane_helper_add(plane);
> >
> > --
> > 2.25.1
>
> --
> Ville Syrjälä
> Intel
--
Ville Syrjälä
Intel
next prev parent reply other threads:[~2024-10-16 13:54 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-16 5:36 [PATCH] drm/i915/display: plane property for async supported modifiers Arun R Murthy
2024-10-16 7:35 ` ✓ Fi.CI.BAT: success for " Patchwork
2024-10-16 7:36 ` ✗ Fi.CI.CHECKPATCH: warning " Patchwork
2024-10-16 9:31 ` ✗ Fi.CI.IGT: failure " Patchwork
2024-10-16 13:30 ` [PATCH] " Ville Syrjälä
2024-10-16 13:54 ` Ville Syrjälä [this message]
2024-10-16 14:01 ` Ville Syrjälä
2024-10-17 4:07 ` Murthy, Arun R
2024-10-25 4:28 ` Murthy, Arun R
2024-10-25 6:03 ` Ville Syrjälä
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=Zw_FgeZFATAk-aMf@intel.com \
--to=ville.syrjala@linux.intel.com \
--cc=arun.r.murthy@intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox