ps_2_0及更高版本的修饰符

指令修饰符在写入目标寄存器之前影响指令的结果。

本部分包含由像素着色器版本 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 - pssincos - ps和任何 tex* 指令之外的任何指令。

对于ps_2_0、ps_2_x和ps_2_sw,_sat指令修饰符不能与写入任何输出寄存器的说明一起使用(输出颜色寄存器输出深度寄存器)。 此限制不适用于ps_3_0及更高版本。

例:

dp3_sat r0, v0, c1

像素着色器说明