From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [RFC PATCH] drm: Add per-plane pixel blend mode property Date: Wed, 9 May 2018 13:48:06 +0300 Message-ID: <20180509104806.GL23723@intel.com> References: <1525775676-32158-1-git-send-email-lowry.li@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 213336E7EA for ; Wed, 9 May 2018 10:48:11 +0000 (UTC) Content-Disposition: inline In-Reply-To: <1525775676-32158-1-git-send-email-lowry.li@arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Lowry Li Cc: airlied@linux.ie, liviu.dudau@arm.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, daniel.vetter@intel.com, nd@arm.com List-Id: dri-devel@lists.freedesktop.org T24gVHVlLCBNYXkgMDgsIDIwMTggYXQgMDY6MzQ6MzZQTSArMDgwMCwgTG93cnkgTGkgd3JvdGU6 Cj4gUGl4ZWwgYmxlbmQgbW9kZXMgcmVwcmVzZW50IHRoZSBhbHBoYSBibGVuZGluZyBlcXVhdGlv bgo+IHNlbGVjdGlvbiwgZGVzY3JpYmluZyBob3cgdGhlIHBpeGVscyBmcm9tIHRoZSBjdXJyZW50 Cj4gcGxhbmUgYXJlIGNvbXBvc2l0ZWQgd2l0aCB0aGUgYmFja2dyb3VuZC4KPiAKPiBBZGQgYSBw aXhlbF9ibGVuZF9tb2RlIHRvIGRybV9wbGFuZV9zdGF0ZSBhbmQgYQo+IGJsZW5kX21vZGVfcHJv cGVydHkgdG8gZHJtX3BsYW5lLCBhbmQgcmVsYXRlZCBzdXBwb3J0Cj4gZnVuY3Rpb25zLgo+IAo+ IERlZmluZXMgdGhyZWUgYmxlbmQgbW9kZXMgaW4gZHJtX2JsZW5kLmguCj4gCj4gU2lnbmVkLW9m Zi1ieTogTG93cnkgTGkgPGxvd3J5LmxpQGFybS5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2Ry bS9kcm1fYXRvbWljLmMgICAgICAgIHwgIDQgKysKPiAgZHJpdmVycy9ncHUvZHJtL2RybV9hdG9t aWNfaGVscGVyLmMgfCAgMSArCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fYmxlbmQuYyAgICAgICAg IHwgOTUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBpbmNsdWRlL2Ry bS9kcm1fYmxlbmQuaCAgICAgICAgICAgICB8ICA2ICsrKwo+ICBpbmNsdWRlL2RybS9kcm1fcGxh bmUuaCAgICAgICAgICAgICB8ICA3ICsrKwo+ICA1IGZpbGVzIGNoYW5nZWQsIDExMyBpbnNlcnRp b25zKCspCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMgYi9k cml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jCj4gaW5kZXggYTU2NzMxMC4uMGJiNmRlMSAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2F0b21pYy5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2RybV9hdG9taWMuYwo+IEBAIC03NjQsNiArNzY0LDggQEAgaW50IGRybV9hdG9taWNf cGxhbmVfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJCXN0YXRlLT5z cmNfdyA9IHZhbDsKPiAgCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX3NyY19o KSB7Cj4gIAkJc3RhdGUtPnNyY19oID0gdmFsOwo+ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBw bGFuZS0+YmxlbmRfbW9kZV9wcm9wZXJ0eSkgewo+ICsJCXN0YXRlLT5waXhlbF9ibGVuZF9tb2Rl ID0gdmFsOwo+ICAJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBwbGFuZS0+cm90YXRpb25fcHJvcGVy dHkpIHsKPiAgCQlpZiAoIWlzX3Bvd2VyX29mXzIodmFsICYgRFJNX1JPVEFURV9NQVNLKSkKPiAg CQkJcmV0dXJuIC1FSU5WQUw7Cj4gQEAgLTgyNiw2ICs4MjgsOCBAQCBpbnQgZHJtX2F0b21pY19w bGFuZV9zZXRfcHJvcGVydHkoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAkJKnZhbCA9IHN0 YXRlLT5zcmNfdzsKPiAgCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT5wcm9wX3NyY19o KSB7Cj4gIAkJKnZhbCA9IHN0YXRlLT5zcmNfaDsKPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0g cGxhbmUtPmJsZW5kX21vZGVfcHJvcGVydHkpIHsKPiArCQkqdmFsID0gc3RhdGUtPnBpeGVsX2Js ZW5kX21vZGU7Cj4gIAl9IGVsc2UgaWYgKHByb3BlcnR5ID09IHBsYW5lLT5yb3RhdGlvbl9wcm9w ZXJ0eSkgewo+ICAJCSp2YWwgPSBzdGF0ZS0+cm90YXRpb247Cj4gIAl9IGVsc2UgaWYgKHByb3Bl cnR5ID09IHBsYW5lLT56cG9zX3Byb3BlcnR5KSB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1 L2RybS9kcm1fYXRvbWljX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVs cGVyLmMKPiBpbmRleCAwMWQ5MzZiLi5lNDM3N2ZkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9kcm1fYXRvbWljX2hlbHBlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9t aWNfaGVscGVyLmMKPiBAQCAtMzEzMyw2ICszMTMzLDcgQEAgdm9pZCBkcm1fYXRvbWljX2hlbHBl cl9wbGFuZV9yZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPiAgCWlmIChwbGFuZS0+c3Rh dGUpIHsKPiAgCQlwbGFuZS0+c3RhdGUtPnBsYW5lID0gcGxhbmU7Cj4gIAkJcGxhbmUtPnN0YXRl LT5yb3RhdGlvbiA9IERSTV9ST1RBVEVfMDsKPiArCQlwbGFuZS0+c3RhdGUtPnBpeGVsX2JsZW5k X21vZGUgPSBEUk1fTU9ERV9CTEVORF9QUkVNVUxUSTsKPiAgCX0KPiAgfQo+ICBFWFBPUlRfU1lN Qk9MKGRybV9hdG9taWNfaGVscGVyX3BsYW5lX3Jlc2V0KTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2RybV9ibGVuZC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9ibGVuZC5jCj4gaW5k ZXggNjY1YWFmYy4uYmI5MzhkZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Js ZW5kLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2JsZW5kLmMKPiBAQCAtOTgsNiArOTgs MTIgQEAKPiAgICogICBwbGFuZXMuIFdpdGhvdXQgdGhpcyBwcm9wZXJ0eSB0aGUgcHJpbWFyeSBw bGFuZSBpcyBhbHdheXMgYmVsb3cgdGhlIGN1cnNvcgo+ICAgKiAgIHBsYW5lLCBhbmQgb3JkZXJp bmcgYmV0d2VlbiBhbGwgb3RoZXIgcGxhbmVzIGlzIHVuZGVmaW5lZC4KPiAgICoKPiArICogcGl4 ZWwgYmxlbmQgbW9kZToKPiArICoJUGl4ZWwgYmxlbmQgbW9kZSBpcyBzZXQgdXAgd2l0aCBkcm1f cGxhbmVfY3JlYXRlX2JsZW5kX21vZGVfcHJvcGVydHkoKS4KPiArICoJSXQgYWRkcyBhIGJsZW5k IG1vZGUgZm9yIGFscGhhIGJsZW5kaW5nIGVxdWF0aW9uIHNlbGVjdGlvbiwgZGVzY3JpYmluZwo+ ICsgKglob3cgdGhlIHBpeGVscyBmcm9tIHRoZSBjdXJyZW50IHBsYW5lIGFyZSBjb21wb3NpdGVk IHdpdGggdGhlCj4gKyAqCWJhY2tncm91bmQuCj4gKyAqCj4gICAqIE5vdGUgdGhhdCBhbGwgdGhl IHByb3BlcnR5IGV4dGVuc2lvbnMgZGVzY3JpYmVkIGhlcmUgYXBwbHkgZWl0aGVyIHRvIHRoZQo+ ICAgKiBwbGFuZSBvciB0aGUgQ1JUQyAoZS5nLiBmb3IgdGhlIGJhY2tncm91bmQgY29sb3IsIHdo aWNoIGN1cnJlbnRseSBpcyBub3QKPiAgICogZXhwb3NlZCBhbmQgYXNzdW1lZCB0byBiZSBibGFj aykuCj4gQEAgLTQwNSwzICs0MTEsOTIgQEAgaW50IGRybV9hdG9taWNfbm9ybWFsaXplX3pwb3Mo c3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCXJldHVybiAwOwo+ICB9Cj4gIEVYUE9SVF9TWU1C T0woZHJtX2F0b21pY19ub3JtYWxpemVfenBvcyk7Cj4gKwo+ICsvKioKPiArICogZHJtX3BsYW5l X2NyZWF0ZV9ibGVuZF9tb2RlX3Byb3BlcnR5IC0gY3JlYXRlIGEgbmV3IGJsZW5kIG1vZGUgcHJv cGVydHkKPiArICogQHBsYW5lOiBkcm0gcGxhbmUKPiArICogQHN1cHBvcnRlZF9tb2RlczogYml0 bWFzayBvZiBzdXBwb3J0ZWQgbW9kZXMsIG11c3QgaW5jbHVkZQo+ICsgKgkJICAgICBCSVQoRFJN X01PREVfQkxFTkRfUFJFTVVMVEkpCj4gKyAqCj4gKyAqIFRoaXMgY3JlYXRlcyBhIG5ldyBwcm9w ZXJ0eSBkZXNjcmliaW5nIHRoZSBibGVuZCBtb2RlLgo+ICsgKgo+ICsgKiBUaGUgcHJvcGVydHkg ZXhwb3NlZCB0byB1c2Vyc3BhY2UgaXMgYW4gZW51bWVyYXRpb24gcHJvcGVydHkgKHNlZQo+ICsg KiBkcm1fcHJvcGVydHlfY3JlYXRlX2VudW0oKSkgY2FsbGVkICJwaXhlbCBibGVuZCBtb2RlIiBh bmQgaGFzIHRoZQo+ICsgKiBmb2xsb3dpbmcgZW51bWVyYXRpb24gdmFsdWVzOgo+ICsgKgo+ICsg KiBEUk1fTU9ERV9CTEVORF9QSVhFTF9OT05FOiBCbGVuZCBmb3JtdWxhIHRoYXQgaWdub3JlcyB0 aGUgcGl4ZWwgYWxwaGEuCj4gKyAqCSJOb25lIgo+ICsgKglvdXQucmdiID0gcGxhbmUuYWxwaGEg KiBwaXhlbC5yZ2IgKyAoMSAtIHBsYW5lLmFscGhhKSAqIGJnLnJnYgo+ICsgKgo+ICsgKiBEUk1f TU9ERV9CTEVORF9QUkVNVUxUSTogQmxlbmQgZm9ybXVsYSB0aGF0IGFzc3VtZXMgdGhlIHBpeGVs IGNvbG9yIHZhbHVlcwo+ICsgKgkJCSAgICBoYXZlIGJlZW4gYWxyZWFkeSBwcmUtbXVsdGlwbGll ZCB3aXRoIHRoZSBhbHBoYQo+ICsgKgkJCSAgICBjaGFubmVsIHZhbHVlcy4KPiArICoJIlByZS1t dWx0aXBsaWVkIgo+ICsgKglvdXQucmdiID0gcGxhbmUuYWxwaGEgKiBwaXhlbC5yZ2IgKwo+ICsg KgkgICAgICAoMSAtIChwbGFuZS5hbHBoYSAqIHBpeGVsLmFscGhhKSkgKiBiZy5yZ2IKPiArICoK PiArICogRFJNX01PREVfQkxFTkRfQ09WRVJBR0U6IEJsZW5kIGZvcm11bGEgdGhhdCBhc3N1bWVz IHRoZSBwaXhlbCBjb2xvciB2YWx1ZXMKPiArICoJCQkgICAgaGF2ZSBub3QgYmVlbiBwcmUtbXVs dGlwbGllZCBhbmQgd2lsbCBkbyBzbyB3aGVuCj4gKyAqCQkJICAgIGJsZW5kaW5nIHRoZW0gdG8g dGhlIGJhY2tncm91bmQgY29sb3IgdmFsdWVzLgo+ICsgKgkiQ292ZXJhZ2UiCj4gKyAqCW91dC5y Z2IgPSBwbGFuZS5hbHBoYSAqIHBpeGVsLmFscGhhICogcGl4ZWwucmdiICsKPiArICoJICAgICAg KDEgLSAocGxhbmUuYWxwaGEgKiBwaXhlbC5hbHBoYSkpICogYmcucmdiCgpJJ20gbm90IGEgaHVn ZSBmYW4gb2YgdGhlc2UgZW51bSB2YWx1ZSBuYW1lcy4gImNvdmVyYWdlIiBtYWtlcyBtZSB0aGlu awpvZiAiYWxwaGEgdG8gY292ZXJhZ2UiLgoKWWVhcnMgYWdvIHRoZXJlIHdhcyBxdWl0ZSBhIGJp dCBvZiBkaWNzY3Vzc2lvbiBvbiB0aGlzIGFuZCB0aGUgY29uY2Vuc3VzCmF0IHRoZSBhdCB0aW1l IHdhcyB0byB0cnkgYW5kIG1vZGVsIHRoaXMgYWZ0ZXIgdGhlIEdMIGJsZW5kIGZ1bmMuIElmIHdl CmNvdWxkIGRvIHRoYXQgdGhlbiBpdCB3b3VsZCBiZSBtdWNoIGVhc2llciB0byBzZWUgd2hhdCdz IGdvaW5nIHRvIGhhcHBlbgpqdXN0IGJ5IHJlYWRpbmcgdGhlIHN0cmluZy4gCgpCdXQgYWN0dWFs bHkgSSdtIG5vdCBzdXJlIHdlIGNhbiBmaXQgYW55IHNlbnNpYmxlIEdMIGJsZW5kIGZ1bmMgbGlr ZQpuYW1lcyBpbiB0aGUgbGltaXRlZCBsZW5ndGggb2YgdGhlIGVudW0gdmFsdWUgc3RyaW5ncy4g V291bGQgYmUgbmljZQp0byB0cnkgYXQgbGVhc3QuCgo+ICsgKgo+ICsgKiBUaGlzIHByb3BlcnR5 IGhhcyBubyBlZmZlY3Qgb24gZm9ybWF0cyB3aXRoIG5vIHBpeGVsIGFscGhhLCBhcyBwaXhlbC5h bHBoYQo+ICsgKiBpcyBhc3N1bWVkIHRvIGJlIDEuMC4gSWYgdGhlIHBsYW5lIGRvZXMgbm90IGV4 cG9zZSB0aGUgImFscGhhIiBwcm9wZXJ0eSwgdGhlbgo+ICsgKiBwbGFuZS5hbHBoYSBpcyBhc3N1 bWVkIHRvIGJlIDEuMCwgb3RoZXJ3aXNlLCBpdCBpcyB0aGUgdmFsdWUgb2YgdGhlICJhbHBoYSIK PiArICogcHJvcGVydHkuCj4gKyAqCj4gKyAqIFJFVFVSTlM6Cj4gKyAqIFplcm8gZm9yIHN1Y2Nl c3Mgb3IgLWVycm5vCj4gKyAqLwo+ICtpbnQgZHJtX3BsYW5lX2NyZWF0ZV9ibGVuZF9tb2RlX3By b3BlcnR5KHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICsJCQkJCSB1bnNpZ25lZCBpbnQgc3Vw cG9ydGVkX21vZGVzKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGxhbmUtPmRl djsKPiArCXN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3A7Cj4gKwlzdGF0aWMgY29uc3Qgc3RydWN0 IGRybV9wcm9wX2VudW1fbGlzdCBwcm9wc1tdID0gewo+ICsJCXsgRFJNX01PREVfQkxFTkRfUElY RUxfTk9ORSwgIk5vbmUiIH0sCj4gKwkJeyBEUk1fTU9ERV9CTEVORF9QUkVNVUxUSSwgIlByZS1t dWx0aXBsaWVkIiB9LAo+ICsJCXsgRFJNX01PREVfQkxFTkRfQ09WRVJBR0UsICJDb3ZlcmFnZSIg fSwKPiArCX07Cj4gKwl1bnNpZ25lZCBpbnQgdmFsaWRfbW9kZV9tYXNrID0gQklUKERSTV9NT0RF X0JMRU5EX1BJWEVMX05PTkUpIHwKPiArCQkJCSAgICAgICBCSVQoRFJNX01PREVfQkxFTkRfUFJF TVVMVEkpICAgfAo+ICsJCQkJICAgICAgIEJJVChEUk1fTU9ERV9CTEVORF9DT1ZFUkFHRSk7Cj4g KwlpbnQgaSwgaiA9IDA7Cj4gKwo+ICsJaWYgKFdBUk5fT04oKHN1cHBvcnRlZF9tb2RlcyAmIH52 YWxpZF9tb2RlX21hc2spIHx8Cj4gKwkJICAgICgoc3VwcG9ydGVkX21vZGVzICYgQklUKERSTV9N T0RFX0JMRU5EX1BSRU1VTFRJKSkgPT0gMCkpKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiAr CXByb3AgPSBkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01PREVfUFJPUF9FTlVNLAo+ICsJ CQkJICAgInBpeGVsIGJsZW5kIG1vZGUiLAo+ICsJCQkJICAgaHdlaWdodDMyKHN1cHBvcnRlZF9t b2RlcykpOwo+ICsJaWYgKCFwcm9wKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByb3BzKTsgaSsrKSB7Cj4gKwkJaW50IHJldDsKPiArCj4g KwkJaWYgKCEoQklUKHByb3BzW2ldLnR5cGUpICYgc3VwcG9ydGVkX21vZGVzKSkKPiArCQkJY29u dGludWU7Cj4gKwo+ICsJCXJldCA9IGRybV9wcm9wZXJ0eV9hZGRfZW51bShwcm9wLCBqKyssIHBy b3BzW2ldLnR5cGUsCj4gKwkJCQkJICAgIHByb3BzW2ldLm5hbWUpOwo+ICsKPiArCQlpZiAocmV0 KSB7Cj4gKwkJCWRybV9wcm9wZXJ0eV9kZXN0cm95KGRldiwgcHJvcCk7Cj4gKwo+ICsJCQlyZXR1 cm4gcmV0Owo+ICsJCX0KPiArCX0KPiArCj4gKwlkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eSgm cGxhbmUtPmJhc2UsIHByb3AsIERSTV9NT0RFX0JMRU5EX1BSRU1VTFRJKTsKPiArCXBsYW5lLT5i bGVuZF9tb2RlX3Byb3BlcnR5ID0gcHJvcDsKPiArCj4gKwlpZiAocGxhbmUtPnN0YXRlKQo+ICsJ CXBsYW5lLT5zdGF0ZS0+cGl4ZWxfYmxlbmRfbW9kZSA9IERSTV9NT0RFX0JMRU5EX1BSRU1VTFRJ Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX3BsYW5lX2NyZWF0 ZV9ibGVuZF9tb2RlX3Byb3BlcnR5KTsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2Js ZW5kLmggYi9pbmNsdWRlL2RybS9kcm1fYmxlbmQuaAo+IGluZGV4IDEzMjIxY2YuLjZiZjk1YTQg MTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2JsZW5kLmgKPiArKysgYi9pbmNsdWRlL2Ry bS9kcm1fYmxlbmQuaAo+IEBAIC0yNiw2ICsyNiwxMCBAQAo+ICAjaW5jbHVkZSA8bGludXgvbGlz dC5oPgo+ICAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KPiAgCj4gKyNkZWZpbmUgRFJNX01PREVf QkxFTkRfUElYRUxfTk9ORQkwCj4gKyNkZWZpbmUgRFJNX01PREVfQkxFTkRfUFJFTVVMVEkJCTEK PiArI2RlZmluZSBEUk1fTU9ERV9CTEVORF9DT1ZFUkFHRQkJMgo+ICsKPiAgc3RydWN0IGRybV9k ZXZpY2U7Cj4gIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlOwo+ICAKPiBAQCAtNjUsNCArNjksNiBA QCBpbnQgZHJtX3BsYW5lX2NyZWF0ZV96cG9zX2ltbXV0YWJsZV9wcm9wZXJ0eShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKPiAgCQkJCQkgICAgIHVuc2lnbmVkIGludCB6cG9zKTsKPiAgaW50IGRy bV9hdG9taWNfbm9ybWFsaXplX3pwb3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCQkJICAg ICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKTsKPiAraW50IGRybV9wbGFuZV9jcmVh dGVfYmxlbmRfbW9kZV9wcm9wZXJ0eShzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiArCQkJCQkg dW5zaWduZWQgaW50IHN1cHBvcnRlZF9tb2Rlcyk7Cj4gICNlbmRpZgo+IGRpZmYgLS1naXQgYS9p bmNsdWRlL2RybS9kcm1fcGxhbmUuaCBiL2luY2x1ZGUvZHJtL2RybV9wbGFuZS5oCj4gaW5kZXgg MjA4NjdiNC4uZjljYmZlZSAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fcGxhbmUuaAo+ ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9wbGFuZS5oCj4gQEAgLTQxLDYgKzQxLDggQEAKPiAgICoJ cGxhbmUgKGluIDE2LjE2KQo+ICAgKiBAc3JjX3c6IHdpZHRoIG9mIHZpc2libGUgcG9ydGlvbiBv ZiBwbGFuZSAoaW4gMTYuMTYpCj4gICAqIEBzcmNfaDogaGVpZ2h0IG9mIHZpc2libGUgcG9ydGlv biBvZiBwbGFuZSAoaW4gMTYuMTYpCj4gKyAqIEBwaXhlbF9ibGVuZF9tb2RlOiBob3cgdGhlIHBs YW5lJ3MgZnJhbWVidWZmZXIgYWxwaGEgY2hhbm5lbCBpcyB1c2VkIHdoZW4KPiArICoJYmxlbmRp bmcgd2l0aCB0aGUgYmFja2dyb3VuZCBjb2xvdXIuCj4gICAqIEByb3RhdGlvbjogcm90YXRpb24g b2YgdGhlIHBsYW5lCj4gICAqIEB6cG9zOiBwcmlvcml0eSBvZiB0aGUgZ2l2ZW4gcGxhbmUgb24g Y3J0YyAob3B0aW9uYWwpCj4gICAqCU5vdGUgdGhhdCBtdWx0aXBsZSBhY3RpdmUgcGxhbmVzIG9u IHRoZSBzYW1lIGNydGMgY2FuIGhhdmUgYW4gaWRlbnRpY2FsCj4gQEAgLTEwNCw2ICsxMDYsOSBA QCBzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIHsKPiAgCXVpbnQzMl90IHNyY194LCBzcmNfeTsKPiAg CXVpbnQzMl90IHNyY19oLCBzcmNfdzsKPiAgCj4gKwkvKiBQbGFuZSBwaXhlbCBibGVuZCBtb2Rl ICovCj4gKwl1aW50MTZfdCBwaXhlbF9ibGVuZF9tb2RlOwo+ICsKPiAgCS8qIFBsYW5lIHJvdGF0 aW9uICovCj4gIAl1bnNpZ25lZCBpbnQgcm90YXRpb247Cj4gIAo+IEBAIC00NTksNiArNDY0LDcg QEAgZW51bSBkcm1fcGxhbmVfdHlwZSB7Cj4gICAqIEBzdGF0ZTogY3VycmVudCBhdG9taWMgc3Rh dGUgZm9yIHRoaXMgcGxhbmUKPiAgICogQHpwb3NfcHJvcGVydHk6IHpwb3MgcHJvcGVydHkgZm9y IHRoaXMgcGxhbmUKPiAgICogQHJvdGF0aW9uX3Byb3BlcnR5OiByb3RhdGlvbiBwcm9wZXJ0eSBm b3IgdGhpcyBwbGFuZQo+ICsgKiBAYmxlbmRfbW9kZV9wcm9wZXJ0eTogYmxlbmQgbW9kZSBwcm9w ZXJ0eSBmb3IgdGhpcyBwbGFuZQo+ICAgKiBAaGVscGVyX3ByaXZhdGU6IG1pZC1sYXllciBwcml2 YXRlIGRhdGEKPiAgICovCj4gIHN0cnVjdCBkcm1fcGxhbmUgewo+IEBAIC01MDYsNiArNTEyLDcg QEAgc3RydWN0IGRybV9wbGFuZSB7Cj4gIAo+ICAJc3RydWN0IGRybV9wcm9wZXJ0eSAqenBvc19w cm9wZXJ0eTsKPiAgCXN0cnVjdCBkcm1fcHJvcGVydHkgKnJvdGF0aW9uX3Byb3BlcnR5Owo+ICsJ c3RydWN0IGRybV9wcm9wZXJ0eSAqYmxlbmRfbW9kZV9wcm9wZXJ0eTsKPiAgfTsKPiAgCj4gICNk ZWZpbmUgb2JqX3RvX3BsYW5lKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZHJtX3BsYW5lLCBi YXNlKQo+IC0tIAo+IDEuOS4xCj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KPiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4gZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVsCgotLSAKVmlsbGUgU3lyasOkbMOkCkludGVsCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934674AbeEIKsN (ORCPT ); Wed, 9 May 2018 06:48:13 -0400 Received: from mga12.intel.com ([192.55.52.136]:44954 "EHLO mga12.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934479AbeEIKsL (ORCPT ); Wed, 9 May 2018 06:48:11 -0400 X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,381,1520924400"; d="scan'208";a="54435130" Date: Wed, 9 May 2018 13:48:06 +0300 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= To: Lowry Li Cc: liviu.dudau@arm.com, airlied@linux.ie, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, daniel.vetter@intel.com, nd@arm.com Subject: Re: [RFC PATCH] drm: Add per-plane pixel blend mode property Message-ID: <20180509104806.GL23723@intel.com> References: <1525775676-32158-1-git-send-email-lowry.li@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1525775676-32158-1-git-send-email-lowry.li@arm.com> User-Agent: Mutt/1.9.4 (2018-02-28) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, May 08, 2018 at 06:34:36PM +0800, Lowry Li wrote: > Pixel blend modes represent the alpha blending equation > selection, describing how the pixels from the current > plane are composited with the background. > > Add a pixel_blend_mode to drm_plane_state and a > blend_mode_property to drm_plane, and related support > functions. > > Defines three blend modes in drm_blend.h. > > Signed-off-by: Lowry Li > --- > drivers/gpu/drm/drm_atomic.c | 4 ++ > drivers/gpu/drm/drm_atomic_helper.c | 1 + > drivers/gpu/drm/drm_blend.c | 95 +++++++++++++++++++++++++++++++++++++ > include/drm/drm_blend.h | 6 +++ > include/drm/drm_plane.h | 7 +++ > 5 files changed, 113 insertions(+) > > diff --git a/drivers/gpu/drm/drm_atomic.c b/drivers/gpu/drm/drm_atomic.c > index a567310..0bb6de1 100644 > --- a/drivers/gpu/drm/drm_atomic.c > +++ b/drivers/gpu/drm/drm_atomic.c > @@ -764,6 +764,8 @@ int drm_atomic_plane_set_property(struct drm_plane *plane, > state->src_w = val; > } else if (property == config->prop_src_h) { > state->src_h = val; > + } else if (property == plane->blend_mode_property) { > + state->pixel_blend_mode = val; > } else if (property == plane->rotation_property) { > if (!is_power_of_2(val & DRM_ROTATE_MASK)) > return -EINVAL; > @@ -826,6 +828,8 @@ int drm_atomic_plane_set_property(struct drm_plane *plane, > *val = state->src_w; > } else if (property == config->prop_src_h) { > *val = state->src_h; > + } else if (property == plane->blend_mode_property) { > + *val = state->pixel_blend_mode; > } else if (property == plane->rotation_property) { > *val = state->rotation; > } else if (property == plane->zpos_property) { > diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c > index 01d936b..e4377fd 100644 > --- a/drivers/gpu/drm/drm_atomic_helper.c > +++ b/drivers/gpu/drm/drm_atomic_helper.c > @@ -3133,6 +3133,7 @@ void drm_atomic_helper_plane_reset(struct drm_plane *plane) > if (plane->state) { > plane->state->plane = plane; > plane->state->rotation = DRM_ROTATE_0; > + plane->state->pixel_blend_mode = DRM_MODE_BLEND_PREMULTI; > } > } > EXPORT_SYMBOL(drm_atomic_helper_plane_reset); > diff --git a/drivers/gpu/drm/drm_blend.c b/drivers/gpu/drm/drm_blend.c > index 665aafc..bb938de 100644 > --- a/drivers/gpu/drm/drm_blend.c > +++ b/drivers/gpu/drm/drm_blend.c > @@ -98,6 +98,12 @@ > * planes. Without this property the primary plane is always below the cursor > * plane, and ordering between all other planes is undefined. > * > + * pixel blend mode: > + * Pixel blend mode is set up with drm_plane_create_blend_mode_property(). > + * It adds a blend mode for alpha blending equation selection, describing > + * how the pixels from the current plane are composited with the > + * background. > + * > * Note that all the property extensions described here apply either to the > * plane or the CRTC (e.g. for the background color, which currently is not > * exposed and assumed to be black). > @@ -405,3 +411,92 @@ int drm_atomic_normalize_zpos(struct drm_device *dev, > return 0; > } > EXPORT_SYMBOL(drm_atomic_normalize_zpos); > + > +/** > + * drm_plane_create_blend_mode_property - create a new blend mode property > + * @plane: drm plane > + * @supported_modes: bitmask of supported modes, must include > + * BIT(DRM_MODE_BLEND_PREMULTI) > + * > + * This creates a new property describing the blend mode. > + * > + * The property exposed to userspace is an enumeration property (see > + * drm_property_create_enum()) called "pixel blend mode" and has the > + * following enumeration values: > + * > + * DRM_MODE_BLEND_PIXEL_NONE: Blend formula that ignores the pixel alpha. > + * "None" > + * out.rgb = plane.alpha * pixel.rgb + (1 - plane.alpha) * bg.rgb > + * > + * DRM_MODE_BLEND_PREMULTI: Blend formula that assumes the pixel color values > + * have been already pre-multiplied with the alpha > + * channel values. > + * "Pre-multiplied" > + * out.rgb = plane.alpha * pixel.rgb + > + * (1 - (plane.alpha * pixel.alpha)) * bg.rgb > + * > + * DRM_MODE_BLEND_COVERAGE: Blend formula that assumes the pixel color values > + * have not been pre-multiplied and will do so when > + * blending them to the background color values. > + * "Coverage" > + * out.rgb = plane.alpha * pixel.alpha * pixel.rgb + > + * (1 - (plane.alpha * pixel.alpha)) * bg.rgb I'm not a huge fan of these enum value names. "coverage" makes me think of "alpha to coverage". Years ago there was quite a bit of dicscussion on this and the concensus at the at time was to try and model this after the GL blend func. If we could do that then it would be much easier to see what's going to happen just by reading the string. But actually I'm not sure we can fit any sensible GL blend func like names in the limited length of the enum value strings. Would be nice to try at least. > + * > + * This property has no effect on formats with no pixel alpha, as pixel.alpha > + * is assumed to be 1.0. If the plane does not expose the "alpha" property, then > + * plane.alpha is assumed to be 1.0, otherwise, it is the value of the "alpha" > + * property. > + * > + * RETURNS: > + * Zero for success or -errno > + */ > +int drm_plane_create_blend_mode_property(struct drm_plane *plane, > + unsigned int supported_modes) > +{ > + struct drm_device *dev = plane->dev; > + struct drm_property *prop; > + static const struct drm_prop_enum_list props[] = { > + { DRM_MODE_BLEND_PIXEL_NONE, "None" }, > + { DRM_MODE_BLEND_PREMULTI, "Pre-multiplied" }, > + { DRM_MODE_BLEND_COVERAGE, "Coverage" }, > + }; > + unsigned int valid_mode_mask = BIT(DRM_MODE_BLEND_PIXEL_NONE) | > + BIT(DRM_MODE_BLEND_PREMULTI) | > + BIT(DRM_MODE_BLEND_COVERAGE); > + int i, j = 0; > + > + if (WARN_ON((supported_modes & ~valid_mode_mask) || > + ((supported_modes & BIT(DRM_MODE_BLEND_PREMULTI)) == 0))) > + return -EINVAL; > + > + prop = drm_property_create(dev, DRM_MODE_PROP_ENUM, > + "pixel blend mode", > + hweight32(supported_modes)); > + if (!prop) > + return -ENOMEM; > + > + for (i = 0; i < ARRAY_SIZE(props); i++) { > + int ret; > + > + if (!(BIT(props[i].type) & supported_modes)) > + continue; > + > + ret = drm_property_add_enum(prop, j++, props[i].type, > + props[i].name); > + > + if (ret) { > + drm_property_destroy(dev, prop); > + > + return ret; > + } > + } > + > + drm_object_attach_property(&plane->base, prop, DRM_MODE_BLEND_PREMULTI); > + plane->blend_mode_property = prop; > + > + if (plane->state) > + plane->state->pixel_blend_mode = DRM_MODE_BLEND_PREMULTI; > + > + return 0; > +} > +EXPORT_SYMBOL(drm_plane_create_blend_mode_property); > diff --git a/include/drm/drm_blend.h b/include/drm/drm_blend.h > index 13221cf..6bf95a4 100644 > --- a/include/drm/drm_blend.h > +++ b/include/drm/drm_blend.h > @@ -26,6 +26,10 @@ > #include > #include > > +#define DRM_MODE_BLEND_PIXEL_NONE 0 > +#define DRM_MODE_BLEND_PREMULTI 1 > +#define DRM_MODE_BLEND_COVERAGE 2 > + > struct drm_device; > struct drm_atomic_state; > > @@ -65,4 +69,6 @@ int drm_plane_create_zpos_immutable_property(struct drm_plane *plane, > unsigned int zpos); > int drm_atomic_normalize_zpos(struct drm_device *dev, > struct drm_atomic_state *state); > +int drm_plane_create_blend_mode_property(struct drm_plane *plane, > + unsigned int supported_modes); > #endif > diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h > index 20867b4..f9cbfee 100644 > --- a/include/drm/drm_plane.h > +++ b/include/drm/drm_plane.h > @@ -41,6 +41,8 @@ > * 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) > + * @pixel_blend_mode: how the plane's framebuffer alpha channel is used when > + * blending with the background colour. > * @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 > @@ -104,6 +106,9 @@ struct drm_plane_state { > uint32_t src_x, src_y; > uint32_t src_h, src_w; > > + /* Plane pixel blend mode */ > + uint16_t pixel_blend_mode; > + > /* Plane rotation */ > unsigned int rotation; > > @@ -459,6 +464,7 @@ enum drm_plane_type { > * @state: current atomic state for this plane > * @zpos_property: zpos property for this plane > * @rotation_property: rotation property for this plane > + * @blend_mode_property: blend mode property for this plane > * @helper_private: mid-layer private data > */ > struct drm_plane { > @@ -506,6 +512,7 @@ struct drm_plane { > > struct drm_property *zpos_property; > struct drm_property *rotation_property; > + struct drm_property *blend_mode_property; > }; > > #define obj_to_plane(x) container_of(x, struct drm_plane, base) > -- > 1.9.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Ville Syrjälä Intel