material: Don't prune ancestry if it owns some layers
material: Don't prune ancestry if it owns some layers

Each time a material property changes we look to see if any of its
ancestry has become redundant and if so we prune that redundant
ancestry.

There was a problem with the logic that handles this though because we
weren't considering that a material which is a layer state authority may
still defer to ancestors to define the state of individual layers.

For example a material that derives from a parent with 5 layers can
become a STATE_LAYERS authority by simply changing it's ->n_layers count
to 4 and in that case it can still defer to its ancestors to define the
state of those 4 layers.

This patch checks first if a material is a layer state authority and if
so only tries to prune its ancestry if it also *owns* all the individual
layers it depends on. (I.e. if g_list_length
(material->layer_differences) != material->n_layers then it's not safe
to try pruning its ancestry!)

http://bugzilla-attachments.gnome.org/attachment.cgi?id=170907

gcampax/cogl,gcampax/cogl,Distrotech/cogl,gcampax/cogl,spatulasnout/cogl,djdeath/cogl-android,Distrotech/cogl,djdeath/cogl-android,collects/cogl,spatulasnout/cogl,Distrotech/cogl,gcampax/cogl,djdeath/cogl,djdeath/cogl,Distrotech/cogl,djdeath/cogl,collects/cogl,djdeath/cogl-android