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 対応のレジスタを使用して中間結果を格納できます。 これには、一部のシェーダー バージョンの一時レジスタとテクスチャ レジスタが含まれます。
手記
- ピクセル シェーダー バージョン 1_4 では、テクスチャ レジスタはテクスチャ アドレス指定命令の RO であり、テクスチャ レジスタは算術命令から読み取ることも書き込みもできません。 また、テクスチャ レジスタはテクスチャ座標レジスタになっているため、RO アクセス権を持つことは以前の機能の回帰ではありません。
範囲
範囲は、レジスタデータの最大値と最小値です。 範囲はレジスタの種類によって異なります。 一部のレジスタの範囲は、GetDeviceCapsを使用して、デバイスの大文字から照会できます。
名前 | 種類 | 範囲 | バージョン |
---|---|---|---|
c# | 定数レジスタ | -1 から +1 | すべてのバージョン |
r# | 一時登録 | - PixelShader1xMaxValue to + PixelShader1xMaxValue | すべてのバージョン |
t# | テクスチャ レジスタ | - MaxTextureRepeat から + MaxTextureRepeat | すべてのバージョン |
v# | カラー レジスタ | 0 から 1 | すべてのバージョン |
初期ピクセル シェーダー ハードウェアは、固定小数点番号を使用してレジスタ内のデータを表します。 これにより、数値の小数部の有効桁数は最大で約 8 ビットに制限されます。 シェーダーを設計するときは、この点に注意してください。
ピクセル シェーダー バージョン 1_1 から 1_3 の場合、MaxTextureRepeat は 1 つ以上である必要があります。 1_4 の場合、MaxTextureRepeat は 8 以上である必要があります。
PixelShader1xMaxValue の詳細については、D3DCAPS9 を参照してください。
関連トピック