Compartir a través de


sincos - ps

Calcula seno y coseno, en radianes.

Sintaxis

ps_2_0 y ps_2_x

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

 

Donde:

  • dst es el registro de destino y debe ser un registro temporal (r#). El registro de destino debe tener exactamente una de las tres máscaras siguientes: .x | .y | .xy.
  • src0 es un registro de origen que proporciona el ángulo de entrada, que debe estar dentro de [-pi, +pi]. {x|y|z|w} es el swizzle de replicación necesario.
  • src1 y src2 son registros de origen y deben ser dos registros flotantes constantesdiferentes (c#). Los valores de src1 y src2 deben ser los de las macros D3DSINCOSCONST1 y D3DSINCOSCONST2 respectivamente.

ps_3_0

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

 

Donde:

  • dst es un registro de destino y tiene que ser un registro temporal (r#). El registro de destino debe tener exactamente una de las tres máscaras siguientes: .x | .y | .xy.
  • src0 es un registro de origen que proporciona el ángulo de entrada, que debe estar dentro de [-pi, +pi]. {x|y|z|w} es el swizzle de replicación necesario.

Comentarios

Versiones del sombreador de píxeles 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 y ps_2_x

Para ps_2_0 y ps_2_x, se pueden usar sincos con predicación, pero con una restricción para el swizzle del registro de predicado (p0): solo se permite la replicación de swizzle (.x | .y | .z | .w).

Para ps_2_0 y ps_2_x, la instrucción funciona de la siguiente manera (V = el valor escalar de src0 con una replicación de swizzle):

  • Si la máscara de escritura es .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 la máscara de escritura es .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 la máscara de escritura es .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, los sincos se pueden usar con predicado sin ninguna restricción. Consulte Registro de predicado.

Para ps_3_0, la instrucción funciona de la siguiente manera (V = el valor escalar de src0 con una replicación de swizzle):

  • Si la máscara de escritura es .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 la máscara de escritura es .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 la máscara de escritura es .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
    

La aplicación puede asignar un ángulo arbitrario (en radianes) al intervalo [-pi, +pi] mediante el pseudocódigo del sombreador siguiente:

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

Instrucciones del sombreador de píxeles