指令修饰符在写入目标寄存器之前影响指令的结果。
本部分包含由像素着色器版本 2_0 及更高版本实现的指令修饰符的参考信息。
名字 | 语法 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|
质心 | _质心 | x | x | x | x | x |
Partial_Precision | _pp | x | x | x | x | x |
饱和 | _坐 | x | x | x | x | x |
质心
质心修饰符是可选的修饰符,当基元未覆盖多重采样像素中心时,该修饰符在基元范围内固定属性内插。 这可以在 质心采样中看到。
可以将质心修饰符应用于程序集指令,如下所示:
dcl_texcoord0_centroid v0
还可以将质心修饰符应用于语义,如下所示:
float4 TexturePointCentroidPS( float4 TexCoord : TEXCOORD0_centroid ) : COLOR0
{
return tex2D( PointSampler, TexCoord );
}
此外,使用颜色语义声明的任何 输入颜色寄存器(v#)将自动应用质心。 从质心采样的属性计算的渐变不能保证准确。
部分精度
部分精度指令修饰符(_pp)指示部分精度可接受的区域,前提是基础实现支持它。 实现始终可以自由地忽略修饰符,并完全精确执行受影响的作。
_pp修饰符可以在两个上下文中发生:
- 在纹理坐标声明中,启用以部分精度形式将纹理坐标传递到像素着色器。 例如,这允许使用纹理坐标将颜色数据中继到像素着色器,这可能比某些实现中的全精度更快。 如果没有此修饰符,则必须以完全精度传递纹理坐标。
- 在任何指令上,包括纹理加载指令。 这表示允许实现以部分精度执行指令,并存储部分精度结果。 如果没有显式修饰符,则必须以完全精度执行指令(无论输入精度如何)。
例子:
dcl_texcoord0_pp t1
cmp_pp r0, r1, r2, r3
饱和
在写入目标寄存器之前,饱和指令修饰符(_sat)将指令结果饱和(或固定)到范围 [0, 1]。
_sat指令修饰符可用于除 frc - ps、sincos - ps和任何 tex* 指令之外的任何指令。
对于ps_2_0、ps_2_x和ps_2_sw,_sat指令修饰符不能与写入任何输出寄存器的说明一起使用(输出颜色寄存器 或 输出深度寄存器)。 此限制不适用于ps_3_0及更高版本。
例:
dp3_sat r0, v0, c1
相关主题