pepper: pepper_plane_t and per-plane damage processing
Plane is a logical rendering surface maintaing its own damage region. A plane
belongs to an output and a view can be on a plane per output at a time.
<< Overall Data Relationship >>
* Compositor
- output list
- view list in sorted z-order
* Output
- plane list
* Plane
- plane entry list
- damage region
- clip region (obscured by other planes)
* View
- Geometry (position, size, transform)
- plane entries
<< Output Repaint Scheduling >>
* surface.commit() causes all outputs to be scheduled to do repaint.
* Repaint is scheduled on an output when one of its plane gets damaged.
<< Output Repaint Process >>
* Update geometry of all views in the compositor.
* Build a list of views that overlap with the output rectangle.
* Ask output backend to assign a plane of each view in the list.
* Build a list of plane entries for the views assigned to each plane.
* Accumulate damage for each plane.
* Call backend.repaint()
<< Damage Processing >>
* Geometry & Z-order change
- Inflict damage instantly with current visible region of the view on each
plane where the view belongs to.
- Mark it as damaged. Damage accumulation function should add visible region
of damaged views to the planes.
* Plane move
- Inflict damage instantly on previous plane and mark it as damaged.
* Surface damage
- Added while accumulating plane damage.
Change-Id: I7c4bd95f439f0cf0356bcbf2f060b09800ea4528
23 files changed: