2017-01-05 19 views
3

サイズが100、幅が100のテクスチャがあり、スレッドグループとサイズが{10, 10, 1}のカーネル関数にディスパッチされているとします。カーネル内のピクセル座標、テクスチャ座標とgid

thread_position_in_gridが0-9または0-99(テクスチャのサイズが100×100)になるかどうかを理解できませんか?

私はテクスチャの色を取得するためにfloat4 c = in.read(gid);を使用していますが、私は(それが間にある場合があるだろうタイプfloat4のある結果を取得するために調整する方法gidはテクスチャにをマッピングされている知っていただきたいと思いますピクセル(テクスチャ?)座標?)。

カーネル関数でのテクスチャのサイズで定義されている正確な位置を取得できるようにするために、上記の仕組みがどれほど深いか理解したいと思います。すなわち、

発送サイズ:{10, 10, 1}およびテクスチャサイズ100 x 100;そして、カーネル関数の値を取得する:

0、1、2、3、4、5 ...、カーネル関数内gidtexture coordinatespixel coordinatesをどのように関係するか99要約すると

、?彼らはどのようにからマップしますか?私は過去4日間、ドキュメンテーションと同様の質問を読んできましたが、具体的で権威ある答えを得ることに成功しませんでした。

ありがとうございます。

答えて

2

あなたの例では、あなたがこのような作業のグリッド派遣している:グリッドのドメインは2次元であるので、あなたのgid

MTLSize threadsPerThreadgroup = { 10, 10, 1 }; 
MTLSize threadgroupCount = { 10, 10, 1 }; 
[computeEncoder dispatchThreadgroups:threadgroupCount 
       threadsPerThreadgroup:threadsPerThreadgroup]; 

は、属性thread_position_in_gridで、おそらくタイプuint2のです。ここまでは順調ですね。

gidは、(0,0)から(99,99)の範囲である。どのようにテクスチャ座標を含む他の数量にマップするかは、までです。までです。

たとえば、100x100テクスチャではなく、300x300テクスチャで操作し、右下隅に何らかの操作を実行するとします。その場合、座標(200,200)〜(299,29)のピクセル領域を指定するために、テクスチャを読み書きする前にgiduint2(200, 200)を追加することができます。可能な限り他の任意の変換も可能です。

基本的に、グリッドの寸法を指定すると、実行する操作の論理的な形状を記述するのに便利です。また、(threadsPerThreadgroupを介して)並行して実行できる作業の量を最適化できます。

(正規化された)テクスチャ座標については、格子寸法がテクスチャ寸法と正確に一致する単純なケースでは、[[threads_per_grid]]属性で修飾されたパラメータで割ることによってカーネル関数の呼び出しに対応する正規化座標を得ることができますtpguint2 tpg [[threads_per_grid]]として宣言されたカーネル関数に別のパラメータである

float2 coords = gid/float2(tpg) 

:、切り捨てを避けるために、最初にキャストする思い出して。

+2

テクスチャからの*サンプリング*(たとえば、in.sample(in_sampler、coords、...)を使用)を使用すると、正規化されたテクスチャ座標に関するビットが正しくなります。元の質問と同じように*テクスチャを読むときは、常に正規化されていないテクスチャ(テクセルまたはピクセル)座標を使用します。他のいくつかの質問を明示すると、グリッドとテクスチャ座標の位置に自動変換はありません。渡した値はテクスチャ座標として直接解釈されます。読み込みでは、テクスチャ座標の「中間」はありません。整数とそれらを1対1でテクスチャ座標に渡しています。 –

+0

良いメモ、ケン。余分な詳細と説明をくれてありがとう。 – warrenm

+0

お返事ありがとうございました。したがって、各スレッドは、_single_グループ内の '0-99'から移動します。 どのグループ(インスタンス)が実行されているか(例:グループ2とそれに対応するgid値、グループ4 ...)を知る方法はありますか?さらに、 100x100のテクスチャの場合に '0 - 9999'から値を取得したいのですか?それは可能でしょうか?その場合は、テクスチャ(およびグリッドも行方向または列方向に格納されます)がありますか? – Unheilig

関連する問題