sincos – ps
Berechnet Sinus und Kosinus im Bogenmaß.
Syntax
ps_2_0 und ps_2_x
sincos dst. {x|y|xy}, src0. {x|y|z|w}, src1, src2 |
---|
Hierbei gilt:
- dst ist das Zielregister und muss ein temporäres Register (r#) sein. Das Zielregister muss genau eine der folgenden drei Masken aufweisen: .x | .y | .xy.
- src0 ist ein Quellregister, das den Eingabewinkel bereitstellt, der innerhalb von [-pi, +pi] sein muss. {x|y|z|w} ist der erforderliche Replikationsschwund.
- src1 und src2 sind Quellregister und müssen zwei verschiedene Constant Float Registers (c#) sein. Die Werte von src1 und src2 müssen denen der Makros D3DSINCOSCONST1 und D3DSINCOSCONST2 entsprechen.
ps_3_0
sincos dst. {x|y|xy}, src0. {x|y|z|w} |
---|
Hierbei gilt:
- dst ist ein Zielregister und muss ein temporäres Register (r#) sein. Das Zielregister muss genau eine der folgenden drei Masken aufweisen: .x | .y | .xy.
- src0 ist ein Quellregister, das den Eingabewinkel bereitstellt, der innerhalb von [-pi, +pi] sein muss. {x|y|z|w} ist der erforderliche Replikationsschwund.
Bemerkungen
Pixelshaderversionen | 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 und ps_2_x
Für ps_2_0 und ps_2_x können Sincos mit Prädication verwendet werden, aber mit einer Einschränkung für den Swizzle des Prädikatregisters (p0): Nur replizieren swizzle (.x | .y | .z | .w) ist zulässig.
Für ps_2_0 und ps_2_x funktioniert die Anweisung wie folgt (V = der Skalarwert aus src0 mit repliziertem Swizzle):
Wenn die Schreibmaske .x ist:
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
Wenn die Schreibmaske .y lautet:
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
Wenn die Schreibmaske .xy ist:
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
Für ps_3_0 können Sincos ohne Einschränkung mit Prädikation verwendet werden. Siehe Prädikatregister.
Für ps_3_0 funktioniert die Anweisung wie folgt (V = der Skalarwert von src0 mit repliziertem Swizzle):
Wenn die Schreibmaske .x ist:
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
Wenn die Schreibmaske .y lautet:
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
Wenn die Schreibmaske .xy ist:
dest.x = cos(V) dest.y = sin(V) dest.z is not touched by the instruction dest.w is not touched by the instruction
Die Anwendung kann einen beliebigen Winkel (im Bogenmaß) mit dem folgenden Shader-Pseudocode dem Bereich [-pi, +pi] zuordnen:
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
Zugehörige Themen