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

Direct3D 12 バックエンド

0.3.5 の後に追加された、実験的なネイティブ Windows レンダラーです。PM4 デコーダーと RDNA2 シェーダー変換を Vulkan と共有し、そのあと D3D12 と DXGI で実行・表示します。既定は引き続き Vulkan で、ゲームはまだこの経路では動きません。

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

レンダラーの選択

Windows 版ランチャーの設定には、Vulkan と DirectX 12 を選べる「グラフィックス API」カードがあります。ランチャーはポータブルな ps5pcem.ini に graphics_api=vulkan または graphics_api=d3d12 を保存し、PS5_GRAPHICS_API を game-run に渡すため、選択は次回の起動から有効になります。既定は Vulkan です。ランチャーは 12 の言語すべてで DirectX 12 を実験的と表示し、サイドバーでは Vulkan デバイスの状態の代わりにそれを表示します。

同じ変数はコマンドラインでも使え、d3d12 と dx12 のどちらも受け付けます。Linux 版は Vulkan を選び、ランナーはそこで d3d12 を拒否します。未知の値はタイトルを読み込む前に拒否されます。D3D12 の初期化や実行に失敗しても、ランナーは Vulkan に置き換えません。未対応の GPU 処理は理由を表示し、完了したと報告する代わりに実験的な実行を終了します。このバックエンドにはヘッドレス実行はありません。

バックエンドが実行するもの

デバイス、ダイレクトキュー、コマンドアロケーターとコマンドリスト、バリア、フェンス、リソースの寿命は、COM の上の小さな C インターフェースの向こう側にあります。アップロード、デフォルト、リードバックの各バッファー、生の UAV ディスクリプター配列、GPU コピーが実装されています。シェーダーは Vulkan 経路と同じ RDNA2 デコーダー、IR、SPIR-V 生成を通り、SPIRV-Cross がその SPIR-V を HLSL に変換し、Windows の D3DCompiler が Shader Model 5.1 のバイトコードを生成します。ここでの SPIR-V は中間表現にすぎず、Vulkan を通して実行されるものはありません。SPIRV-Cross はソースのハッシュで固定され、その Apache-2.0 ライセンスはプロジェクトに同梱されています。

PM4 側では、DISPATCH_DIRECT が範囲の限られた、静的に解決された MUBUF と MTBUF のストレージディスクリプター、USER_DATA の特殊化、ゲストメモリーへの正確な書き戻しとともに実行されます。DRAW_INDEX_AUTO は限られたケースに対応します。リソースを使わない頂点シェーダーとピクセルシェーダー、三角形リストまたはストリップ、1 つのリニア RGBA8 UNORM ターゲット、ビューポート、シザー、カリング、チャンネルマスク、インスタンシングで、ターゲットに既にあるバイトは保持されます。3 バッファーの DXGI フリップ・スワップチェーンがリニアな RGBA8 と BGRA8 のスキャンアウトを表示し、ウィンドウタイトルにレンダラー名と FPS を出します。GPU 処理は結果がゲストメモリーに届く前に同期的に完了し、並列 AGC 実行は無効で、シェーダー、パイプライン状態、ステージングしたリソースは呼び出し間でまだキャッシュされません。

確認済みの内容

2026 年 10 月 17 日、NVIDIA GeForce RTX 3070 Ti でハードウェアプローブが通過しました。6 種類のサイズでのバッファーのアップロードとリードバック、6 種類のディスパッチサイズでのネイティブなコンピュート、出力を厳密に照合した RDNA2 のコンピュートとラスター変換、コマンド実行器を経由して D3D12 に入り、ゲストメモリーへ書き戻す PM4 のコンピュートと描画、そして 3 種類のスワップチェーンサイズでのウィンドウ表示です。D3D12 デバッグレイヤーは入っていなかったため、これらの実行はデバッグレイヤー下での問題がないことまでは示しません。

PS5_GRAPHICS_API=d3d12 で Raiden IV を起動すると、RTX 3070 Ti が選ばれてゲームが始まり、最初のインデックス付き描画で終了コード 1 で停止しました(IndexedAndIndirectDrawNotImplemented)。これは確認済みの制限であって、D3D12 でのゲーム起動ではありません。このサイトのゲーム結果と FPS の値はすべて Vulkan で計測したものです。

実装済みのこと

  • ランチャーでの選択は ps5pcem.ini に保存され、PS5_GRAPHICS_API として渡されます。既定は Vulkan です。
  • COM の上の C インターフェースの向こうにある、ネイティブなデバイス、キュー、フェンス、バッファー、UAV ディスクリプター、GPU コピー。
  • 共通の SPIR-V 経路、SPIRV-Cross による HLSL、Shader Model 5.1 のバイトコードを通る RDNA2 シェーダー。
  • 範囲の限られたコンピュートのディスパッチ、限定的な自動インデックス描画、3 バッファーの DXGI フリップ・スワップチェーン。

まだ足りないこと

  • テクスチャとサンプラー、イメージ形式とデタイル、インデックス付き描画と間接描画、NGG とテッセレーションはまだ実装されていません。
  • ゲストの深度とステンシル、ブレンド、複数のレンダーターゲット、MSAA、メタデータ、ビデオの表示はまだありません。
  • シェーダーとパイプラインのキャッシュも非同期完了もないため、ゲームの FPS は計測できません。Linux 版には D3D12 はありません。

関連するしくみ

これらのページについて

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

すべての技術