Syntax
Hier ist die Syntax für den Aufruf von FXC.exe, dem Tool zum Kompilieren von Effekten. Ein Beispiel finden Sie unter Offline-Kompilierung.
Verbrauch
fxc SwitchOptions Filenames
Argumente
Trennen Sie jede Switch-Option durch ein Leerzeichen oder einen Doppelpunkt.
SwitchOptions
[in] Compile-Optionen. Es gibt nur eine erforderliche Option und viele weitere, die optional sind. Trennen Sie jede Option durch ein Leerzeichen oder einen Doppelpunkt.
Erforderliche Option
/T <profile>
Shader-Modell (siehe Profile).
Optionale Optionen
/?, /help
Druckhilfe für FXC.exe
.
@<command.option.file>
Datei, die zusätzliche Compile-Optionen enthält. Diese Option kann mit anderen Compile-Optionen aus der Kommandozeile gemischt werden. command.option.file darf nur eine Option pro Zeile enthalten. command.option.file darf keine leeren Zeilen enthalten. Die in der Datei angegebenen Optionen dürfen keine führenden oder abschließenden Leerzeichen enthalten.
/all_resources_bound
Aktivieren von Aggressive Flattening in SM5.1+. Neu für Direct3D 12.
/Cc
Farbcodierte Assembly ausgeben.
/compress
Komprimieren von DX10 Shader-Bytecode aus Dateien.
/D <id>=<text>
Definieren eines Makros.
/decompress
Dekomprimieren von DX10-Shader-Bytecode aus der ersten Datei. Die Ausgabedateien sollten in der Reihenfolge aufgeführt werden, in der sie bei der Datenkomprimierung waren.
/dumpbin
Lädt eine Binärdatei, anstatt einen Shader zu kompilieren.
/E <name>
Shader-Einstiegspunkt. Wenn kein Einstiegspunkt angegeben wird, gilt main als Name des Shader-Einstiegpunktes.
/enable_unbounded_descriptor_tables
Aktiviert unbeschränkte Deskriptor-Tabellen. Neu für Direct3D 12.
/extractrootsignature <Datei>
Extrahiert die Root-Signatur aus dem Shader-Bytecode. Neu für Direct3D 12.
/Fc <Datei>
Assembly Code-Listing-Datei ausgeben.
/Fd <Datei>
Extrahiert Informationen aus der Shader Program Database (PDB) und schreibt sie in die angegebene Datei. Wenn Sie den Shader kompilieren, verwenden Sie /Fd, um eine PDB-Datei mit Shader-Debugging-Informationen zu erzeugen.
/Fe <Datei>
Warnungen und Fehler in die angegebene Datei ausgeben.
/Fh <Datei>
Ausgabe einer Header-Datei mit Objekt-Code.
/Fl <Datei
Eine Bibliothek ausgeben. Erfordert die D3dcompiler_47.dll oder eine neuere Version der DLL.
/Fo <Datei>
Objektdatei ausgeben. Hat oft die Erweiterung „.fxc“, es werden aber auch andere Erweiterungen verwendet, wie „.o“, „.obj“ oder „.dxbc“.
/Fx <Datei>
Assembly Code- und Hex-Listing-Datei ausgeben.
/Gch
Kompiliert als untergeordneter Effekt für fx_4_x-Profile.
Hinweis
Die Unterstützung für veraltete Effektprofile wird nicht mehr unterstützt.
/Gdp
Deaktivieren des Effektleistungsmodus.
/Gec
Aktivieren des Abwärtskompatibilitätsmodus.
/Ges
Aktivieren des Strict-Modus.
/getprivate <Datei>
Speichert private Daten aus dem Shader-Blob (kompilierte Shader-Binärdatei) in der angegebenen Datei. Extrahiert private Daten, die zuvor mit /setprivate eingebettet wurden, aus dem Shader-Blob.
Sie müssen die Option /dumpbin mit /getprivate angeben. Zum Beispiel:
fxc /getprivate ps01.private.data
/dumpbin ps01.with.private.obj
/Gfa
Konstrukte zur Flow-Steuerung vermeiden.
/Gfp
Konstrukte zur Flow-Kontrolle bevorzugen.
/Gis
IEEE-Strenge erzwingen.
/Gpp
Partielle Präzision erzwingen.
/I <include>
Zusätzlicher Include-Pfad.
/Lx
Hexadezimale Zeichen ausgeben. Erfordert die D3dcompiler_47.dll oder eine neuere Version der DLL.
/matchUAVs
Entspricht den Slot-Zuweisungen des Template-Shaders UAV im aktuellen Shader. Weitere Informationen finden Sie unter Bemerkungen.
/mergeUAVs
Führt die UAV-Slot-Zuweisungen des Vorlagen-Shaders und des aktuellen Shaders zusammen. Weitere Informationen finden Sie unter Bemerkungen.
/Ni
Befehlsnummern in Assembly-Anweisungen ausgeben.
/No
Ausgabe des Byte-Offsets von Anweisungen in Assembly-Listings. Wenn Sie Assembly erzeugen, verwenden Sie /No, um es mit dem Byte-Offset für jede Anweisung zu annotieren.
/nologo
Copyrightmeldung unterdrücken
/Od
Deaktiviert Optimierungen. /Od impliziert /Gfp, obwohl die Ausgabe nicht unbedingt mit /Od /Gfp identisch ist.
/Op
Preshader deaktivieren (veraltet).
/O0 /O1, /O2, /O3
Optimierungsstufen. O1 ist die Standardeinstellung.
- O0 – Deaktiviert die Umordnung von Befehlen. Dadurch wird die Auslastung von Registern reduziert und eine schnellere Schleifensimulation ermöglicht.
- O1 – Deaktiviert die Neuordnung von Befehlen für ps_3_0 und höher.
- O2 – Wie O1. Für die zukünftige Verwendung reserviert.
- O3 – Wie O1. Für die zukünftige Verwendung reserviert.
/P <Datei>
Vorverarbeitung in Datei (muss allein verwendet werden).
/Qstrip_debug
Entfernt Debug-Daten aus dem Shader-Bytecode für 4_0+ Profile.
/Qstrip_priv
Entfernt die privaten Daten aus dem 4_0+ Shader-Bytecode. Entfernt private Daten (beliebige Sequenzen von Bytes) aus dem Shader-Blob (kompilierte Shader-Binärdatei), den Sie zuvor mit der Option /setprivate <file>
eingebettet haben.
Sie müssen die Option /dumpbin mit /Qstrip_priv angeben. Zum Beispiel:
fxc /Qstrip_priv /dumpbin /Fo ps01.no.private.obj
ps01.with.private.obj
/Qstrip_reflect
Entfernt Reflexionsdaten aus dem Shader-Bytecode für 4_0+ Profile.
/Qstrip_rootsignature
Entfernt die Root-Signatur aus dem Shader-Bytecode. Neu für Direct3D 12.
/res_may_alias
Annehmen, dass UAVs/SRVs Alias für cs_5_0+ sein können. Erfordert die D3dcompiler_47.dll oder eine neuere Version der DLL.
/setprivate <Datei>
Fügt private Daten in der angegebenen Datei zum kompilierten Shader-Blob hinzu. Fügt die angegebene Datei, die wie ein Raw -uffer behandelt wird, in den Shader-Blob ein. Verwenden Sie /setprivate, um private Daten hinzuzufügen, wenn Sie einen Shader kompilieren. Oder verwenden Sie die Option /dumpbin mit /setprivate, um ein bestehendes Shader-Objekt zu laden und dann, nachdem sich das Objekt im Arbeitsspeicher befindet, den privaten Daten-Blob hinzuzufügen. Verwenden Sie zum Beispiel entweder einen einzigen Befehl mit /setprivate, um einem kompilierten Shader Blob private Daten hinzuzufügen:
fxc /T ps_4_0 /Fo ps01.with.private.obj ps01.fx
/setprivate ps01.private.data
Oder Sie verwenden zwei Befehle, wobei der zweite Befehl ein Shader-Objekt lädt und dann private Daten hinzufügt:
fxc /T ps_4_0 /Fo ps01.no.private.obj ps01.fx
fxc /dumpbin /Fo ps01.with.private.obj ps01.no.private.obj
/setprivate ps01.private.data
/setrootsignature <Datei>
Fügt die Stammsignatur an Shader-Bytecode an. Neu für Direct3D 12.
/shtemplate <Datei>
Verwenden Sie die angegebene Shader-Vorlagendatei für die Zusammenführung (/mergeUAVs) und Anpassung (/matchUAVs) von Ressourcen. Weitere Informationen finden Sie unter Bemerkungen.
/Vd
Validierung deaktivieren.
/verifyrootsignature <Datei>
Überprüfen des Shader-Bytecodes anhand der Root-Signatur. Neu für Direct3D 12.
/Vi
Anzeige von Details über den Einbindungsprozess.
/Vn <name>
Name als Variablenname in der Header-Datei verwenden.
/WX
Warnungen als Fehler behandeln.
/Zi
Aktiviert Debuginformationen.
/Zpc
Packen der Matrizen in Column-Major-Reihenfolge.
/Zpr
Packen der Matrizen in Row-Major-Reihenfolge.
Dateinamen
[in] Die Dateien, die den/die Shader und/oder den/die Effekt/e enthalten.
Hinweise
Verwenden Sie die Optionen /mergeUAVs
, /matchUAVs
und /shtemplate
, um die UAV-Bindungs-Slots für eine Kette von Shadern auszurichten.
Nehmen wir an, Sie haben Shader A.fx, B.fx und C.fx. Um die UAV-Binding-Slots für diese Shader-Kette auszurichten, benötigen Sie zwei Kompilierungsdurchgänge:
So richten Sie die UAV-Bindungs-Slots für eine Shader-Kette aus
- Verwenden Sie /mergeUAVs, um Shader zu kompilieren, und geben Sie mit /shtemplate einen zuvor kompilierten Shader-Blob an. Beispiel:
fxc.exe /T cs_5_0 C.fx /Fo C.o /mergeUAVs /shtemplate Btmp.o
- Verwenden Sie /matchUAVs, um Shader zu kompilieren, und geben Sie mit /shtemplate den letzten Shader-Blob aus dem ersten Durchgang an. Sie können in beliebiger Reihenfolge kompilieren. Beispiel:
fxc.exe /T cs_5_0 A.fx /Fo A.o /matchUAVs /shtemplate C.o
Sie müssen C.fx im zweiten Durchgang nicht neu kompilieren.
Nachdem Sie die beiden vorangegangenen Kompilierungsdurchgänge durchgeführt haben, können Sie A.o, B.o und C.o als endgültige Shader-Blobs mit abgestimmten UAV-Slots verwenden.
Profiles
Jedes Shader-Modell ist mit einem Label für ein HLSL-Profil versehen. Um einen Shader mit einem bestimmten Shader-Modell zu kompilieren, wählen Sie das entsprechende Shader-Profil aus der folgenden Tabelle.
Shadertyp | Profiles |
---|---|
Compute-Shader |
cs_4_1 cs_5_0 cs_5_1 |
Domain-Shader |
ds_5_1 |
Geometrie-Shader |
gs_4_1 gs_5_0 gs_5_1 |
HLSL-Shader-Verknüpfung |
lib_4_1 lib_4_0_level_9_1 lib_4_0_level_9_1_vs_only lib_4_0_level_9_1_ps_only lib_4_0_level_9_3 lib_4_0_level_9_3_vs_only lib_4_0_level_9_3_ps_only lib_5_0 |
Hull-Shader |
hs_5_1 |
Pixel-Shader |
ps_2_a ps_2_b ps_2_sw ps_3_0 ps_3_sw ps_4_0 ps_4_0_level_9_0 ps_4_0_level_9_1 ps_4_0_level_9_3 ps_4_1 ps_5_0 ps_5_1 |
Root-Signatur |
|
Texture-Shader |
|
Vertex-Shader |
vs_2_0 vs_2_a vs_2_sw vs_3_0 vs_3_sw vs_4_0 vs_4_0_level_9_0 vs_4_0_level_9_1 vs_4_0_level_9_3 vs_4_1 vs_5_0 vs_5_1 |
Versionshinweise
Für Direct3D 12 lesen Sie bitte Festlegen von Root-Signaturen in HLSL, Ressourcen-Bindung in HLSL und Dynamische Indexierung mit HLSL 5.1.
In Direct3D 10 verwenden Sie die API, um das für ein bestimmtes Gerät am besten geeignete Vertex-, Geometrie- und Pixel-Shader-Profil zu erhalten, indem Sie diese Funktionen aufrufen: D3D10GetVertexShaderProfile, D3D10GetPixelShaderProfile und D3D10GetGeometryShaderProfile.
In Direct3D 9 verwenden Sie die Methoden GetDeviceCaps oder GetDeviceCaps, um die von einem Gerät unterstützten Vertex- und Pixel-Shader-Profile abzurufen. Die D3DCAPS9-Struktur, die von diesen Methoden zurückgegeben wird, zeigt die von einem Gerät unterstützten Vertex- und Pixel-Shader-Profile in ihren VertexShaderVersion- und PixelShaderVersion-Mitgliedern an.
Beispiele finden Sie unter Kompilieren mit dem aktuellen Compiler.