From mboxrd@z Thu Jan 1 00:00:00 1970 From: laurent.pinchart@ideasonboard.com (Laurent Pinchart) Date: Mon, 19 Feb 2018 22:19:42 +0200 Subject: [PATCH v3 1/8] drm/blend: Add a generic alpha property In-Reply-To: <20180216182041.GU5453@intel.com> References: <9403570d73b6eb63ab87488d5e8eb767ba6f1ac7.1518802627.git-series.maxime.ripard@bootlin.com> <20180216182041.GU5453@intel.com> Message-ID: <1841868.3gpkeNesVL@avalon> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi Ville, 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/034741.ht > > ml > > > > Let's create a helper in order to move that to the core. > > > > Cc: Laurent Pinchart > > Reviewed-by: Boris Brezillon > > Signed-off-by: Maxime Ripard > > --- > > > > 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. > > Those semantics don't seem particularly good to me. I think we would want > the per-pixel alpha and global alpha both to be effecive at the same time. > You can always decide to ignore the per-pixel alpha by using a pixel format > without alpha. That makes sense to me. However, it also brings a new question: how should a driver that supports either global alpha or pixel alpha but not both signal that to userspace, and how should it reacts when userspace selects a format with an alpha channel and set a global alpha value other than fully opaque ? To make things more complex, note that some drivers support combining global alpha and pixel alpha only for a subset of the formats with an alpha channel (for instance for ARGB 1555 formats, but not for ARGB 8888 formats). > Also, where's the userspace that wants this feature? > > > > > 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. > Oh, and you should plug this into the state dumper as well. > > > + > > > > /* Plane rotation */ > > unsigned int rotation; > > @@ -481,6 +485,7 @@ enum drm_plane_type { > > * @funcs: helper functions > > * @properties: property tracking for this plane > > * @type: type of plane (overlay, primary, cursor) > > + * @alpha_property: alpha property for this plane > > * @zpos_property: zpos property for this plane > > * @rotation_property: rotation property for this plane > > * @helper_private: mid-layer private data > > @@ -556,6 +561,7 @@ struct drm_plane { > > */ > > > > struct drm_plane_state *state; > > + struct drm_property *alpha_property; > > struct drm_property *zpos_property; > > struct drm_property *rotation_property; > > }; -- Regards, Laurent Pinchart From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH v3 1/8] drm/blend: Add a generic alpha property Date: Mon, 19 Feb 2018 22:19:42 +0200 Message-ID: <1841868.3gpkeNesVL@avalon> References: <9403570d73b6eb63ab87488d5e8eb767ba6f1ac7.1518802627.git-series.maxime.ripard@bootlin.com> <20180216182041.GU5453@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180216182041.GU5453@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: dri-devel@lists.freedesktop.org Cc: Maxime Ripard , Boris Brezillon , Chen-Yu Tsai , Ville =?ISO-8859-1?Q?Syrj=E4l=E4?= , Daniel Vetter , linux-arm-kernel@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org SGkgVmlsbGUsCgpPbiBGcmlkYXksIDE2IEZlYnJ1YXJ5IDIwMTggMjA6MjA6NDEgRUVUIFZpbGxl IFN5cmrDpGzDpCB3cm90ZToKPiBPbiBGcmksIEZlYiAxNiwgMjAxOCBhdCAwNjozOToyOVBNICsw MTAwLCBNYXhpbWUgUmlwYXJkIHdyb3RlOgo+ID4gU29tZSBkcml2ZXJzIGR1cGxpY2F0ZSB0aGUg bG9naWMgdG8gY3JlYXRlIGEgcHJvcGVydHkgdG8gc3RvcmUgYSBwZXItcGxhbmUKPiA+IGFscGhh Lgo+ID4gCj4gPiBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIGlmIHdlIGV2ZXIgd2FudCB0byBz dXBwb3J0IGV4dHJhIHByb3RvY29scyBmb3IKPiA+IFdheWxhbmQgbGlrZToKPiA+IGh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL2FyY2hpdmVzL3dheWxhbmQtZGV2ZWwvMjAxNy1BdWd1c3Qv MDM0NzQxLmh0Cj4gPiBtbAo+ID4gCj4gPiBMZXQncyBjcmVhdGUgYSBoZWxwZXIgaW4gb3JkZXIg dG8gbW92ZSB0aGF0IHRvIHRoZSBjb3JlLgo+ID4gCj4gPiBDYzogTGF1cmVudCBQaW5jaGFydCA8 bGF1cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPgo+ID4gUmV2aWV3ZWQtYnk6IEJvcmlz IEJyZXppbGxvbiA8Ym9yaXMuYnJlemlsbG9uQGJvb3RsaW4uY29tPgo+ID4gU2lnbmVkLW9mZi1i eTogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBib290bGluLmNvbT4KPiA+IC0tLQo+ID4g Cj4gPiAgRG9jdW1lbnRhdGlvbi9ncHUva21zLXByb3BlcnRpZXMuY3N2IHwgIDIgKy0KPiA+ICBk cml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jICAgICAgICAgfCAgNCArKysrLQo+ID4gIGRyaXZl cnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jICB8ICA0ICsrKystCj4gPiAgZHJpdmVycy9n cHUvZHJtL2RybV9ibGVuZC5jICAgICAgICAgIHwgMzIgKysrKysrKysrKysrKysrKysrKysrKysr KysrKystCj4gPiAgaW5jbHVkZS9kcm0vZHJtX2JsZW5kLmggICAgICAgICAgICAgIHwgIDEgKy0K PiA+ICBpbmNsdWRlL2RybS9kcm1fcGxhbmUuaCAgICAgICAgICAgICAgfCAgNiArKysrKy0KPiA+ ICA2IGZpbGVzIGNoYW5nZWQsIDQ4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiA+IAo+ ID4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2ttcy1wcm9wZXJ0aWVzLmNzdgo+ID4g Yi9Eb2N1bWVudGF0aW9uL2dwdS9rbXMtcHJvcGVydGllcy5jc3YgaW5kZXggOTI3YjY1ZTE0MjE5 Li4yNWFkMzUwM2Q2NjMKPiA+IDEwMDY0NAo+ID4gLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUva21z LXByb3BlcnRpZXMuY3N2Cj4gPiArKysgYi9Eb2N1bWVudGF0aW9uL2dwdS9rbXMtcHJvcGVydGll cy5jc3YKPiA+IEBAIC05OSw1ICs5OSw1IEBAIHJhZGVvbixEVkktSSzigJxjb2hlcmVudOKAnSxS QU5HRSwiTWluPTAsCj4gPiBNYXg9MSIsQ29ubmVjdG9yLFRCRD4gCj4gPiAgLCwiIiJ1bmRlcnNj YW4gdmJvcmRlciIiIixSQU5HRSwiTWluPTAsIE1heD0xMjgiLENvbm5lY3RvcixUQkQKPiA+ICAs QXVkaW8s4oCcYXVkaW/igJ0sRU5VTSwieyAiIm9mZiIiLCAiIm9uIiIsICIiYXV0byIiIH0iLENv bm5lY3RvcixUQkQKPiA+ICAsRk1UIERpdGhlcmluZyzigJxkaXRoZXLigJ0sRU5VTSwieyAiIm9m ZiIiLCAiIm9uIiIgfSIsQ29ubmVjdG9yLFRCRAo+ID4gCj4gPiAtcmNhci1kdSxHZW5lcmljLCIi ImFscGhhIiIiLFJBTkdFLCJNaW49MCwgTWF4PTI1NSIsUGxhbmUsVEJECj4gPiArLCwiIiJhbHBo YSIiIixSQU5HRSwiTWluPTAsIE1heD1Ecml2ZXIgZGVwZW5kYW50IixQbGFuZSxPcGFjaXR5IG9m IHRoZQo+ID4gcGxhbmUgZnJvbSB0cmFuc3BhcmVudCAoMCkgdG8gZnVsbHkgb3BhcXVlIChNQVgp LiBJZiB0aGlzIHByb3BlcnR5IGlzIHNldAo+ID4gdG8gYSB2YWx1ZSBkaWZmZXJlbnQgdGhhbiBt YXgsIGFuZCB0aGF0IHRoZSBwaXhlbCB3aWxsIGRlZmluZSBhbiBhbHBoYQo+ID4gY29tcG9uZW50 LCB0aGUgcHJvcGVydHkgd2lsbCBoYXZlIHByZWNlbmRhbmNlIGFuZCB0aGUgcGl4ZWwgdmFsdWUg d2lsbCBiZQo+ID4gaWdub3JlZC4KPiAKPiBUaG9zZSBzZW1hbnRpY3MgZG9uJ3Qgc2VlbSBwYXJ0 aWN1bGFybHkgZ29vZCB0byBtZS4gSSB0aGluayB3ZSB3b3VsZCB3YW50Cj4gdGhlIHBlci1waXhl bCBhbHBoYSBhbmQgZ2xvYmFsIGFscGhhIGJvdGggdG8gYmUgZWZmZWNpdmUgYXQgdGhlIHNhbWUg dGltZS4KPiBZb3UgY2FuIGFsd2F5cyBkZWNpZGUgdG8gaWdub3JlIHRoZSBwZXItcGl4ZWwgYWxw aGEgYnkgdXNpbmcgYSBwaXhlbCBmb3JtYXQKPiB3aXRob3V0IGFscGhhLgoKVGhhdCBtYWtlcyBz ZW5zZSB0byBtZS4gSG93ZXZlciwgaXQgYWxzbyBicmluZ3MgYSBuZXcgcXVlc3Rpb246IGhvdyBz aG91bGQgYSAKZHJpdmVyIHRoYXQgc3VwcG9ydHMgZWl0aGVyIGdsb2JhbCBhbHBoYSBvciBwaXhl bCBhbHBoYSBidXQgbm90IGJvdGggc2lnbmFsIAp0aGF0IHRvIHVzZXJzcGFjZSwgYW5kIGhvdyBz aG91bGQgaXQgcmVhY3RzIHdoZW4gdXNlcnNwYWNlIHNlbGVjdHMgYSBmb3JtYXQgCndpdGggYW4g YWxwaGEgY2hhbm5lbCBhbmQgc2V0IGEgZ2xvYmFsIGFscGhhIHZhbHVlIG90aGVyIHRoYW4gZnVs bHkgb3BhcXVlID8gClRvIG1ha2UgdGhpbmdzIG1vcmUgY29tcGxleCwgbm90ZSB0aGF0IHNvbWUg ZHJpdmVycyBzdXBwb3J0IGNvbWJpbmluZyBnbG9iYWwgCmFscGhhIGFuZCBwaXhlbCBhbHBoYSBv bmx5IGZvciBhIHN1YnNldCBvZiB0aGUgZm9ybWF0cyB3aXRoIGFuIGFscGhhIGNoYW5uZWwgCihm b3IgaW5zdGFuY2UgZm9yIEFSR0IgMTU1NSBmb3JtYXRzLCBidXQgbm90IGZvciBBUkdCIDg4ODgg Zm9ybWF0cykuCgo+IEFsc28sIHdoZXJlJ3MgdGhlIHVzZXJzcGFjZSB0aGF0IHdhbnRzIHRoaXMg ZmVhdHVyZT8KPiAKPiA8c25pcD4KPiAKPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1f cGxhbmUuaCBiL2luY2x1ZGUvZHJtL2RybV9wbGFuZS5oCj4gPiBpbmRleCA4MTg1ZTM0NjhhMjMu LjVhNmYyOTUyNGYxMiAxMDA2NDQKPiA+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9wbGFuZS5oCj4g PiArKysgYi9pbmNsdWRlL2RybS9kcm1fcGxhbmUuaAo+ID4gQEAgLTQyLDYgKzQyLDcgQEAgc3Ry dWN0IGRybV9tb2Rlc2V0X2FjcXVpcmVfY3R4Owo+ID4gICAqCXBsYW5lIChpbiAxNi4xNikKPiA+ ICAgKiBAc3JjX3c6IHdpZHRoIG9mIHZpc2libGUgcG9ydGlvbiBvZiBwbGFuZSAoaW4gMTYuMTYp Cj4gPiAgICogQHNyY19oOiBoZWlnaHQgb2YgdmlzaWJsZSBwb3J0aW9uIG9mIHBsYW5lIChpbiAx Ni4xNikKPiA+ICsgKiBAYWxwaGE6IG9wYWNpdHkgb2YgdGhlIHBsYW5lCj4gPiAgICogQHJvdGF0 aW9uOiByb3RhdGlvbiBvZiB0aGUgcGxhbmUKPiA+ICAgKiBAenBvczogcHJpb3JpdHkgb2YgdGhl IGdpdmVuIHBsYW5lIG9uIGNydGMgKG9wdGlvbmFsKQo+ID4gICAqCU5vdGUgdGhhdCBtdWx0aXBs ZSBhY3RpdmUgcGxhbmVzIG9uIHRoZSBzYW1lIGNydGMgY2FuIGhhdmUgYW4KPiA+ICAgaWRlbnRp Y2FsCj4gPiBAQCAtMTA1LDYgKzEwNiw5IEBAIHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgewo+ID4g IAl1aW50MzJfdCBzcmNfeCwgc3JjX3k7Cj4gPiAgCXVpbnQzMl90IHNyY19oLCBzcmNfdzsKPiA+ IAo+ID4gKwkvKiBQbGFuZSBvcGFjaXR5ICovCj4gPiArCXU4IGFscGhhOwo+IAo+IFdlIG1heSB3 YW50IHRvIG1ha2UgdGhhdCB1MTYuIFRoZSBnZW5lcmFsIHdlIGV4cGVjdCAxNmJwYyBmb3IgbW9z dCBjb2xvcgo+IHJlbGF0ZWQgdGhpbmdzLCBidXQgc2luY2UgdGhpcyBpcyBhIHJhbmdlIHByb3Ag SSBzdXBwb3NlIHdlIHNob3VsZCBqdXN0Cj4gZXhwb3NlIHRoZSBhY3R1YWwgaGFyZHdhcmUgcmFu Z2UuIEJ1dCBtYWtpbmcgaXQgdTE2IG1pZ2h0IGF2b2lkIHNvbWUgaGVhZAo+IHNjcmF0Y2hpbmcg Zm9yIHRoZSBmaXJzdCBwZXJzb24gdG8gaGF2ZSBoYXJkd2FyZSB3aXRoIGhpZ2hlciBwcmVjaXNp b24uCj4gRWl0aGVyIHRoYXQgb3Igd2Ugc2hvdWxkIG1ha2UgdGhlIHByb3AgY3JlYXRpb24gZmFp bCBpZiB0aGUgZHJpdmVyIGFza3MKPiBmb3IgbW9yZSBiaXRzIHRoYW4gd2UgaGF2ZSBpbiB0aGUg c3RhdGUuCgpJJ20gdGVtcHRlZCB0byBnbyBvbmUgc3RlcCBmdXJ0aGVyIGFuZCBhbHdheXMgbWFr ZSB0aGUgYWxwaGEgcHJvcGVydHkgMTYtYml0cyAKd2lkZSBmb3IgbmV3IHVzZXJzICh3ZSBjYW4n dCBkbyBzbyBmb3IgZXhpc3RpbmcgdXNlcnMgYXMgaXQgY291bGQgYnJlYWsgCnVzZXJzcGFjZSks IGFuZCBsZXQgZHJpdmVycyBjb252ZXJ0IHRoYXQgaW50ZXJuYWxseSB0byB0aGUgcmFuZ2UgdGhl eSBuZWVkLiAKVGhlcmUgY291bGQgaG93ZXZlciBiZSBkcmF3YmFja3MgSSBkb24ndCBmb3Jlc2Vl LgoKPiBPaCwgYW5kIHlvdSBzaG91bGQgcGx1ZyB0aGlzIGludG8gdGhlIHN0YXRlIGR1bXBlciBh cyB3ZWxsLgo+IAo+ID4gKwo+ID4gCj4gPiAgCS8qIFBsYW5lIHJvdGF0aW9uICovCj4gPiAgCXVu c2lnbmVkIGludCByb3RhdGlvbjsKPiA+IEBAIC00ODEsNiArNDg1LDcgQEAgZW51bSBkcm1fcGxh bmVfdHlwZSB7Cj4gPiAgICogQGZ1bmNzOiBoZWxwZXIgZnVuY3Rpb25zCj4gPiAgICogQHByb3Bl cnRpZXM6IHByb3BlcnR5IHRyYWNraW5nIGZvciB0aGlzIHBsYW5lCj4gPiAgICogQHR5cGU6IHR5 cGUgb2YgcGxhbmUgKG92ZXJsYXksIHByaW1hcnksIGN1cnNvcikKPiA+ICsgKiBAYWxwaGFfcHJv cGVydHk6IGFscGhhIHByb3BlcnR5IGZvciB0aGlzIHBsYW5lCj4gPiAgICogQHpwb3NfcHJvcGVy dHk6IHpwb3MgcHJvcGVydHkgZm9yIHRoaXMgcGxhbmUKPiA+ICAgKiBAcm90YXRpb25fcHJvcGVy dHk6IHJvdGF0aW9uIHByb3BlcnR5IGZvciB0aGlzIHBsYW5lCj4gPiAgICogQGhlbHBlcl9wcml2 YXRlOiBtaWQtbGF5ZXIgcHJpdmF0ZSBkYXRhCj4gPiBAQCAtNTU2LDYgKzU2MSw3IEBAIHN0cnVj dCBkcm1fcGxhbmUgewo+ID4gIAkgKi8KPiA+ICAJCj4gPiAgCXN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgKnN0YXRlOwo+ID4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICphbHBoYV9wcm9wZXJ0eTsKPiA+ ICAJc3RydWN0IGRybV9wcm9wZXJ0eSAqenBvc19wcm9wZXJ0eTsKPiA+ICAJc3RydWN0IGRybV9w cm9wZXJ0eSAqcm90YXRpb25fcHJvcGVydHk7Cj4gPiAgfTsKCi0tIApSZWdhcmRzLAoKTGF1cmVu dCBQaW5jaGFydAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMu aW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2xpbnV4LWFybS1rZXJuZWwK