HTILE、DCC、CMASK、FMASK
HTILE、DCC、CMASK、FMASK は本体の圧縮された深度とカラーのメタデータです。PS5PCEM はポインターを追跡し、理解できる場合には HTILE をクリアし、そうでなければ誤ってデタイルしてしまうレイアウトを拒否します。
2026年10月10日 までのリポジトリノート
4 つの名前の意味
HTILE は深度のメタデータです。PS5PCEM が実装する GFX10 のパターンでは、1 dword が 8×8 ピクセルの領域を表し、それらの dword が 1024×512 ピクセルを覆う 32 KiB のブロックに詰められます。DCC はカラーターゲットの差分カラー圧縮です。CMASK は高速クリアと展開のマスクです。FMASK は、マルチサンプルのリゾルブに、どのサンプルがどのピクセルに属するかを伝えます。
リソースのスナップショットは、GFX10 の線形 CMASK のビットを含め、メタデータのポインターとレイアウトのセレクターを保持します。このビットが重要なのは、タイル化されたアドレス式を線形の CMASK に適用すると、マスクが黙ってかき乱されてしまうからです。バックエンドはその代わりに、未対応のレイアウトを拒否します。
クリアと深度
レンダラーが理解するレイアウトについては、正しい HTILE と DCC のクリアを実装しています。繰り返しのメタデータのクリアは、vulkan-smoke の htile-clears のプローブでカバーしています。リセットされた深度の範囲は、有効な HTILE に裏付けられたサーフェスの場合にだけ復元するため、Ghost of Yōtei の G バッファは保たれ、古い 1×1 の UI の深度バインディングは引き続きアタッチメントのサイズチェックで失敗します。
PS5_GPU_DEPTH_TRANSFER=1 のとき、シングルサンプルのゲストの深度とステンシルを取り込んで書き戻せます。バインドされたステンシルのプレーンは、ゲストの比較と更新の操作を伴う、パックされた深度とステンシルのアタッチメントになります。マルチサンプルの深度は MSAA の経路を使います。HTILE の中の圧縮された Z の範囲と階層 Z は、完全には解釈していません。
まだ明示されていること
GPU のノートに書かれている残りの作業は、レイヤービューの残り、残りの圧縮 DCC と FMASK の状態、HTILE の Z の範囲と Hi-Z、そして FMASK と結びついた CMASK の状態です。未対応の MSAA のインポートは初回のクリアを保ちます。圧縮されたサーフェスを普通のテクセルのようにサンプルすることこそ、この拒否が防ぐための失敗です。
そのため、メタデータの対応は意図的に部分的なものです。ポインターはデコードします。検証済みのレイアウトは尊重します。検証していないレイアウトは拒否するかクリアします。
実装済みのこと
- 32 KiB のブロックで 8×8 ごとに 1 dword の、HTILE のパターン 21 のアドレッシング。
- レンダラーが理解するレイアウトに対する HTILE と DCC のクリア。
- 線形のマスクにタイル化された式を適用することを拒否する、線形 CMASK の検出。
- オプトインのシングルサンプルの深度とステンシルの取り込みと書き戻し。
まだ足りないこと
- HTILE の Z の範囲と階層 Z の完全な解釈は不完全です。
- 圧縮された DCC と FMASK の状態、そして FMASK と結びついた CMASK は、高速経路の外にあります。
- 未対応の圧縮データの取り込みは、生のテクセルとしてサンプルするのではなくクリアします。
関連するしくみ
これらのページについて