共用方式為


語法

以下是呼叫FXC.exe效果編譯程式工具的語法。 如需範例,請參閱 脫機編譯

使用方式

fxc SwitchOptions Filenames

引數

使用空格或冒號分隔每個參數選項。

SwitchOptions

[in]編譯選項。 只有一個必要選項,還有更多是選擇性的選項。 使用空白或冒號分隔每個 。

必要選項

/T <配置檔>

著色器模型(請參閱 配置檔)。

選擇性的選項

/?、/help

列印的說明 FXC.exe

@<command.option.file>

包含其他編譯選項的檔案。 此選項可以與其他命令行編譯選項混合。 command.option.file 每行只能包含一個選項。 command.option.file 不能包含任何空白行。 檔案中指定的選項不得包含任何前置或尾端空格。

/all_resources_bound

在SM5.1+ 中啟用積極扁平化。 Direct3D 12 的新功能。

/Cc

輸出色彩編碼元件。

/compress

從檔案壓縮 DX10 著色器位元組程序代碼。

/D <id>=<text>

定義巨集。

/解 壓縮

從第一個檔案解壓縮 DX10 著色器位元組程式代碼。 輸出檔案應以壓縮期間的順序列出。

/dumpbin

載入二進位檔,而不是編譯著色器。

/E <名稱>

著色器進入點。 如果未指定進入點, main 會被視為著色器項目名稱。

/enable_unbounded_descriptor_tables

啟用未系結的描述元數據表。 Direct3D 12 的新功能。

/extractrootsignature <檔案>

從著色器位元組程序代碼擷取根簽章。 Direct3D 12 的新功能。

/Fc <檔案>

輸出元件程式代碼清單檔案。

/Fd <檔案>

擷取著色器程式資料庫 (PDB) 資訊並寫入指定的檔案。當您編譯著色器時,請使用 /Fd 來產生具有著色器偵錯資訊的 PDB 檔案。

/Fe <檔案>

將警告和錯誤輸出至指定的檔案。

/Fh <檔案>

包含物件程式代碼的輸出頭檔。

/Fl <檔案

輸出連結庫。 需要D3dcompiler_47.dll或更新版本的 DLL。

/Fo <檔案>

輸出物件檔。 通常指定擴展名 「.fxc」,但會使用其他延伸模組,例如 「.o」、“.obj” 或 “.dxbc”。

/Fx <檔案>

輸出元件程式代碼和十六進位清單檔案。

/Gch

編譯為fx_4_x配置檔的子效果。

注意

舊版效果配置檔的支援已被取代。

/Gdp

停用效果效能模式。

/Gec

啟用回溯相容性模式。

/Ges

啟用 strict 模式。

/getprivate <檔案>

將著色器 Blob(已編譯的著色器二進位檔)的私人數據儲存至指定的檔案。 從著色器 Blob 擷取先前由 /setprivate 內嵌的私人數據。

您必須使用 /getprivate 指定 /dumpbin 選項。 例如:

fxc /getprivate ps01.private.data 
    /dumpbin ps01.with.private.obj
/Gfa

避免流程控制建構。

/Gfp

偏好使用流程控制建構。

/Gis

強制 IEEE 嚴格。

/Gpp

強制部分有效位數。

/I <include>

其他包含路徑。

/Lx

輸出十六進位常值。 需要D3dcompiler_47.dll或更新版本的 DLL。

/matchUAV

比對目前著色器中的範本著色器 UAV 位置配置。 如需詳細資訊,請參閱

/mergeUAV

合併範本著色器和目前著色器的 UAV 位置配置。 如需詳細資訊,請參閱

/鎳

元件清單中的輸出指令編號。

/不

元件清單中的輸出指令位元組位移。 當您產生元件時,請使用 /No,以每個指令的位元組位移來標註它。

隱藏著作權訊息。

/Od

停用最佳化。 /Od 表示 /Gfp,不過輸出可能與 /Od /Gfp 不相同。

/Op

停用預陰影器(已淘汰)。

/O0 /O1、/O2、/O3

優化層級。 O1 是預設設定。

  • O0 - 停用指令重新排序。 這有助於減少緩存器負載,並啟用更快速的循環模擬。
  • O1 - 停用ps_3_0和更新的指示重新排序。
  • O2 - 與 O1 相同。 保留供未來使用。
  • O3 - 與 O1 相同。 保留供未來使用。
/P <檔案>

前置處理至檔案(必須單獨使用)。

/Qstrip_debug

針對 4_0+ 設定檔,從著色器位元組程式代碼移除偵錯數據。

/Qstrip_priv

從 4_0+ 著色器位元組程式代碼移除私人數據。 從您先前使用 /setprivate <file> 選項內嵌的著色器 Blob 中移除私用數據(任意位元組序列)。已編譯的著色器二進位檔。

您必須使用 /Qstrip_priv 指定 /dumpbin 選項。 例如:

fxc /Qstrip_priv /dumpbin /Fo ps01.no.private.obj 
    ps01.with.private.obj
/Qstrip_reflect

針對 4_0+ 配置檔,從著色器位元組程式代碼去除反映數據。

/Qstrip_rootsignature

從著色器位元組程式代碼移除根簽章。 Direct3D 12 的新功能。

/res_may_alias

假設UAV/SRV可能別名為 cs_5_0+。 需要D3dcompiler_47.dll或更新版本的 DLL。

/setprivate <檔案>

將指定檔案中的私用數據新增至已編譯的著色器 Blob。 將視為原始緩衝區的指定檔案內嵌至著色器 Blob。 當您編譯著色器時,請使用 /setprivate 來新增私人數據。 或者,搭配 /setprivate 使用 /dumpbin 選項來載入現有的著色器對象,然後在對象位於記憶體中之後,新增私人數據 Blob。 例如,使用搭配 /setprivate 的單一命令,將私人數據新增至已編譯的著色器 Blob:

fxc /T ps_4_0 /Fo ps01.with.private.obj ps01.fx 
    /setprivate ps01.private.data

或者,使用兩個命令,其中第二個命令會載入著色器對象,然後新增私人數據:

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 <檔案>

將根簽章附加到著色器位元組程式碼。 Direct3D 12 的新功能。

/shtemplate <檔案>

使用指定的範本著色器檔案來合併 (/mergeUAV) 和比對 (/matchUAV) 資源。 如需詳細資訊,請參閱

/Vd

停用驗證。

/verifyrootsignature <檔案>

根據根簽章驗證著色器位元組程序代碼。 Direct3D 12 的新功能。

/六

顯示包含程式的詳細數據。

/Vn <名稱>

使用 name 作為標頭檔中的變數名稱。

/WX

將警告視為錯誤。

/Zi

啟用偵錯資訊。

/Zpc

以數據行主要順序封裝矩陣。

/Zpr

以數據列主要順序封裝矩陣。

檔案名稱

[in]包含著色器/或效果的檔案。

備註

/mergeUAVs使用、 /matchUAVs/shtemplate 選項來對齊著色器鏈結的 UAV 系結位置。

假設您有著色器 A.fx、B.fx 和 C.fx。 若要對齊這個著色器鏈結的 UAV 系結位置,您需要兩次編譯階段:

對齊著色器鏈結的UAV系結位置

  1. 使用 /mergeUAV 編譯著色器,並使用 /shtemplate 指定先前編譯的著色器 Blob。 例如:
    fxc.exe /T cs_5_0 C.fx /Fo C.o /mergeUAVs /shtemplate Btmp.o
    
  2. 使用 /matchUAV 編譯著色器,並使用 /shtemplate 從第一個階段指定最後一個著色器 Blob。 您可以依任何順序編譯。 例如:
    fxc.exe /T cs_5_0 A.fx /Fo A.o /matchUAVs /shtemplate C.o
    

在第二次傳遞中,您不需要重新編譯 C.fx。

執行上述兩個編譯階段之後,您可以使用 A.o、B.o 和 C.o 作為具有對齊 UAV 位置的最終著色器 Blob。

設定檔

每個著色器模型都會加上 HLSL 配置檔的標籤。 若要針對特定著色器模型編譯著色器,請從下表選擇適當的著色器配置檔。

著色器類型設定檔
計算著色器
cs_4_0
cs_4_1
cs_5_0
cs_5_1
網域著色器
ds_5_0
ds_5_1
幾何著色器
gs_4_0
gs_4_1
gs_5_0
gs_5_1
HLSL 著色器連結
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
如需著色器鏈接的詳細資訊,請參閱ID3D11LinkerID3D11FunctionLinkingGraph。
赫爾著色器
hs_5_0
hs_5_1
像素著色器
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
根簽章
rootsig_1_0
紋理著色器
tx_1_0
頂點著色器
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

版本注意事項

對於 Direct3D 12,請參閱在 HLSL 中指定根簽章、HLSL 中的資源系結,以及使用 HLSL 5.1 的動態索引編製。

在 Direct3D 10 中,呼叫下列函式來取得最適合指定裝置的頂點、幾何和像素著色器配置檔:D3D10GetVertexShaderProfile、D3D10GetPixelShaderProfile D3D10GetGeometryShaderProfile

在 Direct3D 9 中,使用 GetDeviceCapsGetDeviceCaps 方法來擷取裝置支援的頂點和像素著色器配置檔。 這些方法所傳回的D3DCAPS9結構表示裝置在其 VertexShaderVersion 和 PixelShaderVersion 成員中支援的頂點和像素著色器配置檔。

如需範例,請參閱 使用目前的編譯程式進行編譯。