iris: Create smaller program keys without legacy features
A lot of the brw_*_prog_key fields are for emulating features on legacy hardware that iris doesn't support. In particular, all of the texture swizzle fields take up a lot of space. These dead fields make hashing the shader keys more expensive than it ought to be.
We introduce iris-specific keys with only the information we need, and translate them to brw keys when actually compiling new variants. This way, key comparisons can use the small keys. The size reductions are:
- VS: 328 bytes -> 8 bytes
- TCS: 312 bytes -> 24 bytes
- TES: 304 bytes -> 24 bytes
- GS: 284 bytes -> 8 bytes
- FS: 304 bytes -> 16 bytes
- CS: 280 bytes -> 4 bytes
Scores for the Piglit drawoverhead microbenchmark case with a shader program change improve by roughly 30%.