From mboxrd@z Thu Jan 1 00:00:00 1970 From: laurent.pinchart@ideasonboard.com (Laurent Pinchart) Date: Wed, 04 Apr 2018 12:46:18 +0300 Subject: [PATCH v4 1/5] drm/blend: Add a generic alpha property In-Reply-To: References: <87vadd5mgf.fsf@anholt.net> Message-ID: <3959984.rxpnX4L0qy@avalon> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi Paul, On Wednesday, 4 April 2018 12:15:04 EEST Paul Kocialkowski wrote: > On Fri, 2018-03-30 at 13:37 -0700, Eric Anholt wrote: > > Maxime Ripard writes: > >> 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/034 > >> 741.html > >> > >> Let's create a helper in order to move that to the core. > >> diff --git a/drivers/gpu/drm/drm_blend.c > >> b/drivers/gpu/drm/drm_blend.c > >> index 5a81e1b4c076..05eda2d57c77 100644 > >> --- a/drivers/gpu/drm/drm_blend.c > >> +++ b/drivers/gpu/drm/drm_blend.c > >> @@ -88,6 +88,12 @@ > >> * On top of this basic transformation additional properties can be > >> exposed by > >> * the driver: > >> * > >> + * alpha: > >> + * Alpha is setup with drm_plane_create_alpha_property(). > >> It controls the > > > > s/setup/set up/ > > > >> + * plane-wide opacity, from transparent (0) to opaque > >> (0xffff). It can be > >> + * combined with pixel alpha. > >> + * The alpha value is represented as premultiplied alpha. > > > > I don't think this premultiplied comment makes any sense. What are > > you saying it's premultiplied with? Maybe you mean that the output > > pixels will have both their color and alpha channels multiplied by > > this alpha? I'd just drop it. > > I disagree here: since there are multiple ways to blend the pixel alpha > value and the plane-wide alpha value, I think it's important to clearly > specify which blending equation DRM expects here. Otherwise, the plane- > wide alpha value just doesn't have a specified meaning and driver > implementations can't figure whether the hardware uses the same equation > or not and whether adaptation to this coefficient is needed. > > The equations for premultiplied alpha blending are at: > https://en.wikipedia.org/wiki/Alpha_compositing#Alpha_blending > > What do you think? I think it's important to be clear in the documentation, but I also don't think "premultiplied alpha" makes sense in this context. It's not the alpha value that is premultiplied, it is the RGB data. As correctly explained in the link you have provided, to compute the output RGB values the src and dst RGB values have to be multiplied by the src and dst alpha respectively. To simplify the hardware computation, RGB values can be premultiplied in a the framebuffer. This is useful when you deal with textures that have an alpha component (you can premultiply them offline first) or with multi-pass alpha blending where you can skip the division by outA in the intermediate steps. However, for plane global alpha, I fail to see a use case that would feed the device with a XRGB framebuffer premultiplied with a fixed global alpha value. To summarize this, I'm fine specifying how alpha premultiplication is handled in relationship with the generic alpha property, but I think Maxime's patch was wrong, and the RGB values should not be premultiplied. > > Reviewed-by: Eric Anholt > > > > We should probably do this property for vc4 at some point, too. -- Regards, Laurent Pinchart From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH v4 1/5] drm/blend: Add a generic alpha property Date: Wed, 04 Apr 2018 12:46:18 +0300 Message-ID: <3959984.rxpnX4L0qy@avalon> References: <87vadd5mgf.fsf@anholt.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from galahad.ideasonboard.com (galahad.ideasonboard.com [IPv6:2001:4b98:dc2:45:216:3eff:febb:480d]) by gabe.freedesktop.org (Postfix) with ESMTPS id EDB0B89F08 for ; Wed, 4 Apr 2018 09:46:09 +0000 (UTC) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Paul Kocialkowski Cc: Boris Brezillon , Maxime Ripard , dri-devel@lists.freedesktop.org, Stefan Schake , Chen-Yu Tsai , Daniel Vetter , linux-arm-kernel@lists.infradead.org List-Id: dri-devel@lists.freedesktop.org SGkgUGF1bCwKCk9uIFdlZG5lc2RheSwgNCBBcHJpbCAyMDE4IDEyOjE1OjA0IEVFU1QgUGF1bCBL b2NpYWxrb3dza2kgd3JvdGU6Cj4gT24gRnJpLCAyMDE4LTAzLTMwIGF0IDEzOjM3IC0wNzAwLCBF cmljIEFuaG9sdCB3cm90ZToKPiA+IE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAYm9vdGxp bi5jb20+IHdyaXRlczoKPiA+PiBTb21lIGRyaXZlcnMgZHVwbGljYXRlIHRoZSBsb2dpYyB0byBj cmVhdGUgYSBwcm9wZXJ0eSB0byBzdG9yZSBhCj4gPj4gcGVyLXBsYW5lIGFscGhhLgo+ID4+IAo+ ID4+IFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgaWYgd2UgZXZlciB3YW50IHRvIHN1cHBvcnQg ZXh0cmEgcHJvdG9jb2xzCj4gPj4gZm9yIFdheWxhbmQgbGlrZToKPiA+PiBodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9hcmNoaXZlcy93YXlsYW5kLWRldmVsLzIwMTctQXVndXN0LzAzNAo+ ID4+IDc0MS5odG1sCj4gPj4gCj4gPj4gTGV0J3MgY3JlYXRlIGEgaGVscGVyIGluIG9yZGVyIHRv IG1vdmUgdGhhdCB0byB0aGUgY29yZS4KPiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2RybV9ibGVuZC5jCj4gPj4gYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2JsZW5kLmMKPiA+PiBpbmRl eCA1YTgxZTFiNGMwNzYuLjA1ZWRhMmQ1N2M3NyAxMDA2NDQKPiA+PiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vZHJtX2JsZW5kLmMKPiA+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2JsZW5kLmMK PiA+PiBAQCAtODgsNiArODgsMTIgQEAKPiA+PiAgICogT24gdG9wIG9mIHRoaXMgYmFzaWMgdHJh bnNmb3JtYXRpb24gYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGNhbiBiZQo+ID4+IGV4cG9zZWQgYnkK PiA+PiAgICogdGhlIGRyaXZlcjoKPiA+PiAgICoKPiA+PiArICogYWxwaGE6Cj4gPj4gKyAqIAlB bHBoYSBpcyBzZXR1cCB3aXRoIGRybV9wbGFuZV9jcmVhdGVfYWxwaGFfcHJvcGVydHkoKS4KPiA+ PiBJdCBjb250cm9scyB0aGUKPiA+IAo+ID4gcy9zZXR1cC9zZXQgdXAvCj4gPiAKPiA+PiArICog CXBsYW5lLXdpZGUgb3BhY2l0eSwgZnJvbSB0cmFuc3BhcmVudCAoMCkgdG8gb3BhcXVlCj4gPj4g KDB4ZmZmZikuIEl0IGNhbiBiZQo+ID4+ICsgKiAJY29tYmluZWQgd2l0aCBwaXhlbCBhbHBoYS4K PiA+PiArICogCVRoZSBhbHBoYSB2YWx1ZSBpcyByZXByZXNlbnRlZCBhcyBwcmVtdWx0aXBsaWVk IGFscGhhLgo+ID4gCj4gPiBJIGRvbid0IHRoaW5rIHRoaXMgcHJlbXVsdGlwbGllZCBjb21tZW50 IG1ha2VzIGFueSBzZW5zZS4gIFdoYXQgYXJlCj4gPiB5b3Ugc2F5aW5nIGl0J3MgcHJlbXVsdGlw bGllZCB3aXRoPyAgTWF5YmUgeW91IG1lYW4gdGhhdCB0aGUgb3V0cHV0Cj4gPiBwaXhlbHMgd2ls bCBoYXZlIGJvdGggdGhlaXIgY29sb3IgYW5kIGFscGhhIGNoYW5uZWxzIG11bHRpcGxpZWQgYnkK PiA+IHRoaXMgYWxwaGE/IEknZCBqdXN0IGRyb3AgaXQuCj4gCj4gSSBkaXNhZ3JlZSBoZXJlOiBz aW5jZSB0aGVyZSBhcmUgbXVsdGlwbGUgd2F5cyB0byBibGVuZCB0aGUgcGl4ZWwgYWxwaGEKPiB2 YWx1ZSBhbmQgdGhlIHBsYW5lLXdpZGUgYWxwaGEgdmFsdWUsIEkgdGhpbmsgaXQncyBpbXBvcnRh bnQgdG8gY2xlYXJseQo+IHNwZWNpZnkgd2hpY2ggYmxlbmRpbmcgZXF1YXRpb24gRFJNIGV4cGVj dHMgaGVyZS4gT3RoZXJ3aXNlLCB0aGUgcGxhbmUtCj4gd2lkZSBhbHBoYSB2YWx1ZSBqdXN0IGRv ZXNuJ3QgaGF2ZSBhIHNwZWNpZmllZCBtZWFuaW5nIGFuZCBkcml2ZXIKPiBpbXBsZW1lbnRhdGlv bnMgY2FuJ3QgZmlndXJlIHdoZXRoZXIgdGhlIGhhcmR3YXJlIHVzZXMgdGhlIHNhbWUgZXF1YXRp b24KPiBvciBub3QgYW5kIHdoZXRoZXIgYWRhcHRhdGlvbiB0byB0aGlzIGNvZWZmaWNpZW50IGlz IG5lZWRlZC4KPiAKPiBUaGUgZXF1YXRpb25zIGZvciBwcmVtdWx0aXBsaWVkIGFscGhhIGJsZW5k aW5nIGFyZSBhdDoKPiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BbHBoYV9jb21wb3Np dGluZyNBbHBoYV9ibGVuZGluZwo+IAo+IFdoYXQgZG8geW91IHRoaW5rPwoKSSB0aGluayBpdCdz IGltcG9ydGFudCB0byBiZSBjbGVhciBpbiB0aGUgZG9jdW1lbnRhdGlvbiwgYnV0IEkgYWxzbyBk b24ndCAKdGhpbmsgInByZW11bHRpcGxpZWQgYWxwaGEiIG1ha2VzIHNlbnNlIGluIHRoaXMgY29u dGV4dC4gSXQncyBub3QgdGhlIGFscGhhIAp2YWx1ZSB0aGF0IGlzIHByZW11bHRpcGxpZWQsIGl0 IGlzIHRoZSBSR0IgZGF0YS4gQXMgY29ycmVjdGx5IGV4cGxhaW5lZCBpbiB0aGUgCmxpbmsgeW91 IGhhdmUgcHJvdmlkZWQsIHRvIGNvbXB1dGUgdGhlIG91dHB1dCBSR0IgdmFsdWVzIHRoZSBzcmMg YW5kIGRzdCBSR0IgCnZhbHVlcyBoYXZlIHRvIGJlIG11bHRpcGxpZWQgYnkgdGhlIHNyYyBhbmQg ZHN0IGFscGhhIHJlc3BlY3RpdmVseS4gVG8gCnNpbXBsaWZ5IHRoZSBoYXJkd2FyZSBjb21wdXRh dGlvbiwgUkdCIHZhbHVlcyBjYW4gYmUgcHJlbXVsdGlwbGllZCBpbiBhIHRoZSAKZnJhbWVidWZm ZXIuIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IGRlYWwgd2l0aCB0ZXh0dXJlcyB0aGF0IGhhdmUg YW4gYWxwaGEgCmNvbXBvbmVudCAoeW91IGNhbiBwcmVtdWx0aXBseSB0aGVtIG9mZmxpbmUgZmly c3QpIG9yIHdpdGggbXVsdGktcGFzcyBhbHBoYSAKYmxlbmRpbmcgd2hlcmUgeW91IGNhbiBza2lw IHRoZSBkaXZpc2lvbiBieSBvdXRBIGluIHRoZSBpbnRlcm1lZGlhdGUgc3RlcHMuIApIb3dldmVy LCBmb3IgcGxhbmUgZ2xvYmFsIGFscGhhLCBJIGZhaWwgdG8gc2VlIGEgdXNlIGNhc2UgdGhhdCB3 b3VsZCBmZWVkIHRoZSAKZGV2aWNlIHdpdGggYSBYUkdCIGZyYW1lYnVmZmVyIHByZW11bHRpcGxp ZWQgd2l0aCBhIGZpeGVkIGdsb2JhbCBhbHBoYSB2YWx1ZS4KClRvIHN1bW1hcml6ZSB0aGlzLCBJ J20gZmluZSBzcGVjaWZ5aW5nIGhvdyBhbHBoYSBwcmVtdWx0aXBsaWNhdGlvbiBpcyBoYW5kbGVk IAppbiByZWxhdGlvbnNoaXAgd2l0aCB0aGUgZ2VuZXJpYyBhbHBoYSBwcm9wZXJ0eSwgYnV0IEkg dGhpbmsgTWF4aW1lJ3MgcGF0Y2ggCndhcyB3cm9uZywgYW5kIHRoZSBSR0IgdmFsdWVzIHNob3Vs ZCBub3QgYmUgcHJlbXVsdGlwbGllZC4KCj4gPiBSZXZpZXdlZC1ieTogRXJpYyBBbmhvbHQgPGVy aWNAYW5ob2x0Lm5ldD4KPiA+IAo+ID4gV2Ugc2hvdWxkIHByb2JhYmx5IGRvIHRoaXMgcHJvcGVy dHkgZm9yIHZjNCBhdCBzb21lIHBvaW50LCB0b28uCgotLSAKUmVnYXJkcywKCkxhdXJlbnQgUGlu Y2hhcnQKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K ZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==