命令トークンは、実行する特定の操作をドライバーに通知し、次のビットで構成されます。
ビット
[15:00] ビット 0 から 15 は 操作コードを示します。 D3DSIO_* は操作コードの例であり、ここで* は命令を表します。 たとえば、次のコード スニペットは ADD 命令を示しています。
// D3DSIO_ADD d, s1, s2
[23:16] ビット 16 から 23 は、操作コードに関連する特定のコントロールを示します。
[27:24] 2_0 より前のバージョンのピクセル シェーダーと頂点シェーダーの場合、ビット 24 から 27 は予約され、0x0に設定されます。
ピクセル シェーダー バージョン 2_0 以降の場合、ビット 24 から 27 では、命令トークン自体を除く命令の DWORD 単位のサイズ (つまり、命令トークンを除く命令を構成するトークンの数) を指定します。
[28] ピクセルシェーダーおよび頂点シェーダーのバージョンが2_0より前の場合、ビット28は予約済みで、0x0に設定されます。
ピクセル シェーダー と頂点シェーダー バージョン 2_0 以降の場合、ビット 28 は命令が述語化されているかどうかを示します (つまり、シェーダー コードの末尾に追加の述語ソース トークンが含まれています)。 このビットが 0x1 に設定されている場合、命令は述語付きです。
[29] 予約済み。 この値は 0x0 に設定されます。
[30] 2_0 より前のバージョンのピクセル シェーダーでは、ビット 30 が併発行ビットです。 1 に設定されている場合は、前の手順でこの命令を実行します。それ以外の場合は、個別に実行します。
ピクセル シェーダー バージョン 2_0 以降とすべての頂点シェーダー バージョンの場合、ビット 30 は予約され、0x0に設定されます。
[31] ビット 31 はゼロ (0x0) です。
コメント
命令トークンのビット 0 から 15 で指定できる操作の詳細については、最新の DirectX SDK ドキュメントのピクセル シェーダーリファレンスと頂点シェーダー リファレンスを参照してください。
DirectX3D ランタイムがアプリケーションからシェーダー コードを受け取った後、ランタイムはコードを検証してから、コードをドライバーに渡します。 通常、ランタイムはアセンブラー命令に "D3DSIO_" というプレフィックスを付けて操作コードを作成します。 たとえば、次のアセンブラー命令はカーネル モード操作に対応しています。
| アセンブラー命令 | カーネル モード操作 |
|---|---|
追加する |
D3DSIO_ADD |
mov |
D3DSIO_MOV |
サブ |
D3DSIO_SUB |
テックス |
D3DSIO_TEX |
texcoord |
D3DSIO_TEXCOORD |
すべての頂点シェーダー バージョンでは、 サブ アセンブラー命令は、2 番目のソースセットのソース修飾子 (ビット 27:24) をネゲート (0x1) したD3DSIO_ADD操作として実装されることに注意してください。
tex 命令と texcoord 命令は、ピクセル シェーダー バージョン 1_0 から 1_3 に適用されます。各命令には、1 つの宛先パラメーターが関連付けられています。
texld 命令と texcrd 命令は、ピクセル シェーダー バージョン 1_4 以降の新機能です。各命令には、宛先パラメーターとソース パラメーターの両方が関連付けられています。
ランタイムは 、tex および texld アセンブラー命令をD3DSIO_TEXカーネル モード操作に変換します。 ランタイムは 、texcoord および texcrd アセンブラー命令をD3DSIO_TEXCOORDカーネル モード操作に変換します。 ドライバーはまずシェーダー コードのピクセル シェーダー バージョンを確認し、それに応じて命令を処理します。 たとえば、ドライバーがD3DSIO_TEX操作でバージョン 1_4 ピクセル シェーダー コードを受信したことを確認した場合、ドライバーは、変換先パラメーターとソース パラメーターが命令トークンに従うと判断します。
必要条件
Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。