D3DXSHADER-Flags
Die D3DXSHADER-Flags werden zum Analysieren, Kompilieren oder Zusammenstellen von Shadern verwendet.
Parserflags
Analysezeitflags werden nur vom Effektsystem (vor der Effektkompilierung) verwendet, wenn Sie einen Effektcompiler erstellen. Sie könnten beispielsweise ein Compilerobjekt mit D3DXSHADER_PACKMATRIX_COLUMNMAJOR erstellen und dieses Compilerobjekt dann wiederholt mit unterschiedlichen Compilerflags verwenden, um speziellen Code zu generieren.
Konstante | BESCHREIBUNG |
---|---|
|
Sofern nicht explizit angegeben, werden Matrizen in Spalten-Hauptreihenfolge gepackt (jeder Vektor befindet sich in einer einzelnen Spalte), wenn sie an und aus dem Shader übergeben werden. Dies ist im Allgemeinen effizienter, da es die Vektormatrixmultiplikation mit einer Reihe von Punktprodukten ermöglicht. |
|
Sofern nicht explizit angegeben, werden Matrizen in Zeilen-Hauptreihenfolge gepackt (jeder Vektor befindet sich in einer einzelnen Zeile), wenn sie an oder vom Shader übergeben werden. |
Compilerflags
Der DirectX 10 HLSL-Compiler ist jetzt der Standardcompiler. Weitere Informationen finden Sie unter Effect-Compiler Tool .
In der folgenden Tabelle sind die in Direct3D 9 und Direct3D 10 verfügbaren Flags aufgeführt. Der Wert für das Flag ist die entsprechende fxc-Option.
Konstante/Wert | BESCHREIBUNG |
---|---|
|
Dies ist ein Hinweis für den Compiler, um die Verwendung von Flusssteuerungsanweisungen zu vermeiden. Direct3D 9 – ja Direct3D 10 – ja |
|
Fügen Sie während der Shaderkompilierung Debugdateiname, Zeilennummern sowie Typ- und Symbolinformationen ein. Direct3D 9 – ja Direct3D 10 – ja |
|
Kompilieren Sie ps_1_x Shader als ps_2_0. Effekte, die ps_1_x Ziele angeben, werden stattdessen zu ps_2_0 Zielen kompiliert, da dies die mindeste Shaderversion ist, die von der Version des mit DirectX 10 ausgelieferten Shadercompilers unterstützt wird. Dieses Flag hat keine Auswirkungen, wenn es mit Kompilierzielen höherer Ebene verwendet wird. Direct3D 9 – nein Direct3D 10 – ja |
|
Erzwingen Sie, dass der Compiler mit dem nächsthöchsten verfügbaren Softwareziel für Pixel-Shader kompiliert wird. Dieses Flag deaktiviert auch Optimierungen und aktiviert das Debuggen. Direct3D 9 – ja Direct3D 10 – ja |
|
Erzwingen Sie, dass der Compiler mit dem nächsthöchsten verfügbaren Softwareziel für Vertex-Shader kompiliert wird. Dieses Flag deaktiviert auch Optimierungen und aktiviert das Debuggen. Direct3D 9 – ja Direct3D 10 – ja |
|
Deaktivieren Sie Optimierungen, die dazu führen können, dass sich die Ausgabe eines kompilierten Shaderprogramms von der Ausgabe eines Programms unterscheidet, das mit dem DirectX 9-Shadercompiler kompiliert wurde, da in Gleitkomma mathematisch geringe Genauigkeitsfehler auftreten. Direct3D 9 – nein Direct3D 10 – ja |
|
Deaktiviert Preshader. Der Compiler ruft keine statischen Ausdrücke für die Auswertung auf der Host-CPU aus. Darüber hinaus gibt der Compiler beim Kompilieren eigenständiger Funktionen keine Ausdrücke aus. Direct3D 9 – ja Direct3D 10 – ja |
|
Niedrigste Optimierungsebene. Kann langsameren Code erzeugen, wird dies jedoch schneller tun. Dies kann in einem stark iterativen Shaderentwicklungszyklus nützlich sein. Direct3D 9 – nein Direct3D 10 – ja |
|
Zweitniedrigste Optimierungsebene. Direct3D 9 – nein Direct3D 10 – ja |
|
Zweithöchste Optimierungsebene. Direct3D 9 – nein Direct3D 10 – ja |
|
Höchste Optimierungsebene. Erzeugt den bestmöglichen Code, kann jedoch deutlich länger dauern. Dies ist nützlich für endgültige Builds einer Anwendung, bei der die Leistung der wichtigste Faktor ist. Direct3D 9 – nein Direct3D 10 – ja |
|
Erzwingen Sie, dass alle Berechnungen im resultierenden Shader mit teilweiser Genauigkeit auftreten. Dies kann zu einer schnelleren Auswertung von Shadern auf einer bestimmten Hardware führen. Direct3D 9 – ja Direct3D 10 – ja |
|
Dies ist ein Hinweis für den Compiler, die Verwendung von Flusssteuerungsanweisungen vorzuziehen. Direct3D 9 – ja Direct3D 10 – ja |
|
Weisen Sie den Compiler an, Optimierungsschritte während der Codegenerierung zu überspringen. Wenn Sie nicht versuchen, ein Problem im Code zu isolieren und den Compiler vermuten, wird die Verwendung dieser Option nicht empfohlen. Direct3D 9 – ja Direct3D 10 – ja |
|
Überprüfen Sie den generierten Code nicht anhand bekannter Funktionen und Einschränkungen. Diese Option wird nur empfohlen, wenn Shader kompiliert werden, von denen bekannt ist, dass sie funktionieren (also Shader, die zuvor ohne diese Option kompiliert wurden). Shader werden immer von der Runtime überprüft, bevor sie auf das Gerät festgelegt werden. Direct3D 9 – ja Direct3D 10 – ja |
|
Aktivieren Sie die Verwendung des ursprünglichen Direct3D 9 HLSL-Compilers. OCT2006_d3dx9_31_x86.cab oder OCT2006_d3dx9_31_x64.cab müssen als Teil der Anwendungsrreinung einbezogen werden. Dieses Flag ist erforderlich, um ps_1_x Shader zu kompilieren, ohne das Heraufstufungsflag zum ps_2_0 zu verwenden. Das Angeben dieses Flags beim Abrufen einer ID3DXEffectCompiler-Schnittstelle führt dazu, dass nachfolgende Aufrufe von CompileEffect und CompileShader über dieses Objekt den Legacycompiler verwenden. Direct3D 9 – ja Direct3D 10 – nein |
Assemblerflaggen
Assemblerflags werden vom Effektsystem verwendet, um Shader- und Effektassemblycode zu optimieren.
Konstante | BESCHREIBUNG |
---|---|
|
Fügen Sie während der Shaderkompilierung Debugdateiname, Zeilennummern sowie Typ- und Symbolinformationen ein. |
|
Erzwingen Sie, dass der Compiler mit dem nächsthöchsten verfügbaren Softwareziel für Pixel-Shader kompiliert wird. Dieses Flag deaktiviert auch Optimierungen und aktiviert das Debuggen. |
|
Erzwingen Sie, dass der Compiler mit dem nächsthöchsten verfügbaren Softwareziel für Vertex-Shader kompiliert wird. Dieses Flag deaktiviert auch Optimierungen und aktiviert das Debuggen. |
|
Überprüfen Sie den generierten Code nicht anhand bekannter Funktionen und Einschränkungen. Diese Option wird nur empfohlen, wenn Shader kompiliert werden, von denen bekannt ist, dass sie funktionieren (also Shader, die zuvor ohne diese Option kompiliert wurden). Shader werden immer von der Runtime überprüft, bevor sie auf das Gerät festgelegt werden. |
Bemerkungen
Das Effektsystem verwendet Parserflags , wenn es von den folgenden Funktionen aufgerufen wird:
Das Effektsystem verwendet Compilerflags , wenn es von den folgenden Funktionen aufgerufen wird:
- D3DXCompileShader (oder D3DXCompileShaderFromFile oder D3DXCompileShaderFromResource)
- CompileEffect (oder CompileShader)
Darüber hinaus können Sie Compilerflags verwenden, wenn Sie einen Effekt erstellen, indem Sie D3DXCreateEffect (oder D3DXCreateEffectFromFile oder D3DXCreateEffectFromResource) aufrufen.
- Wenn Sie eine nicht kompilierte FX-Datei übergeben, verwendet das Effektsystem während der Kompilierung den Flag-Eingabeparameter.
- Wenn Sie einen kompilierten Effekt übergeben, ignoriert das Effektsystem die Compilerflags, da sie zum Laden des Effekts nicht erforderlich sind.
Das Effektsystem verwendet Assemblerflags , wenn es von den folgenden Funktionen aufgerufen wird:
Das Anwenden von Compilerflags oder Assemblerflags auf die falsche API schlägt bei der Shaderüberprüfung fehl. Überprüfen Sie mit dem DirectX-Fehlersuchetool (DXErr.exe) den Rückgabewert des Direct3D-Fehlercodes aus der Funktion, um diesen Fehler zu ermitteln. Sie können DXErr.exe abrufen und über das DirectX SDK erfahren. Informationen zum DirectX SDK finden Sie unter Wo ist das DirectX SDK?.
Anforderungen
Anforderung | Wert |
---|---|
Header |
|
Siehe auch