composite: Add exception mechanism for implicit redirection policy
authorKristian Høgsberg <krh@bitplanet.net>
Fri, 28 Mar 2014 05:15:28 +0000 (22:15 -0700)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 1 Apr 2014 17:31:09 +0000 (10:31 -0700)
commit4ba7b594464887ae68623e150348d90812eec36c
tree0ae85b522c0b308a592dc1bc3cb6716ba184d3c9
parent73698d41e41ce76bef2d9a90b46ac0c24ae148dd
composite: Add exception mechanism for implicit redirection policy

Normally composite will decide to add implicit redirection when a
window with an alternate visual is a parent of a window with a regular
visual or vice versa.  This uses extra pixmap memory and incurs an extra
copy.  This exception mechanism provides a way for a DDX to override this
if the DDX knows that its acceleration architecture will render correctly.

The relevant case is that of an RGB window reparented into a ARGB parent
frame window.  If the DDX knows that the acceleration architecture in use
will pad the alpha channel to opaque when rendering to the RGB window,
the implicit redirection can be avoided.

This patch adds a new composite function:

  CompositeRegisterImplicitRedirectionException()

which lets a DDX register a pair of parent and child window visuals, that
will not be implicitly redirected even if the normal policy would have
made that choice.

Signed-off-by: Kristian Høgsberg <krh@bitplanet.net>
Reviewed-by: Keith Packard <keithp@keithp.com>
composite/compinit.c
composite/compint.h
composite/compositeext.h
composite/compwindow.c