ps_3_0寄存器

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

新寄存器

输入寄存器

输入寄存器 (v#) 现在是完全浮点, 纹理坐标寄存器 (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。

输入寄存器类型

注册 名称 Count 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 false
P 谓词寄存器 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 不适用

 

注意:

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

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

输出寄存器类型

注册 名称 Count R/W 维度 RelAddr 默认值 需要 DCL
Oc# 输出颜色寄存器 请参阅 Direct3D 9 (多元素纹理) W 4
oDepth 输出深度寄存器 1 W 1

 

寄存器