fcall (sm5 - asm)

Aufruf der Schnittstellenfunktion.

fcall fp#[arrayIndex][callSite]
Element BESCHREIBUNG
Fp #
[in] Der Funktionszeiger.
Arrayindex
[in] Optional. Gibt einen Offset in das Funktionszeigerarray an. Dieser Parameter muss eine ganzzahlige Literale ohne Vorzeichen sein, wenn fp# nicht als indizierbar deklariert wurde. Andernfalls kann arrayIndex von der Form Literalbasis + Offset aus einem Shaderregister sein. Beispiel: fcall fp1[r1.w + 0][0] .
Callsite
[in] Optional. Ein literaler Ganzzahloffset ohne Vorzeichen in die ausgewählte Funktionstabelle, wobei ein funktionstext fb# ausgewählt wird, der ausgeführt werden soll.

Bemerkungen

fp#[arrayIndex][] wird in eine bestimmte Funktionstabelle aufgelöst, die aus der API außerhalb des Shaders aus den in der Deklaration von fp# aufgeführten Funktionstabellenoptionen ausgewählt wurde.

Die Summe von # in fp# und arrayIndex wählt die Funktionstabelle aus. Wenn eine Schnittstelle beispielsweise als fp4[4][3] deklariert wird (Arraygröße 4), sind die folgenden Fcallsgleichwertig: fcall fp4[2][3] und fp5[1][3], weil 4+2 = 5+1.

Beschränkungen

  • Wenn arrayIndex dynamische Indizierung verwendet, ist das Verhalten nicht definiert, wenn arrayIndex bei benachbarten Shaderaufrufen abweicht, die im Sperrschritt ausgeführt werden können. Der HLSL-Compiler versucht, diesen Fall nicht zuzulassen.

    Benachbarte Aufrufe können aufgrund der Flusssteuerung inaktiv sein, da die Ausführung des Sperrschritts dadurch nicht unterbrochen wird.

  • Wenn fp# + arrayIndex einen Out-of-Bounds-Index angibt, ist das Verhalten nicht definiert.

  • Für die hier beschriebenen undefinierten Fälle bedeutet dies, dass das Verhalten des aktuellen D3D-Geräts undefiniert wird, einschließlich der Möglichkeit eines Geräteverlusts. Es wird jedoch kein Speicher außerhalb des aktuellen D3D-Geräts zugegriffen oder als Code ausgeführt.

Diese Anweisung gilt für die folgenden Shaderphasen:

Scheitelpunkt Hull Domain Geometrie Pixel Compute
X X X X X X

Minimales Shadermodell

Diese Anweisung wird in den folgenden Shadermodellen unterstützt:

Shadermodell Unterstützt
Shadermodell 5 ja
Shadermodell 4.1 Nein
Shadermodell 4 Nein
Shadermodell 3 (DirectX HLSL) Nein
Shadermodell 2 (DirectX HLSL) Nein
Shadermodell 1 (DirectX HLSL) Nein

Assembly des Shadermodells 5 (DirectX HLSL)