スカラー データ型
HLSL では、いくつかのスカラー データ型がサポートされています。
- bool - true または false。
- int - 32 ビット符号付き整数。
- uint - 32 ビット符号なし整数。
- dword - 32 ビット符号なし整数。
- half - 16 ビット浮動小数点値。 このデータ型は、言語の互換性のためにのみ提供されます。 Direct3D 10 シェーダー ターゲットは、すべての半分のデータ型を float データ型にマップします。 ハーフ データ型は、均一なグローバル変数では使用できません (その機能が必要な場合は、/Gec フラグを使用します)。
- float - 32 ビット浮動小数点値。
- double - 64 ビット浮動小数点値。 ストリームの入力と出力として倍精度値を使用することはできません。 シェーダー間で倍精度値を渡すには、各 double を uint データ型のペアとして宣言します。 次に、 asuint 関数を使用して各 double を uintのペアにパックし、 asdouble 関数を使用して uintのペアを ダブルにアンパックします。
Windows 8 以降、HLSL では最小有効桁数スカラー データ型もサポートされています。 グラフィックス ドライバーは、指定したビット精度以上の精度を使用して、最小有効桁数スカラー データ型を実装できます。 基になる特定の精度に依存するクランプまたはラップ動作に依存しないことをお勧めします。 たとえば、グラフィックス ドライバーは、完全な 32 ビット精度で min16float 値に対して算術演算を実行できます。
- min16float - 最小 16 ビット浮動小数点値。
- min10float - 最小 10 ビット浮動小数点値。
- min16int - 最小 16 ビット符号付き整数。
- min12int - 最小 12 ビット符号付き整数。
- min16uint - 最小 16 ビット符号なし整数。
スカラー リテラルの詳細については、「 文法」を参照してください。
HLSL シェーダー モデル 6.0 (Windows 10 バージョン 1607) では、次のスカラーが導入されました。
- uint64_t - 64 ビット符号なし整数。
- int64_t - 64 ビット符号付き整数。
HLSL シェーダー モデル 6.2 (Windows 10 バージョン 1803) で次のスカラーが導入され、使用されている場合-enable-16bit-types
に使用できます。
- float16_t - 常に 16 ビット浮動小数点値 (他の 16 ビット浮動小数点とは対照的に、16 ビットの場合とそうでない場合があります)。
- uint16_t - 16 ビット符号なし整数。
- int16_t - 16 ビット符号付き整数。
16 ビット型の詳細については、「 16 ビット スカラー型」を参照してください。 これらは、Turing 以上でサポートされているハードウェアで 16 ビットのサポートを必要とします。
Direct3D 9 と Direct3D 10 の違い:
Direct3D 10 では、次の型は float 型の修飾子です。
- snorm float - -1 ~ 1 の範囲の IEEE 32 ビット符号付き正規化された float。
- unorm float - 0 ~ 1 の範囲の IEEE 32 ビット符号なし正規化された float。
たとえば、4 コンポーネントの符号付き正規化された float 変数宣言を次に示します。
snorm float4 fourComponentIEEEFloat;
文字列の種類
HLSL では、ASCII 文字列である文字列 型もサポートされています。 文字列を受け入れる操作や状態はありません。ただし、効果は文字列パラメーターと注釈に対してクエリを実行できます。
例
// Top-level variable.
float globalShaderVariable;
// Top-level function.
void function(
in float4 position: POSITION0 // Top-level argument.
)
{
float localShaderVariable; // Local variable.
function2(...)
}
void function2()
{
...
}