xbmc/xbmc — pull request #4143 by bavison (2014-02-04 12:08:09+00:00)
Title: Cache font vertices, GPU-side when possible

This is quite a complex change, so I've formulated it as a series of dependent patches.

The aim is to reduce CPU/GPU bandwidth by keeping the vertices describing each string of font glyphs in a cache on the GPU side. Simple transformations (just translations in practice) are also performed on the GPU without needing to re-transfer the vertices.

At the moment, the main benefit is only available to OpenGL ES clients (such as the Raspberry Pi). However, there is a lesser benefit to be gained by the use of a CPU-side version of the cache, which is used in other cases, as well as in Open GL cases where the selected transformation matrices rule out the use of hardware clipping.

I've benchmarked the typical rendering time of each frame on the main page of Confluence with RSS ticker and debug window enabled, on a non-overclocked Raspberry Pi:

Before After
Mean StdDev Mean StdDev Confidence Change
Time 20.5 3.8 18.2 3.8 100.0% +12.5%

In FPS terms, 20.5 ms is 48.8 FPS, 18.2 ms is 54.9 FPS.