Another thing it might be nice to have, not necessarily now, is to gate `todo` on something else than shader model.
Right. I had a patch for "todo(gl)", but ended up ultimately not needing it. I'll need "todo(glsl)" soon enough though. It may be nice to have individual shader runners evaluate the condition inside todo/fail/etc., and avoid having to make changes to the core shader runner when adding/removing these; shouldn't be too hard.