Hybrid graphics: Difference between revisions

From ArchWiki
(Merge introduction section.)
 
(62 intermediate revisions by 26 users not shown)
Line 1: Line 1:
[[Category:Graphics]]
[[Category:Graphics]]
[[es:Hybrid graphics]]
[[ja:ハイブリッドグラフィック]]
[[ja:ハイブリッドグラフィック]]
[[tr:Hibrit Grafik Teknolojileri]]
[[ru:Hybrid graphics]]
[[zh-cn:Hybrid graphics]]
[[zh-hans:Hybrid graphics]]
Hybrid-graphics is a concept involving two graphics cards on same computer. The laptop manufacturers developed new technologies involving two graphic cards in an single computer, with different abilities and power consumptions. Hybrid-graphics is developed to support both high performance and power saving usages.
{{Related articles start}}
{{Related|NVIDIA Optimus}}
{{Related|PRIME}}
{{Related|Xorg}}
{{Related|External GPU}}
{{Related articles end}}


There are a variety of technologies and each manufacturer developed its own solution to this problem. This technology is well supported on Windows but it's still quite experimental with Linux distributions. Here we try to explain a little about each approach and models and some community solutions to the lack of GNU/Linux systems support.
Hybrid-graphics is a concept involving two graphics cards on same computer. Laptop manufacturers have developed technologies involving two graphic cards with different abilities and power consumption on a single computer. Hybrid-graphics has been developed to support both high performance and power saving use cases by keeping the Dedicated/Discrete Graphics Processor inactive unless its 3D rendering performance is needed over the Integrated Graphics Processor.


== First Generation Hybrid Model (Basic Switching) ==
There are a variety of technologies and each manufacturer developed its own solution to this problem. This technology is well supported on Windows but it is still rough around the edges with Linux distributions. This article will try to explain a little about each approach and describe some community solutions to the lack of GNU/Linux systems support by vendors.
{{Note|1=Unless your notebook is from the last decade, it’s most likely using [[#Dynamic Switching Model|dynamic switching]].}}
The first generation of notebooks with hybrid graphics follow an approach that involves a two graphic card setup with a hardware multiplexer ([[Wikipedia:Multiplexer|MUX]]). It allows power save and low-end 3D rendering by using an Integrated Graphics Processor (IGP); or a major power consumption with 3D rendering performance using a Dedicated/Discrete Graphics Processor (DGP). This model makes the user choose (at boot time or at login time) within the two power/graphics profiles and is almost fixed through all the user session. The switch is done by a similar workflow:


* Turn off the display
{{Note|Unless your setup is from before 2010, it likely is using a dynamic switching model. Previous hybrid graphics solutions involved either a reboot for the crudest or a full graphical stack restart which needed a re-log for taking effect.}}
* Turn on the DGP
* Switch the multiplexer
* Turn off the IGP
* Turn on again the display


This switch is somewhat rough and adds some blinks and black screens in laptops that could do it "on the fly". Later approaches made the transition a little more user-friendly.
== Dynamic switching ==


== Dynamic Switching Model ==
Most of the new Hybrid-graphics technologies involve two graphic cards : the dedicated and integrated cards are plugged to a framebuffer and there is no hardware multiplexer. The integrated card is always on and the dedicated card is switched on/off when there is a need in power-save or performance-rendering. In most cases there is no way to use ''only'' the dedicated card and all the switching and rendering is controlled by software.
At startup, the Linux kernel starts using a video mode and setting up low-level graphic drivers which will be used by the applications. Most of the Linux distributions then use X.org to create a graphical environment. Finally, a few other softwares are launched, first a login manager and then a window manager, and so on. This hierarchical system has been designed to be used in most of cases on a single graphic card.
 
{{Note|Read [[NVIDIA Optimus]] and [[Bumblebee]] for details about NVIDIA using hybrid graphics with NVIDIA’s proprietary driver. Read [[PRIME]] for basically everything else (like AMD or NVIDIA GPUs with the [[nouveau]] driver).}}
 
=== Fully power down discrete GPU ===
 
You may want to turn off the high-performance graphics processor to save battery power.
 
==== Using BIOS/UEFI ====
 
Some laptop manufacturers provide a toggle in the BIOS or UEFI to fully deactivate the dedicated card.
 
==== Using udev rules ====
 
Ensure any display manager config for NVIDIA is removed.
 
Blacklist the nouveau drivers by creating
 
{{hc|/etc/modprobe.d/blacklist-nouveau.conf|2=
blacklist nouveau
options nouveau modeset=0
}}


{{Note|This model is utilized by most manufacturers as of 2016.}}
Then create


Most of the new Hybrid-graphics technologies involve two graphic cards as the basic switching but now the DGP and IGP are plugged to a framebuffer and there is no hardware multiplexer. The IGP is always on and the DGP is switched on/off when there is a need in power-save or performance-rendering. In most cases there is no way to use ''only'' the DGP and all the switching and rendering is controlled by software.
{{hc|/etc/udev/rules.d/00-remove-nvidia.rules|2=
At startup, the Linux kernel starts using a video mode and setting up low-level graphic drivers which will be used by the applications. Most of the Linux distributions then use X.org to create a graphical environment. Finally, a few other softwares are launched, first a login manager and then a window manager, and so on. This hierarchical system has been designed to be used in most of cases on a single graphic card.
# Remove NVIDIA USB xHCI Host Controller devices, if present
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{power/control}="auto", ATTR{remove}="1"
 
# Remove NVIDIA USB Type-C UCSI devices, if present
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c8000", ATTR{power/control}="auto", ATTR{remove}="1"
 
# Remove NVIDIA Audio devices, if present
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x040300", ATTR{power/control}="auto", ATTR{remove}="1"
 
# Remove NVIDIA VGA/3D controller devices
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x03[0-9]*", ATTR{power/control}="auto", ATTR{remove}="1"
}}
 
Reboot and run {{ic|lspci}} to see if your NVIDIA GPU is still listed.
 
==== Using bbswitch ====
 
With an NVIDIA GPU, this can be more safely done using [[bbswitch]], which consists of a kernel package that automatically issues the correct ACPI calls to disable the discrete GPU when not needed, or automatically at boot.


{{Note|1=<br/>Read [[NVIDIA Optimus]] and [[Bumblebee]] for details about NVidia using hybrid graphics with NVidia’s proprietary driver.<br/>Read [[PRIME]] basically everything else (like AMD Radeon and NVidia GPUs with Nouveau driver).}}
{{Note|bbswitch does not work with the PCI-E port power management method since kernel 4.8. See [[Bumblebee#Broken power management with kernel 4.8]] for details.}}


=== Fully Power Down Discrete GPU ===
==== Using acpi_call ====


You may want to turn off the high-performance graphics processor to save battery power, this can be done by installing the {{pkg|acpi_call}} package.
Otherwise, and for GPUs not supported by bbswitch, the same can be done manually installing the {{pkg|acpi_call}} package.


{{Tip|For kernels not in the [[Official repositories]], the {{AUR|acpi_call-git-dkms}} is an alternative. See also [[DKMS]].}}  
{{Tip|For kernels not in the [[official repositories]], the {{Pkg|acpi_call-dkms}} is an alternative. See also [[DKMS]].}}


Once installed load the kernel module:
Once installed load the kernel module:
Line 38: Line 77:
  # modprobe acpi_call
  # modprobe acpi_call


With the kernel module loaded run the following:
With the kernel module loaded, execute the script at {{ic|/usr/share/acpi_call/examples/turn_off_gpu.sh}}


# /usr/share/acpi_call/examples/turn_off_gpu.sh
The script will go through all the known data buses and attempt to turn them off. You will get an output similar to the following:


This script will go through all the known data buses and attempt to turn them off. You will get an output similar to the following:  
{{hc|# /usr/share/acpi_call/examples/turn_off_gpu.sh|
Trying \_SB.PCI0.P0P1.VGA._OFF: failed
Trying \_SB.PCI0.P0P2.VGA._OFF: failed
Trying \_SB_.PCI0.OVGA.ATPX: failed
Trying \_SB_.PCI0.OVGA.XTPX: failed
Trying \_SB.PCI0.P0P3.PEGP._OFF: failed
Trying \_SB.PCI0.P0P2.PEGP._OFF: failed
Trying \_SB.PCI0.P0P1.PEGP._OFF: failed
Trying \_SB.PCI0.MXR0.MXM0._OFF: failed
Trying \_SB.PCI0.PEG1.GFX0._OFF: failed
Trying \_SB.PCI0.PEG0.GFX0.DOFF: failed
Trying \_SB.PCI0.PEG1.GFX0.DOFF: failed
'''Trying \_SB.PCI0.PEG0.PEGP._OFF: works!'''
Trying \_SB.PCI0.XVR0.Z01I.DGOF: failed
Trying \_SB.PCI0.PEGR.GFX0._OFF: failed
Trying \_SB.PCI0.PEG.VID._OFF: failed
Trying \_SB.PCI0.PEG0.VID._OFF: failed
Trying \_SB.PCI0.P0P2.DGPU._OFF: failed
Trying \_SB.PCI0.P0P4.DGPU.DOFF: failed
Trying \_SB.PCI0.IXVE.IGPU.DGOF: failed
Trying \_SB.PCI0.RP00.VGA._PS3: failed
Trying \_SB.PCI0.RP00.VGA.P3MO: failed
Trying \_SB.PCI0.GFX0.DSM._T_0: failed
Trying \_SB.PCI0.LPC.EC.PUBS._OFF: failed
Trying \_SB.PCI0.P0P2.NVID._OFF: failed
Trying \_SB.PCI0.P0P2.VGA.PX02: failed
Trying \_SB_.PCI0.PEGP.DGFX._OFF: failed
Trying \_SB_.PCI0.VGA.PX02: failed}}


Trying \_SB.PCI0.P0P1.VGA._OFF: failed
See the "works"? This means the script found a bus which your GPU sits on and it has now turned off the chip. To confirm this, your battery time remaining should have increased.
Trying \_SB.PCI0.P0P2.VGA._OFF: failed
Trying \_SB_.PCI0.OVGA.ATPX: failed
Trying \_SB_.PCI0.OVGA.XTPX: failed
Trying \_SB.PCI0.P0P3.PEGP._OFF: failed
Trying \_SB.PCI0.P0P2.PEGP._OFF: failed
Trying \_SB.PCI0.P0P1.PEGP._OFF: failed
Trying \_SB.PCI0.MXR0.MXM0._OFF: failed
Trying \_SB.PCI0.PEG1.GFX0._OFF: failed
Trying \_SB.PCI0.PEG0.GFX0.DOFF: failed
Trying \_SB.PCI0.PEG1.GFX0.DOFF: failed
'''Trying \_SB.PCI0.PEG0.PEGP._OFF: works!'''
Trying \_SB.PCI0.XVR0.Z01I.DGOF: failed
Trying \_SB.PCI0.PEGR.GFX0._OFF: failed
Trying \_SB.PCI0.PEG.VID._OFF: failed
Trying \_SB.PCI0.PEG0.VID._OFF: failed
Trying \_SB.PCI0.P0P2.DGPU._OFF: failed
Trying \_SB.PCI0.P0P4.DGPU.DOFF: failed
Trying \_SB.PCI0.IXVE.IGPU.DGOF: failed
Trying \_SB.PCI0.RP00.VGA._PS3: failed
Trying \_SB.PCI0.RP00.VGA.P3MO: failed
Trying \_SB.PCI0.GFX0.DSM._T_0: failed
Trying \_SB.PCI0.LPC.EC.PUBS._OFF: failed
Trying \_SB.PCI0.P0P2.NVID._OFF: failed
Trying \_SB.PCI0.P0P2.VGA.PX02: failed
Trying \_SB_.PCI0.PEGP.DGFX._OFF: failed
Trying \_SB_.PCI0.VGA.PX02: failed


See the "works"? This means the script found a bus which your GPU sits on and it has now turned off the chip. To confirm this, your battery time remaining should have increased. Currently, the chip will turn back on with the next reboot to get around this we do the following:
{{Tip|If you are experiencing trouble hibernating or suspending the system after disabling the GPU, try to enable it again by sending the corresponding acpi_call. See also [[Power management/Suspend and hibernate#Custom systemd units]].}}


{{Note| To turn the GPU back on just reboot.}}
===== Turning off the GPU automatically =====


Add the kernel module to the array of modules to load at boot:
Currently, the chip will turn back on with the next reboot. To get around this, [[load the module at boot]]:


{{hc|/etc/modules-load.d/acpi_call.conf|
{{hc|/etc/modules-load.d/acpi_call.conf|
#Load 'acpi_call.ko' at boot.
#Load 'acpi_call.ko' at boot.
acpi_call
}}


acpi_call}}
====== At boot ======


To turn off the GPU at boot we could just run the above script but honestly that is not very elegant so instead lets make use of systemd's tmpfiles.  
To turn off the GPU at boot it is possible to use [[systemd-tmpfiles]].


{{hc|/etc/tmpfiles.d/acpi_call.conf|
{{hc|/etc/tmpfiles.d/acpi_call.conf|


w /proc/acpi/call - - - - \\_SB.PCI0.PEG0.PEGP._OFF}}
w /proc/acpi/call - - - - ''\\_SB.PCI0.PEG0.PEGP._OFF''}}
 
The configuration above will be loaded at boot by systemd. What it does is write the specific OFF signal to the {{ic|/proc/acpi/call}} file. Obviously, replace the {{ic|\_SB.PCI0.PEG0.PEGP._OFF}} with the one which works on your system (please note that you need to escape the backslash).
 
====== After X server initialization ======
 
On some systems, turning off the discrete GPU before the X server is initialized may hang the system. In such cases, it may be better to disable the GPU after X server initialization, which is possible with some display managers. In [[LightDM]], for instance, the ''display-setup-script'' seat configuration parameter could be used to execute a script as root that disables the GPU.
 
=== System76 ===
 
Some System76 laptops (like the [[System76 Oryx Pro|Oryx Pro]]) have their own unique hybrid graphics option.  To make use of it, install {{AUR|system76-power}}, [[enable]] {{ic|system76-power.service}}, and run {{ic|system76-power graphics hybrid}}.
 
==== Fully power down discrete GPU ====
 
First ensure you are using integrated graphics mode by running {{ic|system76-power graphics integrated}} and rebooting. Once in integrated mode, to power down the discrete graphics card run {{ic|system76-power graphics power off}}. This command is not persistent and will need to be run after each boot.
 
== Troubleshooting ==
 
=== The startup time for certain applications is delayed by 30 seconds ===
 
{{Merge|Vulkan|This seems very similar to [[Vulkan#AMDGPU - Vulkan applications launch slowly]], except it completely unsets the variable instead of passing it the proper value depending on the iGPU used.}}


The above config will be loaded at boot by systemd. What it does is write the specific OFF signal to the {{ic|/proc/acpi/call}} file. Obviously, replace the {{ic|\_SB.PCI0.PEG0.PEGP._OFF}} with the one which works on your system (please note that you need to escape the backslash).
When invoked, [[Vulkan]] attempts to initialize the Installable Client Driver (ICD) specified in {{ic|/usr/share/vulkan/icd.d/nvidia_icd.json}}. The package  {{Pkg|nvidia-utils}} configures this file to reference the {{ic|libGLX_nvidia}} driver, providing Vulkan with information about the GPU driver's path. However, if the GPU is disabled, initialization of this driver will fail, causing certain applications (e.g., those based on [[Chromium]]/[[Electron]]) to undergo delayed startup until a 30-second timeout is reached. To prevent Vulkan from attempting to load the driver in the first place and thus mitigate this timeout, you can override the location of the ICD JSON file using the {{ic|VK_DRIVER_FILES}} [[environment variable]]. To unset it, use:


{{Tip| If you are experiencing trouble hibernating or suspending the system after disabling the GPU, try to enable it again by sending the corresponding acpi_call. See also [[Power_management#Suspend.2Fresume_service_files|Suspend/resume service files]].}}
$ export VK_DRIVER_FILES=

Latest revision as of 15:37, 9 April 2024

Hybrid-graphics is a concept involving two graphics cards on same computer. Laptop manufacturers have developed technologies involving two graphic cards with different abilities and power consumption on a single computer. Hybrid-graphics has been developed to support both high performance and power saving use cases by keeping the Dedicated/Discrete Graphics Processor inactive unless its 3D rendering performance is needed over the Integrated Graphics Processor.

There are a variety of technologies and each manufacturer developed its own solution to this problem. This technology is well supported on Windows but it is still rough around the edges with Linux distributions. This article will try to explain a little about each approach and describe some community solutions to the lack of GNU/Linux systems support by vendors.

Note: Unless your setup is from before 2010, it likely is using a dynamic switching model. Previous hybrid graphics solutions involved either a reboot for the crudest or a full graphical stack restart which needed a re-log for taking effect.

Dynamic switching

Most of the new Hybrid-graphics technologies involve two graphic cards : the dedicated and integrated cards are plugged to a framebuffer and there is no hardware multiplexer. The integrated card is always on and the dedicated card is switched on/off when there is a need in power-save or performance-rendering. In most cases there is no way to use only the dedicated card and all the switching and rendering is controlled by software. At startup, the Linux kernel starts using a video mode and setting up low-level graphic drivers which will be used by the applications. Most of the Linux distributions then use X.org to create a graphical environment. Finally, a few other softwares are launched, first a login manager and then a window manager, and so on. This hierarchical system has been designed to be used in most of cases on a single graphic card.

Note: Read NVIDIA Optimus and Bumblebee for details about NVIDIA using hybrid graphics with NVIDIA’s proprietary driver. Read PRIME for basically everything else (like AMD or NVIDIA GPUs with the nouveau driver).

Fully power down discrete GPU

You may want to turn off the high-performance graphics processor to save battery power.

Using BIOS/UEFI

Some laptop manufacturers provide a toggle in the BIOS or UEFI to fully deactivate the dedicated card.

Using udev rules

Ensure any display manager config for NVIDIA is removed.

Blacklist the nouveau drivers by creating

/etc/modprobe.d/blacklist-nouveau.conf
blacklist nouveau
options nouveau modeset=0

Then create

/etc/udev/rules.d/00-remove-nvidia.rules
# Remove NVIDIA USB xHCI Host Controller devices, if present
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c0330", ATTR{power/control}="auto", ATTR{remove}="1"

# Remove NVIDIA USB Type-C UCSI devices, if present
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x0c8000", ATTR{power/control}="auto", ATTR{remove}="1"

# Remove NVIDIA Audio devices, if present
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x040300", ATTR{power/control}="auto", ATTR{remove}="1"

# Remove NVIDIA VGA/3D controller devices
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{class}=="0x03[0-9]*", ATTR{power/control}="auto", ATTR{remove}="1"

Reboot and run lspci to see if your NVIDIA GPU is still listed.

Using bbswitch

With an NVIDIA GPU, this can be more safely done using bbswitch, which consists of a kernel package that automatically issues the correct ACPI calls to disable the discrete GPU when not needed, or automatically at boot.

Note: bbswitch does not work with the PCI-E port power management method since kernel 4.8. See Bumblebee#Broken power management with kernel 4.8 for details.

Using acpi_call

Otherwise, and for GPUs not supported by bbswitch, the same can be done manually installing the acpi_call package.

Tip: For kernels not in the official repositories, the acpi_call-dkms is an alternative. See also DKMS.

Once installed load the kernel module:

# modprobe acpi_call

With the kernel module loaded, execute the script at /usr/share/acpi_call/examples/turn_off_gpu.sh

The script will go through all the known data buses and attempt to turn them off. You will get an output similar to the following:

# /usr/share/acpi_call/examples/turn_off_gpu.sh
Trying \_SB.PCI0.P0P1.VGA._OFF: failed
Trying \_SB.PCI0.P0P2.VGA._OFF: failed
Trying \_SB_.PCI0.OVGA.ATPX: failed
Trying \_SB_.PCI0.OVGA.XTPX: failed
Trying \_SB.PCI0.P0P3.PEGP._OFF: failed
Trying \_SB.PCI0.P0P2.PEGP._OFF: failed
Trying \_SB.PCI0.P0P1.PEGP._OFF: failed
Trying \_SB.PCI0.MXR0.MXM0._OFF: failed
Trying \_SB.PCI0.PEG1.GFX0._OFF: failed
Trying \_SB.PCI0.PEG0.GFX0.DOFF: failed
Trying \_SB.PCI0.PEG1.GFX0.DOFF: failed
Trying \_SB.PCI0.PEG0.PEGP._OFF: works!
Trying \_SB.PCI0.XVR0.Z01I.DGOF: failed
Trying \_SB.PCI0.PEGR.GFX0._OFF: failed
Trying \_SB.PCI0.PEG.VID._OFF: failed
Trying \_SB.PCI0.PEG0.VID._OFF: failed
Trying \_SB.PCI0.P0P2.DGPU._OFF: failed
Trying \_SB.PCI0.P0P4.DGPU.DOFF: failed
Trying \_SB.PCI0.IXVE.IGPU.DGOF: failed
Trying \_SB.PCI0.RP00.VGA._PS3: failed
Trying \_SB.PCI0.RP00.VGA.P3MO: failed
Trying \_SB.PCI0.GFX0.DSM._T_0: failed
Trying \_SB.PCI0.LPC.EC.PUBS._OFF: failed
Trying \_SB.PCI0.P0P2.NVID._OFF: failed
Trying \_SB.PCI0.P0P2.VGA.PX02: failed
Trying \_SB_.PCI0.PEGP.DGFX._OFF: failed
Trying \_SB_.PCI0.VGA.PX02: failed

See the "works"? This means the script found a bus which your GPU sits on and it has now turned off the chip. To confirm this, your battery time remaining should have increased.

Tip: If you are experiencing trouble hibernating or suspending the system after disabling the GPU, try to enable it again by sending the corresponding acpi_call. See also Power management/Suspend and hibernate#Custom systemd units.
Turning off the GPU automatically

Currently, the chip will turn back on with the next reboot. To get around this, load the module at boot:

/etc/modules-load.d/acpi_call.conf
#Load 'acpi_call.ko' at boot.
acpi_call
At boot

To turn off the GPU at boot it is possible to use systemd-tmpfiles.

/etc/tmpfiles.d/acpi_call.conf

w /proc/acpi/call - - - - \\_SB.PCI0.PEG0.PEGP._OFF

The configuration above will be loaded at boot by systemd. What it does is write the specific OFF signal to the /proc/acpi/call file. Obviously, replace the \_SB.PCI0.PEG0.PEGP._OFF with the one which works on your system (please note that you need to escape the backslash).

After X server initialization

On some systems, turning off the discrete GPU before the X server is initialized may hang the system. In such cases, it may be better to disable the GPU after X server initialization, which is possible with some display managers. In LightDM, for instance, the display-setup-script seat configuration parameter could be used to execute a script as root that disables the GPU.

System76

Some System76 laptops (like the Oryx Pro) have their own unique hybrid graphics option. To make use of it, install system76-powerAUR, enable system76-power.service, and run system76-power graphics hybrid.

Fully power down discrete GPU

First ensure you are using integrated graphics mode by running system76-power graphics integrated and rebooting. Once in integrated mode, to power down the discrete graphics card run system76-power graphics power off. This command is not persistent and will need to be run after each boot.

Troubleshooting

The startup time for certain applications is delayed by 30 seconds

This article or section is a candidate for merging with Vulkan.

Notes: This seems very similar to Vulkan#AMDGPU - Vulkan applications launch slowly, except it completely unsets the variable instead of passing it the proper value depending on the iGPU used. (Discuss in Talk:Hybrid graphics)

When invoked, Vulkan attempts to initialize the Installable Client Driver (ICD) specified in /usr/share/vulkan/icd.d/nvidia_icd.json. The package nvidia-utils configures this file to reference the libGLX_nvidia driver, providing Vulkan with information about the GPU driver's path. However, if the GPU is disabled, initialization of this driver will fail, causing certain applications (e.g., those based on Chromium/Electron) to undergo delayed startup until a 30-second timeout is reached. To prevent Vulkan from attempting to load the driver in the first place and thus mitigate this timeout, you can override the location of the ICD JSON file using the VK_DRIVER_FILES environment variable. To unset it, use:

$ export VK_DRIVER_FILES=