Поделиться через


sincos - vs

Вычисляет синус и косинус в радианах.

Синтаксис

vs_2_0 и vs_2_x

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

 

Где:

  • dst является регистром назначения и должен быть временным регистром (r#). Целевой регистр должен иметь ровно одну из следующих трех масок: .x | .y | .xy.
  • src0 — это регистр источника, предоставляющий входной угол, который должен находиться в пределах [-pi, +pi]. {x|y|z|w} является обязательным реплицируемым swizzle.
  • src1 и src2 являются исходными регистрами и должны быть двумя разными константными плавающими регистрами (c#). Значения src1 и src2 должны соответствовать значениям макросов D3DSINCOSCONST1 и D3DSINCOSCONST2 соответственно.

vs_3_0

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

 

Где:

  • dst является регистром назначения и должен быть временным регистром (r#). Целевой регистр должен иметь ровно одну из следующих трех масок: .x | .y | .xy.
  • src0 — это регистр источника, предоставляющий входной угол, который должен находиться в пределах [-pi, +pi]. {x|y|z|w} является обязательным реплицируемым swizzle.

Комментарии

Версии вершинного шейдера 1_1 2_0 2_x 2_sw 3_0 3_sw
sincos x x x x x

 

примечания vs_2_0 и vs_2_x

Для vs_2_0 и vs_2_x sincos можно использовать с предикацией, но с одним ограничением на swizzle регистра предиката (p0): допускается только репликация swizzle (.x | .y | .z | .w).

Для vs_2_0 и vs_2_x инструкция работает следующим образом: (V = скалярное значение из src0 с репликацией swizzle):

  • Если маска записи имеет значение .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
    
  • Если маска записи имеет значение 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
    
  • Если маска записи 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

Для vs_3_0 sincos можно использовать с предикацией без каких-либо ограничений. См. раздел Реестр предиката.

Для vs_3_0 инструкция работает следующим образом: (V = скалярное значение из src0 с репликацией swizzle).

  • Если маска записи имеет значение .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
    
  • Если маска записи имеет значение 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
    
  • Если маска записи 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
    

Приложение может сопоставить произвольный угол (в радианах) с диапазоном [-pi, +pi] с помощью следующего псевдокода шейдера:

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

Инструкции по шейдеру вершин