glamor_glyphs: Use cache picture to store mask picture if possible.
authorZhigang Gong <zhigang.gong@linux.intel.com>
Tue, 3 Jul 2012 10:11:12 +0000 (18:11 +0800)
committerEric Anholt <eric@anholt.net>
Wed, 18 Dec 2013 19:23:52 +0000 (11:23 -0800)
commit0706423bcfd7a589bab3b41fe9f13d0b636ecdef
tree4d0a84ae1ff43b38245ef4ae870cde2a02f867a3
parent4d1a2173f2e5a200d1535a4a459fffd75cd5f779
glamor_glyphs: Use cache picture to store mask picture if possible.

 By default, mask picture is newly created, and each time we need to
 clear the whole mask picture, and then composite glyphs to the mask
 picture and then composite the mask picture to destination.

 Testing results shows that the filling of the mask picture takes a
 big portion of the rendering time. As we don't really need to clear
 the whole region, we just need to clear the real overlapped region.

 This commit is to solve this issue. We split a large glyphs list to
 serval lists and each list is non-overlapped or overlapped.

 we can reduce the length of overlapped glyphs to do the glyphs_via_mask
 to 2 or 3 glyphs one time for most cases. Thus it give us a case to allocate a
 small portion of the corresponding cache directly as the mask picture.
 Then we can rendering the glyphs to this mask picture, and latter we
 can accumulate the second steps, composite the mask to the dest with
 the other non-overlapped glyphs's rendering process.
 It also make us implement a batch mask cache blocks clearing
 algorithm to avoid too frequently small region clearing.

 If there is no any overlapping, this method will not get performance gain.
 If there is some overlapping, then this algorithm can get about 15% performance
 gain.

Signed-off-by: Zhigang Gong <zhigang.gong@linux.intel.com>
glamor/glamor_glyphs.c