ハザード追跡対タイル プール リソース
タイル化されていないリソースの場合、Direct3D はレンダリング中に特定の危険状態を防ぐことができますが、タイル化されたリソースの危険度の追跡はタイル レベルになるため、タイルリソースのレンダリング中に危険状況を追跡するとコストが高すぎる可能性があります。
たとえば、タイル化されていないリソースの場合、ランタイムでは、指定された SubResource を入力 (ShaderResourceView など) と出力 (RenderTargetView など) として同時にバインドすることはできません。 このようなケースが発生した場合、ランタイムは入力のバインドを解除します。 ランタイムでのこの追跡オーバーヘッドは安価であり、SubResource レベルで行われます。 この追跡オーバーヘッドの利点の 1 つは、アプリケーションが誤ってハードウェア シェーダーの実行順序に依存する可能性を最小限に抑えられることです。 ハードウェア シェーダーの実行順序は、特定のグラフィックス処理装置 (GPU) 上でなければ変化する可能性があり、異なる GPU では確実に異なります。
タイル リソースのバインド方法を追跡すると、タイル レベルで追跡されるため、タイル リソースに対してコストが高すぎる可能性があります。 1 つのタイルがサーフェス内の複数の領域に同時にマップされた RenderTargetView へのレンダリング試行を検証するなど、新しい問題が発生します。 ランタイムでこのタイルごとのハザード追跡のコストが高すぎる場合、少なくともこれをデバッグ レイヤーでのオプションにすることをお勧めします。
アプリケーションは、タイル プール メモリを参照するタイル プール メモリを参照する書き込み操作または読み取り操作を実行したときに、次の操作を開始する前に最初の操作が完了することを想定していることを、今後の読み取りまたは書き込み操作で個別のタイル リソースによって参照されることをディスプレイ ドライバーに通知する必要があります。 この条件の詳細については、「 ID3D11DeviceContext2::TiledResourceBarrier 解説」を参照してください。
関連トピック