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

像素着色器说明