Partager via


sincos - vs

Calcule le sinus et le cosinus, en radians.

Syntaxe

vs_2_0 et vs_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 float constants (c#). Les valeurs de src1 et src2 doivent être celles des macros D3DSINCOSCONST1 et D3DSINCOSCONST2 respectivement.

vs_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 vertex 1_1 2_0 2_x 2_sw 3_0 3_sw
sincos x x x x x

 

vs_2_0 et vs_2_x remarques

Pour vs_2_0 et vs_2_x, sincos peut être utilisé 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 vs_2_0 et vs_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
    

vs_3_0 Remarques

Par vs_3_0, sincos peut être utilisé avec une prédication sans aucune restriction. Consultez Registre des prédicats.

Pour vs_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 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 vertex