compositor: cache the surface positions