[PATCH 03/14] drm: clear plane damage during full modeset

Deepak Singh Rawat drawat at vmware.com
Thu Sep 6 21:47:30 UTC 2018


> >  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);
> 
> I'm not 100% sure this is the best place to put this. I'm also wondering
> whether we should clear damage when moving planes between crtc on top
> of
> this. But I guess vmwgfx doesn't allow that, we can figure this out when
> the first driver with moveable planes adds damage support.

Yes I agree this is not the best place but it was the one with minimal code
change. IMO should have a separate function for clearing damage.

> >  	}
> >  }
> >
> > 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
> 
> A bit more kerneldoc would be good. Maybe explain how that impacts the
> damage iterator - you get full damage after calling this, which is a bit
> confusing for a function called clear_damage. So definitely worth
> explaining.
> 
> With the kerneldoc beefed up:

Agreed.

> 
> Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> 
> > + */
> > +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;
> > +}
> > +
> >  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


More information about the dri-devel mailing list