Freigeben über


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.

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

  1. 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
    
  2. 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.

ShadertypProfiles
Compute-Shader
cs_4_0
cs_4_1
cs_5_0
cs_5_1
Domain-Shader
ds_5_0
ds_5_1
Geometrie-Shader
gs_4_0
gs_4_1
gs_5_0
gs_5_1
HLSL-Shader-Verknüpfung
lib_4_0
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
Weitere Informationen zum Verknüpfen von Shadern finden Sie unter ID3D11Linker und ID3D11FunctionLinkingGraph.
Hull-Shader
hs_5_0
hs_5_1
Pixel-Shader
ps_2_0
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
rootsig_1_0
Texture-Shader
tx_1_0
Vertex-Shader
vs_1_1
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.