Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wählt bedingt zwischen src1 und src2 aus, basierend auf dem Vergleich src0 > 0.5.
Syntax
| cnd dst, src0, src1, src2 |
|---|
where
- dst ist das Zielregister.
- src0 ist ein Quellregister.
- src1 ist ein Quellregister.
- src2 ist ein Quellregister.
Bemerkungen
| Pixelshaderversionen | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
|---|---|---|---|---|---|---|---|---|---|
| Cnd | x | x | x | x |
Für die Versionen 1_1 bis 1_3 muss src0 r0.a sein.
// Version 1_1 to 1_3
if (r0.a > 0.5)
dest = src1
else
dest = src2
Version 1_4 vergleicht jeden Kanal separat.
for each component in src0
{
if (src0.component > 0.5)
dest.component = src1.component
else
dest.component = src2.component
}
Diese Beispiele zeigen einen Vergleich mit vier Kanälen, der in einem Shader der Version 1_4 durchgeführt wird, sowie einen Einzelkanalvergleich, der in einem Shader der Version 1_1 möglich ist.
ps_1_4
def c0, -0.5, 0.5, 0, 0.6
def c1, 0,0,0,0
def c2, 1,1,1,1
cnd r1, c0, c1, c2 // r0 contains 1,1,1,0 because
// r1.x = c2.x because c0.x <= 0.5
// r1.y = c2.y because c0.y <= 0.5
// r1.z = c2.z because c0.z <= 0.5
// r1.w = c1.w because c0.w > 0.5
Version 1_1 bis 1_3 vergleicht nur mit dem replizierten Alphakanal von r0.
ps_1_1
def c0, -0.5, 0.5, 0, 0.6
def c1, 0,0,0,0
def c2, 1,1,1,1
mov r0, c0
cnd r1, r0.a, c1, c2 // r1 gets assigned 0,0,0,0 because
// r0.a > 0.5, therefore r1.xyzw = c1.xyzw
In diesem Beispiel werden die beiden Werte A und B verglichen. Im Beispiel wird davon ausgegangen, dass A in v0 und B in v1 geladen wird. Sowohl A als auch B müssen sich im Bereich von -1 bis +1 befinden, und da die Farbregister (vn) als zwischen 0 und 1 definiert sind, wird die Einschränkung in diesem Beispiel erfüllt.
ps_1_1 // Version instruction
sub r0, v0, v1_bias // r0 = A - (B - 0.5)
cnd r0, r0.a, c0, c1 // r0 = ( A > B ? c0 : c1 )
// r0 = c0 if A > B, otherwise, r0 = c1
Zugehörige Themen