如何將顯示控制器切換為 Radeon 而不是內建 Intel 顯示卡?

如何將顯示控制器切換為 Radeon 而不是內建 Intel 顯示卡?

發行版:流行作業系統 19.10
筆記型電腦:惠普筆電 15-bs185tx

顯示卡:

  • AMD Radeon™ 520 顯示卡(2 GB DDR3 專用)
  • 英特爾公司超高清顯示卡 620

我已經嘗試了幾乎所有在線可用的解決方案,但沒有任何效果。 VGA 和顯示控制器都在我的內建英特爾顯示卡上運行。我使用了多個命令(包括這個命令)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 子系統。這些有兩種風格:

  • muxed:具有多工器晶片的雙 GPU,用於在 GPU 之間切換輸出。
  • muxless:雙 GPU,但只有其中一個連接到輸出。另一種僅用於卸載渲染,其結果透過 PCIe 複製到幀緩衝區中。在 Linux 上,這是支援的 直接還原鐵主要

混合圖形開始出現在 Naughties 後期,並且最初都是混合的。出於成本原因,較新的筆記型電腦轉向無復用器架構。一個值得注意的例外是 MacBook Pro,它繼續使用多工器。

所以我假設你的硬體是無復用器, 像這樣:

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

雖然可以找到一些好的文件(例如:ArchLinux),我找不到一些官方的使用的權威文檔DRI_PRIME。我發現的唯一可能是半官方的文檔是... Nvidia 的 nouveau 驅動程式和文字遊戲擎天柱

使用 Optimus/Prime

「PRIME GPU 卸載」和「反向 PRIME」是在 Linux 核心中支援無復用混合圖形的嘗試。

雖然這個名稱可能源自於最初的 Nvidia 支持,但它當然是通用的並且可以與 AMD 配合使用。

您可以使用以下命令查詢和更改設置xrandr命令:

--listproviders
報告有關可用提供者的信息。

--setprovideroutputsource provider source
將source 設定為provider 顯示輸出影像的來源。只有當來源和提供者分別具有來源輸出和接收器輸出功能時,這才有可能。如果來源為 0x0,則提供者與其目前輸出來源斷開連接。

--setprovideroffloadsink provider sink
將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: 無法輸出,無論其他屬性為何來源輸出接收器輸出可能說。如果您的系統顯示 dGPUoutputs:屬性的值不同於 0,那麼您可能有其他可用選項(直接顯示,也可能與 Reverse PRIME using 結合使用--setprovideroutputsource),但本答案不會涵蓋這些選項。

若要準備使用卸載到 dGPU 的 (3D) GPU 任務,對於前面的範例,可以執行下列操作:

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

可以使用 ids 或更簡單的索引來代替名稱。下面的兩個指令會執行相同的操作。一個人必須注意不要顛倒方向,否則可能會發生不好的事情。

$ 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

現在,兩個提供者已關聯,匯出特殊(到 mesa)變數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

如果您設法在加載桌面環境之前完成前兩件事,那麼預設所有裝置都將使用 dGPU 進行 3D 卸載,這對於筆記型電腦來說可能不是一個好主意。

相關內容