發行版:流行作業系統 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 卸載,這對於筆記型電腦來說可能不是一個好主意。