シェーダーのコンパイル

HLSL コンパイラでシェーダーとエフェクトをコンパイルする方法は、2 とおりあります。

内部的には、HLSL コンパイラは、Direct3D 10 に最初に導入された新しいバージョン (DirectX December 2006 SDK により)、および Direct3D 9 に導入されたレガシー コンパイラの 2 つのバージョンを実装します。シェーダーのコンパイルにレガシー コンパイラを使用することはお勧めしません。初期のピクセル シェーダーのハードウェア上の制約により、はるかに複雑になります。ただし、シェーダーまたはエフェクトのコンパイル時には、既定のコンパイラとレガシー コンパイラのいずれも使用できます。

既定のコンパイラは、ハードウェアへの依存性が高かったコードを簡素化するシェーダー モデル 1 (特に ps_1_x シャーダー ターゲット) を直接サポートしなくなりました。シェーダー ターゲットを既存のコード内のシェーダー モデル 2 以上に変更しなくてすむようにするには、すべての ps_1_x ターゲットを ps_2_0 ターゲットに昇格させるようにコンパイラに通知する /Gec スイッチを使用します。

シェーダーをレガシー コンパイラでコンパイルする必要がある場合は、API に適切なフラグを指定するか、シェーダーコンパイラ ツールにコマンドライン スイッチを指定することで実行できます。

ps_1_x ターゲットを指定するエフェクトは、代わりに ps_2_0 ターゲットをコンパイルします。これは DirectX 10 コンパイラによってサポートされている最小のシェーダー バージョンであるためです。このスイッチには、上位レベルのコンパイル ターゲットで使用される場合、エフェクトはありません。

API 呼び出しを使用して DirectX 9 HLSL コンパイラを使用してシェーダーをコンパイルするには、D3DXSHADER_USE_LEGACY_D3DX9_31_DLL フラグを使用します。アプリケーションでこのフラグの使用を計画している場合、アプリケーションの再頒布可能パッケージに必ず OCT2006_d3dx9_31_x86.cab or OCT2006_d3dx9_31_x64.cab を含めるようにする必要があります。詳細については、「DirectSetup での DirectX のインストール」を参照してください。

関連トピック

HLSL のプログラミング ガイド