临时注册 (HLSL VS 参考)

顶点着色器临时寄存器用于保存中间结果。

在使用临时寄存器之前,必须对其进行初始化。 每个临时寄存器都具有单写入和三次读取访问权限。 这意味着单个着色器指令可以使用多达三个临时寄存器作为输入。

临时寄存器中因先前调用顶点着色器而保留的值不能使用。

寄存器由确定每个寄存器的行为方式的属性组成。

属性 说明
名称 r[n]。 n 是可选的寄存器编号。 默认值为 0,如果未指定值,则为使用的值。
Count 最多 12 个寄存器。
I/O 权限 读/写。 此寄存器可由 API 或着色器读取或写入。
读取端口 可以在单个指令中读取寄存器的次数为 3。 临时寄存器是唯一可以在单个指令中多次读取和写入的寄存器。

 

每个临时寄存器都具有单写入和三次读取访问权限。 因此,指令在其输入源操作数集中可以有多达三个临时寄存器。

临时寄存器中不能使用先前调用顶点着色器后保留的值。 在写入临时寄存器之前从临时寄存器读取值的顶点着色器将无法通过 Direct3D API 调用来创建顶点着色器。

示例

下面是使用临时寄存器的示例:

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

 

顶点着色器寄存器