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
D3DXSHADER_PACKMATRIX_COLUMNMAJOR
/Zpc
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.
D3DXSHADER_PACKMATRIX_ROWMAJOR
/Zpr
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
D3DXSHADER_AVOID_FLOW_CONTROL
/Gfa
Dies ist ein Hinweis für den Compiler, um die Verwendung von Flusssteuerungsanweisungen zu vermeiden.
Direct3D 9 – ja
Direct3D 10 – ja
D3DXSHADER_DEBUG
/ZI
Fügen Sie während der Shaderkompilierung Debugdateiname, Zeilennummern sowie Typ- und Symbolinformationen ein.
Direct3D 9 – ja
Direct3D 10 – ja
D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY
/Gec
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
D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT
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
D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT
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
D3DXSHADER_IEEE_STRICTNESS
/Gis
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
D3DXSHADER_NO_PRESHADER
/Op
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
D3DXSHADER_OPTIMIZATION_LEVEL0
/O0
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
D3DXSHADER_OPTIMIZATION_LEVEL1
/O1
Zweitniedrigste Optimierungsebene.
Direct3D 9 – nein
Direct3D 10 – ja
D3DXSHADER_OPTIMIZATION_LEVEL2
/O2
Zweithöchste Optimierungsebene.
Direct3D 9 – nein
Direct3D 10 – ja
D3DXSHADER_OPTIMIZATION_LEVEL3
/O3
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
D3DXSHADER_PARTIALPRECISION
/Gpp
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
D3DXSHADER_PREFER_FLOW_CONTROL
/Gfp
Dies ist ein Hinweis für den Compiler, die Verwendung von Flusssteuerungsanweisungen vorzuziehen.
Direct3D 9 – ja
Direct3D 10 – ja
D3DXSHADER_SKIPOPTIMIZATION
/Od
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
D3DXSHADER_SKIPVALIDATION
/Vd
Ü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
D3DXSHADER_USE_LEGACY_D3DX9_31_DLL
/LD
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
D3DXSHADER_DEBUG
Fügen Sie während der Shaderkompilierung Debugdateiname, Zeilennummern sowie Typ- und Symbolinformationen ein.
D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT
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.
D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT
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.
D3DXSHADER_SKIPVALIDATION
Ü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:

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
D3dx9shader.h

Siehe auch

D3DX-Konstanten