From: laurent.pinchart@ideasonboard.com (Laurent Pinchart)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 1/8] drm/blend: Add a generic alpha property
Date: Mon, 05 Mar 2018 12:08:12 +0200 [thread overview]
Message-ID: <16735594.PliY9Ubb24@avalon> (raw)
In-Reply-To: <20180305085841.GF22212@phenom.ffwll.local>
Hi Daniel,
On Monday, 5 March 2018 10:58:41 EET Daniel Vetter wrote:
> On Wed, Feb 21, 2018 at 02:07:57PM +0100, Maxime Ripard wrote:
> > On Mon, Feb 19, 2018 at 10:58:40PM +0100, Daniel Vetter wrote:
> >> On Mon, Feb 19, 2018 at 9:19 PM, Laurent Pinchart wrote:
> >>> On Friday, 16 February 2018 20:20:41 EET Ville Syrj?l? wrote:
> >>>> On Fri, Feb 16, 2018 at 06:39:29PM +0100, Maxime Ripard wrote:
> >>>>> Some drivers duplicate the logic to create a property to store a
> >>>>> per-plane alpha.
> >>>>>
> >>>>> This is especially useful if we ever want to support extra
> >>>>> protocols for Wayland like:
> >>>>> https://lists.freedesktop.org/archives/wayland-devel/2017-August/03
> >>>>> 4741.html
> >>>>>
> >>>>> Let's create a helper in order to move that to the core.
> >>>>>
> >>>>> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> >>>>> Reviewed-by: Boris Brezillon <boris.brezillon@bootlin.com>
> >>>>> Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
> >>>>> ---
> >>>>>
> >>>>> Documentation/gpu/kms-properties.csv | 2 +-
> >>>>> drivers/gpu/drm/drm_atomic.c | 4 ++++-
> >>>>> drivers/gpu/drm/drm_atomic_helper.c | 4 ++++-
> >>>>> drivers/gpu/drm/drm_blend.c | 32 +++++++++++++++++++++++-
> >>>>> include/drm/drm_blend.h | 1 +-
> >>>>> include/drm/drm_plane.h | 6 +++++-
> >>>>> 6 files changed, 48 insertions(+), 1 deletion(-)
> >>>>>
> >>>>> diff --git a/Documentation/gpu/kms-properties.csv
> >>>>> b/Documentation/gpu/kms-properties.csv index
> >>>>> 927b65e14219..25ad3503d663
> >>>>> 100644
> >>>>> --- a/Documentation/gpu/kms-properties.csv
> >>>>> +++ b/Documentation/gpu/kms-properties.csv
> >>>>> @@ -99,5 +99,5 @@ radeon,DVI-I,?coherent?,RANGE,"Min=0,
> >>>>> Max=1",Connector,TBD>
> >>>>>
> >>>>> ,,"""underscan vborder""",RANGE,"Min=0, Max=128",Connector,TBD
> >>>>> ,Audio,?audio?,ENUM,"{ ""off"", ""on"", ""auto"" }",Connector,TBD
> >>>>> ,FMT Dithering,?dither?,ENUM,"{ ""off"", ""on"" }",Connector,TBD
> >>>>>
> >>>>> -rcar-du,Generic,"""alpha""",RANGE,"Min=0, Max=255",Plane,TBD
> >>>>> +,,"""alpha""",RANGE,"Min=0, Max=Driver dependant",Plane,Opacity of
> >>>>> the plane from transparent (0) to fully opaque (MAX). If this
> >>>>> property is set to a value different than max, and that the pixel
> >>>>> will define an alpha component, the property will have precendance
> >>>>> and the pixel value will be ignored.
> >>
> >> Please don't document new properties in that csv file, it's an
> >> unreadable mess. Instead follow how we document standardized
> >> properties nowadays in full-blown sections. For plane blending we
> >> have:
> >>
> >> https://dri.freedesktop.org/docs/drm/gpu/drm-kms.html#plane-composition-> >> properties
> >
> > Ack
> >
> >>>>> diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
> >>>>> index 8185e3468a23..5a6f29524f12 100644
> >>>>> --- a/include/drm/drm_plane.h
> >>>>> +++ b/include/drm/drm_plane.h
> >>>>> @@ -42,6 +42,7 @@ struct drm_modeset_acquire_ctx;
> >>>>> * plane (in 16.16)
> >>>>> * @src_w: width of visible portion of plane (in 16.16)
> >>>>> * @src_h: height of visible portion of plane (in 16.16)
> >>>>> + * @alpha: opacity of the plane
> >>>>> * @rotation: rotation of the plane
> >>>>> * @zpos: priority of the given plane on crtc (optional)
> >>>>> * Note that multiple active planes on the same crtc can have an
> >>>>> identical
> >>>>> @@ -105,6 +106,9 @@ struct drm_plane_state {
> >>>>> uint32_t src_x, src_y;
> >>>>> uint32_t src_h, src_w;
> >>>>>
> >>>>> + /* Plane opacity */
> >>>>> + u8 alpha;
> >>>>
> >>>> We may want to make that u16. The general we expect 16bpc for most
> >>>> color related things, but since this is a range prop I suppose we
> >>>> should just expose the actual hardware range. But making it u16 might
> >>>> avoid some head scratching for the first person to have hardware with
> >>>> higher precision. Either that or we should make the prop creation
> >>>> fail if the driver asks for more bits than we have in the state.
> >>>
> >>> I'm tempted to go one step further and always make the alpha property
> >>> 16-bits wide for new users (we can't do so for existing users as it
> >>> could break userspace), and let drivers convert that internally to
> >>> the range they need. There could however be drawbacks I don't
> >>> foresee.
> >>
> >> I think scaling the range to match the hw is the most sensible (yes
> >> I'm flip-flopping around here). And once someone needs more than u8,
> >> we can extend the internal representation easily. The external
> >> representation in the property is an u64, that /should/ be enough for
> >> the next few years :-)
> >
> > Just to make sure we're on the same page, you want to keep the u8, and
> > if the hardware uses say an u16, the driver for that hardware will do
> > the upscaling?
>
> The idea is that we'd set the u16 limit in the property and so inform
> userspace that a different range applies. But that's probably going to be
> ignored.
>
> Could we do the property itself as u16 range, and (for now, only
> internally in drm in drm_plane_state) throw the lower u8 bits away? Or
> just let drivers do this.
I'm fine with this except for the drivers that currently implement the alpha
property with a different range. The rcar-du driver for instances has the
alpha range set to 0x00 to 0xff, so we can't change it without risk of
breaking userspace. I don't know whether there's any userspace using the
property, and whether that userspace has any hardcoded assumption.
> Sorry that I'm flip-flopping around on this, but we just have an ongoing
> discussion about a range/size mixup in the CTM uapi, I think assuming that
> all userspace will correctly scale is not realistic. So larger scale in
> the uapi (but maybe not internally) from the start seems like a good idea.
Can we make the range randomly chosen at every boot then ? :-) That would
force userspace to be generic.
--
Regards,
Laurent Pinchart
WARNING: multiple messages have this Message-ID (diff)
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Daniel Vetter <daniel@ffwll.ch>
Cc: Maxime Ripard <maxime.ripard@bootlin.com>,
dri-devel <dri-devel@lists.freedesktop.org>,
Boris Brezillon <boris.brezillon@bootlin.com>,
Chen-Yu Tsai <wens@csie.org>,
Daniel Vetter <daniel.vetter@intel.com>,
Linux ARM <linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v3 1/8] drm/blend: Add a generic alpha property
Date: Mon, 05 Mar 2018 12:08:12 +0200 [thread overview]
Message-ID: <16735594.PliY9Ubb24@avalon> (raw)
In-Reply-To: <20180305085841.GF22212@phenom.ffwll.local>
Hi Daniel,
On Monday, 5 March 2018 10:58:41 EET Daniel Vetter wrote:
> On Wed, Feb 21, 2018 at 02:07:57PM +0100, Maxime Ripard wrote:
> > On Mon, Feb 19, 2018 at 10:58:40PM +0100, Daniel Vetter wrote:
> >> On Mon, Feb 19, 2018 at 9:19 PM, Laurent Pinchart wrote:
> >>> On Friday, 16 February 2018 20:20:41 EET Ville Syrjälä wrote:
> >>>> On Fri, Feb 16, 2018 at 06:39:29PM +0100, Maxime Ripard wrote:
> >>>>> Some drivers duplicate the logic to create a property to store a
> >>>>> per-plane alpha.
> >>>>>
> >>>>> This is especially useful if we ever want to support extra
> >>>>> protocols for Wayland like:
> >>>>> https://lists.freedesktop.org/archives/wayland-devel/2017-August/03
> >>>>> 4741.html
> >>>>>
> >>>>> Let's create a helper in order to move that to the core.
> >>>>>
> >>>>> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> >>>>> Reviewed-by: Boris Brezillon <boris.brezillon@bootlin.com>
> >>>>> Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
> >>>>> ---
> >>>>>
> >>>>> Documentation/gpu/kms-properties.csv | 2 +-
> >>>>> drivers/gpu/drm/drm_atomic.c | 4 ++++-
> >>>>> drivers/gpu/drm/drm_atomic_helper.c | 4 ++++-
> >>>>> drivers/gpu/drm/drm_blend.c | 32 +++++++++++++++++++++++-
> >>>>> include/drm/drm_blend.h | 1 +-
> >>>>> include/drm/drm_plane.h | 6 +++++-
> >>>>> 6 files changed, 48 insertions(+), 1 deletion(-)
> >>>>>
> >>>>> diff --git a/Documentation/gpu/kms-properties.csv
> >>>>> b/Documentation/gpu/kms-properties.csv index
> >>>>> 927b65e14219..25ad3503d663
> >>>>> 100644
> >>>>> --- a/Documentation/gpu/kms-properties.csv
> >>>>> +++ b/Documentation/gpu/kms-properties.csv
> >>>>> @@ -99,5 +99,5 @@ radeon,DVI-I,“coherent”,RANGE,"Min=0,
> >>>>> Max=1",Connector,TBD>
> >>>>>
> >>>>> ,,"""underscan vborder""",RANGE,"Min=0, Max=128",Connector,TBD
> >>>>> ,Audio,“audio”,ENUM,"{ ""off"", ""on"", ""auto"" }",Connector,TBD
> >>>>> ,FMT Dithering,“dither”,ENUM,"{ ""off"", ""on"" }",Connector,TBD
> >>>>>
> >>>>> -rcar-du,Generic,"""alpha""",RANGE,"Min=0, Max=255",Plane,TBD
> >>>>> +,,"""alpha""",RANGE,"Min=0, Max=Driver dependant",Plane,Opacity of
> >>>>> the plane from transparent (0) to fully opaque (MAX). If this
> >>>>> property is set to a value different than max, and that the pixel
> >>>>> will define an alpha component, the property will have precendance
> >>>>> and the pixel value will be ignored.
> >>
> >> Please don't document new properties in that csv file, it's an
> >> unreadable mess. Instead follow how we document standardized
> >> properties nowadays in full-blown sections. For plane blending we
> >> have:
> >>
> >> https://dri.freedesktop.org/docs/drm/gpu/drm-kms.html#plane-composition-> >> properties
> >
> > Ack
> >
> >>>>> diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
> >>>>> index 8185e3468a23..5a6f29524f12 100644
> >>>>> --- a/include/drm/drm_plane.h
> >>>>> +++ b/include/drm/drm_plane.h
> >>>>> @@ -42,6 +42,7 @@ struct drm_modeset_acquire_ctx;
> >>>>> * plane (in 16.16)
> >>>>> * @src_w: width of visible portion of plane (in 16.16)
> >>>>> * @src_h: height of visible portion of plane (in 16.16)
> >>>>> + * @alpha: opacity of the plane
> >>>>> * @rotation: rotation of the plane
> >>>>> * @zpos: priority of the given plane on crtc (optional)
> >>>>> * Note that multiple active planes on the same crtc can have an
> >>>>> identical
> >>>>> @@ -105,6 +106,9 @@ struct drm_plane_state {
> >>>>> uint32_t src_x, src_y;
> >>>>> uint32_t src_h, src_w;
> >>>>>
> >>>>> + /* Plane opacity */
> >>>>> + u8 alpha;
> >>>>
> >>>> We may want to make that u16. The general we expect 16bpc for most
> >>>> color related things, but since this is a range prop I suppose we
> >>>> should just expose the actual hardware range. But making it u16 might
> >>>> avoid some head scratching for the first person to have hardware with
> >>>> higher precision. Either that or we should make the prop creation
> >>>> fail if the driver asks for more bits than we have in the state.
> >>>
> >>> I'm tempted to go one step further and always make the alpha property
> >>> 16-bits wide for new users (we can't do so for existing users as it
> >>> could break userspace), and let drivers convert that internally to
> >>> the range they need. There could however be drawbacks I don't
> >>> foresee.
> >>
> >> I think scaling the range to match the hw is the most sensible (yes
> >> I'm flip-flopping around here). And once someone needs more than u8,
> >> we can extend the internal representation easily. The external
> >> representation in the property is an u64, that /should/ be enough for
> >> the next few years :-)
> >
> > Just to make sure we're on the same page, you want to keep the u8, and
> > if the hardware uses say an u16, the driver for that hardware will do
> > the upscaling?
>
> The idea is that we'd set the u16 limit in the property and so inform
> userspace that a different range applies. But that's probably going to be
> ignored.
>
> Could we do the property itself as u16 range, and (for now, only
> internally in drm in drm_plane_state) throw the lower u8 bits away? Or
> just let drivers do this.
I'm fine with this except for the drivers that currently implement the alpha
property with a different range. The rcar-du driver for instances has the
alpha range set to 0x00 to 0xff, so we can't change it without risk of
breaking userspace. I don't know whether there's any userspace using the
property, and whether that userspace has any hardcoded assumption.
> Sorry that I'm flip-flopping around on this, but we just have an ongoing
> discussion about a range/size mixup in the CTM uapi, I think assuming that
> all userspace will correctly scale is not realistic. So larger scale in
> the uapi (but maybe not internally) from the start seems like a good idea.
Can we make the range randomly chosen at every boot then ? :-) That would
force userspace to be generic.
--
Regards,
Laurent Pinchart
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2018-03-05 10:08 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-16 17:39 [PATCH v3 0/8] drm/sun4i: Support more planes, zpos and plane-wide alpha Maxime Ripard
2018-02-16 17:39 ` Maxime Ripard
2018-02-16 17:39 ` [PATCH v3 1/8] drm/blend: Add a generic alpha property Maxime Ripard
2018-02-16 17:39 ` Maxime Ripard
2018-02-16 18:20 ` Ville Syrjälä
2018-02-16 18:20 ` Ville Syrjälä
2018-02-19 20:19 ` Laurent Pinchart
2018-02-19 20:19 ` Laurent Pinchart
2018-02-19 21:58 ` Daniel Vetter
2018-02-19 21:58 ` Daniel Vetter
2018-02-21 13:07 ` Maxime Ripard
2018-02-21 13:07 ` Maxime Ripard
2018-03-05 8:58 ` Daniel Vetter
2018-03-05 8:58 ` Daniel Vetter
2018-03-05 10:08 ` Laurent Pinchart [this message]
2018-03-05 10:08 ` Laurent Pinchart
2018-03-06 7:10 ` Daniel Vetter
2018-03-06 7:10 ` Daniel Vetter
2018-02-21 20:39 ` Laurent Pinchart
2018-02-21 20:39 ` Laurent Pinchart
2018-03-05 9:04 ` Daniel Vetter
2018-03-05 9:04 ` Daniel Vetter
2018-02-20 15:10 ` Stefan Schake
2018-02-20 15:10 ` Stefan Schake
2018-02-21 13:04 ` Maxime Ripard
2018-02-21 13:04 ` Maxime Ripard
2018-03-07 2:28 ` Stefan Schake
2018-03-07 2:28 ` Stefan Schake
2018-02-19 20:13 ` Laurent Pinchart
2018-02-19 20:13 ` Laurent Pinchart
2018-02-16 17:39 ` [PATCH v3 2/8] drm/atmel-hclcdc: Convert to the new " Maxime Ripard
2018-02-16 17:39 ` Maxime Ripard
2018-02-16 17:39 ` [PATCH v3 3/8] drm/rcar-du: " Maxime Ripard
2018-02-16 17:39 ` Maxime Ripard
2018-02-16 17:39 ` [PATCH v3 4/8] drm/sun4i: backend: Assign the pipes automatically Maxime Ripard
2018-02-16 17:39 ` Maxime Ripard
2018-02-22 14:13 ` Chen-Yu Tsai
2018-02-22 14:13 ` Chen-Yu Tsai
2018-02-16 17:39 ` [PATCH v3 5/8] drm/sun4i: Remove the plane description structure Maxime Ripard
2018-02-16 17:39 ` Maxime Ripard
2018-02-22 14:14 ` Chen-Yu Tsai
2018-02-22 14:14 ` Chen-Yu Tsai
2018-02-16 17:39 ` [PATCH v3 6/8] drm/sun4i: backend: Make zpos configurable Maxime Ripard
2018-02-16 17:39 ` Maxime Ripard
2018-02-16 17:39 ` [PATCH v3 7/8] drm/sun4i: Add support for plane alpha Maxime Ripard
2018-02-16 17:39 ` Maxime Ripard
2018-02-22 14:17 ` Chen-Yu Tsai
2018-02-22 14:17 ` Chen-Yu Tsai
2018-02-22 14:34 ` Maxime Ripard
2018-02-22 14:34 ` Maxime Ripard
2018-02-22 14:37 ` Chen-Yu Tsai
2018-02-22 14:37 ` Chen-Yu Tsai
2018-02-16 17:39 ` [PATCH v3 8/8] drm/sun4i: backend: Remove ARGB spoofing Maxime Ripard
2018-02-16 17:39 ` Maxime Ripard
2018-02-22 14:15 ` Chen-Yu Tsai
2018-02-22 14:15 ` Chen-Yu Tsai
2018-02-22 15:33 ` Maxime Ripard
2018-02-22 15:33 ` Maxime Ripard
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=16735594.PliY9Ubb24@avalon \
--to=laurent.pinchart@ideasonboard.com \
--cc=linux-arm-kernel@lists.infradead.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.