HLSL タイル リソースの公開
シェーダー モデル 5 でタイル リソースをサポートするには、新しい Microsoft High Level Shader Language (HLSL) 構文が必要です。
新しい HLSL 構文は、タイル リソースがサポートされているデバイスでのみ使用できます。 次の表のタイルリソースに関連する各 HLSL メソッドは、1 つ (フィードバック) または 2 つ (この順序でのクランプとフィードバック) の追加のオプション パラメーターを受け入れます。 Sample メソッドの例を示します。
Sample(sampler, location [, offset [, clamp [, feedback] ] ])
Sample メソッドの例は、Texture2D.Sample(S,float,int,float,uint) のようになります。
offset、clamp、feedback の各パラメーターは省略可能です。 必要なパラメーターまで、すべての省略可能なパラメーターを指定する必要があります。これは、C++ の既定の関数の引数に関する規則と一貫しています。 たとえば、フィードバックの状態が必要な場合、Sample に対して、論理的には必要ではない場合でも、offset および clamp の両方のパラメーターを明示的に指定する必要があります。
clamp パラメーターは、浮動小数点のスカラー値です。 リテラル値の clamp = 0.0f は、クランプ操作が実行されていないことを示します。
feedback パラメーターは uint 変数で、メモリ アクセス照会の組み込み関数 CheckAccessFullyMapped に対して指定できます。 feedback パラメーターの値を変更または解釈しないでください。コンパイラでは、値を変更したかどうかを検出するための高度な分析と診断の機能は提供されません。
CheckAccessFullyMapped の構文は次のとおりです。
bool CheckAccessFullyMapped(in uint FeedbackVar);
CheckAccessFullyMapped は、FeedbackVar の値を解釈し、アクセスされているすべてのデータがリソースにマップされていた場合は true を返します。それ以外の場合、CheckAccessFullyMapped は false を返します。
clamp と feedback のいずれかのパラメーターが存在する場合、コンパイラは、基本的な命令のバリアントを出力します。 たとえば、タイルリソースのサンプルでは命令が sample_cl_s
生成されます。 clamp も feedback も指定しない場合、現在の動作と変わらないようにするために、コンパイラは基本的な命令を出力します。 クランプ値が 0.0f である場合、クランプは実行されません。したがって、ドライバーのコンパイラは対象ハードウェアに合わせて命令をさらに調整することができます。 フィードバックが命令で NULL レジスタである場合、フィードバックは使用されていません。したがって、ドライバーのコンパイラはターゲット アーキテクチャに合わせて命令をさらに調整することができます。
HLSL コンパイラは、クランプが 0.0f であり、フィードバックが使用されていないことを推測する場合、対応する基本的な命令 (たとえば、sample_cl_s
ではなく sample
) を生成します。
タイル リソース アクセスが、構造化リソースなど、いくつかの構成バイト コード命令で構成されている場合、コンパイラは OR 操作を介して個々のフィードバック値を集計して最終的なフィードバック値を生成します。 そのため、このような複雑なアクセスでも、1 つのフィードバック値が示されます。
フィードバックやクランプをサポートするために変更される HLSL メソッドをまとめた表を次に示します。 これらはすべて、すべてのディメンションのタイル化されたリソースとタイル化されていないリソースで機能します。 タイル化されていないリソースは常に完全にマップされているように見えます。
HLSL オブジェクト | フィードバック オプションを持つ組み込みメソッド (*) - クランプ オプションも持つ |
---|---|
[RW]Texture2D [RW]Texture2DArray TextureCUBE TextureCUBEArray |
Gather GatherRed GatherGreen GatherBlue GatherAlpha GatherCmp GatherCmpRed GatherCmpGreen GatherCmpBlue GatherCmpAlpha |
[RW]Texture1D [RW]Texture1DArray [RW]Texture2D [RW]Texture2DArray [RW]Texture3D TextureCUBE TextureCUBEArray |
Sample* SampleBias* SampleCmp* SampleCmpLevelZero SampleGrad* SampleLevel |
[RW]Texture1D [RW]Texture1DArray [RW]Texture2D Texture2DMS [RW]Texture2DArray Texture2DArrayMS [RW]Texture3D [RW]Buffer [RW]ByteAddressBuffer [RW]StructuredBuffer |
[読み込み] |