2 ポイント 投稿者 GN⁺ 2024-09-03 | 1件のコメント | WhatsAppで共有

PlayStation 2 GSエミュレーション – Vulkanコンピュートエミュレーションの最終フロンティア

  • 2020年にparaLLEl-RDPを作成し、N64 RDPをVulkanコンピュートで実装した。非常に高速で正確であり、アップスケーリング対応も追加された。
  • PlayStation 2向けの類似プロジェクトを構想するようになった。これまでGSdxが20年間にわたって標準だった。
  • paraLLEl-GSはPS2 GSの最初のコンピュート実装ではない。2014年にOpenCLで試みられたことがあるが、完成しなかった。

基本的なGSの概要

GSはピクセル処理モンスター

  • GSは圧倒的なフィルレートと帯域幅で知られる。2000年当時、毎秒10億ピクセル以上を処理できた。
  • VRAMは小さいが、さまざまなDMAエンジンを使って継続的にストリーミングされるよう設計されている。

GSピクセルパイプラインは基本的だが独特

  • GSはN64 RDPより単純で、単一テクスチャと単一サイクルのコンバイナを持つ。
  • ブレンディングは1.0を超えることがある。0x80は1.0として扱われ、最大で0xffまで到達できる。
  • 宛先アルファテスト、条件付きブレンディング、アルファ補正など、さまざまな独特の機能がある。

D3D9スタイルのラスタライズ規則

  • クリップ空間で単純な形として与えられるプリミティブ。VU1ユニットが変換とクリッピングを行う。
  • X/Y: 12.4固定小数点、Z: 24ビットまたは32ビットuint、FOG: 8ビットuint、RGBA: 8ビット、STQ: 正規化座標による透視テクスチャリング。

頂点キュー

  • GSはOpenGL 1.0に似た感触がある。TRIANGLE_FANをサポートする。
  • XYZレジスタへの書き込みは頂点状態を確定し、キューを進行させる。

面白いスウィズル形式

  • 24ビットのカラーまたは深度でレンダリングする場合、上位8ビットをテクスチャとして使える。
  • ピクセル座標は「ページ」として配置される。ページは8 KiBで、32ブロックに細分化される。

フレームバッファキャッシュとテクスチャキャッシュ

  • フレームバッファレンダリングとテクスチャのための専用キャッシュがある。ゲームはしばしばフィードバックループを行う。

テクスチャリング

  • テクスチャリングは馴染み深い一方で難解でもある。テクセル中心は半ピクセル位置にある。
  • REGION_CLAMPやREGION_REPEATのような特殊なアドレッシングモードがある。

CLUT

  • 現在のパレットを保存する1 KiBのキャッシュがある。VRAMからCLUTキャッシュへの明示的なコピー手順が必要になる。

TEXFLUSH

  • テクスチャキャッシュを同期して無効化するコマンドがある。TEXFLUSHは無視し、最小限のキャッシングを選択する。

GIFを使ったレジスタ操作

  • GIFを通じてGSハードウェアと相互作用する。GIFパケットのヘッダーは、書き込み先レジスタとループ回数を設定する。

Trongle – GS

  • OpenGL 1.0の単純さが恋しい人のためのAPI。
  • テスト目的で.gsダンプ形式を生成するツールを追加した。

実装の詳細

レンダリングパイプライン

  • CPUからVRAMへのデータ同期、VRAMへのデータアップロード、CLUTキャッシュ更新、VRAMからVkImagesへのアンスウィズル、レンダリング、GPUからCPUへのVRAM同期。

ページトラッカー

  • VRAMをページ単位に分割して追跡する。ページ状態を追跡して潜在的なハザードに対処する。

テクスチャキャッシング

  • 各ページには関連するVkImagesの一覧がある。ページのテクスチャが無効化されると、イメージは破棄され、VRAMから再度アンスウィズルされる。

CLUT更新

  • テクスチャアップロードをバッチ化するため、CLUTアップロードもバッチ化する。1024個のCLUTスナップショットを使用する。

VRAMからのテクスチャアンスウィズル

  • Vulkanを使って新しいVkImageを割り当て、コンピュートシェーダーで処理する。

三角形セットアップとビニング

  • paraLLEl-RDPと同様に、タイルベースレンダラーである。三角形セットアップのために属性配列を提供する。

GN⁺の要約

  • この記事はPlayStation 2のGSエミュレーションを扱っており、特にVulkanコンピュートシェーダーを使った実装に重点を置いている。
  • PS2 GSは複雑なピクセルパイプラインと独特な機能のため、エミュレーションが難しい。
  • このプロジェクトは、GSのさまざまな特性を理解し、それをエミュレーションするための多様な技術的アプローチを説明している。
  • PS2エミュレーションに関心のある人に有用であり、とくにVulkanを使った高性能エミュレーションへの洞察を提供する。

1件のコメント

 
GN⁺ 2024-09-03
Hacker Newsのコメント
  • 「GS」という略語が何を意味するのか気になる
  • プログラマブルブレンディングの実現をずっと願っていた
    • 2000年代初頭にピクセルシェーダーを初めて学んだ頃から、プログラマブルなテクスチャデコードも願っていた
    • GPUは先にレイトレーシングを導入した
    • プログラマブルブレンディングは固定機能ブロックを置き換えるものだ
    • いまだにテクスチャシェーダーを待っている
  • GSのバスは2560ビットと非常に広かった
    • PS3はブレンディングの面ではGSより劣っているように感じた
  • 誰かがdynarmicを書き直してブログ記事を書いてくれるといいのだが
  • このアプローチがDolphinのubershaderと比べてどうなのか気になる
  • 「top-left raster」が何を意味するのか気になる