テンポラリ レジスタ

頂点シェーダー テンポラリ レジスタは、中間結果を格納するために使われます。

テンポラリ レジスタは、使用する前に初期化する必要があります。各テンポラリ レジスタでは、1 回の書き込みアクセスと 3 回の読み取りアクセスを行うことができます。つまり、1 回のシェーダー命令で、入力として 3 つのテンポラリ レジスタを使用できます。

頂点シェーダーによる前回の呼び出し後に残っているテンポラリ レジスタの中の値を使用することはできません。

レジスタは、各レジスタの動作方法を規定するプロパティで構成されます。

プロパティ 説明
名前 v[n]。n はオプションのレジスタ番号です。既定値は 0 です。値が指定されないとこの値が使用されます。
最大 12 個のレジスタです。
I/O 許可 読み取り/書き込み。このレジスタは、API またはシェーダーから読み書きすることができます。
読み取りポート 1 つの命令内でレジスタを読み取ることができる回数は 3 回です。テンポラリ レジスタは、1 つの命令で複数回の読み取りと書き込みができる唯一のレジスタです。

各テンポラリ レジスタでは、1 回の書き込みアクセスと 3 回の読み取りアクセスを行うことができます。したがって、1 つの命令は、入力ソース オペランドのセットで最大 3 個のテンポラリ レジスタを使うことができます。

頂点シェーダーによる前回の呼び出し後に残っているテンポラリ レジスタの中の値を使用することはできません。頂点シェーダーが書き込みの前にテンポラリ レジスタから値を読み取ると、その頂点シェーダーを作成する Direct3DAPI の呼び出しは失敗します。

次に、テンポラリ レジスタの使用例を示します。

def c4, 0,0,0,1
...
// Decompress position
mov r0.x, v0.x
mov r0.y, c4.w       // 1
mov r0.z, v0.y
mov r0.w, c4.w       // 1

// Compute theta from distance and time
mov r4.xz, r0        // xz
頂点シェーダーのバージョン 1_1 2_0 2_sw 2_x 3_0 3_sw
テンポラリ レジスタ x x x x x x