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 はありません。
関連するしくみ
これらのページについて