HLSL ストリーミング リソースの露出HLSL streaming resources exposure

シェーダー モデル 5 のストリーミング リソースをサポートするには、Microsoft 上位レベル シェーダー言語 (HLSL) の特定の構文が必要です。A specific Microsoft High Level Shader Language (HLSL) syntax is required to support streaming resources in Shader Model 5.

シェーダー モデル 5 の HLSL 構文は、ストリーミング リソースのサポートを備えたデバイスでのみ使用できます。The HLSL syntax for Shader Model 5 is allowed only on devices with streaming resources support. 次の表のストリーミング リソース用の関連する各 HLSL メソッドでは、1 つ (フィードバック) または 2 つ (クランプとフィードバックをこの順序で) の追加の省略可能なパラメーターを指定できます。Each relevant HLSL method for streaming resources in the following table accepts either one (feedback) or two (clamp and feedback in this order) additional optional parameters. Sample メソッドの例を示します。For example, a Sample method is:

サンプル (サンプラー、場所[、オフセット[、クランプ[、フィードバック] ] ])Sample(sampler, location [, offset [, clamp [, feedback] ] ])

Sample メソッドの例は、Texture2D.Sample(S,float,int,float,uint) のようになります。An example of a Sample method is Texture2D.Sample(S,float,int,float,uint).

offset、clamp、feedback の各パラメーターは省略可能です。The offset, clamp and feedback parameters are optional. 必要なパラメーターまで、すべての省略可能なパラメーターを指定する必要があります。これは、C++ の既定の関数の引数に関する規則と一貫しています。You must specify all optional parameters up to the one you need, which is consistent with the C++ rules for default function arguments. たとえば、フィードバックの状態が必要な場合、Sample に対して、論理的には必要ではない場合でも、offset および clamp の両方のパラメーターを明示的に指定する必要があります。For example, if the feedback status is needed, both offset and clamp parameters need to be explicitly supplied to Sample, even though they may not be logically needed.

clamp パラメーターは、浮動小数点のスカラー値です。The clamp parameter is a scalar float value. リテラル値の clamp = 0.0f は、クランプ操作が実行されていないことを示します。The literal value of clamp=0.0f indicates that the clamp operation isn't performed.

feedback パラメーターは uint 変数で、メモリ アクセス照会の組み込み関数 CheckAccessFullyMapped に対して指定できます。The feedback parameter is a uint variable that you can supply to the memory-access querying intrinsic CheckAccessFullyMapped function. feedback パラメーターの値を変更または解釈しないでください。コンパイラでは、値を変更したかどうかを検出するための高度な分析と診断の機能は提供されません。You must not modify or interpret the value of the feedback parameter; but, the compiler doesn't provide any advanced analysis and diagnostics to detect whether you modified the value.

CheckAccessFullyMapped の構文は次のとおりです。Here is the syntax of CheckAccessFullyMapped:

bool CheckAccessFullyMapped(in uint FeedbackVar);bool CheckAccessFullyMapped(in uint FeedbackVar);

CheckAccessFullyMapped の値を解釈FeedbackVarアクセスされているすべてのデータがリソースにマップされているそれ以外の場合は true を返しますCheckAccessFullyMapped。false を返します。CheckAccessFullyMapped interprets the value of FeedbackVar and returns true if all data being accessed was mapped in the resource; otherwise, CheckAccessFullyMapped returns false.

clamp と feedback のいずれかのパラメーターが存在する場合、コンパイラは、基本的な命令のバリアントを出力します。If either the clamp or feedback parameter is present, the compiler emits a variant of the basic instruction. たとえば、ストリーミング リソースのサンプルは、sample_cl_s 命令を生成します。For example, sample of a streaming resource generates the sample_cl_s instruction.

clamp も feedback も指定しない場合、現在の動作と変わらないようにするために、コンパイラは基本的な命令を出力します。If neither clamp nor feedback is specified, the compiler emits the basic instruction, so that there is no change from the current behavior.

クランプ値が 0.0f である場合、クランプは実行されません。したがって、ドライバーのコンパイラは対象ハードウェアに合わせて命令をさらに調整することができます。The clamp value of 0.0f indicates that no clamp is performed; thus, the driver compiler can further tailor the instruction to the target hardware. フィードバックが命令で NULL レジスタである場合、フィードバックは使用されていません。したがって、ドライバーのコンパイラはターゲット アーキテクチャに合わせて命令をさらに調整することができます。If feedback is a NULL register in an instruction, the feedback is unused; thus, the driver compiler can further tailor the instruction to the target architecture.

HLSL コンパイラは、クランプが 0.0f であり、フィードバックが使用されていないことを推測する場合、対応する基本的な命令 (たとえば、sample_cl_s ではなく sample ) を生成します。If the HLSL compiler infers that clamp is 0.0f and feedback is unused, the compiler emits the corresponding basic instruction (for example, sample rather than sample_cl_s).

ストリーミング リソースへのアクセスが、複数のバイト コード命令で構成される場合 (構造化されたリソースなど)、コンパイラは OR 演算によって個別のフィードバック値を集計し、最終的なフィードバック値を生成します。If a streaming resource access consists of several constituent byte code instructions, for example, for structured resources, the compiler aggregates individual feedback values via the OR operation to produce the final feedback value. そのため、このような複雑なアクセスでも、1 つのフィードバック値が示されます。Therefore, you see a single feedback value for such a complex access.

フィードバックやクランプをサポートするために変更される HLSL メソッドをまとめた表を次に示します。This is the summary table of HLSL methods that are changed to support feedback and/or clamp. これらは、あらゆるサイズのタイル リソースや非ストリーミング リソースで動作します。These all work on tiled and non-streaming resources of all dimensions. 非ストリーミング リソースは、常に、完全にマップされているように表示されます。Non-streaming resources always appear to be fully mapped.

HLSL オブジェクト HLSL objects フィードバック オプションを持つ組み込みメソッド (\*) - クランプ オプションも持つIntrinsic methods with feedback option (\*) - also has clamp option

[RW]Texture2D[RW]Texture2D

[RW]Texture2DArray[RW]Texture2DArray

TextureCUBETextureCUBE

TextureCUBEArrayTextureCUBEArray

GatherGather

GatherRedGatherRed

GatherGreenGatherGreen

GatherBlueGatherBlue

GatherAlphaGatherAlpha

GatherCmpGatherCmp

GatherCmpRedGatherCmpRed

GatherCmpGreenGatherCmpGreen

GatherCmpBlueGatherCmpBlue

GatherCmpAlphaGatherCmpAlpha

[RW]Texture1D[RW]Texture1D

[RW]Texture1DArray[RW]Texture1DArray

[RW]Texture2D[RW]Texture2D

[RW]Texture2DArray[RW]Texture2DArray

[RW]Texture3D[RW]Texture3D

TextureCUBETextureCUBE

TextureCUBEArrayTextureCUBEArray

Sample\*Sample\*

SampleBias\*SampleBias\*

SampleCmp\*SampleCmp\*

SampleCmpLevelZeroSampleCmpLevelZero

SampleGrad\*SampleGrad\*

SampleLevelSampleLevel

[RW]Texture1D[RW]Texture1D

[RW]Texture1DArray[RW]Texture1DArray

[RW]Texture2D[RW]Texture2D

Texture2DMSTexture2DMS

[RW]Texture2DArray[RW]Texture2DArray

Texture2DArrayMSTexture2DArrayMS

[RW]Texture3D[RW]Texture3D

[RW]Buffer[RW]Buffer

[RW]ByteAddressBuffer[RW]ByteAddressBuffer

[RW]StructuredBuffer[RW]StructuredBuffer

LoadLoad

 

関連トピックRelated topics

リソースのストリーミング パイプラインへのアクセスPipeline access to streaming resources