sincos - ps

Calcula seno e cosseno, em radianos.

Sintaxe

ps_2_0 e ps_2_x

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

 

Em que:

  • dst é o registro de destino e precisa ser um Registro Temporário (r#). O registro de destino deve ter exatamente uma das três máscaras a seguir: .x | .y | .xy.
  • src0 é um registro de origem que fornece o ângulo de entrada, que deve estar dentro de [-pi, +pi]. {x|y|z|w} é o swizzle de replicação necessário.
  • src1 e src2 são registros de origem e devem ser dois registros floatconstantes diferentes (c#). Os valores de src1 e src2 devem ser os das macros D3DSINCOSCONST1 e D3DSINCOSCONST2 , respectivamente.

ps_3_0

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

 

Em que:

  • dst é um registro de destino e precisa ser um Registro Temporário (r#). O registro de destino deve ter exatamente uma das três máscaras a seguir: .x | .y | .xy.
  • src0 é um registro de origem que fornece o ângulo de entrada, que deve estar dentro de [-pi, +pi]. {x|y|z|w} é o swizzle de replicação necessário.

Comentários

Versões do sombreador de pixel 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

Para ps_2_0 e ps_2_x, sincos podem ser usados com predication, mas com uma restrição ao swizzle do Registro de Predicado (p0): somente replica o swizzle (.x | .y | .z | .w) é permitido.

Para ps_2_0 e ps_2_x, a instrução opera da seguinte maneira (V = o valor escalar de src0 com um swizzle de replicação):

  • Se a máscara de gravação for .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 a máscara de gravação for .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 a máscara de gravação for .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

Por ps_3_0, sincos podem ser usados com predicação sem qualquer restrição. Confira Registro de predicado.

Para ps_3_0, a instrução opera da seguinte maneira (V = o valor escalar de src0 com um swizzle de replicação):

  • Se a máscara de gravação for .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 a máscara de gravação for .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 a máscara de gravação for .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
    

O aplicativo pode mapear um ângulo arbitrário (em radianos) para o intervalo [-pi, +pi] usando o seguinte pseudocódigo de sombreador:

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

Instruções de sombreador de pixel