Referenz zum Asm-Shader
Shader steuern die programmierbare Grafikpipeline.
Vertexshaderreferenz
Vertex-Shaderunterschiede fasst die Unterschiede zwischen Vertexshaderversionen zusammen.
Pixelshaderreferenz
Pixelshaderunterschiede fasst die Unterschiede zwischen Pixelshaderversionen zusammen.
Referenz zum Shadermodell 4 und 5
In den Abschnitten Assembly des Shadermodells 4 und Shadermodell 5 werden die Anweisungen beschrieben, die das Shadermodell 4 und 5 unterstützt.
Verhalten von Konstantenregistern in Assembly-Shadern
Es gibt zwei Möglichkeiten zum Festlegen von Konstantenregistern in einem Assemblyshader:
- 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 überschreibbar). Definierte Konstanten in Direct3D 9 haben keine Nebenwirkungen außerhalb des Shaders.
Hier sehen Sie ein Beispiel für die Verwendung von 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 werden durch Aufrufen von Get***ShaderConstant* nur konstante Werte abgerufen, 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 wird Set***ShaderConstant sofort wirksam. Betrachten Sie folgendes 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 kann.
Anforderungen an das Shadertreibermodell
Direct3D 9-Schnittstellen sind auf DDI-Treiber (Device Driver Interface) beschränkt, die DirectX 7-Level und höher aufweisen. Um die DDI-Ebene zu überprüfen, führen Sie das DirectX-Diagnosetool aus , und untersuchen Sie die gespeicherte Textdatei.
Zur Referenz: Direct3D 8-Schnittstellen funktionieren nur auf DDI-Treibern, die DirectX 6-Level und höher aufweisen.
Shader-Binärformat
Das bitweise Layout des Shader-Anweisungsdatenstroms ist in D3d9types.h definiert. Wenn Sie Einen 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
Informationen zu einer C-ähnlichen Shadersprache finden Sie unter HLSL-Referenz .
Zugehörige Themen