ps_3_0寄存器

像素着色器依赖于寄存器来获取顶点数据、输出像素数据、在计算期间保存临时结果以及标识纹理采样阶段。 有几种类型的寄存器,每个寄存器都具有独特的功能。 本部分包含由像素着色器版本 3_0 实现的输入和输出寄存器的参考信息。

新建寄存器

输入寄存器

输入寄存器(v#)现已完全浮点,纹理坐标寄存器s(t#)已合并到其中。 着色器顶部的 dcl_semantics(sm3 - ps asm) 用于描述特定Input_Register中包含的内容。 引入了像素类型的语义(类似于此模型的顶点端)。 当输入寄存器定义为颜色(如纹理坐标)时,不会执行任何固定。 定义为颜色的寄存器的计算与多重采样时纹理坐标不同。

人脸注册

此模型的人脸寄存器(vFace)是新的。 这是一个浮点标量寄存器,最终将包含基元区域。 但是,在ps_3_0中,只有此寄存器的符号有效。 因此,如果值小于零(符号位设置为负),则基元为后脸(区域为负,反时针)。 因此,在ps_3_0,将此寄存器与 0(> 0 或 < 0)进行比较才有意义。 在像素着色器中,应用程序可以决定要使用的照明技术。 可以通过这种方式实现双向照明。 此寄存器需要声明,因此未声明的使用将被标记为错误。 对于行和点基元,此寄存器是未定义的。 人脸寄存器只能用作以下说明的条件:setp_comp - psif_comp - psbreak_comp - ps

循环计数器寄存器

循环计数器寄存器(aL)是此模型的新增功能。 它在每次执行 循环时自动递增 - ps/endloop - ps 块。 如果需要,可以在块中使用它进行相对寻址。 在循环外部使用循环计数器寄存器无效。

位置寄存器

位置寄存器(vPos)是此模型的新增功能。 它包含相应通道中的当前像素(x,y)。 (z, w) 通道未定义。 此寄存器需要声明,因此未声明的使用将被标记为错误。 声明后,此寄存器必须正好具有以下掩码之一:.x、.y、.xy。

输入寄存器类型

注册 名字 计数 R/W # 读取端口 # Reads/inst 尺寸 RelAddr 违约 需要 DCL
v# 输入寄存器 10 R 1 无限 4 没有 是的
r# 临时注册 32 R/W 3 无限 4 没有
c# 常量浮点寄存器 224 R 1 无限 4 0000
我# 常量整数寄存器 16 R 1 1 4 0000
b# 常量布尔寄存器 16 R 1 1 1
p0 谓词注册 1 R 1 1 1 没有
s# 采样器 (Direct3D 9 asm-ps) 16 R 1 1 4 请参阅注释 1 是的
vFace Face_Register 1 R 1 无限 1 没有 是的
vPos Position_Register 1 R 1 无限 4 没有 是的
Loop_Counter_Register 1 R 1 无限 1 n/a 没有

 

笔记:

  • 采样器查找的默认值存在,但值取决于纹理格式。

读取端口数是可在单个指令中读取的不同寄存器数(对于每个寄存器类型)。

输出寄存器类型

注册 名字 计数 R/W 尺寸 RelAddr 违约 需要 DCL
oC# 输出颜色寄存器 请参阅 多元素纹理(Direct3D 9) W 4 没有
oDepth 输出深度寄存器 1 W 1 没有

 

注册