HLSLシェーダーコンパイルを極める: CMakeとVS_SHADER_FLAGSを使いこなす

2024-06-20

CMake の "Properties: Source Files" に関連する "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 プロパティを使用して、以下の操作を実行できます。

  • シェーダーモデルを指定する: /T vs_5_0 のように、シェーダーモデルを指定して、シェーダーがターゲットとする DirectX API バージョンを設定できます。
  • コンパイラ警告を制御する: /Wno-all のように、コンパイラ警告を抑制したり、特定の警告を有効にしたりできます。
  • マクロを定義する: /DDEBUG のように、マクロを定義して、シェーダーコード内で使用できます。
  • インクルードディレクトリを追加する: /I "include" のように、インクルードディレクトリを追加して、シェーダーコードで使用されるヘッダーファイルの場所を指定できます。
  • ライブラリをリンクする: /link MyLibrary.lib のように、ライブラリをリンクして、シェーダーコードで使用されるライブラリを指定できます。

注意点

  • VS_SHADER_FLAGS プロパティは、Visual Studio でのみ使用できます。他のコンパイラを使用している場合は、対応するオプションを使用する必要があります。
  • VS_SHADER_FLAGS プロパティは、HLSL シェーダーファイルにのみ適用されます。他の種類のソースファイルには影響しません。

VS_SHADER_FLAGS プロパティの詳細については、CMake のドキュメントを参照してください: https://cmake.org/cmake/help/latest/manual/cmake-compile-features.7.html



    例 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: マクロを定義する

    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: ライブラリをリンクする

    target_sources(MyShaderProgram PRIVATE MyShader.hlsl)
    target_link_libraries(MyShaderProgram MyLibrary)
    

    注意事項

    • 上記の例はあくまで一例であり、ニーズに合わせて変更する必要があります。
    • VS_SHADER_FLAGS プロパティは、Visual Studio でのみ使用できます。他のコンパイラを使用している場合は、対応するオプションを使用する必要があります。
    • VS_SHADER_FLAGS プロパティは、HLSL シェーダーファイルにのみ適用されます。他の種類のソースファイルには影響しません。

    VS_SHADER_FLAGS プロパティの詳細については、CMake のドキュメントを参照してください: https://cmake.org/cmake/help/latest/manual/cmake-compile-features.7.html



      "VS_SHADER_FLAGS" の代替方法

      代替方法

      "VS_SHADER_FLAGS" の代替方法として、以下の方法が考えられます。

      • Visual Studio プロジェクトファイルを使用する: Visual Studio でプロジェクトを作成する場合は、プロジェクトファイルを使用して HLSL シェーダーファイルのコンパイルオプションを指定できます。この方法は、"VS_SHADER_FLAGS" を使用するよりも直感的で、プロジェクトの設定を簡単に管理できます。
      • 手動でコマンドラインを使用する: CMake を使用せずに、Visual Studio コマンドライン ツールを使用して HLSL シェーダーファイルをコンパイルすることもできます。この方法は、高度な制御が必要な場合や、CMake を使用しないプロジェクトで作業している場合に役立ちます。

      各方法の詳細

      Visual Studio でプロジェクトを作成する場合は、以下の手順で HLSL シェーダーファイルのコンパイルオプションを指定できます。

      1. ソリューションエクスプローラーで、HLSL シェーダーファイルを選択します。
      2. プロパティウィンドウを開きます。
      3. 構成プロパティ > C++ > 全般 > 追加のコンパイラ フラグ に移動します。
      4. HLSL シェーダーファイルに適用するコンパイルオプションを入力します。

      CMake には、"VS_SHADER_FLAGS" 以外にも、HLSL シェーダーファイルのコンパイルオプションを指定するためのプロパティがいくつか用意されています。これらのプロパティの例を以下に示します。

      • CMAKE_VS_SHADER_DEBUG_FLAGS: デバッグビルド用のコンパイルオプションを指定します。
      • CMAKE_VS_SHADER_RELEASE_FLAGS: リリースビルド用のコンパイルオプションを指定します。
      • CMAKE_VS_SHADER_CUSTOM_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 シェーダーファイルをコンパイルするには、以下の手順を実行します。

      1. Visual Studio コマンドプロンプトを開きます。
      2. 以下のコマンドを実行します。
      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 を指定します。

      推奨事項

      どの方法を使用するかは、プロジェクトのニーズと要件によって異なります。一般的には、以下の推奨事項が役立ちます。

      • 小規模なプロジェクトまたは Visual Studio でプロジェクトを作成する場合は、Visual Studio プロジェクトファイルを使用するのが最も簡単です。
      • 高度な制御が必要な場合や、CMake を使用しないプロジェクトで作業している場合は、手動でコマンドラインを使用します。
      • Visual Studio コマンドライン ツールを使用して HLSL シェーダーファイルをコンパ