Instruction modifiers affect the result of the instruction before it is written into the destination register.
This section contains reference information for the instruction modifiers implemented by pixel shader version 2_0 and above.
Name | Syntax | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|
Centroid | _centroid | x | x | x | x | x |
Partial_Precision | _pp | x | x | x | x | x |
Saturate | _sat | x | x | x | x | x |
The centroid modifier is an optional modifier that clamps attribute interpolation within the range of the primitive when a multisample pixel center is not covered by the primitive. This can be seen in Centroid Sampling.
You can apply the centroid modifier to an assembly instruction as shown here:
dcl_texcoord0_centroid v0
You can also apply the centroid modifier to a semantic as shown here:
float4 TexturePointCentroidPS( float4 TexCoord : TEXCOORD0_centroid ) : COLOR0 { return tex2D( PointSampler, TexCoord ); }
In addition, any Input Color Register (v#) declared with a color semantic will automatically have centroid applied. Gradients computed from attributes that are centroid sampled are not guaranteed to be accurate.
The partial precision instruction modifier (_pp) indicates areas where partial precision is acceptable, provided that the underlying implementation supports it. Implementations are always free to ignore the modifier and perform the affected operations in full precision.
The _pp modifier can occur in two contexts:
Examples:
dcl_texcoord0_pp t1 cmp_pp r0, r1, r2, r3
The saturate instruction modifier (_sat) saturates (or clamps) the instruction result to the range [0, 1] before writing to the destination register.
The _sat instruction modifier can be used with any instruction except frc - ps, sincos - ps, and any tex* instructions.
For ps_2_0, ps_2_x, and ps_2_sw, the _sat instruction modifier cannot be used with instructions writing to any output registers (Output Color Register or Output Depth Register). This restriction does not apply to ps_3_0 and above.
Example:
dp3_sat r0, v0, c1