Environments:

  • Windows 10
  • DirectX 12

HLSL的編譯主要可以通過

  • fxc.exe
  • Visual Studio
  • 動態編譯

這篇文章介紹如何用fxc.exe編譯HLSL。

fxc.exe的環境變數

在Windows 8開始,DirectX SDK已經整合到Windows SDk中。
在Windows 10中,fxc.exe可以在以下路徑找到。

1
C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x86

將路徑加入到環境變數中的Path後,在cmd中就可以使用。

開始編譯

cmd中,輸入

1
2
3
4
5
6
7
// Debug Mode
fxc "color.hlsl" /Od /Zi /T vs_5_0 /E "VS" /Fo "color_vs.cso" /Fc "color_vs.asm"
fxc "color.hlsl" /Od /Zi /T ps_5_0 /E "PS" /Fo "color_ps.cso" /Fc "color_ps.asm"

// Release Mode
fxc "color.hlsl" /T vs_5_0 /E "VS" /Fo "color_vs.cso" /Fc "color_vs.asm"
fxc "color.hlsl" /T ps_5_0 /E "PS" /Fo "color_ps.cso" /Fc "color_ps.asm"
參數 作用
/Od 禁用優化
/Zi 開啟調試信息
/T Shader Model
/E Shader的入口點(Entry Point)
/Fo 編譯後的文件名,一般以.cso作為後綴
/Fc Shader的匯編文檔

匯編文檔的輸出可以省略。其它參數可以在官方文檔找到。

DX中的讀取

最後在DX程序中,讀取編譯好的.cso文檔,並轉換成ID3DBlob便可。

主なHLSLのコンパイルの方法は、以下のようにする。

  • fxc.exe
  • Visual Studioに提供されたコンパイル
  • dynamic compile (runtime)

ここでは、fxc.exeでコンパイルの方法を紹介する。

fxc.exeの環境変数の設定

Windows 8から、DirectX SDKが既にWindows SDKに含まれていた。
Windows 10では、fxc.exeが以下のパスで見つけることができる。

1
C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x86

このパスを環境変数のPathに導入し、cmdで使用できるようになる。

コンパイルスタート

cmdで、以下のコードをインプットする。

1
2
3
4
5
6
7
// Debug Mode
fxc "color.hlsl" /Od /Zi /T vs_5_0 /E "VS" /Fo "color_vs.cso" /Fc "color_vs.asm"
fxc "color.hlsl" /Od /Zi /T ps_5_0 /E "PS" /Fo "color_ps.cso" /Fc "color_ps.asm"

// Release Mode
fxc "color.hlsl" /T vs_5_0 /E "VS" /Fo "color_vs.cso" /Fc "color_vs.asm"
fxc "color.hlsl" /T ps_5_0 /E "PS" /Fo "color_ps.cso" /Fc "color_ps.asm"
パラメータ 作用
/Od 最適化無効
/Zi デバッグモード
/T Shader Model
/E ShaderのEntry Point
/Fo コンパイルしたファイル名。拡張子は普通.csoにする
/Fc Shaderのアセンブリ

アセンブリのアウトプットは必要ではない。ほかのパラメータは公式サイトで調べてください。

DXでの読み込み

コンパイルした後、DXアプリケーションで.csoを読み込んで、ID3DBlobを作ることです。