Modifierare för ps_2_0 och senare

Instruktionsmodifierare påverkar resultatet av instruktionen innan den skrivs in i målregistret.

Det här avsnittet innehåller referensinformation för instruktionsmodifierare som implementeras av pixelskuggningsversion 2_0 och senare.

Namn 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
Mättnad _suttit x x x x x

 

Centroid

Centroidmodifieraren är en valfri modifierare som klämmer fast attributinterpolation inom primitivens intervall när ett flersampelpunktscentrum inte täcks av primitiven. Detta kan ses i Centroid Sampling.

Du kan använda centroidmodifieraren för en sammansättningsinstruktion som du ser här:

dcl_texcoord0_centroid v0

Du kan också använda centroidmodifieraren på en semantisk som du ser här:

float4 TexturePointCentroidPS( float4 TexCoord : TEXCOORD0_centroid ) : COLOR0
{
    return tex2D( PointSampler, TexCoord );
}

Dessutom kommer alla indatafärgregister (v#) som deklarerats med en färgsemantik automatiskt att ha centroid tillämpad. Toningar som beräknas från attribut som samplas centroid är inte garanterade att vara korrekta.

Partiell precision

Den partiella precisionsinstruktionsmodifieraren (_pp) anger områden där partiell precision är acceptabel, förutsatt att den underliggande implementeringen stöder den. Implementeringar är alltid fria att ignorera modifieraren och utföra de berörda åtgärderna med full precision.

Den _pp modifieraren kan ske i två kontexter:

  • I en strukturkoordinatdeklaration för att möjliggöra överföring av texturkoordinater till pixelskuggaren i partiell precisionsform. Detta gör det till exempel möjligt att använda strukturkoordinater för att vidarebefordra färgdata till pixelskuggningen, vilket kan vara snabbare med partiell precision än med full precision i vissa implementeringar. I avsaknad av den här modifieraren måste strukturkoordinaterna skickas med full precision.
  • På alla instruktioner inklusive instruktioner för texturbelastning. Detta indikerar att implementeringen tillåts köra instruktionen med partiell precision och lagra ett partiellt precisionsresultat. I avsaknad av en explicit modifierare måste instruktionen utföras med full precision (oavsett indataprecision).

Exempel:

dcl_texcoord0_pp t1
cmp_pp r0, r1, r2, r3

Mätta

Den mättade instruktionsmodifieraren (_sat) mättar (eller klämmer fast) instruktionsresultatet till intervallet [0, 1] innan du skriver till målregistret.

Den _sat instruktionsmodifieraren kan användas med alla instruktioner förutom frc - ps, sincos - ps, och eventuella tex* instruktioner.

För ps_2_0, ps_2_x och ps_2_sw kan _sat instruktionsmodifieraren inte användas med instruktioner som skrivs till utdataregister (Färgregister för utdata eller utdatadjupsregister). Den här begränsningen gäller inte för ps_3_0 och senare.

Exempel:

dp3_sat r0, v0, c1

pixelskuggningsinstruktioner