■DirectX11環境でのDX9ハードウェア
DirectX11(D3D11)では、DX9ハードウェア上でも動作します。
正確には、DX9相当の機能を使う分には動作できるという感じです。
使用するAPIを変えなくてもDX9ハードウェアからDX11ハードウェアまで
動作できるというのは魅力ですが、何もしなくても動作するというのとはちがうようです。
新しい環境でも、古い環境でもそれぞれの出来る範囲で動作するということを考えたときには、
ハードウェアが備えているレベルに応じて処理を切り替えることが必要になります。
たとえば、DX10相当のハードとDX9のハードでは、使用できる定数レジスタのサイズが全く違います。軽く試してみたところ、vs_4_0_level_9_3のプロファイルで、大きな定数バッファを使用するHLSLシェーダーファイルはコンパイルに失敗します。
まぁ、そうなるだろうと予測していましたが、納得の症状です。
よって、ハードウェアを見ながら使用するシェーダーを変更する、ということが
それぞれの環境での最良のパフォーマンスを引き出すのには必要になります。