テクスチャキャッシュはタイルベースのレンダリングGPUでどのように機能しますか


9

キャッシュはタイルベースのレンダリングでどのように機能しますか?

キャッシュヒット率を向上させるためのヒントはありますか?(たとえば、タイルが水平方向に処理され、同じテクスチャを持つ三角形の垂直セグメントがある場合、水平方向に三角形のレイアウトを配置する場合よりも、キャッシュの方が機能しませんか?)


1
三角形の垂直レイアウトと水平レイアウトとはどういう意味ですか?
Mokosha 2015

@Mokosha申し訳ありませんが、これはどういうわけか私には気付かれませんでした。今見たところです。これは実際的な問題ではなく理論的な問題であり、これが今意味をなすかどうかさえわかりません。とにかく、私が意味したことは、三角形がタイル(x、y)と(x + 1、y)を交差し、これらの2つのタイルが次々に処理されるということです。(x、y)と(x、y + 1)を交差する三角形がある場合よりも、テクスチャキャッシュの方が良いでしょうか?(境界ピクセルと三角形のレイアウトが同じ方向ではないため、タイル処理はそうなります)
Felipe Lira

回答:


19

タイルベースのGPUであるかどうかは、実際にはテクスチャキャッシュアーキテクチャには影響しません。テクスチャのメモリレイアウトは、すべてのGPU でモートン次数またはヒルベルト曲線の味のように見えます。

その結果、GPUメモリシステムがテクセルのキャッシュラインをフェッチするため、正三角形に近い三角形をレンダリングする方が効率的です。

したがって、タイルの境界では明らかに、テクセルを2回フェッチする必要がある場合があります。タイルの境界線は「数ピクセル」しかないため、これにはわずかなコストしかかかりません。

間違いなく、デスクトップGPUはタイルベースのGPUと同じように動作し、次のような実験が実証されています。http : //www.g-truc.net/post-0597.html

タイルのサイズは異なりますが、どちらのアーキテクチャも実際にはフラグメントを異なるサイズのタイルの階層に処理します。

タイルベースのGPUをコーディングする場合、私の心得は常に心に留めておくことです。

  1. 本当に必要な場合以外は、フレームバッファオブジェクトを切り替えないでください。
  2. 新しいフレームバッファオブジェクトをバインドするときに、現在のフレームバッファの内容を保存する必要がない場合は、それを破棄します。新しいフレームバッファのコンテンツをロードしたくない場合は、フレームバッファをクリアする必要があります。

編集が意図したものではなかったため、2番目の項目を更新しました。そうでなければ、それは素晴らしいですね!
Christophe

こんにちはクリストフ、「二等辺」ではなく「正三角形」を意味しましたか?「ヒルベルト」ではなく、ハードウェアでのアドレス指定がはるかに簡単なので、「モートン」の順序を言ったでしょう。
Simon F

@Christopheありがとう!これは本当に役に立ちます。では、境界ピクセルについては、テクスチャキャッシュは重要ではないのですか?それは私が思っていたようなものでした。したがって、タイル(x、y)と(x + 1、y)を交差する三角形があり、GPUがタイル(x、y)をラスタライズした場合。タイル(x + 1、y)が次であると仮定すると、別の実行ユニットがそれを処理する場合でも、この三角形のテクセルをサンプリングするときに、テクスチャキャッシュの恩恵を受けませんか?
フェリペ・リラ

また、ヒルベルトパターンについても知りました。私はこれがブロック圧縮されたテクスチャに当てはまるといつも思っていました。これはすべてのテクスチャに当てはまりますか?PS:私も最後の段落に従わなかった。
フェリペ・リラ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.