(thanks to Mart Raudsepp for getting me started with much of the info below)
Core reading list
- Porter-Duff academic paper defines the fundamentals of compositing
- The render spec implements porter-duff fundamentals
- exa.h defines a layer that allows drivers to hardware-accelerate the render extension
To find code paths that aren't being accelerated that would potentially be worth accelerating, look at the CheckComposite/PrepareComposite calls in the driver that return FALSE. The geode driver has some optional logging here, skimming the logs will give an idea.
Also, in the xserver EXA code there is a macro which can be enabled to report fallback cases in a driver-independent manner. EXA also has some helper functions which can be used to print details of the operation.
Some CheckComposite/PrepareComposite failures won't directly result in software rendering - sometimes EXA will then break the operation into multiple operations and see if the driver can accelerate those.
- X11 composite tutorial
- How to handle out-of-source coordinates with compositing
- rendercheck as a render/EXA test suite