Direct3D の HLSL コンパイラは Microsoft が用意しており、共通のバイトコードを 生成しています。 実行時はさらにドライバが GPU 毎のネイティブコードに最適化&変換を行っています。 一見二度手間ですが、最初の最適化は共通バイトコードへの変換時に済んでいます。 時間のかかる巨大なシェーダーでも事前に変換しておくことが可能だし、コンパイラ部の 最適化の恩恵はすべての GPU で受けられます。 ドライバも共通コードからの変換だけ行えばよいので、互換性も比較的維持しやすいのでは ないかと考えられます。 その代わり一度バイナリにしてしまうと、コンパイルした時点のコンパイラの能力である程度 固定されます。あとからコンパイラが強化される可能性もあるし、GPU が ShaderModel 5.0 対応になっても、3.0 向けにコンパイルしたシェーダーで能力を出し切れるとは限りませ