Mesa 20.2バージョンの作成に使用されたコードベースでは、 RADVドライバー、 AMDチップ用のVulkan バックエンドに切り替えました デフォルトでコンパイル シェーダー»ACO«、Valveによって開発されました LLVMシェーダーコンパイラの代替として。
この指定された変更 ゲームの生産性の向上を得ることの終わりで行われました 起動時間の短縮。
変更 RADVコントローラーから新しいバックエンドへ 古いAMD開発のバックエンドとACO機能の同等性に達した後に可能になりました RadeonSIOpenGLドライバーで引き続き使用されるAMDGPUドライバー用。
Valveによるテストでは、ACOはAMDGPUシェーダービルドコンパイラのほぼXNUMX倍の速度であり、RADVドライバーを備えたシステムで実行すると一部のゲームでFPSが増加することが示されました。
AMD OpenGLおよびVulkanドライバーは現在、LLVMアップストリームプロジェクトの一部であるシェーダーコンパイラーを使用しています。 そのプロジェクトは巨大で、さまざまな目標があり、ゲームシェーダーのオンラインコンパイルはそのXNUMXつにすぎません。
これは開発のトレードオフにつながる可能性があり、ゲーム固有の機能を改善することが他の方法よりも難しい場合や、ゲーム固有の機能が他のことに取り組んでいるLLVM開発者によって誤って壊されることがよくあります。
のバックエンド ACOは、コードが最適な方法で生成されるようにすることを目的としています ゲームアプリのシェーダーで可能であり、非常に高いコンパイル速度を実現します。
ACO C ++で書かれており、 JITコンパイルへの適用性を念頭に置いて開発されました。 クイックなものを使用してデータ構造を反復処理します。 リンクリストや文字列などのポインタベースの構造でdefを使用しないようにします。 コードの中間表現は完全にSSA(Single Static Allocation)に基づいており、レコードの割り当てを可能にし、シェーダーに基づいてレコードを正確に計算します。
コードの中間表現は完全にSSA(Single Static Allocation)に基づいており、レコードの割り当てを可能にし、シェーダーに基づいてレコードを正確に計算します。
現在、ピクセルのみがサポートされています (フラグメント) ディスクリートAMDGPUでシェーダーを計算します (dGPU VI +)。 ただし、ACOは、シャドウオブザトゥームレイダーやウルフェンシュタインIIの複雑なシェーダーを含め、テストされたすべてのゲームのシェーダーをすでに正しく収集しています。
提案されたACOプロトタイプ テスト用 AMDGPUシェーダーコンパイラのほぼXNUMX倍の速度です また、RADVコントローラーを搭載したシステムで実行すると、一部のゲームでFPSが増加することを示しています。
バルブのコードを採用することの関連性についてもう少し理解するには、それを前景にすることが重要です 目的は、可能な限り最適なコード生成を保証することです。 ゲームアプリのシェーダー、および非常に高いコンパイル速度。
Mesaで利用可能なシェーダーコンパイラはLLVMコンポーネントを使用します。 これは、望ましいコンパイル速度に到達することを許可せず、制御フローの完全な制御を許可しません。これは、過去にすでに重大なエラーを引き起こしていました。
さらに、 LLVMを回避すると、より積極的な分析を実装できます 不一致とより細かいログ負荷管理により、より効率的な実行可能ファイルの生成が可能になります。
最後に、それも 現時点では、ACOはMesa RADVVulkanコントローラーに対してのみ機能することに注意してください。 しかし、ACO開発者は、OpenGL RadeonSIドライバーをサポートするためにACOの機能を拡張する作業を開始することを次のステップとして確認しました。これにより、将来、このドライバーについて、ACOがデフォルトのLLVMシェーダーコンパイラを置き換えることができます。
いくら 以前に使用されたバックエンドを継続することを好む人 LLVMシェーダーコンパイラーから、それらはそれに戻ることができ、変数を変更するだけです。
この変更を行うために提供される環境変数は次のとおりです。 「RADV_DEBUG = llvm」。
また、ユーザーはどのバックエンドでゲームを実行するかをどのように選択しますか? どのファイルを変更する必要がありますか?