1

image2D と sampler2D と同じテクスチャを使用することは合法 (かつ明確に定義されている) ですか?

現在、GLSL シェーダー内で imageLoad() および imageStore() を使用して、image2D から書き込みおよびロードしています。ただし、テクスチャのいくつかのミップマップ レベルからも読み取り (書き込みではなく) したいのですが、これは imageLoad ではサポートされていません (各ミップマップ レベルを個別の image2D としてバインドする必要があると思いますが、使用可能な画像ユニットの量はかなり限定的)。だから私の質問は、imageStore() の image2D として使用する同じテクスチャを、textureLod() で使用する sampler2D として使用してもよいかどうかです。

4

1 に答える 1

1

法的?はい。明確に定義されていますか?それはあなたが彼らと何をしているかによって異なります。

画像に書き込み、テクスチャからミップマップをサンプリングするとします。書き込んだのと同じミップマップからサンプリングしていますか? だとしたら・・・大問題です。テクスチャ アクセスは必須ではないためcoherant、これが機能する保証はありません。glMemoryBarrier書き込み時とサンプリング時の間に明示的な CPU 呼び出しがないわけではありません。また、CPU の介入が必要なため、同じシェーダー内では実行できません。

書き込んでいないミップマップからのサンプリングを防ぐ保護を提供する場合(「あなた」とは、「使用しているすべてのシェーダー呼び出し」を意味します)、すべてがうまくいくはずです。textureLodテクスチャの BASE_LEVEL などを使用または設定しても問題ありません。

于 2012-03-22T18:25:57.983 に答える