createPrograms

Creates program objects based on shaders which are appropriate for each input format.

Each InputFormat may have different sampler requirements based on the dynamic range. For that reason, we create a separate program for each input format, and will switch to the program when the input format changes so we correctly sample the input texture (or no-op, in some cases).