オープンソースのNVKドライバがDLSSに対応。まだ実験段階だが意味は大きい
NVIDIAのオープンソースVulkanドライバNVKが、DLSSの実行に必要なコードをMesa 26.2-develに統合した。環境変数を設定すれば、Linux上のゲームでDLSSが動く。ただし既知のバグがあり、すべてのGPUで使えるわけではない。「対応した」と「実用になる」のあいだには、まだ距離がある。
8か月かけて埋まった溝
2025年10月、Valveの開発者オータム・アシュトン(Autumn Ashton)が3日間の作業でDLSSをNVK上で動かしたと発表した。ゲーム「Control」の画面が960×540から1920×1080にアップスケールした画面がそのまま証拠になった。
DLSSの実体はCUDAカーネルの集合体だ。NVKにVK_NVX_binary_importとVK_NVX_image_view_handleという2つのVulkan拡張を実装すれば、ゲームが同梱するDLSSバイナリをGPU上で実行できる。DXVKとVKD3D-ProtonがDXVK-NVAPIを通じてこの仕組みを使い、Windows向けゲームのDLSSをLinux上で再現する。原理はシンプルだが、CUDAバイナリ(CuBIN)のパースは厄介だった。ELFの中にELFが入った入れ子構造で、メタデータの一部は序数ベース、一部は名前ベースという設計をほどく必要があった。
アシュトンのマージリクエスト(!37898)は、だがそのままでは統合に至らなかった。レビューコメントへの対応やAPIの変更が重なり、Mesa本流との衝突が広がっていく。2026年4月、コミュニティ開発者のトーマス・アンダーセン(Thomas Andersen)が新たなマージリクエスト(!40686)を立ち上げ、コンフリクトの解消とバグ修正を積み重ねた。2か月に及ぶレビューとCIパイプラインの修正を経て、6月20日、コードはMesaのmainブランチに入った。
2025年10月 DLSSプロトタイプ動作 Valveのアシュトンが3日で初期実装 2026年4月 MR !40686 開設 アンダーセンがコンフリクト解消に着手 2026年6月 Mesaのmainにマージ Mesa 26.2-develに統合完了 2026年8月 Mesa 26.2 安定版 一般ユーザーが利用可能になる見込み |
GPUごとに違う「動く」の意味
DLSSのバイナリには、GPU世代ごとにコンパイル済みのコード(バイトコード)と、中間表現のPTXが含まれている。NVKは現時点でバイトコードしか実行できない。プロプライエタリドライバにはPTXからバイトコードへ変換するパスがあるが、NVKにはない。PTXからNIRへの変換は、まだ書かれていない。
問題は、どのGPUにどのバイトコードが同梱されているか。アンダーセンがNVIDIAのDLSSリポジトリを調査した結果は明快だった。Turing(SM 7.5)とAmpere(SM 8.6)のバイトコードは、ほぼすべてのDLSSバージョンに含まれている。だがAda(SM 8.9)のバイトコードを全CuBINに含んでいるのは、v310.5.0とv310.5.3の2バージョンだけだ。
TuringとAmpereのユーザーなら、多くのゲームでDLSSが動く可能性がある。Adaの場合は、ゲームが同梱するDLSSのバージョンに左右される。Adaで動かないわけではないが、確実に動くわけでもない。
Mesa開発者のカロル・ヘルプスト(Karol Herbst)は、異なる世代のバイトコードを流用することの技術的リスクを指摘している。NVIDIAのドキュメントでは同じメジャーバージョン内のバイトコードに後方互換性があると記載されているが、実際にはGPU世代間で命令のレイテンシやスケジューリング要件が異なる。SM 8.0向けにコンパイルされたコードをSM 8.9で動かすと、特定のDLSSプリセットで画面にアーティファクトが出る場合がある。
| Turing | Ampere | Ada | |
|---|---|---|---|
| バイトコード | 全22バージョン | 全22バージョン | 2バージョン |
| PTX | なし | SM 8.0 | SM 8.9(一部) |
| 実用性 | ほぼ全対応 | ほぼ全対応 | バージョン依存 |
マージ後のコードには環境変数が2つある。NVK_EXPERIMENTAL=dlss でDLSS拡張そのものを有効化し、NVK_EXPERIMENTAL=dlss_backwards_compat でGPU世代間のバイトコード流用を許可する。後者は画面の乱れを承知のうえで試す、という選択肢だ。
CIと格闘した2か月
マージリクエストのスレッドを読むと、機能そのものよりもCIパイプラインとの格闘が占める時間の方が長い。
最初の壁はAndroid CIだった。CuBINパーサーが使うGELF_ST_VISIBILITYというマクロが、Android NDK環境のlibelfに定義されていなかった。64ビット用のELF64_ST_VISIBILITYに切り替えたが、今度はそちらも未定義だった。原因は、Mesa CIがAndroid向けに使っている15年前のlibelf実装(libelf-0.8.13)が、このマクロをプライベートヘッダにしか定義していなかったこと。アンダーセンが#ifndefガードで不足分を補って解決した。
CIの問題で2度マージに失敗し、タイムアウトでも1度弾かれた。それでもアンダーセンはmainの更新に追従しながらリベースを繰り返し、メル・ヘニング(Mel Henning)やヘルプストのレビューを受けてコードを磨いた。マリー・ギユマール(Mary Guillemard)のReviewed-byとTested-byが付き、ヘルプストのAcked-byが揃って、Marge Botがマージを実行した。
次の壁はPTXからNIRへの変換
今回の統合で動くようになったのは、ゲームが同梱するCUDAバイトコードがGPUと一致するケースだけだ。PTXしか同梱されていない場合、あるいはバイトコードが合わない場合、DLSSは起動しない。
ヘルプストはマージリクエストのスレッドで「PTXからNIRかSPIR-Vへの変換を書くべきだ」と発言している。PTXはNVIDIAのGPU向け中間言語で、特定のGPU世代に依存しない。これをMesaのシェーダ中間表現であるNIRに落とし込めれば、どのGPU世代でもDLSSバイナリを実行できるようになる。だがヘルプストが「相当な規模のプロジェクトになる」と認めている。Blackwell世代ではIMMAがサポートする型が変わっており、バイナリの直接修正よりもNIR変換の方が扱いやすいという技術的な動機もある。
この課題が解決されるまで、NVKのDLSS対応は「特定の条件下で動く」段階に留まる。
実験フラグの向こう側にあるもの
NVKはVulkan 1.4準拠のオープンソースドライバとして、KeplerからBlackwellまでのNVIDIA GPUをカバーしている。Mesa 25.1以降、Turing以降のGPUではNVK+Zinkがデフォルトのグラフィックスドライバになった。プロプライエタリドライバとの性能差はまだあるが、機能面での溝は確実に狭まっている。
DLSSへの対応は、その溝を埋める象徴的な一歩だ。NVIDIAが自社のプロプライエタリドライバ向けに設計した技術を、コミュニティが解析し、オープンソースドライバ上で動かした。アシュトンが最初のプロトタイプを3日で動かし、アンダーセンがそれを2か月かけてメインラインに押し込んだ。ヘルプスト、ヘニング、ギユマールがコードをレビューし、libelfのマクロ1つ足りないという些細な問題にまで付き合った。
NVK_EXPERIMENTAL=dlss。この環境変数を打ち込んでゲームを起動する人は、当面はそう多くないだろう。動かないゲームもある。画面が乱れるプリセットもある。だが、この実験フラグの向こうには、NVIDIAのGPUをオープンソースドライバだけで完結させる未来が透けて見える。
Mesa 26.2の安定版リリースは8月の見込みだ。
参照元
他参照
関連記事
- Mesa 26.1 RADV、VK_EXT_descriptor_heapでSteam Play加速
- Mesa「Amber2」議論、R600は切り離されるか
- ZigでVulkanドライバを一から書いた開発者が現れた
- Mesa最大の貢献者がAMDを離れValveへ
- MesaがLinuxカーネルと同格に――Fedoraで永続的アップデート例外を獲得
- 正体不明のAMD GPU「GFX1156」がドライバに出現。RDNA 3.5は終わらない
- AIが20年前のGPUドライバーを延命させている
- Phoronix22周年が映すLinuxの22年間
- LinuxでReflex/Anti-Lag 2が全GPU対応に
- Valve製VRAMパッチ、4GB GPUで3倍弱の蘇生劇