Freigeben über


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

Shadermodell 4-Assembly (DirectX HLSL)