4

これは技術的にサポートされていないことを知っています (そして、未定義の動作であると私が知る限り) が、書き込まれているテクスチャからサンプリングするのは本当に致命的な恐ろしいことですか?

書き込みも必要な深度テクスチャから読み取る必要があるため、質問します。これができない場合は、深度テクスチャをコピーする必要があり、それほど大したことではない場合はコピーしません。単純にコピーするだけで害があると思いませんか?

助けてくれてありがとう!

4

2 に答える 2

3

はい、それは致命的であり、未定義の動作を引き起こします。コピーを作成し、コピーから読み取るだけです。

説明は簡単です。フラグメントは不特定の順序で並列に処理されるため、既に書き込まれたテクセルまたは元の値のテクセルから読み取っている可能性があり、何を読み取っているのかを知る方法はありません。コピーを作成して読み取ることで、正しい値を読み取ることができます。

于 2010-11-01T03:29:25.217 に答える
2

Matias と Goz が最も重要な部分をカバーしました。いくつかの興味深い事実を追加させてください。

  • Direct3D ランタイムは、基になるリソースをレンダー ターゲットとしてバインドすると、テクスチャをアクティブにアンバインドします (そのため、そこでサイクルを作成できません)。
  • Direct3D 11 の UAV では、実際には、形式のサブセット (型変換を必要としないもの) での読み取り-変更-書き込み操作が可能です。ただし、操作の順序は保証されません。これは、順序に依存しない透過性を行う多くのアルゴリズムで使用されているものです (特に、再順序付けが手動で行われる場合)。
于 2010-11-02T12:24:15.127 に答える