リソースへのアクセス

リソースにアクセスするには、いくつかの方法があります。 関係なく、Direct3D では、範囲外でアクセスされるすべてのリソースに対して 0 が返されることを保証します。

バイト オフセットによるアクセス

バイト オフセットを使用して、2 つの新しいバッファー型にアクセスできます。

インデックスによるアクセス

リソースの種類では、インデックスを使用してリソース内の特定の場所を参照できます。 次の例について考えます。

uint2 pos;
Texture2D<float4> myTexture;
float4 myVar = myTexture[pos];

次の使用例は、myTexture 2D テクスチャ リソースの pos 位置にあるテクセルに格納されている 4 つの float 値を myVar 変数に割り当てます。

注意

この方法でテクスチャにアクセスするための既定値は、ミップマップ レベル 0 (最も詳細なレベル) です。

 

注意

"float4 myVar = myTexture[pos];" 行は"float4 myVar = myTexture.Load(uint3(pos,0));;" と同じです。 インデックスによるアクセスは、新しい HLSL 構文の機能強化です。

 

注意

2010 年 6 月バージョンの DirectX SDK 以降のコンパイラでは、 バイト アドレス バッファーを除くすべてのリソースの種類にインデックスを作成できます。

 

注意

2010 年 6 月以降のコンパイラでは、ローカル リソース変数を宣言できます。 これらの変数にグローバルに定義されたリソース ( myTexture など) を割り当てて、グローバルに対応するリソースと同じ方法で使用できます。

 

Mips メソッドによるアクセス

テクスチャ オブジェクトには mips メソッド ( Texture2D.mips など) があり、これを使用してミップマップ レベルを指定できます。 次の使用例は、ミップマップ レベル 2 の (7,16) に格納されている色を 2D テクスチャで読み取ります。

uint x = 7;
uint y = 16;
float4 myColor = myTexture.mips[2][uint2(x,y)];

これは、2010 年 6 月以降のコンパイラからの機能強化です。 "myTexture.mips[2][uint2(x,y)]" 式は、"myTexture.Load(uint3(x,y,2)))" と同じです。

コンピューティング シェーダーの概要