From: Sinclair Yeh <syeh@vmware.com> To: Deepak Rawat <drawat@vmware.com> Cc: dri-devel@lists.freedesktop.org, thellstrom@vmware.com, linux-graphics-maintainer@vmware.com, daniel@ffwll.ch, ville.syrjala@linux.intel.com, lukasz.spintzyk@displaylink.com, noralf@tronnes.org, robdclark@gmail.com, gustavo@padovan.org, maarten.lankhorst@linux.intel.com, seanpaul@chromium.org, airlied@linux.ie, linux-kernel@vger.kernel.org Subject: Re: [RFC 2/3] drm: Add helper iterator functions to iterate over plane damage. Date: Thu, 5 Apr 2018 10:55:11 -0700 [thread overview] Message-ID: <20180405175510.GA10092@vmware.com> (raw) In-Reply-To: <1522885748-67122-3-git-send-email-drawat@vmware.com> On Wed, Apr 04, 2018 at 04:49:07PM -0700, Deepak Rawat wrote: > With damage property in drm_plane_state, this patch adds helper iterator > to traverse the damage clips. Iterator will return the damage rectangles > in framebuffer, plane or crtc coordinates as need by driver > implementation. > > Signed-off-by: Deepak Rawat <drawat@vmware.com> > --- > drivers/gpu/drm/drm_atomic_helper.c | 122 ++++++++++++++++++++++++++++++++++++ > include/drm/drm_atomic_helper.h | 39 ++++++++++++ > 2 files changed, 161 insertions(+) > > diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c > index 55b44e3..355b514 100644 > --- a/drivers/gpu/drm/drm_atomic_helper.c > +++ b/drivers/gpu/drm/drm_atomic_helper.c > @@ -3865,3 +3865,125 @@ void __drm_atomic_helper_private_obj_duplicate_state(struct drm_private_obj *obj > memcpy(state, obj->state, sizeof(*state)); > } > EXPORT_SYMBOL(__drm_atomic_helper_private_obj_duplicate_state); > + > +/** > + * drm_atomic_helper_damage_iter_init - initialize the damage iterator > + * @iter: The iterator to initialize. > + * @type: Coordinate type caller is interested in. > + * @state: plane_state from which to iterate the damage clips. > + * @hdisplay: Width of crtc on which plane is scanned out. > + * @vdisplay: Height of crtc on which plane is scanned out. > + * > + * Initialize an iterator that is used to translate and clip a set of damage > + * rectangles in framebuffer coordinates to plane and crtc coordinates. The type > + * argument specify which type of coordinate to iterate in. > + * > + * Returns: 0 on success and negative error code on error. If an error code is > + * returned then it means the plane state should not update. > + */ > +int > +drm_atomic_helper_damage_iter_init(struct drm_atomic_helper_damage_iter *iter, > + enum drm_atomic_helper_damage_clip_type type, > + const struct drm_plane_state *state, > + uint32_t hdisplay, uint32_t vdisplay) > +{ > + if (!state || !state->crtc || !state->fb) > + return -EINVAL; > + > + memset(iter, 0, sizeof(*iter)); > + iter->clips = (struct drm_rect *)state->damage_clips->data; > + iter->num_clips = state->num_clips; > + iter->type = type; > + > + /* > + * Full update in case of scaling or rotation. In future support for > + * scaling/rotating damage clips can be added > + */ > + if (state->crtc_w != (state->src_w >> 16) || > + state->crtc_h != state->src_h >> 16 || state->rotation != 0) { > + iter->curr_clip = iter->num_clips; > + return 0; > + } > + > + iter->fb_src.x1 = 0; > + iter->fb_src.y1 = 0; > + iter->fb_src.x2 = state->fb->width; > + iter->fb_src.y2 = state->fb->height; > + > + iter->plane_src.x1 = state->src_x >> 16; > + iter->plane_src.y1 = state->src_y >> 16; > + iter->plane_src.x2 = iter->plane_src.x1 + (state->src_w >> 16); > + iter->plane_src.y2 = iter->plane_src.y1 + (state->src_h >> 16); > + iter->translate_plane_x = -iter->plane_src.x1; > + iter->translate_plane_y = -iter->plane_src.y1; > + > + /* Clip plane src rect to fb dimensions */ > + drm_rect_intersect(&iter->plane_src, &iter->fb_src); > + > + iter->crtc_src.x1 = 0; > + iter->crtc_src.y1 = 0; > + iter->crtc_src.x2 = hdisplay; > + iter->crtc_src.y2 = vdisplay; > + iter->translate_crtc_x = -(iter->plane_src.x1 - state->crtc_x); > + iter->translate_crtc_x = -(iter->plane_src.y1 - state->crtc_y); ^ I believe you mean translate_crtc_y here > + > + /* Clip crtc src rect to plane dimensions */ > + drm_rect_translate(&iter->crtc_src, -iter->translate_crtc_x, > + -iter->translate_crtc_x); Also here ^
WARNING: multiple messages have this Message-ID (diff)
From: Sinclair Yeh <syeh@vmware.com> To: Deepak Rawat <drawat@vmware.com> Cc: thellstrom@vmware.com, airlied@linux.ie, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-graphics-maintainer@vmware.com, lukasz.spintzyk@displaylink.com Subject: Re: [RFC 2/3] drm: Add helper iterator functions to iterate over plane damage. Date: Thu, 5 Apr 2018 10:55:11 -0700 [thread overview] Message-ID: <20180405175510.GA10092@vmware.com> (raw) In-Reply-To: <1522885748-67122-3-git-send-email-drawat@vmware.com> On Wed, Apr 04, 2018 at 04:49:07PM -0700, Deepak Rawat wrote: > With damage property in drm_plane_state, this patch adds helper iterator > to traverse the damage clips. Iterator will return the damage rectangles > in framebuffer, plane or crtc coordinates as need by driver > implementation. > > Signed-off-by: Deepak Rawat <drawat@vmware.com> > --- > drivers/gpu/drm/drm_atomic_helper.c | 122 ++++++++++++++++++++++++++++++++++++ > include/drm/drm_atomic_helper.h | 39 ++++++++++++ > 2 files changed, 161 insertions(+) > > diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c > index 55b44e3..355b514 100644 > --- a/drivers/gpu/drm/drm_atomic_helper.c > +++ b/drivers/gpu/drm/drm_atomic_helper.c > @@ -3865,3 +3865,125 @@ void __drm_atomic_helper_private_obj_duplicate_state(struct drm_private_obj *obj > memcpy(state, obj->state, sizeof(*state)); > } > EXPORT_SYMBOL(__drm_atomic_helper_private_obj_duplicate_state); > + > +/** > + * drm_atomic_helper_damage_iter_init - initialize the damage iterator > + * @iter: The iterator to initialize. > + * @type: Coordinate type caller is interested in. > + * @state: plane_state from which to iterate the damage clips. > + * @hdisplay: Width of crtc on which plane is scanned out. > + * @vdisplay: Height of crtc on which plane is scanned out. > + * > + * Initialize an iterator that is used to translate and clip a set of damage > + * rectangles in framebuffer coordinates to plane and crtc coordinates. The type > + * argument specify which type of coordinate to iterate in. > + * > + * Returns: 0 on success and negative error code on error. If an error code is > + * returned then it means the plane state should not update. > + */ > +int > +drm_atomic_helper_damage_iter_init(struct drm_atomic_helper_damage_iter *iter, > + enum drm_atomic_helper_damage_clip_type type, > + const struct drm_plane_state *state, > + uint32_t hdisplay, uint32_t vdisplay) > +{ > + if (!state || !state->crtc || !state->fb) > + return -EINVAL; > + > + memset(iter, 0, sizeof(*iter)); > + iter->clips = (struct drm_rect *)state->damage_clips->data; > + iter->num_clips = state->num_clips; > + iter->type = type; > + > + /* > + * Full update in case of scaling or rotation. In future support for > + * scaling/rotating damage clips can be added > + */ > + if (state->crtc_w != (state->src_w >> 16) || > + state->crtc_h != state->src_h >> 16 || state->rotation != 0) { > + iter->curr_clip = iter->num_clips; > + return 0; > + } > + > + iter->fb_src.x1 = 0; > + iter->fb_src.y1 = 0; > + iter->fb_src.x2 = state->fb->width; > + iter->fb_src.y2 = state->fb->height; > + > + iter->plane_src.x1 = state->src_x >> 16; > + iter->plane_src.y1 = state->src_y >> 16; > + iter->plane_src.x2 = iter->plane_src.x1 + (state->src_w >> 16); > + iter->plane_src.y2 = iter->plane_src.y1 + (state->src_h >> 16); > + iter->translate_plane_x = -iter->plane_src.x1; > + iter->translate_plane_y = -iter->plane_src.y1; > + > + /* Clip plane src rect to fb dimensions */ > + drm_rect_intersect(&iter->plane_src, &iter->fb_src); > + > + iter->crtc_src.x1 = 0; > + iter->crtc_src.y1 = 0; > + iter->crtc_src.x2 = hdisplay; > + iter->crtc_src.y2 = vdisplay; > + iter->translate_crtc_x = -(iter->plane_src.x1 - state->crtc_x); > + iter->translate_crtc_x = -(iter->plane_src.y1 - state->crtc_y); ^ I believe you mean translate_crtc_y here > + > + /* Clip crtc src rect to plane dimensions */ > + drm_rect_translate(&iter->crtc_src, -iter->translate_crtc_x, > + -iter->translate_crtc_x); Also here ^ _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2018-04-05 17:58 UTC|newest] Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-04-04 23:49 [RFC 0/3] drm: page-flip with damage Deepak Rawat 2018-04-04 23:49 ` Deepak Rawat 2018-04-04 23:49 ` [RFC 1/3] drm: Add DAMAGE_CLIPS property to plane Deepak Rawat 2018-04-04 23:49 ` Deepak Rawat 2018-04-05 7:35 ` Daniel Vetter 2018-04-05 9:00 ` Thomas Hellstrom 2018-04-05 9:00 ` Thomas Hellstrom 2018-04-05 10:03 ` Daniel Vetter 2018-04-05 10:03 ` Daniel Vetter 2018-04-05 11:35 ` Thomas Hellstrom 2018-04-05 13:47 ` Daniel Vetter 2018-04-05 13:47 ` Daniel Vetter 2018-04-05 13:58 ` Thomas Hellstrom 2018-04-05 11:42 ` Thomas Hellstrom 2018-04-05 11:42 ` Thomas Hellstrom 2018-04-05 13:49 ` Daniel Vetter 2018-04-05 13:49 ` Daniel Vetter 2018-04-05 23:07 ` Deepak Singh Rawat 2018-04-05 23:07 ` Deepak Singh Rawat 2018-04-09 8:33 ` Daniel Vetter 2018-04-09 8:33 ` Daniel Vetter 2018-04-09 16:44 ` Deepak Singh Rawat 2018-04-10 8:10 ` Lukasz Spintzyk 2018-04-04 23:49 ` [RFC 2/3] drm: Add helper iterator functions to iterate over plane damage Deepak Rawat 2018-04-04 23:49 ` Deepak Rawat 2018-04-05 7:52 ` Daniel Vetter 2018-04-05 7:52 ` Daniel Vetter 2018-04-05 8:49 ` Thomas Hellstrom 2018-04-05 8:49 ` Thomas Hellstrom 2018-04-05 10:10 ` Daniel Vetter 2018-04-05 10:10 ` Daniel Vetter 2018-04-05 11:51 ` Thomas Hellstrom 2018-04-05 11:51 ` Thomas Hellstrom 2018-04-05 13:52 ` Daniel Vetter 2018-04-05 13:52 ` Daniel Vetter 2018-04-05 8:51 ` Thomas Hellstrom 2018-04-05 8:51 ` Thomas Hellstrom 2018-04-05 13:54 ` Daniel Vetter 2018-04-05 13:54 ` Daniel Vetter 2018-04-05 23:59 ` Deepak Singh Rawat 2018-04-05 23:59 ` Deepak Singh Rawat 2018-04-09 8:35 ` Daniel Vetter 2018-04-09 8:35 ` Daniel Vetter 2018-04-05 23:19 ` Deepak Singh Rawat 2018-04-05 23:19 ` Deepak Singh Rawat 2018-04-05 17:55 ` Sinclair Yeh [this message] 2018-04-05 17:55 ` Sinclair Yeh 2018-04-04 23:49 ` [RFC 3/3] drm: Add helper to validate damage during modeset_check Deepak Rawat 2018-04-04 23:49 ` Deepak Rawat 2018-04-05 7:59 ` Daniel Vetter 2018-04-05 7:59 ` Daniel Vetter 2018-04-05 23:55 ` Deepak Singh Rawat 2018-04-05 23:55 ` Deepak Singh Rawat 2018-04-09 8:38 ` Daniel Vetter 2018-04-09 8:38 ` Daniel Vetter 2018-04-05 7:19 ` [RFC 0/3] drm: page-flip with damage Daniel Vetter 2018-04-05 7:19 ` Daniel Vetter 2018-04-05 18:43 ` Deepak Singh Rawat 2018-04-05 18:43 ` Deepak Singh Rawat 2018-04-10 8:10 ` Lukasz Spintzyk 2018-04-10 18:56 ` Deepak Singh Rawat 2018-04-10 18:56 ` Deepak Singh Rawat
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=20180405175510.GA10092@vmware.com \ --to=syeh@vmware.com \ --cc=airlied@linux.ie \ --cc=daniel@ffwll.ch \ --cc=drawat@vmware.com \ --cc=dri-devel@lists.freedesktop.org \ --cc=gustavo@padovan.org \ --cc=linux-graphics-maintainer@vmware.com \ --cc=linux-kernel@vger.kernel.org \ --cc=lukasz.spintzyk@displaylink.com \ --cc=maarten.lankhorst@linux.intel.com \ --cc=noralf@tronnes.org \ --cc=robdclark@gmail.com \ --cc=seanpaul@chromium.org \ --cc=thellstrom@vmware.com \ --cc=ville.syrjala@linux.intel.com \ /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: linkBe 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.