evo*_*iar 4 linux amd-graphics
发行版: Pop OS 19.10
\n笔记本电脑: HP Notebook 15-bs185tx
显卡:
\n\n我已经尝试了几乎所有在线可用的解决方案,但没有任何效果。VGA 和显示控制器都在我的内置 Intel 显卡上运行。\n我使用了多个命令(包括此命令)lspci -k | grep -EA3 'VGA|3D|Display'
来查看我的活动图形适配器。如果您对此问题有任何疑问,请告诉我。
谢谢你!
\nTL;DR(但这些值1 0
在您的系统上可能不正确):
$ xrandr --setprovideroffloadsink 1 0\n$ export DRI_PRIME=1\n$ glxinfo | grep "OpenGL renderer string"\n
Run Code Online (Sandbox Code Playgroud)\n\n如果硬件级别不存在此功能,那么这是不可能的,但存在替代方案。
\n\nVGA Switcheroo 文档中显示了这一点:
\n\n\n\n\nvga_switcheroo 是用于笔记本电脑混合显卡的 Linux 子系统。\n 有两种类型:
\n\n\n
\n\n- muxed:带有多路复用器芯片的双 GPU,用于在 GPU 之间切换输出。
\n- muxless:双 GPU,但只有其中一个连接到输出。另一种仅用于卸载渲染,其结果通过 PCIe 复制到帧缓冲区中。在 Linux 上,\n DRI PRIME支持此功能 。
\n混合图形开始出现在 Naughties 后期,并且最初都是混合的。出于成本原因,较新的笔记本电脑转向无复用器架构。一个值得注意的例外是 MacBook Pro,它继续使用多路复用器。
\n
所以我假设你的硬件是muxless,如下所示:
\n\n \xe2\x95\x94\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x97\n \xe2\x95\x91 \xe2\x95\x91\n \xe2\x95\x91 display \xe2\x95\x91\n \xe2\x95\x91 \xe2\x95\x91\n \xe2\x95\x9a\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x9d\n \xe2\x94\x82\n \xe2\x95\xad\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x95\xaf X\n \xe2\x94\x82 \xe2\x94\x8a\n\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90 \xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\n\xe2\x94\x82 iGPU \xe2\x94\x82\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x82 dGPU \xe2\x94\x82\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n\n虽然可以找到一些好的文档(例如:在Archlinux上),但我找不到一些关于DRI_PRIME
. 我发现的唯一可能是半官方的文档是... Nvidia 的 nouveau 驱动程序和文字游戏Optimus/PRIME:
\n\n\n使用 Optimus/Prime
\n\n“PRIME GPU 卸载”和“反向 PRIME”是在 Linux 内核中支持无复用混合图形的尝试。
\n
虽然这个名称可能源自最初的 Nvidia 支持,但它当然是通用的并且可以与 AMD 配合使用。
\n\n您可以使用以下命令查询和更改设置xrandr
:
\n\n\n\n\n
--listproviders
\n 报告有关可用提供程序的信息。\n\n
--setprovideroutputsource provider source
\n 将 source 设置为提供程序的显示输出图像的来源。仅当源和提供者分别具有源输出和接收器输出功能时,这才有可能。如果源为 0x0,则提供程序与其当前输出源断开连接。\n
--setprovideroffloadsink provider sink
\n 将提供程序设置为接收器的渲染卸载设备。仅当提供者和接收器分别具有源卸载和接收器卸载功能时,这才有可能。如果接收器为 0x0,则提供程序将与其当前渲染卸载接收器断开连接。
例如,对于使用 Intel iGPU 和一些 AMD dGPU 的笔记本电脑:
\n\n$ xrandr --listproviders\nProvider 0: id: 0x68 cap: 0xb, Source Output, Sink Output, Sink Offload crtcs: 4 outputs: 3 associated providers: 0 name:Intel\nProvider 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\n
Run Code Online (Sandbox Code Playgroud)\n\n请注意,无论Source Output和Sink Output 的outputs: 0
其他属性如何,Provider 1 都无法输出。如果您的系统确实为 dGPU 的属性显示了一个不同于 0 的值,那么您可能还有其他可用选项(直接显示,也可能与使用反向 PRIME 结合使用),但本答案不会涵盖这些选项。outputs:
--setprovideroutputsource
要准备使用卸载到 dGPU 的 (3D) GPU 任务,对于前面的示例,可以这样做:
\n\n$ xrandr --setprovideroffloadsink \'AMD Radeon (TM) HD8530M @ pci:0000:04:00.0\' Intel\n
Run Code Online (Sandbox Code Playgroud)\n\n可以使用 ids 或更简单的索引来代替名称。下面的两个命令会执行相同的操作。一个人必须注意不要颠倒方向,否则可能会发生不好的事情。
\n\n$ xrandr --setprovideroffloadsink 0x41 0x68\n$ xrandr --setprovideroffloadsink 1 0\n
Run Code Online (Sandbox Code Playgroud)\n\n现在:
\n\n$ xrandr --listproviders\nProviders: number : 2\nProvider 0: id: 0x68 cap: 0xb, Source Output, Sink Output, Sink Offload crtcs: 4 outputs: 3 associated providers: 1 name:Intel\nProvider 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\n
Run Code Online (Sandbox Code Playgroud)\n\n现在,两个提供程序已关联,导出特殊(到 mesa)变量DRI_PRIME=1
会选择要渲染的 dGPU:
$ DRI_PRIME=0 glxinfo | grep "OpenGL renderer string"\nOpenGL renderer string: Mesa DRI Intel(R) Haswell Mobile \n$ DRI_PRIME=1 glxinfo | grep "OpenGL renderer string"\nOpenGL renderer string: AMD Radeon (TM) HD8530M (OLAND, DRM 3.36.0, 5.6.3-amd64, LLVM 6.0.0)\n
Run Code Online (Sandbox Code Playgroud)\n\n因此,要运行名为 的 GPU 密集型 3D 程序myhungrygame
,您可能会这样做(如果 dGPU 在 iGPU 之后):
$ xrandr --setprovideroffloadsink 1 0 # X11-wide setting\n$ export DRI_PRIME=1\n$ ./myhungrygame\n
Run Code Online (Sandbox Code Playgroud)\n\n如果您设法在加载桌面环境之前完成前两件事,那么默认情况下所有设备都将使用 dGPU 进行 3D 卸载,这对于笔记本电脑来说可能不是一个好主意。
\n