本文へスキップ
PS5PCEM
一部グラフィックス

NGG の頂点シェーダー

S_SETPC_B64 で続くフェッチシェーダーを含め、統合された NGG の頂点プログラムをひとつのグラフィックスステージとして変換します。エクスポートのプログラムは独自のユーザーデータのウィンドウを保ちます。

2026年10月10日 までのリポジトリノート

フェッチとエクスポートは別のプログラム

PlayStation 5 の描画では、頂点の処理をフェッチシェーダーとエクスポートシェーダーに分けることがよくあります。フェッチシェーダーは属性のプロローグの最後で、S_SETPC_B64 でエクスポートのコードに飛びます。PS5PCEM はこの続きを同じ頂点プログラムの一部として扱い、統合した結果を変換します。

NGG のエクスポートのプログラムは、ジオメトリシェーダーのユーザーデータのバンクを借りません。スカラーレジスターは、エクスポートのプログラムでは s8 から、独自のユーザーデータのスナップショットで初期化されます。リソーステーブルが s0:s1 にあると仮定するのは、トランスレーターが特に避けているバグです。テーブルのポインターは、メタデータが宣言した ShaderResourceTable のユーザー SGPR のペアから得ます。

頂点属性

フェッチシェーダーと拡張ユーザーデータは、埋め込まれた頂点バッファと頂点属性のテーブルとあわせて解決します。最大 32 個の入力セマンティクスが、セマンティクスのインデックス、格納されるハードウェアの VGPR、AGC の属性形式、バイトオフセット、インスタンスレート、128 ビットのバッファディスクリプターを保ちます。

属性の検索は、ハードウェアのマッピングのバイトではなくセマンティクスのバイトを使います。不完全なテーブルのペアや対応範囲外のインデックスは、ゲストのメモリを読む前に拒否します。頂点ステージからの PARAM のエクスポートはフラグメントの補間の入力になり、後のピクセルシェーダーはそうして varying を受け取ります。

フェッチシェーダーへの呼び出し

検証済みの外部のフェッチシェーダーは、呼び出しのユーザーデータのペアが AGC の登録したアドレスをまだ保持している場合、S_SWAPPC_B64 や S_CALL_B64 からもリンクできます。フェッチの本体は戻りの S_SETPC_B64 までデコードされ、その戻りは呼び出し側のリンクのペアを読まなければなりません。どの呼び出しが正当かの詳細は、スカラー呼び出しのページにあります。

統合した NGG の変換によって、以前はデコーダーを止めていたフェッチのプロローグを、3 次元の場面が通過できるようになります。それだけで、欠けているピクセルシェーダーやレンダーターゲットを補うことはありません。

実装済みのこと

  • S_SETPC_B64 で終わるフェッチのプロローグを含む、統合された NGG の頂点プログラム。
  • エクスポートのプログラム用の別のユーザーデータのウィンドウ。
  • 形式、オフセット、インスタンスレート、バッファディスクリプターを伴う最大 32 個の頂点セマンティクス。
  • フラグメントの補間の入力につながる PARAM のエクスポート。

まだ足りないこと

  • 戻りが呼び出し側のリンクのペアと一致しないフェッチシェーダーはリンクしません。
  • 一般的な動的呼び出しは未対応です。スカラー呼び出しを参照してください。
  • 未対応のエクスポートや補間変数に依存するジオメトリは、その描画で引き続き失敗します。

関連するしくみ

これらのページについて

本文は PS5PCEM リポジトリのアーキテクチャノートと 2026 年 10 月のレポートに基づいています。個別のテストに合格したことは、新しいフレームレートや新しいクリアを意味しません。

すべての技術