SinCos,-PS

Calcule le sinus et le cosinus, en radians.

Syntaxe

PS _ 2 _ 0 et PS _ 2 _ x

SinCos, DST. x y XY}, src0. x y Lettre w}, src1, src2

Où :

  • l’heure d’été est le registre de destination et doit être un Registre temporaire (r # ). Le registre de destination doit avoir exactement l’un des trois masques suivants :. x. | y. | XY.
  • src0 est un registre source qui fournit l’angle d’entrée, qui doit être compris entre [ -pi, + pi ] . {x | y | z | w} est le Swizzle de réplication requis.
  • src1 et src2 sont des registres sources et doivent être deux registres de type flottant(c # ) différents. Les valeurs de src1 et src2 doivent être celles des macros D3DSINCOSCONST1 et D3DSINCOSCONST2 , respectivement.

PS _ 3 _ 0

SinCos, DST. x y XY}, src0. x y Lettre s

Où :

  • l’heure d’été est un registre de destination et doit être un Registre temporaire (r # ). Le registre de destination doit avoir exactement l’un des trois masques suivants :. x. | y. | XY.
  • src0 est un registre source qui fournit l’angle d’entrée, qui doit être compris entre [ -pi, + pi ] . {x | y | z | w} est le Swizzle de réplication requis.

Notes

Versions de nuanceur de pixels 1_1 1_2 1 _ 3 1_4 2 _ 0 2 _ x 2 _ logiciels 3 _ 0 3 _ logiciels
SinCos, x x x x x

PS _ 2 _ 0 et PS _ 2 _ x

Pour PS _ 2 _ 0 et PS _ 2 _ x, SinCos, peut être utilisé avec un prédicat, mais avec une seule restriction au Swizzle du Registre de prédicats (P0) : la seule réplication de Swizzle (. x.y. | | z | ) est autorisée.

Pour PS _ 2 _ 0 et PS _ 2 _ x, l’instruction fonctionne comme suit (V = la valeur scalaire de src0 avec un Swizzle de réplication) :

  • Si le masque d’écriture est. 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
    
  • Si le masque d’écriture est. 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
    
  • Si le masque d’écriture est. 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

Pour PS _ 3 _ 0, SinCos, peut être utilisé avec un prédicat sans aucune restriction. Consultez Registre de prédicat.

Pour PS _ 3 _ 0, l’instruction fonctionne comme suit (V = la valeur scalaire de src0 avec un Swizzle de réplication) :

  • Si le masque d’écriture est. 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
    
  • Si le masque d’écriture est. 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
    
  • Si le masque d’écriture est. 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’application peut mapper un angle arbitraire (en radians) à la plage [ -pi, + pi ] en utilisant le pseudocode de nuanceur suivant :

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

Instructions sur le nuanceur de pixels