
D7VK 2.2 は、Linux 上で従来の Windows ゲームを実行するために設計されたグラフィック変換レイヤーの新しいバージョンとしてリリースされました。DXVK から派生したこのプロジェクトは、古い Direct3D 7、6、5、および 3 API を Wine と Proton で使用できる Vulkan に変換することに重点を置いており、この新しいバージョンでは、依然として最も多くの欠点があった分野の一つである Direct3D 3 のサポートに多くの労力が費やされています。
このアップデートはD7VK 2.1のリリースからわずか数週間後に登場し、特に90年代後半から2000年代初頭のゲームを最新のLinuxシステムでプレイしたいユーザーにとって魅力的な技術の成熟過程をさらに推し進めています。D7VK 2.2はDirect3D 3の改良に加え、多数のバグ修正と内部調整を組み込んでおり、最新のDXVK 3.1バージョンをベースとしています。
D7VK 2.2はDirect3D 3に焦点を当てています
D7VK 2.2の主な新機能はDirect3D 3に関するもので、これはプロジェクトがサポートする他の古い技術に比べてやや遅れをとっていたAPIです。開発者が収集してテストできたDirect3D 3ゲームは既にD7VKで動作していましたが、正しく実装されていないエッジケースや動作がいくつか残っていました。
これは特に問題でした。なぜなら、Direct3D 3を使用しているゲームのカタログを再構築するのは困難だからです。これらのゲームは非常に古いタイトルであり、多くは既に市販されていないか、入手が困難なため、実際に遭遇する可能性のあるすべての実装をテストするのは困難です。
このバージョンでは、開発者はDirect3D 3の実装の大部分を改訂し、D7VKと互換性のある他のAPIが達成した成熟度レベルに近づけました。
D3D3デバイスの動作はオリジナルに準拠しています
技術的な変更点の1つとして、Direct3D 3デバイス向けの参照カウントシステムの再構築が挙げられます。D7VK 2.2では、このメカニズムを修正し、ネイティブAPIの実装と動作が一致するようにしています。
こうした詳細はユーザーにとっては無関係に思えるかもしれないが、翻訳レイヤーにおいては極めて重要である。古いゲームはオブジェクトの作成や破壊に関する特定の動作に依存している場合があり、一見些細な違いでも診断が困難なエラーにつながる可能性がある。
この新しい実装により、D7VKが想定していなかった方法で特定のタイトルがグラフィックデバイスを適切に管理できない可能性が低減されます。
D7VK 2.2では、カラーキーを使用した透明度に関する改善が導入されました。
D7VK 2.2では、Direct3D 3対応デバイスにおけるカラーキーイング管理も変更されています。これまで、このプロジェクトでは非常にシンプルなモデルが採用されており、特定の状況下ではこの機能が常に有効になっていました。
新バージョンでは、有効にするタイミングをより正確に制御できるようになり、Direct3D 3の動作をより忠実に再現できます。これは、特定の色に基づいた透明度技術を使用する古いゲームにとって特に重要です。
さらに、正規化された色範囲に関する計算が最適化されました。これらの値は、表面記述が変更された場合にのみ更新されるようになり、キャッシュして後で再利用できるようになりました。
その結果、カラーキーの透明度を使用するゲームにおいて、パフォーマンスが小幅から中程度向上し、動作もより正確になるはずです。
実行バッファ内の境界ケースが修正されました
D7VK 2.2のもう一つの重要な点は、Direct3D 3の実行バッファ検証の改訂です。このプロジェクトでは、テスト中に確認された様々な特殊なケースに対応するため、このロジックの一部を再編成しました。
APIの期待される動作を検証するために、開発者はDirect3D 3に特化したWineテストも活用しました。これらのテストにより、D7VKの動作を互換性のある実装から期待される動作と比較し、よく知られたゲームのみを使用した場合に見落とされがちな違いを検出することができます。
この研究は、特にこのような古いAPIにとって非常に価値がある。なぜなら、テストに利用できるタイトルが少なく、元の実装のすべての可能性を網羅しているとは限らないからだ。
Direct3D 5および3テクスチャの堅牢性が向上しました
このアップデートはDirect3D 3に限定されません。D7VK 2.2では、Direct3D 5およびDirect3D 3で使用されるテクスチャの処理も改善され、使用中に下地のサーフェスが範囲外になるのを防ぎます。
この変更により、グラフィックリソースの処理の堅牢性が向上し、特定の操作シーケンスでのみ発生するエラーを解決できます。開発者によると、この改善は1997年にリリースされた『フロッガー』にも良い影響を与えているとのことです。
このパッチは、リソース管理の問題に対処するために意図された内部変更が、たとえその変更が特定のゲーム向けに特別に設計されたものでなくても、結果的に特定のゲームに目に見える影響を与える可能性があることを示している。
D7VK 2.2では、変換と行列の問題も修正されています。
D7VK 2.2では、Direct3D 3実行バッファの変換に関するバグも修正されています。この問題は、頂点入力に使用されるFVFフォーマットの判定が誤っていたことが原因でした。
従来の投影行列計算に関する問題も修正されました。このバグは、想定どおりに動作しないWineテスト中に発見されたもので、Direct3D 6、5、および3の一部のアプリケーションに悪影響を与える可能性がありました。
これらの変更は、D7VKにおける互換性テストの重要性を改めて示している。古いグラフィックAPIの多くの問題は、必ずしも最も人気のあるゲームで発生するわけではなく、むしろ特定の機能の組み合わせにおいて発生し、長年にわたって隠れたままになる可能性がある。
従来の描画パスのオーバーヘッドが軽減されます
新バージョンでは描画パスも再編成されています。 Begin() / Vertex() / End() Direct3D 6およびDirect3D 5で使用されています。この変更によりメモリ消費量が削減され、若干のパフォーマンス向上が見込まれます。
今回も、Froggerはこの変更の恩恵を受けるゲームの一つです。この最適化によってすべてのレトロゲームのフレームレートが倍増するわけではありませんが、古いAPIで使用されていた経路に蓄積されたオーバーヘッドの一部を削減するのに役立ちます。
D7VKは以前のバージョンで既に大幅な性能最適化が行われているため、現在の開発は実装の改良と不要なコストの削減にますます重点が置かれています。
D7VK 2.2はDXVK 3.1の一部です。
このバージョンのもう一つの重要な特徴は、D7VK 2.2がDXVK 3.1に置き換えられたことです。これにより、プロジェクトはより新しいベースを活用し、DXVKの進化に合わせて実装を最新の状態に保つことができます。
この2つのプロジェクト間の関係は特に重要です。D7VKはDXVKのフォークとして誕生し、標準的なDXVKではカバーされていない古いDirect3D APIに特化しています。一方、どちらもWindowsからのグラフィックス呼び出しの宛先としてVulkanを使用しています。
この関係のおかげで、DXVKにもたらされる構造的な改善は、D7VKがVulkanとの通信に必要なすべてのインフラストラクチャをゼロから開発することなく、進化を続けるための基盤となる。
クラシックゲームを復活させるために企画されたプロジェクト
D7VKはLinuxエコシステムにおいて非常に明確な目標を掲げています。それは、Direct3D 7、6、5、3を使用するWindowsゲームをVulkanで実行できるようにすることです。この点が、主にDirect3D 9、10、11に焦点を当てているDXVKとの違いです。
このプロジェクトの重要性は、Wineが直接的に同じように実装していないグラフィック技術に依存するタイトルや、Vulkanへのより正確な変換によって恩恵を受けることができるタイトルにおいて、さらに高まります。
D7VKをWineまたはProtonと組み合わせることで、Linuxユーザーは古いWindowsのインストールに頼ることなく、20世紀後半から21世紀初頭にかけての相当量のソフトウェアを復元することができる。
Linux上でWineやProtonを使ってゲームをプレイしていて、往年の名作タイトルを復活させたいと考えているユーザーにとって、D7VK 2.2は互換性基盤の最も重要な要素の一つを強化するものです。多くの改善点はユーザーには見えないかもしれませんが、それぞれの修正によって、Direct3D 3、5、6、7時代に失われたゲームが、現代のLinuxシステムで再び正しく動作する可能性が高まります。