Version: Unity 6.0 (6000.0)
言語 : 日本語
HLSL semantics reference
HLSL pragma ターゲットコマンドリファレンス

HLSL pragma ディレクティブリファレンス

標準の pragma ディレクティブ

Unity は、対象のディレクティブが通常のインクルードファイルに指定されていれば、標準の HLSL に含まれるすべての #pragma ディレクティブをサポートします。これらのディレクティブの詳細については、HLSL のドキュメント: pragma ディレクティブ を参照してください。

サーフェスシェーダー

サーフェスシェーダー を書く場合は、このディレクティブを使って サーフェス関数 として使用する関数をコンパイラーに指示し、その関数にデータを渡します。

ステートメント 機能
#pragma surface <surface function> <lighting model> <optional parameters> 指定された名前の関数をサーフェスシェーダーとしてコンパイルし、与えられたライティングモデルで動作させます。詳細については、サーフェスシェーダー を参照してください。

シェーダーステージ

通常のグラフィックスシェーダーを書いている場合は、これらのディレクティブを使って、シェーダーの各ステージで使用する関数をコンパイラーに伝えます。#pragma vertex および #pragma fragment ディレクティブは必須ですが、その他のステージは任意です。

ステートメント 機能
#pragma vertex <name> 指定された名前の関数を頂点シェーダーとしてコンパイルします。<name> を関数名に置き換えてください。このディレクティブは、通常のグラフィックスシェーダーでは必須です。
#pragma fragment <name> 指定された名前の関数をフラグメントシェーダーとしてコンパイルします。<name> を関数名に置き換えてください。このディレクティブは、通常のグラフィックスシェーダーでは必須です。
#pragma geometry <name> 指定された名前の関数をジオメトリシェーダーとしてコンパイルします。<name> を関数名に置き換えてください。このオプションは自動的に #pragma require geometry をオンにします。詳細については、HLSL でシェーダーモデルと GPU 機能を特定する を参照してください。

ノート: Metal はジオメトリシェーダをサポートしません。
#pragma hull <name> 指定された名前の関数を DirectX 11 ハルシェーダーとしてコンパイルします。<name> を関数名に置き換えてください。これにより、自動的に #pragma require tessellation が追加されます。詳細については、HLSL でシェーダーモデルと GPU 機能を特定する を参照してください。
#pragma domain <name> 指定された名前の関数を DirectX 11 ドメインシェーダーとしてコンパイルします。<name> を関数名に置き換えてください。このオプションは自動的に #pragma require tessellation をオンにします。詳細については、HLSL でシェーダーモデルと GPU 機能を特定する を参照してください。

シェーダーバリアントとキーワード

これらのディレクティブを使って、シェーダーコンパイラーに シェーダーバリアントとキーワード の扱い方を伝えます。詳細は、HLSL のシェーダーキーワードの宣言と使用 を参照してください。

ディレクティブ 説明
#pragma multi_compile <keywords> キーワードのコレクションを宣言します。コンパイラーは、ビルドにすべてのキーワードを含めます。

_local などのサフィックスを使用して、追加オプションを設定できます。

詳細とサポートされるサフィックスのリストは、HLSL のシェーダーキーワードの宣言と使用 を参照してください。
#pragma shader_feature <keywords> キーワードのコレクションを宣言します。コンパイラーは、使用されていないキーワードをビルドから除外します。

_local などのサフィックスを使用して、追加オプションを設定できます。

詳細とサポートされるサフィックスのリストは、HLSL のシェーダーキーワードの宣言と使用 を参照してください。
#pragma hardware_tier_variants <values> ビルトインレンダーパイプラインのみ。指定のグラフィックス API 用にコンパイルする際に、グラフィックス階層 のキーワードを追加します。詳細は、グラフィックス階層 を参照してください。
#pragma skip_variants <list of keywords> 指定したキーワードを削除します。

GPU 要件とシェーダーモデルサポート

以下のディレクティブを使用して、シェーダーが特定の GPU 機能を必要とすることをコンパイラーに伝えます。

ステートメント 機能
#pragma target <value> このシェーダープログラムと互換性のある最小のシェーダーモデル。<value> を有効な値に置き換えてください。有効な値のリストについては、シェーダーのコンパイル:HLSL でシェーダーモデルと GPU 機能を特定する を参照してください。
#pragma require <value> このシェーダーと互換性のある最小の GPU 機能。<value> を有効な値、または、スペースで区切った複数の有効な値に置き換えてください。有効な値のリストについては、シェーダーのコンパイル:HLSL でシェーダーモデルと GPU 機能を特定する を参照してください。

グラフィックス API

以下のディレクティブを使用して、特定のグラフィックス API 用のコードを含む、または除外するように指示します。

ステートメント 機能
#pragma only_renderers <value> 指定されたグラフィックス API に対してのみ、このシェーダープログラムをコンパイルします。<values> をスペースで区切られた有効な値のリストに置き換えてください。詳細と有効な値のリストについては、HLSLで特定のグラフィックス API とプラットフォームを対象にする方法 を参照してください。

例えば、#pragma only_renderers glcore はデスクトップ OpenGL に対してのみコンパイルします。ES 3 ターゲットのように、これもすべてのデスクトップ OpenGL バージョンを含むように設定されています。基本シェーダーは OpenGL 2.x に対応しますが、シェーダーモデル 5.0 の機能を要するシェーダーには OpenGL 4.2+ が必要です。
#pragma exclude_renderers <value> 指定されたグラフィックス API に対して、このシェーダープログラムをコンパイルしません。<value> をスペースで区切られた有効な値のリストに置き換えてください。詳細と有効な値のリストについては、HLSLで特定のグラフィックス API とプラットフォームを対象にする方法 を参照してください。

その他の pragma ディレクティブ

ステートメント 機能
#pragma instancing_options <options> 指定されたオプションを使って、このシェーダーで GPU インスタンシングを有効にします。詳細については、GPU インスタンシング を参照してください。
#pragma once ファイルにこのディレクティブを記述して、コンパイラーがこのファイルをシェーダープログラムに 1 回だけ含めるようにします。

注意Unity は、このディレクティブを、キャッシングシェーダープリプロセッサー が有効な場合にのみサポートします。
#pragma enable_d3d11_debug_symbols サポートされているグラフィックス API のシェーダーデバッグシンボルを生成し、すべてのグラフィックス API の最適化を無効にします。外部ツールでシェーダーコードをデバッグするために使用します。

Unity は、Vulkan、DirectX 11 および 12、サポートされるコンソールプラットフォーム向けのデバッグシンボルを生成します。

注意:これを使用すると、ファイルサイズが大きくなり、シェーダーのパフォーマンスが低下します。シェーダーのデバッグを終了し、アプリケーションの最終ビルドを作成する準備ができたら、シェーダーソースコードからこの行を削除し、シェーダーを再コンパイルしてください。
#pragma skip_optimizations <value> 指定されたグラフィックス API に対して、強制的に最適化をオフにします。<values> をスペースで区切られた有効な値のリストに置き換えてください。有効な値のリストについては、HLSLで特定のグラフィックス API とプラットフォームを対象にする方法 を参照してください。
#pragma hlslcc_bytecode_disassembly 逆アセンブルされた HLSLcc バイトコードを変換したシェーダーに埋め込みます。
#pragma disable_fastmath NaN 処理を含む正確な IEEE 754 規則を有効にします。現在、これは Metal プラットフォームにのみ影響します。
#pragma editor_sync_compilation 同期コンパイルを強制します。これは Unity エディターにのみ影響します。詳細については、非同期シェーダーコンパイル を参照してください。
#pragma enable_cbuffer 現在のプラットフォームが定数バッファをサポートしていない場合でも、HLSLSupport から CBUFFER_START(name)CBUFFER_END マクロを使用する場合に cbuffer(name) を放出します。
HLSL semantics reference
HLSL pragma ターゲットコマンドリファレンス