callc (sm4 – asm)
Ruft bedingt eine Unterroutine auf, die durch gekennzeichnet ist, wobei die Bezeichnung l# im Programm angezeigt wird.
callc{_z|_nz} src0.select_component, l # |
---|
Element | Beschreibung |
---|---|
src0 |
[in] Die Komponente, für die die Bedingung getestet werden soll. |
L # |
[in] Die Bezeichnung der Unterroutine. |
Bemerkungen
Wenn eine ret gefunden wird, geben Sie nach diesem Aufruf die Ausführung an die Anweisung zurück.
Das Tokenformat enthält als Komfort den Offset der entsprechenden Bezeichnung im Shader.
Das folgende Beispiel zeigt die Aufrufanweisung.
...
callc_z r1.y, l3 // if all bits in r0.x are 0, call l3
callc_nz r2.z, l3 // if any bit in r0.x is nonzero, call l3
...
ret
label l3
...
retc_nz r0.x
...
ret
Beschränkungen
- Unterroutinen können 32 tief geschachtelt werden.
- Der Stapel der Rückgabeadresse wird von der Implementierung transparent verwaltet.
- Wenn bereits 32 Einträge auf dem Rücksendeadressenstapel vorhanden sind und ein Anruf ausgegeben wird, wird der Anruf übersprungen.
- Es gibt keinen automatischen Parameterstapel. Die Anwendung kann ein indizierbares temporäres Registerarray (x#[]) verwenden, um einen Stapel manuell zu implementieren. Die Adressen der Subroutineaufrufrückgabe sind jedoch nicht sichtbar und orthogonal für jede manuelle Stapelverwaltung, die von der Anwendung durchgeführt wird.
- Die Indizierung des l#- Parameters ist nicht zulässig.
- Das von src0 bereitgestellte 32-Bit-Register wird auf Bitebene getestet. Wenn ein Bit nicht zero ist, führt callc_nz den Aufruf aus. Wenn alle Bits 0 sind, führt callc_z den Aufruf aus.
- Rekursion ist nicht zulässig.
Diese Anweisung gilt für die folgenden Shaderphasen:
Vertexshader | Geometrie-Shader | Pixelshader |
---|---|---|
x | x | x |
Minimales Shadermodell
Diese Funktion wird in den folgenden Shadermodellen unterstützt.
Shadermodell | Unterstützt |
---|---|
Shadermodell 5 | ja |
Shadermodell 4.1 | ja |
Shadermodell 4 | ja |
Shadermodell 3 (DirectX HLSL) | Nein |
Shadermodell 2 (DirectX HLSL) | Nein |
Shadermodell 1 (DirectX HLSL) | Nein |