I've decided to unroll my own shader permutation system using an uber-shader and macro-defines. Every permutation option is represented as a bit of a 32/64 bit bitfield. In order to make startup-time bearable, I want to precompile all definitions that are known to be used in a game based on the games material. So far so good, but I'm still missing a good way of checking whether a certain option is even supported by the shader. E.g. if I bind a material with a normal map texture, but the shader does not support normal mapping, whats a good way to see that from the code and skip compilation of the obvious unecessary permutation? What do you guys use for that case, or do you rely on the user to asign the materials in a senseful manner?