ps_1_1__ps_1_2__ps_1_3__ps_1_4 レジスタ
ピクセル シェーダーは、頂点データを取得し、ピクセル データを出力し、計算中に一時的な結果を保持し、テクスチャ サンプリング ステージを識別するためにレジスタに依存します。 レジスタにはいくつかの種類があり、それぞれに固有の機能があります。 このセクションには、ピクセル シェーダー バージョン 1_Xによって実装される入力レジスタと出力レジスタの参照情報が含まれています。
ピクセル シェーダーで使用する保留データを登録します。 レジスタについては、次のセクションで完全に説明します。
- レジスタの種類では、使用可能な 4 種類のレジスタとその目的について説明します。
- 1 つの命令で複数のレジスタを使用する場合の制限の詳細については、「ポート制限」を参照してください。
- 読み取り専用読み取り書き込み読み取り、書き込み、またはその両方に使用できるレジスタについて説明します。
- 範囲は、コンポーネント データの範囲を詳細に示します。
型の登録
名前 | 型 | バージョン 1_1 | バージョン 1_2 | バージョン 1_3 | バージョン 1_4 |
---|---|---|---|---|---|
c# | 定数レジスタ | 8 | 8 | 8 | 8 |
R# | 一時登録 | 2 | 2 | 2 | 6 |
T# | テクスチャ レジスタ | 4 | 4 | 4 | 6 |
V# | カラー レジスタ | 2 | 2 | 2 | フェーズ 2 の 2 |
定数レジスタには定数データが含まれます。 SetPixelShaderConstantF を使用して定数レジスタにデータを読み込んだり、def - ps を使用して定義したりできます。 定数レジスタは、テクスチャ アドレス命令では使用できません。 唯一の例外は 、texm3x3spec - ps 命令です。これは、定数レジスタを使用して視線ベクトルを提供します。
一時レジスタは、中間結果を格納するために使用されます。 r0 は、ピクセル シェーダー出力としても機能します。 シェーダーの末尾の r0 の値は、シェーダーのピクセルカラーです。
シェーダーの検証は、前の命令によって書き込まれていない一時レジスタから読み取ろうとするすべてのシェーダーで CreatePixelShader に失敗します。 D3DXAssembleShader も同様に失敗します。検証が有効になっていると仮定します (D3DXSHADER_SKIPVALIDATIONは使用しないでください)。
テクスチャ レジスタ
ピクセル シェーダー バージョン 1_1 から 1_3 の場合、テクスチャ レジスタにはテクスチャ データまたはテクスチャ座標が含まれます。 テクスチャ データは、テクスチャのサンプリング時にテクスチャ レジスタに読み込まれます。 テクスチャ サンプリングでは、テクスチャ座標を使用して、テクスチャ ステージの状態属性を考慮しながら、指定された (u,v,w,q) 座標の色値を検索またはサンプリングします。 テクスチャ座標データは頂点テクスチャ座標データから補間され、特定のテクスチャ ステージに関連付けられます。 テクスチャ ステージ番号とテクスチャ座標宣言順序の間には、既定の 1 対 1 の関連付けがあります。 既定では、頂点形式で定義されたテクスチャ座標の最初のセットは、テクスチャ ステージ 0 に関連付けられます。
これらのピクセル シェーダー バージョンでは、テクスチャ レジスタは、算術命令で使用される場合、一時レジスタと同様に動作します。
ピクセル シェーダー バージョン 1_4 の場合、テクスチャ レジスタ (t#) には読み取り専用のテクスチャ座標データが含まれます。 つまり、テクスチャ座標セットとテクスチャ ステージ番号は相互に独立しています。 テクスチャ ステージ番号 (テクスチャのサンプリング元) は、宛先レジスタ番号 (r0 から r5) によって決定されます。 texld 命令の場合、テクスチャ座標セットはソース レジスタ (t0 から t5) によって決定されるため、テクスチャ座標セットは任意のテクスチャ ステージにマップできます。 さらに、texld のソース レジスタ (テクスチャ座標を指定) は一時レジスタ (r#) にすることもできます。この場合、一時レジスタの内容がテクスチャ座標として使用されます。
カラー レジスタには、ピクセルごとの色値が含まれます。 値は、頂点データ内の拡散と反射色の値のピクセルごとの反復によって取得されます。 ピクセル シェーダー バージョン 1_4 シェーダーの場合、カラー レジスタは 2 番目のフェーズでのみ使用できます。
シェーディング モードがD3DSHADE_FLATに設定されている場合、頂点カラー (拡散と反射) の両方の反復が無効になります。 ピクセル 霧が有効になっている場合、シェーディング モードに関係なく、霧はパイプラインによって反復処理されます。 パイプラインの後で、ピクセルシャドウよりも後で霧が適用されることを覚えておいてください。
v0 レジスタを頂点拡散カラー データと共に読み込むのが一般的です。 頂点反射カラー データを使用して v1 レジスタを読み込むのも一般的です。
入力カラー データの値は、ピクセル シェーダーのカラー レジスタの有効な入力範囲であるため、0 ~ 1 の範囲にクランプ (飽和) されます。
ピクセル シェーダーは、カラー レジスタへの読み取り専用アクセス権を持っています。 これらのレジスタの内容は反復値ですが、反復はテクスチャ座標よりもはるかに低い精度で実行できます。
読み取りポートの制限
読み取りポートの制限は、1 つの命令でソース レジスタとして使用できる各レジスタの種類の異なるレジスタの数を指定します。
名前 | 型 | バージョン 1_1 | バージョン 1_2 | バージョン 1_3 | バージョン 1_4 |
---|---|---|---|---|---|
c# | 定数レジスタ | 2 | 2 | 2 | 2 |
R# | 一時登録 | 2 | 2 | 2 | 3 |
T# | テクスチャ レジスタ | 2 | 3 | 3 | 1 |
V# | カラー レジスタ | 2 | 2 | 2 | フェーズ 2 の 2 |
たとえば、ほぼすべてのバージョンのカラー レジスタの読み取りポート制限は 2 です。 つまり、1 つの命令で最大 2 つの異なるカラー レジスタ (v0 と v1 など) をソース レジスタとして使用できます。 この例では、同じ命令で使用されている 2 つのカラー レジスタを示します。
mad r0, v1, c2, v0
読み取り専用、読み取り/書き込み
レジスタの種類は、次の表の読み取り専用 (RO) 機能または読み取り/書き込み (RW) 機能に従って識別されます。 読み取り専用レジスタは、命令のソース レジスタとしてのみ使用できます。これらは宛先レジスタとして使用できません。
名前 | 型 | バージョン 1_1 | バージョン 1_2 | バージョン 1_3 | バージョン 1_4 |
---|---|---|---|---|---|
名前 | 型 | 1_1 | 1_2 | 1_3 | 1_4 |
c# | 定数レジスタ | RO | RO | RO | RO |
R# | 一時レジスタ | RW | RW | RW | RW |
T# | テクスチャ レジスタ | RW | RW | RW | 次の注を参照してください |
V# | カラー レジスタ | RO | RO | RO | RO |
RW 対応のレジスタを使用して、中間結果を格納できます。 これには、一部のシェーダー バージョンの一時レジスタとテクスチャ レジスタが含まれます。
Note
- ピクセル シェーダー バージョン 1_4 では、テクスチャ レジスタはテクスチャ アドレス指定命令の RO であり、テクスチャ レジスタは算術命令による読み取りも書き込みもできません。 また、テクスチャ レジスタはテクスチャ座標レジスタになっているため、RO アクセス権を持つことは、以前の機能の回帰ではありません。
範囲
範囲は、レジスタデータの最大値と最小値です。 範囲はレジスタの種類によって異なります。 一部のレジスタの範囲は、 GetDeviceCaps を使用してデバイス キャップから照会できます。
名前 | 種類 | 範囲 | バージョン |
---|---|---|---|
c# | 定数レジスタ | -1 から +1 | すべてのバージョン |
R# | 一時レジスタ | - PixelShader1xMaxValue から + PixelShader1xMaxValue | すべてのバージョン |
T# | テクスチャ レジスタ | - MaxTextureRepeat から + MaxTextureRepeat | すべてのバージョン |
V# | カラー レジスタ | 0 から 1 | すべてのバージョン |
初期ピクセル シェーダー ハードウェアは、固定小数点番号を使用してレジスタ内のデータを表します。 これにより、数値の小数部の有効桁数は最大で約 8 ビットに制限されます。 シェーダーを設計するときは、この点に注意してください。
ピクセル シェーダー バージョン 1_1 から 1_3 の場合、MaxTextureRepeat は 1 つ以上である必要があります。 1_4 の場合、MaxTextureRepeat は 8 以上である必要があります。
PixelShader1xMaxValue の詳細については、「 D3DCAPS9 」を参照してください。
関連トピック