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 - ps、 if_comp - ps 或 break_comp - ps。
Loop计数器寄存器
Loop计数器寄存器 (aL) 是此模型的新增功能。 它在循环的每个执行 (psendloop/ - ps 块)中自动递增。 如果需要,可以在块中使用它进行相对寻址。 在循环外部使用Loop计数器寄存器无效。
位置寄存器
位置寄存器 (vPos) 是此模型的新增功能。 它包含相应通道中的当前像素 (x、y) 。 (z、w) 通道未定义。 此寄存器需要声明,因此未声明的用法将标记为错误。 声明后,此寄存器必须具有以下掩码之一:.x、.y、.xy。
输入寄存器类型
注册 | 名称 | Count | R/W | # 读取端口 | # 读取/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 | 否 | 无 | 否 |
相关主题