From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= Date: Mon, 25 Apr 2016 12:55:52 +0000 Subject: Re: [PATCH v2 1/8] drm/rect: Add some drm_clip_rect utility functions Message-Id: <571E13D8.4060100@tronnes.org> List-Id: References: <1461530942-22485-1-git-send-email-noralf@tronnes.org> <1461530942-22485-2-git-send-email-noralf@tronnes.org> <20160425123907.GY4329@intel.com> In-Reply-To: <20160425123907.GY4329@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable To: =?UTF-8?B?VmlsbGUgU3lyasOkbMOk?= Cc: linux-fbdev@vger.kernel.org, tomi.valkeinen@ti.com, laurent.pinchart@ideasonboard.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Den 25.04.2016 14:39, skrev Ville Syrj=E4l=E4: > On Sun, Apr 24, 2016 at 10:48:55PM +0200, Noralf Tr=F8nnes wrote: >> Add some utility functions for struct drm_clip_rect. > Looks like mostly you're just duplicating the drm_rect stuff. Why can't > you use what's there already? That's because the framebuffer flushing uses drm_clip_rect and not drm_rect: struct drm_framebuffer_funcs { [...] int (*dirty)(struct drm_framebuffer *framebuffer, struct drm_file *file_priv, unsigned flags, unsigned color, struct drm_clip_rect *clips, unsigned num_clips); }; >> Signed-off-by: Noralf Tr=F8nnes >> --- >> drivers/gpu/drm/drm_rect.c | 67 ++++++++++++++++++++++++++++++++++++++= ++++++ >> include/drm/drm_rect.h | 69 ++++++++++++++++++++++++++++++++++++++= ++++++++ >> 2 files changed, 136 insertions(+) >> >> diff --git a/drivers/gpu/drm/drm_rect.c b/drivers/gpu/drm/drm_rect.c >> index a8e2c86..a9fb1a8 100644 >> --- a/drivers/gpu/drm/drm_rect.c >> +++ b/drivers/gpu/drm/drm_rect.c >> @@ -434,3 +434,70 @@ void drm_rect_rotate_inv(struct drm_rect *r, >> } >> } >> EXPORT_SYMBOL(drm_rect_rotate_inv); >> + >> +/** >> + * drm_clip_rect_intersect - intersect two clip rectangles >> + * @r1: first clip rectangle >> + * @r2: second clip rectangle >> + * >> + * Calculate the intersection of clip rectangles @r1 and @r2. >> + * @r1 will be overwritten with the intersection. >> + * >> + * RETURNS: >> + * %true if rectangle @r1 is still visible after the operation, >> + * %false otherwise. >> + */ >> +bool drm_clip_rect_intersect(struct drm_clip_rect *r1, >> + const struct drm_clip_rect *r2) >> +{ >> + r1->x1 =3D max(r1->x1, r2->x1); >> + r1->y1 =3D max(r1->y1, r2->y1); >> + r1->x2 =3D min(r1->x2, r2->x2); >> + r1->y2 =3D min(r1->y2, r2->y2); >> + >> + return drm_clip_rect_visible(r1); >> +} >> +EXPORT_SYMBOL(drm_clip_rect_intersect); >> + >> +/** >> + * drm_clip_rect_merge - Merge clip rectangles >> + * @dst: destination clip rectangle >> + * @src: source clip rectangle(s), can be NULL >> + * @num_clips: number of source clip rectangles >> + * @flags: drm_mode_fb_dirty_cmd flags (DRM_MODE_FB_DIRTY_ANNOTATE_COPY) >> + * @width: width of clip rectangle if @src is NULL >> + * @height: height of clip rectangle if @src is NULL >> + * >> + * The dirtyfb ioctl allows for a NULL clip rectangle to be passed in, >> + * so if @src is NULL, width and height is used to set a full clip rect= angle. >> + * @dst takes part in the merge unless it is empty {0,0,0,0}. >> + */ >> +void drm_clip_rect_merge(struct drm_clip_rect *dst, >> + struct drm_clip_rect *src, unsigned num_clips, >> + unsigned flags, u32 width, u32 height) >> +{ >> + int i; >> + >> + if (!src || !num_clips) { >> + dst->x1 =3D 0; >> + dst->x2 =3D width; >> + dst->y1 =3D 0; >> + dst->y2 =3D height; >> + return; >> + } >> + >> + if (drm_clip_rect_is_empty(dst)) { >> + dst->x1 =3D ~0; >> + dst->y1 =3D ~0; >> + } >> + >> + for (i =3D 0; i < num_clips; i++) { >> + if (flags & DRM_MODE_FB_DIRTY_ANNOTATE_COPY) >> + i++; >> + dst->x1 =3D min(dst->x1, src[i].x1); >> + dst->x2 =3D max(dst->x2, src[i].x2); >> + dst->y1 =3D min(dst->y1, src[i].y1); >> + dst->y2 =3D max(dst->y2, src[i].y2); >> + } >> +} >> +EXPORT_SYMBOL(drm_clip_rect_merge); >> diff --git a/include/drm/drm_rect.h b/include/drm/drm_rect.h >> index 83bb156..936ad8d 100644 >> --- a/include/drm/drm_rect.h >> +++ b/include/drm/drm_rect.h >> @@ -24,6 +24,8 @@ >> #ifndef DRM_RECT_H >> #define DRM_RECT_H >> =20 >> +#include >> + >> /** >> * DOC: rect utils >> * >> @@ -171,4 +173,71 @@ void drm_rect_rotate_inv(struct drm_rect *r, >> int width, int height, >> unsigned int rotation); >> =20 >> +/** >> + * drm_clip_rect_width - determine the clip rectangle width >> + * @r: clip rectangle whose width is returned >> + * >> + * RETURNS: >> + * The width of the clip rectangle. >> + */ >> +static inline int drm_clip_rect_width(const struct drm_clip_rect *r) >> +{ >> + return r->x2 - r->x1; >> +} >> + >> +/** >> + * drm_clip_rect_height - determine the clip rectangle height >> + * @r: clip rectangle whose height is returned >> + * >> + * RETURNS: >> + * The height of the clip rectangle. >> + */ >> +static inline int drm_clip_rect_height(const struct drm_clip_rect *r) >> +{ >> + return r->y2 - r->y1; >> +} >> + >> +/** >> + * drm_clip_rect_visible - determine if the the clip rectangle is visib= le >> + * @r: clip rectangle whose visibility is returned >> + * >> + * RETURNS: >> + * %true if the clip rectangle is visible, %false otherwise. >> + */ >> +static inline bool drm_clip_rect_visible(const struct drm_clip_rect *r) >> +{ >> + return drm_clip_rect_width(r) > 0 && drm_clip_rect_height(r) > 0; >> +} >> + >> +/** >> + * drm_clip_rect_reset - Reset clip rectangle >> + * @clip: clip rectangle >> + * >> + * Sets clip rectangle to {0,0,0,0}. >> + */ >> +static inline void drm_clip_rect_reset(struct drm_clip_rect *clip) >> +{ >> + clip->x1 =3D 0; >> + clip->x2 =3D 0; >> + clip->y1 =3D 0; >> + clip->y2 =3D 0; >> +} >> + >> +/** >> + * drm_clip_rect_is_empty - Is clip rectangle empty? >> + * @clip: clip rectangle >> + * >> + * Returns true if clip rectangle is {0,0,0,0}. >> + */ >> +static inline bool drm_clip_rect_is_empty(struct drm_clip_rect *clip) >> +{ >> + return (!clip->x1 && !clip->x2 && !clip->y1 && !clip->y2); >> +} >> + >> +bool drm_clip_rect_intersect(struct drm_clip_rect *r1, >> + const struct drm_clip_rect *r2); >> +void drm_clip_rect_merge(struct drm_clip_rect *dst, >> + struct drm_clip_rect *src, unsigned num_clips, >> + unsigned flags, u32 width, u32 height); >> + >> #endif >> --=20 >> 2.2.2 >> >> _______________________________________________ >> dri-devel mailing list >> dri-devel@lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/dri-devel From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= Subject: Re: [PATCH v2 1/8] drm/rect: Add some drm_clip_rect utility functions Date: Mon, 25 Apr 2016 14:55:52 +0200 Message-ID: <571E13D8.4060100@tronnes.org> References: <1461530942-22485-1-git-send-email-noralf@tronnes.org> <1461530942-22485-2-git-send-email-noralf@tronnes.org> <20160425123907.GY4329@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from smtp.domeneshop.no (smtp.domeneshop.no [IPv6:2a01:5b40:0:3005::1]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8D1676E14B for ; Mon, 25 Apr 2016 12:56:04 +0000 (UTC) In-Reply-To: <20160425123907.GY4329@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: =?UTF-8?B?VmlsbGUgU3lyasOkbMOk?= Cc: linux-fbdev@vger.kernel.org, tomi.valkeinen@ti.com, laurent.pinchart@ideasonboard.com, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org CkRlbiAyNS4wNC4yMDE2IDE0OjM5LCBza3JldiBWaWxsZSBTeXJqw6Rsw6Q6Cj4gT24gU3VuLCBB cHIgMjQsIDIwMTYgYXQgMTA6NDg6NTVQTSArMDIwMCwgTm9yYWxmIFRyw7hubmVzIHdyb3RlOgo+ PiBBZGQgc29tZSB1dGlsaXR5IGZ1bmN0aW9ucyBmb3Igc3RydWN0IGRybV9jbGlwX3JlY3QuCj4g TG9va3MgbGlrZSBtb3N0bHkgeW91J3JlIGp1c3QgZHVwbGljYXRpbmcgdGhlIGRybV9yZWN0IHN0 dWZmLiBXaHkgY2FuJ3QKPiB5b3UgdXNlIHdoYXQncyB0aGVyZSBhbHJlYWR5PwoKVGhhdCdzIGJl Y2F1c2UgdGhlIGZyYW1lYnVmZmVyIGZsdXNoaW5nIHVzZXMgZHJtX2NsaXBfcmVjdCBhbmQgbm90 IGRybV9yZWN0OgoKc3RydWN0IGRybV9mcmFtZWJ1ZmZlcl9mdW5jcyB7ClsuLi5dCiAgICAgICAg IGludCAoKmRpcnR5KShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwKICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LCB1bnNpZ25lZCBmbGFn cywKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNvbG9yLCBzdHJ1Y3QgZHJtX2NsaXBf cmVjdCAqY2xpcHMsCiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1fY2xpcHMpOwp9 OwoKPj4gU2lnbmVkLW9mZi1ieTogTm9yYWxmIFRyw7hubmVzIDxub3JhbGZAdHJvbm5lcy5vcmc+ Cj4+IC0tLQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9kcm1fcmVjdC5jIHwgNjcgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gICBpbmNsdWRlL2RybS9kcm1fcmVj dC5oICAgICB8IDY5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKPj4gICAyIGZpbGVzIGNoYW5nZWQsIDEzNiBpbnNlcnRpb25zKCspCj4+Cj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3JlY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmVj dC5jCj4+IGluZGV4IGE4ZTJjODYuLmE5ZmIxYTggMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9kcm1fcmVjdC5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmVjdC5jCj4+IEBA IC00MzQsMyArNDM0LDcwIEBAIHZvaWQgZHJtX3JlY3Rfcm90YXRlX2ludihzdHJ1Y3QgZHJtX3Jl Y3QgKnIsCj4+ICAgCX0KPj4gICB9Cj4+ICAgRVhQT1JUX1NZTUJPTChkcm1fcmVjdF9yb3RhdGVf aW52KTsKPj4gKwo+PiArLyoqCj4+ICsgKiBkcm1fY2xpcF9yZWN0X2ludGVyc2VjdCAtIGludGVy c2VjdCB0d28gY2xpcCByZWN0YW5nbGVzCj4+ICsgKiBAcjE6IGZpcnN0IGNsaXAgcmVjdGFuZ2xl Cj4+ICsgKiBAcjI6IHNlY29uZCBjbGlwIHJlY3RhbmdsZQo+PiArICoKPj4gKyAqIENhbGN1bGF0 ZSB0aGUgaW50ZXJzZWN0aW9uIG9mIGNsaXAgcmVjdGFuZ2xlcyBAcjEgYW5kIEByMi4KPj4gKyAq IEByMSB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggdGhlIGludGVyc2VjdGlvbi4KPj4gKyAqCj4+ ICsgKiBSRVRVUk5TOgo+PiArICogJXRydWUgaWYgcmVjdGFuZ2xlIEByMSBpcyBzdGlsbCB2aXNp YmxlIGFmdGVyIHRoZSBvcGVyYXRpb24sCj4+ICsgKiAlZmFsc2Ugb3RoZXJ3aXNlLgo+PiArICov Cj4+ICtib29sIGRybV9jbGlwX3JlY3RfaW50ZXJzZWN0KHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpy MSwKPj4gKwkJCSAgICAgY29uc3Qgc3RydWN0IGRybV9jbGlwX3JlY3QgKnIyKQo+PiArewo+PiAr CXIxLT54MSA9IG1heChyMS0+eDEsIHIyLT54MSk7Cj4+ICsJcjEtPnkxID0gbWF4KHIxLT55MSwg cjItPnkxKTsKPj4gKwlyMS0+eDIgPSBtaW4ocjEtPngyLCByMi0+eDIpOwo+PiArCXIxLT55MiA9 IG1pbihyMS0+eTIsIHIyLT55Mik7Cj4+ICsKPj4gKwlyZXR1cm4gZHJtX2NsaXBfcmVjdF92aXNp YmxlKHIxKTsKPj4gK30KPj4gK0VYUE9SVF9TWU1CT0woZHJtX2NsaXBfcmVjdF9pbnRlcnNlY3Qp Owo+PiArCj4+ICsvKioKPj4gKyAqIGRybV9jbGlwX3JlY3RfbWVyZ2UgLSBNZXJnZSBjbGlwIHJl Y3RhbmdsZXMKPj4gKyAqIEBkc3Q6IGRlc3RpbmF0aW9uIGNsaXAgcmVjdGFuZ2xlCj4+ICsgKiBA c3JjOiBzb3VyY2UgY2xpcCByZWN0YW5nbGUocyksIGNhbiBiZSBOVUxMCj4+ICsgKiBAbnVtX2Ns aXBzOiBudW1iZXIgb2Ygc291cmNlIGNsaXAgcmVjdGFuZ2xlcwo+PiArICogQGZsYWdzOiBkcm1f bW9kZV9mYl9kaXJ0eV9jbWQgZmxhZ3MgKERSTV9NT0RFX0ZCX0RJUlRZX0FOTk9UQVRFX0NPUFkp Cj4+ICsgKiBAd2lkdGg6IHdpZHRoIG9mIGNsaXAgcmVjdGFuZ2xlIGlmIEBzcmMgaXMgTlVMTAo+ PiArICogQGhlaWdodDogaGVpZ2h0IG9mIGNsaXAgcmVjdGFuZ2xlIGlmIEBzcmMgaXMgTlVMTAo+ PiArICoKPj4gKyAqIFRoZSBkaXJ0eWZiIGlvY3RsIGFsbG93cyBmb3IgYSBOVUxMIGNsaXAgcmVj dGFuZ2xlIHRvIGJlIHBhc3NlZCBpbiwKPj4gKyAqIHNvIGlmIEBzcmMgaXMgTlVMTCwgd2lkdGgg YW5kIGhlaWdodCBpcyB1c2VkIHRvIHNldCBhIGZ1bGwgY2xpcCByZWN0YW5nbGUuCj4+ICsgKiBA ZHN0IHRha2VzIHBhcnQgaW4gdGhlIG1lcmdlIHVubGVzcyBpdCBpcyBlbXB0eSB7MCwwLDAsMH0u Cj4+ICsgKi8KPj4gK3ZvaWQgZHJtX2NsaXBfcmVjdF9tZXJnZShzdHJ1Y3QgZHJtX2NsaXBfcmVj dCAqZHN0LAo+PiArCQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpzcmMsIHVuc2lnbmVkIG51bV9j bGlwcywKPj4gKwkJCSB1bnNpZ25lZCBmbGFncywgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0KQo+PiAr ewo+PiArCWludCBpOwo+PiArCj4+ICsJaWYgKCFzcmMgfHwgIW51bV9jbGlwcykgewo+PiArCQlk c3QtPngxID0gMDsKPj4gKwkJZHN0LT54MiA9IHdpZHRoOwo+PiArCQlkc3QtPnkxID0gMDsKPj4g KwkJZHN0LT55MiA9IGhlaWdodDsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gKwo+PiArCWlmIChk cm1fY2xpcF9yZWN0X2lzX2VtcHR5KGRzdCkpIHsKPj4gKwkJZHN0LT54MSA9IH4wOwo+PiArCQlk c3QtPnkxID0gfjA7Cj4+ICsJfQo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IG51bV9jbGlwczsg aSsrKSB7Cj4+ICsJCWlmIChmbGFncyAmIERSTV9NT0RFX0ZCX0RJUlRZX0FOTk9UQVRFX0NPUFkp Cj4+ICsJCQlpKys7Cj4+ICsJCWRzdC0+eDEgPSBtaW4oZHN0LT54MSwgc3JjW2ldLngxKTsKPj4g KwkJZHN0LT54MiA9IG1heChkc3QtPngyLCBzcmNbaV0ueDIpOwo+PiArCQlkc3QtPnkxID0gbWlu KGRzdC0+eTEsIHNyY1tpXS55MSk7Cj4+ICsJCWRzdC0+eTIgPSBtYXgoZHN0LT55Miwgc3JjW2ld LnkyKTsKPj4gKwl9Cj4+ICt9Cj4+ICtFWFBPUlRfU1lNQk9MKGRybV9jbGlwX3JlY3RfbWVyZ2Up Owo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3JlY3QuaCBiL2luY2x1ZGUvZHJtL2Ry bV9yZWN0LmgKPj4gaW5kZXggODNiYjE1Ni4uOTM2YWQ4ZCAxMDA2NDQKPj4gLS0tIGEvaW5jbHVk ZS9kcm0vZHJtX3JlY3QuaAo+PiArKysgYi9pbmNsdWRlL2RybS9kcm1fcmVjdC5oCj4+IEBAIC0y NCw2ICsyNCw4IEBACj4+ICAgI2lmbmRlZiBEUk1fUkVDVF9ICj4+ICAgI2RlZmluZSBEUk1fUkVD VF9ICj4+ICAgCj4+ICsjaW5jbHVkZSA8dWFwaS9kcm0vZHJtLmg+Cj4+ICsKPj4gICAvKioKPj4g ICAgKiBET0M6IHJlY3QgdXRpbHMKPj4gICAgKgo+PiBAQCAtMTcxLDQgKzE3Myw3MSBAQCB2b2lk IGRybV9yZWN0X3JvdGF0ZV9pbnYoc3RydWN0IGRybV9yZWN0ICpyLAo+PiAgIAkJCSBpbnQgd2lk dGgsIGludCBoZWlnaHQsCj4+ICAgCQkJIHVuc2lnbmVkIGludCByb3RhdGlvbik7Cj4+ICAgCj4+ ICsvKioKPj4gKyAqIGRybV9jbGlwX3JlY3Rfd2lkdGggLSBkZXRlcm1pbmUgdGhlIGNsaXAgcmVj dGFuZ2xlIHdpZHRoCj4+ICsgKiBAcjogY2xpcCByZWN0YW5nbGUgd2hvc2Ugd2lkdGggaXMgcmV0 dXJuZWQKPj4gKyAqCj4+ICsgKiBSRVRVUk5TOgo+PiArICogVGhlIHdpZHRoIG9mIHRoZSBjbGlw IHJlY3RhbmdsZS4KPj4gKyAqLwo+PiArc3RhdGljIGlubGluZSBpbnQgZHJtX2NsaXBfcmVjdF93 aWR0aChjb25zdCBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqcikKPj4gK3sKPj4gKwlyZXR1cm4gci0+ eDIgLSByLT54MTsKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBkcm1fY2xpcF9yZWN0X2hlaWdo dCAtIGRldGVybWluZSB0aGUgY2xpcCByZWN0YW5nbGUgaGVpZ2h0Cj4+ICsgKiBAcjogY2xpcCBy ZWN0YW5nbGUgd2hvc2UgaGVpZ2h0IGlzIHJldHVybmVkCj4+ICsgKgo+PiArICogUkVUVVJOUzoK Pj4gKyAqIFRoZSBoZWlnaHQgb2YgdGhlIGNsaXAgcmVjdGFuZ2xlLgo+PiArICovCj4+ICtzdGF0 aWMgaW5saW5lIGludCBkcm1fY2xpcF9yZWN0X2hlaWdodChjb25zdCBzdHJ1Y3QgZHJtX2NsaXBf cmVjdCAqcikKPj4gK3sKPj4gKwlyZXR1cm4gci0+eTIgLSByLT55MTsKPj4gK30KPj4gKwo+PiAr LyoqCj4+ICsgKiBkcm1fY2xpcF9yZWN0X3Zpc2libGUgLSBkZXRlcm1pbmUgaWYgdGhlIHRoZSBj bGlwIHJlY3RhbmdsZSBpcyB2aXNpYmxlCj4+ICsgKiBAcjogY2xpcCByZWN0YW5nbGUgd2hvc2Ug dmlzaWJpbGl0eSBpcyByZXR1cm5lZAo+PiArICoKPj4gKyAqIFJFVFVSTlM6Cj4+ICsgKiAldHJ1 ZSBpZiB0aGUgY2xpcCByZWN0YW5nbGUgaXMgdmlzaWJsZSwgJWZhbHNlIG90aGVyd2lzZS4KPj4g KyAqLwo+PiArc3RhdGljIGlubGluZSBib29sIGRybV9jbGlwX3JlY3RfdmlzaWJsZShjb25zdCBz dHJ1Y3QgZHJtX2NsaXBfcmVjdCAqcikKPj4gK3sKPj4gKwlyZXR1cm4gZHJtX2NsaXBfcmVjdF93 aWR0aChyKSA+IDAgJiYgZHJtX2NsaXBfcmVjdF9oZWlnaHQocikgPiAwOwo+PiArfQo+PiArCj4+ ICsvKioKPj4gKyAqIGRybV9jbGlwX3JlY3RfcmVzZXQgLSBSZXNldCBjbGlwIHJlY3RhbmdsZQo+ PiArICogQGNsaXA6IGNsaXAgcmVjdGFuZ2xlCj4+ICsgKgo+PiArICogU2V0cyBjbGlwIHJlY3Rh bmdsZSB0byB7MCwwLDAsMH0uCj4+ICsgKi8KPj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBkcm1fY2xp cF9yZWN0X3Jlc2V0KHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwKQo+PiArewo+PiArCWNsaXAt PngxID0gMDsKPj4gKwljbGlwLT54MiA9IDA7Cj4+ICsJY2xpcC0+eTEgPSAwOwo+PiArCWNsaXAt PnkyID0gMDsKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBkcm1fY2xpcF9yZWN0X2lzX2VtcHR5 IC0gSXMgY2xpcCByZWN0YW5nbGUgZW1wdHk/Cj4+ICsgKiBAY2xpcDogY2xpcCByZWN0YW5nbGUK Pj4gKyAqCj4+ICsgKiBSZXR1cm5zIHRydWUgaWYgY2xpcCByZWN0YW5nbGUgaXMgezAsMCwwLDB9 Lgo+PiArICovCj4+ICtzdGF0aWMgaW5saW5lIGJvb2wgZHJtX2NsaXBfcmVjdF9pc19lbXB0eShz dHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcCkKPj4gK3sKPj4gKwlyZXR1cm4gKCFjbGlwLT54MSAm JiAhY2xpcC0+eDIgJiYgIWNsaXAtPnkxICYmICFjbGlwLT55Mik7Cj4+ICt9Cj4+ICsKPj4gK2Jv b2wgZHJtX2NsaXBfcmVjdF9pbnRlcnNlY3Qoc3RydWN0IGRybV9jbGlwX3JlY3QgKnIxLAo+PiAr CQkJICAgICBjb25zdCBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqcjIpOwo+PiArdm9pZCBkcm1fY2xp cF9yZWN0X21lcmdlKHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpkc3QsCj4+ICsJCQkgc3RydWN0IGRy bV9jbGlwX3JlY3QgKnNyYywgdW5zaWduZWQgbnVtX2NsaXBzLAo+PiArCQkJIHVuc2lnbmVkIGZs YWdzLCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQpOwo+PiArCj4+ICAgI2VuZGlmCj4+IC0tIAo+PiAy LjIuMgo+Pgo+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xwo+PiBkcmktZGV2ZWwgbWFpbGluZyBsaXN0Cj4+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKPj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9k cmktZGV2ZWwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932533AbcDYM4G (ORCPT ); Mon, 25 Apr 2016 08:56:06 -0400 Received: from smtp.domeneshop.no ([194.63.252.55]:35648 "EHLO smtp.domeneshop.no" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932496AbcDYM4E (ORCPT ); Mon, 25 Apr 2016 08:56:04 -0400 Subject: Re: [PATCH v2 1/8] drm/rect: Add some drm_clip_rect utility functions To: =?UTF-8?B?VmlsbGUgU3lyasOkbMOk?= References: <1461530942-22485-1-git-send-email-noralf@tronnes.org> <1461530942-22485-2-git-send-email-noralf@tronnes.org> <20160425123907.GY4329@intel.com> Cc: dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org, tomi.valkeinen@ti.com, laurent.pinchart@ideasonboard.com, linux-kernel@vger.kernel.org From: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= Message-ID: <571E13D8.4060100@tronnes.org> Date: Mon, 25 Apr 2016 14:55:52 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.7.1 MIME-Version: 1.0 In-Reply-To: <20160425123907.GY4329@intel.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Den 25.04.2016 14:39, skrev Ville Syrjälä: > On Sun, Apr 24, 2016 at 10:48:55PM +0200, Noralf Trønnes wrote: >> Add some utility functions for struct drm_clip_rect. > Looks like mostly you're just duplicating the drm_rect stuff. Why can't > you use what's there already? That's because the framebuffer flushing uses drm_clip_rect and not drm_rect: struct drm_framebuffer_funcs { [...] int (*dirty)(struct drm_framebuffer *framebuffer, struct drm_file *file_priv, unsigned flags, unsigned color, struct drm_clip_rect *clips, unsigned num_clips); }; >> Signed-off-by: Noralf Trønnes >> --- >> drivers/gpu/drm/drm_rect.c | 67 ++++++++++++++++++++++++++++++++++++++++++++ >> include/drm/drm_rect.h | 69 ++++++++++++++++++++++++++++++++++++++++++++++ >> 2 files changed, 136 insertions(+) >> >> diff --git a/drivers/gpu/drm/drm_rect.c b/drivers/gpu/drm/drm_rect.c >> index a8e2c86..a9fb1a8 100644 >> --- a/drivers/gpu/drm/drm_rect.c >> +++ b/drivers/gpu/drm/drm_rect.c >> @@ -434,3 +434,70 @@ void drm_rect_rotate_inv(struct drm_rect *r, >> } >> } >> EXPORT_SYMBOL(drm_rect_rotate_inv); >> + >> +/** >> + * drm_clip_rect_intersect - intersect two clip rectangles >> + * @r1: first clip rectangle >> + * @r2: second clip rectangle >> + * >> + * Calculate the intersection of clip rectangles @r1 and @r2. >> + * @r1 will be overwritten with the intersection. >> + * >> + * RETURNS: >> + * %true if rectangle @r1 is still visible after the operation, >> + * %false otherwise. >> + */ >> +bool drm_clip_rect_intersect(struct drm_clip_rect *r1, >> + const struct drm_clip_rect *r2) >> +{ >> + r1->x1 = max(r1->x1, r2->x1); >> + r1->y1 = max(r1->y1, r2->y1); >> + r1->x2 = min(r1->x2, r2->x2); >> + r1->y2 = min(r1->y2, r2->y2); >> + >> + return drm_clip_rect_visible(r1); >> +} >> +EXPORT_SYMBOL(drm_clip_rect_intersect); >> + >> +/** >> + * drm_clip_rect_merge - Merge clip rectangles >> + * @dst: destination clip rectangle >> + * @src: source clip rectangle(s), can be NULL >> + * @num_clips: number of source clip rectangles >> + * @flags: drm_mode_fb_dirty_cmd flags (DRM_MODE_FB_DIRTY_ANNOTATE_COPY) >> + * @width: width of clip rectangle if @src is NULL >> + * @height: height of clip rectangle if @src is NULL >> + * >> + * The dirtyfb ioctl allows for a NULL clip rectangle to be passed in, >> + * so if @src is NULL, width and height is used to set a full clip rectangle. >> + * @dst takes part in the merge unless it is empty {0,0,0,0}. >> + */ >> +void drm_clip_rect_merge(struct drm_clip_rect *dst, >> + struct drm_clip_rect *src, unsigned num_clips, >> + unsigned flags, u32 width, u32 height) >> +{ >> + int i; >> + >> + if (!src || !num_clips) { >> + dst->x1 = 0; >> + dst->x2 = width; >> + dst->y1 = 0; >> + dst->y2 = height; >> + return; >> + } >> + >> + if (drm_clip_rect_is_empty(dst)) { >> + dst->x1 = ~0; >> + dst->y1 = ~0; >> + } >> + >> + for (i = 0; i < num_clips; i++) { >> + if (flags & DRM_MODE_FB_DIRTY_ANNOTATE_COPY) >> + i++; >> + dst->x1 = min(dst->x1, src[i].x1); >> + dst->x2 = max(dst->x2, src[i].x2); >> + dst->y1 = min(dst->y1, src[i].y1); >> + dst->y2 = max(dst->y2, src[i].y2); >> + } >> +} >> +EXPORT_SYMBOL(drm_clip_rect_merge); >> diff --git a/include/drm/drm_rect.h b/include/drm/drm_rect.h >> index 83bb156..936ad8d 100644 >> --- a/include/drm/drm_rect.h >> +++ b/include/drm/drm_rect.h >> @@ -24,6 +24,8 @@ >> #ifndef DRM_RECT_H >> #define DRM_RECT_H >> >> +#include >> + >> /** >> * DOC: rect utils >> * >> @@ -171,4 +173,71 @@ void drm_rect_rotate_inv(struct drm_rect *r, >> int width, int height, >> unsigned int rotation); >> >> +/** >> + * drm_clip_rect_width - determine the clip rectangle width >> + * @r: clip rectangle whose width is returned >> + * >> + * RETURNS: >> + * The width of the clip rectangle. >> + */ >> +static inline int drm_clip_rect_width(const struct drm_clip_rect *r) >> +{ >> + return r->x2 - r->x1; >> +} >> + >> +/** >> + * drm_clip_rect_height - determine the clip rectangle height >> + * @r: clip rectangle whose height is returned >> + * >> + * RETURNS: >> + * The height of the clip rectangle. >> + */ >> +static inline int drm_clip_rect_height(const struct drm_clip_rect *r) >> +{ >> + return r->y2 - r->y1; >> +} >> + >> +/** >> + * drm_clip_rect_visible - determine if the the clip rectangle is visible >> + * @r: clip rectangle whose visibility is returned >> + * >> + * RETURNS: >> + * %true if the clip rectangle is visible, %false otherwise. >> + */ >> +static inline bool drm_clip_rect_visible(const struct drm_clip_rect *r) >> +{ >> + return drm_clip_rect_width(r) > 0 && drm_clip_rect_height(r) > 0; >> +} >> + >> +/** >> + * drm_clip_rect_reset - Reset clip rectangle >> + * @clip: clip rectangle >> + * >> + * Sets clip rectangle to {0,0,0,0}. >> + */ >> +static inline void drm_clip_rect_reset(struct drm_clip_rect *clip) >> +{ >> + clip->x1 = 0; >> + clip->x2 = 0; >> + clip->y1 = 0; >> + clip->y2 = 0; >> +} >> + >> +/** >> + * drm_clip_rect_is_empty - Is clip rectangle empty? >> + * @clip: clip rectangle >> + * >> + * Returns true if clip rectangle is {0,0,0,0}. >> + */ >> +static inline bool drm_clip_rect_is_empty(struct drm_clip_rect *clip) >> +{ >> + return (!clip->x1 && !clip->x2 && !clip->y1 && !clip->y2); >> +} >> + >> +bool drm_clip_rect_intersect(struct drm_clip_rect *r1, >> + const struct drm_clip_rect *r2); >> +void drm_clip_rect_merge(struct drm_clip_rect *dst, >> + struct drm_clip_rect *src, unsigned num_clips, >> + unsigned flags, u32 width, u32 height); >> + >> #endif >> -- >> 2.2.2 >> >> _______________________________________________ >> dri-devel mailing list >> dri-devel@lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/dri-devel