sincos - ps
计算正弦和余弦,以弧度为单位。
语法
ps_2_0和ps_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} 是必需的复制重排。
- src1 和 src2 是源寄存器,必须是两个不同的 常量浮点寄存器 (c#) 。 src1 和 src2 的值必须分别为宏 D3DSINCOSCONST1 和 D3DSINCOSCONST2 的值。
ps_3_0
sincos dst.{x|y|xy}, src0。{x|y|z|w} |
---|
其中:
- dst 是目标寄存器,必须是 r#) (临时寄存器 。 目标寄存器必须恰好具有以下三个掩码之一:.x | .y | .xy。
- src0 是提供输入角度的源寄存器,该角度必须在 [-pi, +pi] 内。 {x|y|z|w} 是必需的复制重排。
备注
像素着色器版本 | 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和ps_2_x
对于ps_2_0和ps_2_x,sincos 可与谓词一起使用,但对 谓词注册 (p0) 的重排有一个限制:仅允许复制重排 (.x | .y | .z | .w) 。
对于ps_2_0和ps_2_x,该指令按如下方式运行, (V = src0 中的标量值,并具有复制重排) :
如果写入掩码为 .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
ps_3_0
对于ps_3_0,sincos 可以不受任何限制地与谓词一起使用。 请参阅 谓词注册。
对于ps_3_0,指令按如下方式运行, (V = src0 中的标量值,并带有复制重排) :
如果写入掩码为 .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
相关主题