如何将显示控制器切换为 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 卸载,这对于笔记本电脑来说可能不是一个好主意。

相关内容