HLSLシェーダーコンパイルを極める: CMakeとVS_SHADER_FLAGSを使いこなす
使用方法
VS_SHADER_FLAGS プロパティは、CMake の target_sources
コマンドまたは add_executable
コマンドを使用して設定できます。以下の例は、MyShader.hlsl
という名前の HLSL シェーダーファイルに -DDEBUG
フラグを追加する方法を示しています。
target_sources(MyShaderProgram PRIVATE MyShader.hlsl)
set_property(SOURCE MyShader.hlsl PROPERTY VS_SHADER_FLAGS "-DDEBUG")
使用例
VS_SHADER_FLAGS プロパティを使用して、以下の操作を実行できます。
- ライブラリをリンクする:
/link MyLibrary.lib
のように、ライブラリをリンクして、シェーダーコードで使用されるライブラリを指定できます。 - インクルードディレクトリを追加する:
/I "include"
のように、インクルードディレクトリを追加して、シェーダーコードで使用されるヘッダーファイルの場所を指定できます。 - マクロを定義する:
/DDEBUG
のように、マクロを定義して、シェーダーコード内で使用できます。 - コンパイラ警告を制御する:
/Wno-all
のように、コンパイラ警告を抑制したり、特定の警告を有効にしたりできます。 - シェーダーモデルを指定する:
/T vs_5_0
のように、シェーダーモデルを指定して、シェーダーがターゲットとする DirectX API バージョンを設定できます。
注意点
- VS_SHADER_FLAGS プロパティは、HLSL シェーダーファイルにのみ適用されます。他の種類のソースファイルには影響しません。
- VS_SHADER_FLAGS プロパティは、Visual Studio でのみ使用できます。他のコンパイラを使用している場合は、対応するオプションを使用する必要があります。
VS_SHADER_FLAGS プロパティの詳細については、CMake のドキュメントを参照してください:
例 1: シェーダーモデルを指定する
この例では、MyShader.hlsl
という名前の HLSL シェーダーファイルを DirectX 12 でコンパイルするように設定します。
target_sources(MyShaderProgram PRIVATE MyShader.hlsl)
set_property(SOURCE MyShader.hlsl PROPERTY VS_SHADER_FLAGS "/T vs_6_0")
例 2: コンパイラ警告を制御する
この例では、MyShader.hlsl
という名前の HLSL シェーダーファイルのコンパイル時にすべての警告を抑制します。
target_sources(MyShaderProgram PRIVATE MyShader.hlsl)
set_property(SOURCE MyShader.hlsl PROPERTY VS_SHADER_FLAGS "/Wno-all")
例 3: マクロを定義する
この例では、MyShader.hlsl
という名前の HLSL シェーダーファイルで DEBUG
マクロを定義します。
target_sources(MyShaderProgram PRIVATE MyShader.hlsl)
set_property(SOURCE MyShader.hlsl PROPERTY VS_SHADER_FLAGS "-DDEBUG")
例 4: インクルードディレクトリを追加する
この例では、MyShader.hlsl
という名前の HLSL シェーダーファイルで使用されるヘッダーファイルの場所を指定するインクルードディレクトリを追加します。
target_sources(MyShaderProgram PRIVATE MyShader.hlsl)
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include
PROPERTY VS_SHADER_INCLUDE_DIRECTORIES)
例 5: ライブラリをリンクする
この例では、MyShader.hlsl
という名前の HLSL シェーダーファイルで使用されるライブラリをリンクします。
target_sources(MyShaderProgram PRIVATE MyShader.hlsl)
target_link_libraries(MyShaderProgram MyLibrary)
- VS_SHADER_FLAGS プロパティは、HLSL シェーダーファイルにのみ適用されます。他の種類のソースファイルには影響しません。
- VS_SHADER_FLAGS プロパティは、Visual Studio でのみ使用できます。他のコンパイラを使用している場合は、対応するオプションを使用する必要があります。
- 上記の例はあくまで一例であり、ニーズに合わせて変更する必要があります。
代替方法
"VS_SHADER_FLAGS" の代替方法として、以下の方法が考えられます。
- 手動でコマンドラインを使用する
CMake を使用せずに、Visual Studio コマンドライン ツールを使用して HLSL シェーダーファイルをコンパイルすることもできます。この方法は、高度な制御が必要な場合や、CMake を使用しないプロジェクトで作業している場合に役立ちます。 - Visual Studio プロジェクトファイルを使用する
Visual Studio でプロジェクトを作成する場合は、プロジェクトファイルを使用して HLSL シェーダーファイルのコンパイルオプションを指定できます。この方法は、"VS_SHADER_FLAGS" を使用するよりも直感的で、プロジェクトの設定を簡単に管理できます。
各方法の詳細
Visual Studio プロジェクトファイルを使用する
Visual Studio でプロジェクトを作成する場合は、以下の手順で HLSL シェーダーファイルのコンパイルオプションを指定できます。
- ソリューションエクスプローラーで、HLSL シェーダーファイルを選択します。
- プロパティウィンドウを開きます。
- 構成プロパティ > C++ > 全般 > 追加のコンパイラ フラグ に移動します。
- HLSL シェーダーファイルに適用するコンパイルオプションを入力します。
CMake には、"VS_SHADER_FLAGS" 以外にも、HLSL シェーダーファイルのコンパイルオプションを指定するためのプロパティがいくつか用意されています。これらのプロパティの例を以下に示します。
- CMAKE_VS_SHADER_CUSTOM_FLAGS
カスタムコンパイルオプションを指定します。 - CMAKE_VS_SHADER_RELEASE_FLAGS
リリースビルド用のコンパイルオプションを指定します。 - CMAKE_VS_SHADER_DEBUG_FLAGS
デバッグビルド用のコンパイルオプションを指定します。
これらのプロパティを使用するには、以下の例のように target_properties
コマンドまたは add_executable
コマンドで使用します。
target_properties(MyShaderProgram PROPERTIES
CMAKE_VS_SHADER_DEBUG_FLAGS "/DDEBUG"
CMAKE_VS_SHADER_RELEASE_FLAGS "/O2")
手動でコマンドラインを使用する
CMake を使用せずに、Visual Studio コマンドライン ツールを使用して HLSL シェーダーファイルをコンパイルすることもできます。この方法は、高度な制御が必要な場合や、CMake を使用しないプロジェクトで作業している場合に役立ちます。
Visual Studio コマンドライン ツールを使用して HLSL シェーダーファイルをコンパイルするには、以下の手順を実行します。
- Visual Studio コマンドプロンプトを開きます。
- 以下のコマンドを実行します。
cl.exe /T vs_6_0 MyShader.hlsl /Fo MyShader.obj /DDEBUG /I "include"
このコマンドは、MyShader.hlsl
という名前の HLSL シェーダーファイルを DirectX 12 でコンパイルし、MyShader.obj
という名前のオブジェクトファイルを作成します。オプション /DDEBUG
は、DEBUG
マクロを定義し、オプション /I "include"
は、インクルードディレクトリ include
を指定します。
推奨事項
どの方法を使用するかは、プロジェクトのニーズと要件によって異なります。一般的には、以下の推奨事項が役立ちます。
- 高度な制御が必要な場合や、CMake を使用しないプロジェクトで作業している場合は、手動でコマンドラインを使用します。
- 小規模なプロジェクトまたは Visual Studio でプロジェクトを作成する場合は、Visual Studio プロジェクトファイルを使用するのが最も簡単です。
- Visual Studio コマンドライン ツールを使用して HLSL シェーダーファイルをコンパ