There is a number of systems out there equipped with multiple GPUs which work cooperatively. The technology itself started from Integrated graphics processing units which brought a “free” GPU into system. Such system equipped with an additional discrete card obtained two GPUs at a time and from certain point it was a challenge to not just choose between the two but also run the two concurrently and utilize the capacity of both.
These GPUs are typically quite different, and there is a rational reason to prefer one to another in certain scenarios. Integrated graphics (iGPU) is typically slower and power consumption efficient, and discrete graphics (dGPU) is a powerful fully featured unit offering “performance over power saving” capabilities.
At certain point of development the seamless operation of two GPUs received a name of hybrid graphics.
By the original definition, “The discrete GPU is a render-only device, and no display outputs are connected to it.” and so if was the case for quite some time when systems like laptops were given two GPUs with an option to choose the GPU for an application to run on. The cooperative operation of the GPUs was as this: “when the discrete GPU is handling all the rendering duties, the final image output to the display is still handled by the Intel integrated graphics processor (IGP). In effect, the IGP is only being used as a simple display controller, resulting in a seamless, flicker-free experience with no need to reboot.“
That is, the principal feature of hybrid graphics technology is to be able to transfer data between GPUs in efficient way so that computationally intensive rendering could happen on performance GPU with the results transferred to the other GPU which has physical wiring to a monitor.
We leverage this hardware capability in Rainway game streaming to offer seamless experience of low latency game streaming using any hardware encoder present in the system, not necessarily belonging to the piece of hardware whether video originates at.
Microsoft Windows operating system and its DirectX Graphics Infrastructure (DXGI) in particular stepped in to hide the details of switchable graphics from applications. Depending on settings, which can be defined per application, an application would see different enumeration order of adapters and operating system would either indicate a “true” adapter as a host of connected monitor, or it would otherwise indicate a different GPU transferring the rendering results between the GPUs behind the scene, such as during desktop composition process.
Side effects of seamless operation of GPUs and misreporting of GPU having monitor connection is that Desktop Duplication API cannot work with undescriptive error codes in certain cases (Error generated when Desktop Duplication API-capable application is run against discrete GPU) or Output Protection Manager API communication reports wrong security certificates.
Recent updates of Windows introduced GPU preference right in the OS settings:
Starting with Windows 10 build 17093, Microsoft is introducing a new Graphics settings page for Multi-GPU systems that allows you to manage the graphics performance preference of your apps. You may be familiar with similar graphics control panels from AMD and Nvidia, and you can continue to use those control panels. When you set an application preference in the Windows Graphics settings, that will take precedence over the other control panel settings.
However these ongoing updates actually extended the boundaries of hybrid system itself. If original hybrid system was defined as a system with primary iGPU with a monitor connected, and additional render-only secondary powerful dGPU, the recent version of Microsoft Windows can run multiple GPU systems with full featured discrete graphics adapter with monitor connected to it, and secondary iGPU being still a part of heterogeneous setup. In certain sense this update invalidated previous technical information and definitions that assumed that it is iGPU which as physical wiring to monitor in hybrid systems.
Even though there is a seemingly seamless operation of multiple GPUs, the GPUs still remain in master/slave relation: the operating system is responsible for composition of final image on the GPU with monitor (DXGI output) connection.
I developed a simple application (see download link at the bottom of the post) that discovers properties of hybrid systems and identifies the “main” GPU with output connection. The application is displaying the details on whether operating system can trick applications and report another GPU following GPU preference settings, and indicates “main” GPUs with an asterisk.
Here are some of the results:
NVIDIA Optimus laptop:
DXGI adapters: Intel(R) HD Graphics 520 (0.0x00010765) \.\DISPLAY1 [*] NVIDIA GeForce 940MX (0.0x00010A9D) Microsoft Basic Render Driver (0.0x00010A66) Minimum power: Intel(R) HD Graphics 520 (0.0x00010765) High performance: NVIDIA GeForce 940MX (0.0x00010A9D) Hybrid: Output \.\DISPLAY1 is shared by DXGI adapters: - Minimal power adapter: Intel(R) HD Graphics 520 (0.0x00010765) [*] - High performance adapter: NVIDIA GeForce 940MX (0.0x00010A9D)
AMD PowerXpress laptop:
DXGI adapters: Intel(R) HD Graphics Family (0.0x00009121) \.\DISPLAY1 [*] AMD Radeon HD 8850M (0.0x0000A57A) Microsoft Basic Render Driver (0.0x0000A4E6) Minimum power: Intel(R) HD Graphics Family (0.0x00009121) High performance: AMD Radeon HD 8850M (0.0x0000A57A) Hybrid: Output \.\DISPLAY1 is shared by DXGI adapters: - Minimal power adapter: Intel(R) HD Graphics Family (0.0x00009121) [*] - High performance adapter: AMD Radeon HD 8850M (0.0x0000A57A)
The two above are hybrid systems in their original definition.
Desktop system with discrete video adapter and two connected monitors, with Intel CPU and a “free” additional headless GPU. This acts similarly to traditional hybrid systems with the exception that GPUs changed their roles:
DXGI adapters: Radeon RX 570 Series (0.0x0000D18A) \.\DISPLAY4 [*] \.\DISPLAY5 [*] Intel(R) UHD Graphics 630 (0.0x8E94827B) Microsoft Basic Render Driver (0.0x0000D163) Minimum power: Intel(R) UHD Graphics 630 (0.0x8E94827B) High performance: Radeon RX 570 Series (0.0x0000D18A) Hybrid: Output \.\DISPLAY4 is shared by DXGI adapters: - Minimal power adapter: Intel(R) UHD Graphics 630 (0.0x8E94827B) - High performance adapter: Radeon RX 570 Series (0.0x0000D18A) [*] Hybrid: Output \.\DISPLAY5 is shared by DXGI adapters: - Minimal power adapter: Intel(R) UHD Graphics 630 (0.0x8E94827B) - High performance adapter: Radeon RX 570 Series (0.0x0000D18A) [*]
Intel Hades Canyon NUC with Radeon Vega graphics is closer to desktop setup above than to hybrid mobile configurations:
DXGI adapters: Radeon RX Vega M GH Graphics (0.0x0000D41B) \.\DISPLAY1 [*] Intel(R) HD Graphics 630 (0.0x0000E000) Microsoft Basic Render Driver (0.0x0000DFDB) Minimum power: Intel(R) HD Graphics 630 (0.0x0000E000) High performance: Radeon RX Vega M GH Graphics (0.0x0000D41B) Hybrid: Output \.\DISPLAY1 is shareable by DXGI adapters: - Minimal power adapter: Intel(R) HD Graphics 630 (0.0x0000E000) - High performance adapter: Radeon RX Vega M GH Graphics (0.0x0000D41B) [*]
Download links
Binaries:
- 64-bit: DxgiHybrid.exe (in .7z archive)
- License: This software is free to use