From: "Lankhorst, Maarten" <maarten.lankhorst@intel.com>
To: "ville.syrjala@linux.intel.com" <ville.syrjala@linux.intel.com>,
"brian.starkey@arm.com" <brian.starkey@arm.com>
Cc: "dcastagna@chromium.org" <dcastagna@chromium.org>,
"intel-gfx@lists.freedesktop.org"
<intel-gfx@lists.freedesktop.org>,
"dri-devel@lists.freedesktop.org"
<dri-devel@lists.freedesktop.org>,
"Shankar, Uma" <uma.shankar@intel.com>,
"seanpaul@chromium.org" <seanpaul@chromium.org>,
"Syrjala, Ville" <ville.syrjala@intel.com>
Subject: Re: [Intel-gfx] [RFC v4 3/8] drm: Add Plane CTM property
Date: Wed, 22 Aug 2018 12:51:47 +0000 [thread overview]
Message-ID: <1534942305.7782.3.camel@intel.com> (raw)
In-Reply-To: <20180822111141.GA29527@e107564-lin.cambridge.arm.com>
[-- Attachment #1.1: Type: text/plain, Size: 8170 bytes --]
ons 2018-08-22 klockan 12:11 +0100 skrev Brian Starkey:
> Hi,
>
> On Wed, Aug 22, 2018 at 12:53:58PM +0300, Ville Syrjälä wrote:
> > On Wed, Aug 22, 2018 at 08:40:19AM +0000, Lankhorst, Maarten wrote:
> > > fre 2018-08-17 klockan 19:48 +0530 skrev Uma Shankar:
> > > > Add a blob property for plane CSC usage.
> > > >
> > > > v2: Rebase
> > > >
> > > > v3: Fixed Sean, Paul's review comments. Moved the property from
> > > > mode_config to drm_plane. Created a helper function to
> > > > instantiate
> > > > these properties and removed from
> > > > drm_mode_create_standard_properties
> > > > Added property documentation as suggested by Daniel, Vetter.
> > > >
> > > > v4: Rebase
> > > >
> > > > Signed-off-by: Uma Shankar <uma.shankar@intel.com>
> > > > ---
> > > > Documentation/gpu/drm-kms.rst | 3 +++
> > > > drivers/gpu/drm/drm_atomic.c | 10 ++++++++++
> > > > drivers/gpu/drm/drm_atomic_helper.c | 4 ++++
> > > > drivers/gpu/drm/drm_plane.c | 12 ++++++++++++
> > > > include/drm/drm_plane.h | 15 +++++++++++++++
> > > > 5 files changed, 44 insertions(+)
> > > >
> > > > diff --git a/Documentation/gpu/drm-kms.rst
> > > > b/Documentation/gpu/drm-
> > > > kms.rst
> > > > index 8b10b12..16d6d8d 100644
> > > > --- a/Documentation/gpu/drm-kms.rst
> > > > +++ b/Documentation/gpu/drm-kms.rst
> > > > @@ -560,6 +560,9 @@ Plane Color Management Properties
> > > > .. kernel-doc:: drivers/gpu/drm/drm_plane.c
> > > > :doc: degamma_lut_size_property
> > > >
> > > > +.. kernel-doc:: drivers/gpu/drm/drm_plane.c
> > > > + :doc: ctm_property
> > > > +
> > > > Tile Group Property
> > > > -------------------
> > > >
> > > > diff --git a/drivers/gpu/drm/drm_atomic.c
> > > > b/drivers/gpu/drm/drm_atomic.c
> > > > index f8cad9b..ddda935 100644
> > > > --- a/drivers/gpu/drm/drm_atomic.c
> > > > +++ b/drivers/gpu/drm/drm_atomic.c
> > > > @@ -917,6 +917,14 @@ static int
> > > > drm_atomic_plane_set_property(struct
> > > > drm_plane *plane,
> > > > &replaced);
> > > > state->color_mgmt_changed |= replaced;
> > > > return ret;
> > > > + } else if (property == plane->ctm_property) {
> > > > + ret =
> > > > drm_atomic_replace_property_blob_from_id(dev,
> > > > + &state->ctm,
> > > > + val,
> > > > + sizeof(struct
> > > > drm_color_ctm), -1,
> > > > + &replaced);
> > > > + state->color_mgmt_changed |= replaced;
> > > > + return ret;
> > > > } else if (plane->funcs->atomic_set_property) {
> > > > return plane->funcs-
> > > > >atomic_set_property(plane,
> > > > state,
> > > > property, val);
> > > > @@ -988,6 +996,8 @@ static int
> > > > drm_atomic_plane_set_property(struct
> > > > drm_plane *plane,
> > > > } else if (property == plane->degamma_lut_property) {
> > > > *val = (state->degamma_lut) ?
> > > > state->degamma_lut->base.id : 0;
> > > > + } else if (property == plane->ctm_property) {
> > > > + *val = (state->ctm) ? state->ctm->base.id : 0;
> > > > } else if (plane->funcs->atomic_get_property) {
> > > > return plane->funcs-
> > > > >atomic_get_property(plane,
> > > > state, property, val);
> > > > } else {
> > > > diff --git a/drivers/gpu/drm/drm_atomic_helper.c
> > > > b/drivers/gpu/drm/drm_atomic_helper.c
> > > > index 67c5b51..866181f 100644
> > > > --- a/drivers/gpu/drm/drm_atomic_helper.c
> > > > +++ b/drivers/gpu/drm/drm_atomic_helper.c
> > > > @@ -3616,6 +3616,9 @@ void
> > > > __drm_atomic_helper_plane_duplicate_state(struct drm_plane
> > > > *plane,
> > > >
> > > > if (state->degamma_lut)
> > > > drm_property_blob_get(state->degamma_lut);
> > > > + if (state->ctm)
> > > > + drm_property_blob_get(state->ctm);
> > > > +
> > > > state->color_mgmt_changed = false;
> > > > }
> > > > EXPORT_SYMBOL(__drm_atomic_helper_plane_duplicate_state);
> > > > @@ -3663,6 +3666,7 @@ void
> > > > __drm_atomic_helper_plane_destroy_state(struct drm_plane_state
> > > > *state)
> > > > drm_crtc_commit_put(state->commit);
> > > >
> > > > drm_property_blob_put(state->degamma_lut);
> > > > + drm_property_blob_put(state->ctm);
> > > > }
> > > > EXPORT_SYMBOL(__drm_atomic_helper_plane_destroy_state);
> > > >
> > > > diff --git a/drivers/gpu/drm/drm_plane.c
> > > > b/drivers/gpu/drm/drm_plane.c
> > > > index 03e0560..97520b1 100644
> > > > --- a/drivers/gpu/drm/drm_plane.c
> > > > +++ b/drivers/gpu/drm/drm_plane.c
> > > > @@ -489,6 +489,11 @@ int drm_mode_plane_set_obj_prop(struct
> > > > drm_plane
> > > > *plane,
> > > > *
> > > > * degamma_lut_size_property:
> > > > * Range Property to indicate size of the plane degamma
> > > > LUT.
> > > > + *
> > > > + * ctm_property:
> > > > + * Blob property which allows a userspace to provide
> > > > CTM
> > > > coefficients
> > > > + * to do color space conversion or any other
> > > > enhancement by
> > > > doing a
> > > > + * matrix multiplication using the h/w CTM processing
> > > > engine
> > > > */
> > > > int drm_plane_color_create_prop(struct drm_device *dev,
> > > > struct drm_plane *plane)
> > > > @@ -509,6 +514,13 @@ int drm_plane_color_create_prop(struct
> > > > drm_device *dev,
> > > > return -ENOMEM;
> > > > plane->degamma_lut_size_property = prop;
> > > >
> > > > + prop = drm_property_create(dev,
> > > > + DRM_MODE_PROP_BLOB,
> > > > + "PLANE_CTM", 0);
> > > > + if (!prop)
> > > > + return -ENOMEM;
> > > > + plane->ctm_property = prop;
> > > > +
> > > > return 0;
> > > > }
> > > > EXPORT_SYMBOL(drm_plane_color_create_prop);
> > > > diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
> > > > index 28357ac..5143277 100644
> > > > --- a/include/drm/drm_plane.h
> > > > +++ b/include/drm/drm_plane.h
> > > > @@ -183,6 +183,14 @@ struct drm_plane_state {
> > > > struct drm_property_blob *degamma_lut;
> > > >
> > > > /**
> > > > + * @ctm:
> > > > + *
> > > > + * Color transformation matrix. See
> > > > drm_plane_enable_color_mgmt(). The
> > > > + * blob (if not NULL) is a &struct drm_color_ctm.
> > > > + */
> > > > + struct drm_property_blob *ctm;
> > > > +
> > > > + /**
> > > > * @commit: Tracks the pending commit to prevent use-
> > > > after-
> > > > free conditions,
> > > > * and for async plane updates.
> > > > *
> > > > @@ -698,6 +706,13 @@ struct drm_plane {
> > > > * size of the degamma LUT as supported by the driver
> > > > (read-
> > > > only).
> > > > */
> > > > struct drm_property *degamma_lut_size_property;
> > > > +
> > > > + /**
> > > > + * @plane_ctm_property: Optional Plane property to set
> > > > the
> > > > + * matrix used to convert colors after the lookup in
> > > > the
> > > > + * degamma LUT.
> > > > + */
> > > > + struct drm_property *ctm_property;
> > > >
> > >
> > > I'm assuming degamma is done before converting with CTM.
> > >
> > > But how does this interact with YUV formats? I'm not sure this is
> > > explicitly defined. I'm assuming R->Cr G -> Y, B = Cb for degamma
> > > tables.
> >
> > The pipeline is (or at least should be IMO):
> > ycbcr->rgb -> degamma -> ctm -> gamma
> >
>
> That's what I'm expecting too.
>
> > We should document the full pipeline (including the crtc portions)
> > in
> > some docs.
>
> I fully agree with Ville here, we've been around this loop a few
> times, so the full pipeline and expectations need to be captured
> in docs (IMO before the properties can be decided).
>
> It's slightly unfortunate that the merged ycbcr->rgb properties only
> describe the format of the incoming buffer, without any specification
> of what the driver is meant to do with that information (what
> conversion is meant to be performed?). Without that, this new CTM
> property is somewhat useless, because generic userspace can't tell
> what the input data to the matrix is in YUV cases - so we need to
> decide and document that too (or change/enhance the API).
As long as it's documented I'm fine with it. :-)
Also curious on how it interacts with CRTC pipeline.
~Maarten
[-- Attachment #1.2: smime.p7s --]
[-- Type: application/x-pkcs7-signature, Size: 3282 bytes --]
[-- Attachment #2: Type: text/plain, Size: 160 bytes --]
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2018-08-22 12:51 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-17 14:18 [RFC v4 0/8] Add Plane Color Properties Uma Shankar
2018-08-17 14:12 ` ✗ Fi.CI.CHECKPATCH: warning for Add Plane Color Properties (rev4) Patchwork
2018-08-17 14:18 ` ✗ Fi.CI.SPARSE: " Patchwork
2018-08-17 14:18 ` [RFC v4 1/8] drm: Add Enhanced Gamma LUT precision structure Uma Shankar
2018-08-21 9:30 ` Alexandru-Cosmin Gheorghe
2018-08-23 5:20 ` Shankar, Uma
2018-08-17 14:18 ` [RFC v4 2/8] drm: Add Plane Degamma properties Uma Shankar
2018-08-21 9:38 ` Alexandru-Cosmin Gheorghe
2018-08-17 14:18 ` [RFC v4 3/8] drm: Add Plane CTM property Uma Shankar
2018-08-21 9:40 ` Alexandru-Cosmin Gheorghe
2018-08-22 8:40 ` Lankhorst, Maarten
2018-08-22 9:53 ` [Intel-gfx] " Ville Syrjälä
2018-08-22 11:11 ` Brian Starkey
2018-08-22 12:51 ` Lankhorst, Maarten [this message]
2018-08-22 13:06 ` [Intel-gfx] " Ville Syrjälä
2018-08-23 5:18 ` Shankar, Uma
2018-08-17 14:18 ` [RFC v4 4/8] drm: Add Plane Gamma properties Uma Shankar
2018-08-21 9:42 ` Alexandru-Cosmin Gheorghe
2018-08-17 14:18 ` [RFC v4 5/8] drm: Define helper function for plane color enabling Uma Shankar
2018-08-21 9:46 ` Alexandru-Cosmin Gheorghe
2018-08-17 14:18 ` [RFC v4 6/8] drm/i915: Enable plane color features Uma Shankar
2018-08-17 14:18 ` [RFC v4 7/8] drm/i915: Implement Plane Gamma for Bdw and Gen9 platforms Uma Shankar
2018-08-21 9:56 ` Alexandru-Cosmin Gheorghe
2018-08-23 5:22 ` Shankar, Uma
2018-08-17 14:18 ` [RFC v4 8/8] drm/i915: Load plane color luts from atomic flip Uma Shankar
2018-08-17 14:30 ` ✓ Fi.CI.BAT: success for Add Plane Color Properties (rev4) Patchwork
2018-08-17 16:36 ` ✓ Fi.CI.IGT: " Patchwork
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=1534942305.7782.3.camel@intel.com \
--to=maarten.lankhorst@intel.com \
--cc=brian.starkey@arm.com \
--cc=dcastagna@chromium.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=seanpaul@chromium.org \
--cc=uma.shankar@intel.com \
--cc=ville.syrjala@intel.com \
--cc=ville.syrjala@linux.intel.com \
/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.