@csherratt sure, we can match the input-outputs and store just indices, but this caching spawns more questions than it solves
That's half-truth. In fact, we don't want (of course) to match these strings at runtime, even if the comparison cost is low, because we'd still need to walk those mesh attributes for each shader attribute. instead, we just need to have that target index baked in somewhere. Perhaps, a single
HashMap<(ProgramHandle,MeshHandle), IndexSequence> will suffice.