Anweisungstoken
Ein Anweisungstoken informiert den Treiber über einen bestimmten auszuführenden Vorgang und setzt sich aus den folgenden Bits zusammen:
Bits
[15:00] Bits 0 bis 15 geben einen Vorgangscode an. D3DSIO_* ist ein Beispiel für einen Vorgangscode, wobei * die -Anweisung darstellt. Der folgende Codeausschnitt zeigt beispielsweise eine ADD-Anweisung:
// D3DSIO_ADD d, s1, s2
[23:16] Bits 16 bis 23 geben bestimmte Steuerelemente im Zusammenhang mit dem Vorgangscode an.
[27:24] Bei Pixel- und Vertexshaderversionen vor 2_0 sind die Bits 24 bis 27 reserviert und auf 0x0 festgelegt.
Für Pixel- und Vertex-Shader-Versionen 2_0 und höher geben die Bits 24 bis 27 die Größe in DWORDs der Anweisung mit Ausnahme des Anweisungstokens selbst an (d.a. die Anzahl der Token, aus denen die Anweisung mit Ausnahme des Anweisungstokens besteht).
[28] Bei Pixel- und Vertexshaderversionen vor 2_0 ist Bit 28 reserviert und auf 0x0 festgelegt.
Bei Pixel- und Vertex-Shader-Versionen 2_0 und höher gibt Bit 28 an, ob die Anweisung prädiziert ist (d. h. enthält ein zusätzliches Prädikatquelltoken am Ende des Shadercodes. Wenn dieses Bit auf 0x1 festgelegt ist, wird die Anweisung prädiziert.
[29] Reserviert. Dieser Wert ist auf 0x0 festgelegt.
[30] Bei Pixelshaderversionen vor 2_0 ist Bit 30 das gemeinsame Bit. Wenn dieser Wert auf 1 festgelegt ist, führen Sie diese Anweisung mit vorherigen Anweisungen aus. Führen Sie andernfalls separat aus.
Für Pixelshader Version 2_0 und höher und alle Vertexshaderversionen ist Bit 30 reserviert und auf 0x0 festgelegt.
[31] Bit 31 ist null (0x0).
Kommentare
Weitere Informationen zu Vorgängen, die in den Bits 0 bis 15 von Anweisungstoken angegeben werden können, finden Sie in der Referenz zu Pixelshadern und Vertex-Shadern in der neuesten DirectX SDK-Dokumentation.
Nachdem die DirectX3D-Runtime Shadercode von einer Anwendung empfangen hat, überprüft die Runtime den Code, bevor der Code an den Treiber übergeben wird. In der Regel präfixiert die Laufzeit Assembleranweisungen mit "D3DSIO_", um den Vorgangscode zu erstellen. Die folgenden Assembleranweisungen entsprechen beispielsweise Kernelmodusvorgängen:
Assembler-Anweisung | Kernelmodus-Vorgang |
---|---|
add |
D3DSIO_ADD |
Mov |
D3DSIO_MOV |
sub |
D3DSIO_SUB |
Tex |
D3DSIO_TEX |
texcoord |
D3DSIO_TEXCOORD |
Beachten Sie, dass in allen Vertexshaderversionen die Unterassen assembler-Anweisung als D3DSIO_ADD-Vorgang mit dem Quellmodifizierer (Bit 27:24) des zweiten Quellsatzes implementiert wird, der auf Negation (0x1) festgelegt ist.
Die Tex- und texcoord-Anweisungen gelten für die Pixel-Shader-Versionen 1_0 bis 1_3; Jeder Anweisung ist ein Zielparameter zugeordnet.
Die Texld - und texcrd-Anweisungen sind neu in Pixelshader Version 1_4 und höher; Jeder Anweisung sind sowohl Ziel- als auch Quellparameter zugeordnet.
Die Laufzeit konvertiert die Anweisungen für den tex - und texld-Assembler in den D3DSIO_TEX Kernelmodus-Vorgang. Die Runtime konvertiert die Anweisungen texcoord und texcrd assembler in den D3DSIO_TEXCOORD Kernelmodusvorgang. Treiber überprüfen zunächst die Pixelshaderversion des Shadercodes und verarbeiten dann die Anweisungen entsprechend. Wenn ein Treiber beispielsweise überprüft, ob der Shadercode der Version 1_4 pixel mit einem D3DSIO_TEX-Vorgang empfangen wurde, bestimmt der Treiber, dass ziel- und quellparameter dem Anweisungstoken folgen.
Anforderungen
Verfügbar in Windows Vista und höheren Versionen der Windows-Betriebssysteme.