プログラミング
Windowsを解き明かす:RADVをWin32に移植する
Cracking Windows Open: Porting RADV to Win32 (collabora.com)
要約
Collaboraは、LinuxでAMD GPUの主要なオープンソースVulkanドライバーとなっているRADVをWindowsに移植するプロジェクトを進めています。この取り組みは、Windows 10のWDDM2インターフェースの逆エンジニアリングに基づいており、オープンソースドライバーの利点(コードベースの共有、デバッグの容易さ、コミュニティ貢献)をWindowsにもたらすことを目指しています。現在、Counter-Strike 2などのゲームが動作するまでになりましたが、カーネルモードドライバーとの通信やプレゼンテーションの最適化など、まだ課題が残っています。
全文翻訳
私たちについて私たちの専門知識私たちの仕事オープンソース私たちのエコシステムサービスガイドトレーニング構築統合最適化保守業界自動車デジタルTVシリコンOEM VR/ARニュース&ブログキャリアお問い合わせ私たちについてサービス業界ニュース&ブログキャリアお問い合わせ+44 (0)1223 362967+1 514 667 2499contact@collabora.comホームニュース&ブログニュースWindowsを解き明かす:RADVをWIN32に移植するLouis-Francis Ratté-Boulianne 2026年7月28日この記事を共有する:読む時間:RADVは、AMD GPU向けのオープンソースMesa Vulkanドライバーです。長年にわたり、Linuxグラフィックススタックの礎となってきました。事実上、Linux上のAMDハードウェアの事実上のVulkanドライバーとなっています。AMDでさえ、その代わりにPAL(Platform Abstraction Library)ベースの代替製品を廃止し、Mesaを中心にオープンソースの取り組みを統合しました。しかし、Windowsでは、AMDユーザーは依然としてプロプライエタリドライバーのみでサービスされています。しかし、パニックにならないでください。解決策があります:RADVをWindowsに移植し、Linuxでその実力を証明した同じオープンソースVulkan実装をそれらに提供します。それは非常にありそうもない提案なので、光速よりも速く到達するかもしれません(ネタバレ:少し遅くなります)。Windows上のオープンソースVulkanドライバーは、多くの可能性を開きます:プラットフォーム間のコードベースの共有、デバッグと実験の容易さ、修正の迅速なターンアラウンド、そしてコミュニティ(例:ゲーム開発者)がオペレーティングシステムに関係なくすべての人に利益をもたらす問題の報告や改善への貢献を行うための道です。
最初の三角形から...この取り組みは、Faith Ekstrand氏がWindows上でRADVを実行する実現可能性を最初に探求し、XDC 2024でその結果を発表したことから直接構築されています。彼女の講演を見ることを強くお勧めしますが、簡単な要約を以下に示します。彼女の講演の中心的なテーマは、Windows 10以降、WDDM2インターフェースが以前のものよりもサードパーティドライバーにとって優れた基盤を提供しているということです。ユーザーモードドライバー(UMD)がオペレーティングシステムおよびカーネルモードドライバー(KMD)とどのように連携するかを明確に定義しています。しかし、もちろん大きな落とし穴があります:多くのD3DKMT呼び出しは、プライベートドライバーデータ(ドライバー次第の内容を持つ、不透明でベンダー固有のブロブ)を運ぶことができます。これは、UMDとKMDが緊密に結合したままであり、このインターフェースが完全に文書化されていないことを意味します。この問題を回避するために、Faith氏はwddm2-pdd-reツールを作成し、一部のD3D12アプリケーションのWDDM2呼び出しとプライベートデータの内容を記録しました。このアプローチを使用して、彼女はアダプター情報のクエリ、バッファの割り当て、キューの作成、コマンドの送信など、プライベートインターフェースの十分なリバースエンジニアリングを行い、RADVがプロプライエタリカーネルドライバーに作業を送信できるようにしました。そして最終的には、画面に回転する3Dモデルを表示することさえできました。
...最初のゲームへFaith氏の作業がこれが可能であることを確立したのに対し、このプロジェクトはその後を引き継ぎました。目標は、それをより柔軟に(ハードコードされた値を減らすことによる異なるハードウェアのサポート)、よりポータブルに(WSLから解放され、ネイティブWindowsサポート)、そしてはるかに安定させること(deqp-vkテストで2分後にクラッシュしなくなる)でした。コマンドストリーム処理と同期を改善し、スパースバインディング、テッセレーション、タスクシェーダー、GPUプロパティの動的なクエリなどをサポートしました。まだ準拠していませんが(成功率は劇的に増加したにもかかわらず)、本当のハイライトはRADVで最初のゲームであるCounter-Strike 2を実行できることです。誰でも-vulkan引数でレンダラーを切り替えることで試すことができます。
...暗闇を通してあらゆるポートおよび/またはリバースエンジニアリングプロジェクトと同様に、いくつかの課題がありました:新世代は過敏すぎる:私たちはGen 11ハードウェア(RX 7900 XT)で実験していましたが、Faith氏は10世代GPU(RX 7800 XT)で作業していました。これらの2世代間のアーキテクチャ変更のため、しばらくの間Faith氏の結果を再現できませんでした。主な問題は、ハードコードされた色にサーフェスをクリアするよりも複雑なことをしようとすると、ハングしてしまうことでした。残念ながら、Windowsでこのようなハングをデバッグするツールがないため、プロプライエタリドライバーとの不一致を可能な限り減らすためにツールの改善を余儀なくされました。リバースエンジニアリングユーティリティを、公式Vulkanドライバーで実行される任意のアプリケーションを分析できる完全なWDDM2ロギングレイヤーにアップグレードし、コマンドストリーム、レジスタ、シェーダーコードをダンプするサポートを追加しました。
コンパイラがうまくいかない:Mesaは主にGCCとClangに対して開発されており、そのコードベースはコンパイル時にいくつかの仮定に依存していますが、MSVCでコンパイルするとそうはなりません。例えば、MSVCはenumの処理方法について他のコンパイラと同意せず、値を符号付きと解釈して32ビット値に制限する可能性があり、これは非常に驚くべき動作につながる可能性があります。
不透明なブロブが好きだと聞きました:では、不透明なAPI呼び出しの中に不透明なデータを入れてみましょう - D3DKMTEscape。WDDM2は、そのメソッドを通じてベンダー固有のフックを持つ可能性があります。その全体の内容はベンダー次第です。定義された構造はなく、唯一の制限は既存の「標準化された」呼び出しを複製しないことです。幸いなことに、これらは高度な機能(マルチGPUレンダリングなど)に焦点を当てているように見えるため、現時点では安全に無視できるようです。
...そしてその先このプロダクションレディ化における最大の未解決の問題は、プロプライエタリカーネルドライバーとのインターフェースです。独自のKMDを開発することは実際には選択肢ではないため、AMDのものと通信する必要があります。現在、これを行うには、プライベートデータ構造のリバースエンジニアリングされた知識に依存していますが、これは本質的に壊れやすいです。さらに悪いことに、UMDとKMDはペアとして出荷され、後方互換性の保証がないため、これらの構造はドライバーバージョン間で予告なく変更される可能性があります。RADVがWindowsで真に安定して保守可能になるためには、次のいずれかが必要です:プロプライエタリカーネルモードドライバーへの安定した文書化されたインターフェース、またはプライベートデータチャネルを介したKMDとの通信を仲介するシムライブラリ。これにより、基盤となるブロブが進化しても、構築するための安定した表面が得られます。
プレゼンテーションにもかなりの作業が残っています。Jesse Natalie氏がWindowsのWSI(Dozenドライバーのコンテキストで)でいくつかの作業を行いましたが、RADVは現在、プレゼンテーションのために遅いCPUパスのみをサポートしています。パフォーマンスを向上させるためにDXGIスワップチェーンの使用を可能にするには、さらに作業が必要ですが、これにはD3D12から画像をインポートできる必要があります(さらに不透明なメタデータ、やった!)。ゼロコピーのスワップを達成するには、さらに多くの作業が必要になります。これはグラフィックスパイプラインの頂点です。これは、GPUバウンドではないアプリケーションで最大3倍のパフォーマンス向上の可能性があります。最後のステップを達成するには、AMD、そしておそらくMicrosoft(画像共有に関連するいくつかの制限があるため)の直接的な関与も必要になります。このような品質向上のための前例はオープンソースプロジェクトにも存在するため、希望はあります!
この作業がWindows上のオープンVulkanドライバーの価値を示し、関係者全員がその安定した基盤に向けて取り組む意欲を高めることを願っています。興味のある方は、作業は現在このブランチにあります。オープンドライバーをWindowsにもたらすこのフェーズの作業をValveがスポンサーしてくれたことにも感謝します。
関連記事PanfrostのMesaビデオデコーディングの改善Mesa 25.2はNouveauユーザーに新しいハードウェアサポートをもたらしますPanVKはVulkan 1.4をサポートしています
関連記事PanfrostのMesaビデオデコーディングの改善Mesa 25.2はNouveauユーザーに新しいハードウェアサポートをもたらしますPanVKはVulkan 1.4をサポートしています
ニュースルームを検索ニュースを検索最新ニュース&イベントWindowsを解き明かす:RADVをWIN32に移植する28/07/2026RADVの実験的なWindowsポートは、MesaのAMD GPU向けオープンソースVulkanドライバーを実際のワークロードの実行に近づけ、…Holo Core用のArch Linux aarch64ポートの構築17/07/20