This may require some special annotations in the code to decide which vertex/fragment function pairs are combined into pipelines.
A naming convention could be adopted (MyFunc_vertex, MyFunc_fragment) but that would preclude reusing the same vertex/fragment function for multiple pipelines.