sincos - ps

Calcola seno e coseno, in radianti.

Sintassi

ps_2_0 e ps_2_x

sincos dst. {x|y|xy}, src0. {x|y|z|w}, src1, src2

 

Dove:

  • dst è il registro di destinazione e deve essere un registro temporaneo (r#). Il registro di destinazione deve avere esattamente una delle tre maschere seguenti: .x | .y | .xy.
  • src0 è un registro di origine che fornisce l'angolo di input, che deve trovarsi all'interno di [-pi, +pi]. {x|y|z|w} è lo swizzle di replica richiesto.
  • src1 e src2 sono registri di origine e devono essere due registri costanti floatdiversi (c#). I valori di src1 e src2 devono essere rispettivamente delle macro D3DSINCOSCONST1 e D3DSINCOSCONST2 .

ps_3_0

sincos dst. {x|y|xy}, src0. {x|y|z|w}

 

Dove:

  • dst è un registro di destinazione e deve essere un registro temporaneo (r#). Il registro di destinazione deve avere esattamente una delle tre maschere seguenti: .x | .y | .xy.
  • src0 è un registro di origine che fornisce l'angolo di input, che deve trovarsi all'interno di [-pi, +pi]. {x|y|z|w} è lo swizzle di replica richiesto.

Commenti

Versioni del pixel shader 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
Sincos x x x x x

 

ps_2_0 e ps_2_x

Per ps_2_0 e ps_2_x, è possibile usare sincos con predicazione, ma con una restrizione allo swizzle del registro predicato (p0): è consentita solo la replica swizzle (.x | .y | .z | .w).

Per ps_2_0 e ps_2_x, l'istruzione funziona come segue (V = il valore scalare di src0 con uno swizzle replicato):

  • Se la maschera di scrittura è .x:

    dest.x = cos(V)
    dest.y is undefined when the instruction completes
    dest.z is undefined when the instruction completes
    dest.w is not touched by the instruction
    
  • Se la maschera di scrittura è .y:

    dest.x is undefined when the instruction completes
    dest.y = sin(V)
    dest.z is undefined when the instruction completes
    dest.w is not touched by the instruction
    
  • Se la maschera di scrittura è xy:

    dest.x = cos(V)
    dest.y = sin(V)
    dest.z is undefined when the instruction completes
    dest.w is not touched by the instruction
    

ps_3_0

Per ps_3_0, i sincos possono essere usati con predicazione senza alcuna restrizione. Vedere Predicate Register (Registro predicato).

Per ps_3_0, l'istruzione opera nel modo seguente (V = il valore scalare di src0 con swizzle replicato):

  • Se la maschera di scrittura è .x:

    dest.x = cos(V)
    dest.y is not touched by the instruction
    dest.z is not touched by the instruction
    dest.w is not touched by the instruction
    
  • Se la maschera di scrittura è .y:

    dest.x is not touched by the instruction
    dest.y = sin(V)
    dest.z is not touched by the instruction
    dest.w is not touched by the instruction
    
  • Se la maschera di scrittura è xy:

    dest.x = cos(V)
    dest.y = sin(V)
    dest.z is not touched by the instruction
    dest.w is not touched by the instruction
    

L'applicazione può eseguire il mapping di un angolo arbitrario (in radianti) all'intervallo [-pi, +pi] usando lo pseudocodice dello shader seguente:

def c0, pi, 0.5, 2*pi, 1/(2*pi)
mad r0.x, input_angle, c0.w, c0.y
frc r0.x, r0.x
mad r0.x, r0.x, c0.z, -c0.x

Istruzioni per pixel shader