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.
Shader steuern die programmierbare Grafikpipeline.
Vertexshaderreferenz
Vertex-Shaderunterschiede fasst die Unterschiede zwischen Vertex-Shaderversionen zusammen.
Pixelshaderreferenz
Pixelshaderunterschiede fasst die Unterschiede zwischen Pixel-Shaderversionen zusammen.
Shadermodell 4- und 5-Referenz
In den Abschnitten Shadermodell 4-Assembly und Shadermodell 5-Assembly werden die Anweisungen beschrieben, die shadermodell 4 und 5 unterstützen.
Verhalten von Konstantenregistern in Assembly-Shadern
Es gibt zwei Möglichkeiten zum Festlegen von Konstantenregistern in einem Assembly-Shader:
- Deklarieren Sie eine Shaderkonstante im Assemblycode mithilfe einer der Def*-Anweisungen.
- Verwenden Sie eine der Set***ShaderConstant*-API-Methoden.
Direct3D 9-Shaderkonstanten
In Direct3D 9 ist die Lebensdauer definierter Konstanten in einem bestimmten Shader nur auf die Ausführung dieses Shaders beschränkt (und ist nicht überschrieben). Definierte Konstanten in Direct3D 9 haben keine Nebenwirkungen außerhalb des Shaders.
Hier ist ein Beispiel mit Direct3D 9:
Given:
Create shader1 which references c4 and defines it with the def instruction
Scenario 1:
Call Set***Shader shader1
Call Set***ShaderConstant* to set c4
Call Draw
Result: The shader will see the def'd value in c4
Given:
Scenario 1 has just completed
Create shader2 (which references c4 but does not use the def instruction
to define it)
Scenario 2:
Call Set***Shader shader2
Call Draw
Result: The shader will see the value last set in c4 by
Set***ShaderConstant* in scenario 1. This is because shader 2
didn't def c4.
In Direct3D 9 ruft der Aufruf von Get***ShaderConstant* nur konstanten Werte ab, die über Set***ShaderConstant* festgelegt wurden.
Direct3D 8-Shaderkonstanten
Dieses Verhalten unterscheidet sich in Direct3D 8.x.
Given:
Create shader1 which references c4 and defines it with the def instruction
Scenario 1 (repeated with Direct3D 8):
Call Set***Shader with shader1
Call Set***ShaderConstant to set c4
Call Draw
Result: The shader will see the value in c4 from Set***ShaderConstant
In Direct3D 8.x Set***ShaderConstant wird sofort wirksam. Betrachten Sie dieses Szenario:
Given:
Create shader1 which references c4 and defines it with the def instruction
Scenario 3:
Call Set***Shader with shader1
Call Draw
Result: The shader will see the def'd value in c4
Given:
Scenario 3 has just completed
Create shader2 (which references c4 but does not use the def instruction
to define it)
Scenario 4 :
Call Set***Shader with shader2
Call Draw
Result: The shader will see the def'd value in c4 (set by def in shader 1)
Das unerwünschte Ergebnis ist, dass die Reihenfolge, in der die Shader festgelegt werden, das beobachtete Verhalten einzelner Shader beeinflussen könnte.
Anforderungen des Shadertreibermodells
Direct3D 9-Schnittstellen sind auf DDI-Treiber (Device Driver Interface) beschränkt, die DirectX 7-Ebene und höher sind. Führen Sie zum Überprüfen der DDI-Ebene das DirectX-Diagnosetool aus, und überprüfen Sie die gespeicherte Textdatei.
Zur Referenz funktionieren Direct3D 8-Schnittstellen nur für DDI-Treiber, die DirectX 6-Ebene und höher sind.
Shader-Binärformat
Das bitweise Layout des Shader-Anweisungsstreams wird in D3d9types.h definiert. Wenn Sie Ihren eigenen Shadercompiler oder -konstruktionstools entwerfen möchten und weitere Informationen zum Shadertokenstream benötigen, lesen Sie das Direct3D 9 Driver Development Kit (DDK).
C-like Shader Language
Siehe HLSL-Referenz, um eine C-ähnliche Shadersprache zu erleben.
Verwandte Themen