That said... I kind of wonder if we could avoid it by just not passing vs_out as an input parameter? Since it's a global variable, do we even need to do that in the first place?
Ah, because we compile the setup_vs_output() function as a separate GL shader for sm3 (and only sm3). That's annoying, maybe we could stop doing that? Or would that end up being too expensive...
Possibly, although we'd potentially introduce more shader variants. Note that this isn't just about vs_out[] and gs_out[] though, there are warnings about temporaries too.