内蔵IntelグラフィックではなくディスプレイコントローラをRadeonに切り替えるにはどうすればよいですか?

内蔵IntelグラフィックではなくディスプレイコントローラをRadeonに切り替えるにはどうすればよいですか?

リリースバージョン:人気のあるオペレーティングシステム19.10
ラップトップ:HPノートブック15-bs185tx

グラフィックカード:

  • AMD Radeon™520グラフィックカード(2GB DDR3のみ)
  • インテル社UHDグラフィックス620

オンラインで利用可能なほとんどすべてのソリューションを試しましたが、何も機能しません。 VGAとディスプレイコントローラの両方が内蔵Intelグラフィックカードで動作します。lspci -k | grep -EA3 'VGA|3D|Display'アクティブグラフィックアダプタを表示するために複数のコマンド(このコマンドを含む)を使用しました。この問題についてご質問がある場合はお知らせください。

ありがとうございます!

答え1

TL;DR(ただし、この値は1 0システムによっては正確ではないかもしれません):

$ xrandr --setprovideroffloadsink 1 0
$ export DRI_PRIME=1
$ glxinfo | grep "OpenGL renderer string"

この機能がハードウェアレベルには存在しませんが、代替が存在する場合、これは不可能です。

これは次のように表示されます。VGAスイッチャー文書:

vga_switcherooは、ノートブックハイブリッドグラフィックカード用のLinuxサブシステムです。ここには2つの味があります。

  • muxed:GPU間の出力切り替え用のマルチプレクサチップ付きデュアルGPUです。
  • Muxless:デュアルGPUですが、そのうちの1つだけが出力に接続されています。もう1つはレンダリングオフロード用です。、その結果はPCIeを介してフレームバッファにコピーされます。 Linuxではサポートされています。 主に直接還元鉄

ミックスグラフィックはナウティーズの後半に現れ始め、最初はミックスされた。最新のノートブックはコスト上の理由で多重化アーキテクチャに移行。注目すべき例外の1つは、マルチプレクサを使い続けるMacBook Proです。

だから私はあなたのハードウェアが次のようになると仮定します。マルチプレクサなし、このように:

      ╔═══════════════╗
      ║               ║
      ║    display    ║
      ║               ║
      ╚═══════════════╝
       ╭───╯       X
       │           ┊
┌────────┐       ┌────────┐
│        │       │        │
│  iGPU  │───────│  dGPU  │
│        │       │        │
└────────┘       └────────┘

いくつかの良いドキュメントを見つけることができます(例:アーチLinux)、一部が見つかりません公式使用できる権威ある文書ですDRI_PRIME。私が見つけた唯一の文書は反公式であるかもしれません... Nvidiaの新しいドライバーと単語いたずらオプティマスプライム:

オプティマス/プライムの使用

「PRIME GPU オフロード」と「リバース PRIME」は、Linux カーネルで多重化ハイブリッドグラフィックをサポートする試みです。

名前はもともとNvidiaサポートからのものかもしれませんが、確かに普遍的でAMDと連携します。

次のコマンドを使用して設定を照会および変更できます。xrandr注文する:

--listproviders
利用可能なプロバイダに関する情報を報告します。

--setprovideroutputsource provider source
ソースをプロバイダに設定すると、出力イメージのソースが表示されます。これは、ソースとプロバイダがそれぞ​​れソース出力とシンク出力機能を持っている場合にのみ可能です。ソースが 0x0 の場合、プロバイダは現在の出力ソースから切断されます。

--setprovideroffloadsink provider sink
プロバイダをシンクのレンダリングオフロードデバイスとして設定します。これは、プロバイダとシンクにそれぞれソースオフロード機能とシンクオフロード機能がある場合にのみ可能です。。シンクが0x0の場合、プロバイダは現在のレンダリングオフロードシンクとの接続を切断します。

たとえば、Intel iGPUと一部のAMD dGPUを使用するノートブックの場合:

$ xrandr --listproviders
Provider 0: id: 0x68 cap: 0xb, Source Output, Sink Output, Sink Offload crtcs: 4 outputs: 3 associated providers: 0 name:Intel
Provider 1: id: 0x41 cap: 0xf, Source Output, Sink Output, Source Offload, Sink Offload crtcs: 2 outputs: 0 associated providers: 0 name:AMD Radeon (TM) HD8530M @ pci:0000:04:00.0

プロバイダ1には次のものがありますoutputs: 0。他の属性に関係なく出力できません。ソース出力そして受信機出力おそらく。あなたのシステムするShow dGPUoutputs:属性の値が 0 と異なる場合、使用可能な他のオプションがあるかもしれませんが (直接表示するか、 を使用して Reverse PRIME と一緒に表示--setprovideroutputsource)、この回答ではそのオプションは扱いません。

前の例では、dGPUにオフロードされた(3D)GPUジョブを使用する準備をするには、次の手順を実行します。

$ xrandr --setprovideroffloadsink 'AMD Radeon (TM) HD8530M @ pci:0000:04:00.0' Intel

名前の代わりにIDまたはより簡単なインデックスを使用できます。次の2つのコマンドは同じことを行います。方向を変えないように注意してください。そうしないと、悪いことが起こる可能性があります。

$ xrandr --setprovideroffloadsink 0x41 0x68
$ xrandr --setprovideroffloadsink 1 0

今:

$ xrandr --listproviders
Providers: number : 2
Provider 0: id: 0x68 cap: 0xb, Source Output, Sink Output, Sink Offload crtcs: 4 outputs: 3 associated providers: 1 name:Intel
Provider 1: id: 0x41 cap: 0xf, Source Output, Sink Output, Source Offload, Sink Offload crtcs: 2 outputs: 0 associated providers: 1 name:AMD Radeon (TM) HD8530M @ pci:0000:04:00.0

2つのプロバイダが接続されているので、特別な(メサロ)変数をエクスポートすると、DRI_PRIME=1レンダリングするdGPUが選択されます。

$ DRI_PRIME=0 glxinfo | grep "OpenGL renderer string"
OpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile 
$ DRI_PRIME=1 glxinfo | grep "OpenGL renderer string"
OpenGL renderer string: AMD Radeon (TM) HD8530M (OLAND, DRM 3.36.0, 5.6.3-amd64, LLVM 6.0.0)

したがって、というGPU集約的な3Dプログラムを実行するには、myhungrygame次のことができます(dGPUがiGPUの背後にある場合)。

$ xrandr --setprovideroffloadsink 1 0 # X11-wide setting
$ export DRI_PRIME=1
$ ./myhungrygame

デスクトップ環境をロードする前に最初の2つのことを行うと、すべてのデバイスは基本的に3DオフロードにdGPUを使用します。

関連情報