sincos - ps
Calcule sinus et cosinus, en radians.
Syntaxe
ps_2_0 et ps_2_x
sincos dst. {x|y|xy}, src0. {x|y|z|w}, src1, src2 |
---|
Où :
- dst 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 se trouver dans [-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 floatconstants (c#). 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|z|w} |
---|
Où :
- dst 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 se trouver dans [-pi, +pi]. {x|y|z|w} est le swizzle de réplication requis.
Notes
Versions du nuanceur de pixels | 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 et ps_2_x
Pour ps_2_0 et ps_2_x, les sincos peuvent être utilisés avec la prédication, mais avec une restriction au swizzle du registre de prédicat (p0) : seule la réplication swizzle (.x | .y | .z | .w) 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
Par ps_3_0, les sincos peuvent être utilisés avec prédication sans aucune restriction. Consultez Registre des prédicats.
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] à l’aide du pseudocode du 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
Rubriques connexes