zink: add 'optimal keys' for shader variants
At this point in time, there are effectively two types of drivers that will be used with zink:
- optimal drivers that support all the best features
- the rest of the drivers
To this end, there is a lot of code that exists to handle the second group of drivers which reduces performance for the good drivers. By incrementally splitting this off, good drivers can continue to get improved performance.
This adds "optimal" shader keys, where the entirety of the shader key for an entire gfx pipeline is compressed into a 32bit uint, massively speeding up changing programs: a whopping 20% in the drawoverhead cases.