Basically I'm already drawing decals on top of various flat surfaces and that works great.
As soon as the decal approaches the edge of a surface, naturally it doesn't get clipped.
Is there a way to add simple clipping by comparing the value in stored depth buffer, with the depth value (Z) of the decal pixel to be written?
If the depth value about to be written is ~about the same (is within a range), the decal pixel gets drawn, otherwise discarded. Decals don't write to depth-buffer themselves.