On Wed, Sep 05, 2018 at 04:38:50PM -0700, Deepak Rawat wrote: > Plane damage is irrelevant when full modeset happens so clear the damage > blob property(If set by user-space). With damage blob cleared damage > helper iterator will return full plane src as damage clip. > > Signed-off-by: Deepak Rawat <drawat@xxxxxxxxxx> > --- > drivers/gpu/drm/drm_atomic_helper.c | 4 ++++ > include/drm/drm_damage_helper.h | 10 ++++++++++ > 2 files changed, 14 insertions(+) > > diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c > index be83e2763c18..e06d2d5d582f 100644 > --- a/drivers/gpu/drm/drm_atomic_helper.c > +++ b/drivers/gpu/drm/drm_atomic_helper.c > @@ -31,6 +31,7 @@ > #include <drm/drm_crtc_helper.h> > #include <drm/drm_atomic_helper.h> > #include <drm/drm_writeback.h> > +#include <drm/drm_damage_helper.h> > #include <linux/dma-fence.h> > > #include "drm_crtc_helper_internal.h" > @@ -88,6 +89,9 @@ drm_atomic_helper_plane_changed(struct drm_atomic_state *state, > return; > > crtc_state->planes_changed = true; > + > + if (drm_atomic_crtc_needs_modeset(crtc_state)) > + drm_plane_clear_damage(plane_state); So if we sometimes magically clear it, where do we reinitialize it with the user provided damage for the next update? > } > } > > diff --git a/include/drm/drm_damage_helper.h b/include/drm/drm_damage_helper.h > index f1282b459a4f..1f988f7fdd72 100644 > --- a/include/drm/drm_damage_helper.h > +++ b/include/drm/drm_damage_helper.h > @@ -71,6 +71,16 @@ drm_plane_get_damage_clips(const struct drm_plane_state *state) > state->fb_damage_clips->data : NULL); > } > > +/** > + * drm_plane_clear_damage - clears damage blob in a plane state > + * @state: Plane state > + */ > +static inline void drm_plane_clear_damage(struct drm_plane_state *state) > +{ > + drm_property_blob_put(state->fb_damage_clips); > + state->fb_damage_clips = NULL; Ah. So you're trying to clear out the user provided damage here. That doesn't really seem like sane sematics to me. Either the user provided damage should stick always instead of just sometimes, or it should always be cleared once the update is done (ie. could clear in duplicate_state() in that case). > +} > + > void drm_plane_enable_fb_damage_clips(struct drm_plane *plane); > int > drm_atomic_helper_damage_iter_init(struct drm_atomic_helper_damage_iter *iter, > -- > 2.17.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Ville Syrjälä Intel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel