[Intel-gfx] [Question] More CRTCs than supported displays; questions about intel-virtual-output and VIRTUAL1

Chris Wilson chris at chris-wilson.co.uk
Fri Jul 24 09:58:27 UTC 2020


Quoting Andrew Parsons (2020-07-24 02:55:04)
> Hello all,
> 
> TL;DR: my questions concern the following two topics:
> - CRTCs and Intel integrated GPUs
> - intel-virtual-output utility
> 
> I have a laptop with both an Intel integrated GPU and an AMD discrete GPU.
> 
> ```
> ➜  ~ xrandr --listproviders
> Providers: number : 2
> Provider 0: id: 0x70 cap: 0x9, Source Output, Sink Offload crtcs: 4 outputs: 8
> associated providers: 1 name:Intel
> Provider 1: id: 0x44 cap: 0x6, Sink Output, Source Offload crtcs: 5 outputs: 0
> associated providers: 1 name:AMD Radeon Pro WX3100 @ pci:0000:3b:00.0
> ```
> 
> I am certain that both are configured correctly:
> 
> ```
> ➜  ~ DRI_PRIME=0 glxinfo | grep "OpenGL renderer"
> OpenGL renderer string: Mesa DRI Intel(R) UHD Graphics 620 (WHL GT2)
> ➜  ~ DRI_PRIME=1 glxinfo | grep "OpenGL renderer"
> OpenGL renderer string: AMD Radeon Pro WX3100 (POLARIS12, DRM 3.33.0,
> 5.3.0-53-generic, LLVM 9.0.1)
> ```
> 
> I had hoped to configure a four-way multihead configuration (3 monitors using
> the dGPU, and the built-in display driven by the iGPU). Alas, this seems to be
> impossible with my hardware; the AMD device lacks an output and merely serves
> as an offloading device.

It all depends on how they are physically wired up. If all the
connectors are wired to the igfx and none to the dgpu, you are limited
to using the igfx for output.

> While investigating this, I came across something I didn't quite understand.
> Officially, the Intel UHD 620 supports three displays. However, `xrandr` shows
> that there are four CTRCs available on Provider 0 (Intel).
> 
> ```
> ➜  ~ xrandr --verbose | grep CRTC                
> CRTC:       0
> CRTCs:      1 0 2
> CRTCs:      1 0 2
> CRTC:       1
> CRTCs:      1 0 2
> CRTC:       2
> CRTCs:      1 0 2
> CRTCs:      1 0 2
> CRTCs:      1 0 2
> CRTCs:      1 0 2
> CRTCs:      3
> ```
> 
> It seems that the fourth CRTC ("third" when zero-indexed) is used by VIRTUAL1
> output.
> 
> ```
> ➜  ~ xrandr --verbose | tail
> VIRTUAL1 disconnected (normal left inverted right x axis y axis)
> Identifier: 0x6f
> Timestamp:  22792
> Subpixel:   no subpixels
> Clones:    
> CRTCs:      3
> Transform:  1.000000 0.000000 0.000000
>            0.000000 1.000000 0.000000
>            0.000000 0.000000 1.000000
>           filter:
> ```
> 
> Out of curiosity, I thought to move CRTC 3 to a connected but disabled monitor
> (DP2). However, this doesn't seem to work.

Connectors are limited to which pipe can drive them (as they need the
pixel pump and encoder to convert into the appropriate signal, and not
all CRTC can be attached to all such HW).

> 
> ```
> ➜  ~ xrandr --output DP2 --crtc 3            
> xrandr: output DP2 cannot use crtc 0x67
> ```
> 
> After some Googling, I've come to believe that the VIRTUAL1 output has been
> created by the intel-virtual-output utility. To be honest, I find the man page
> for this package vague. "The tool connects local VirtualHeads to a remote
> output, allowing the primary display to extend onto the remote outputs."
> I'm admittedly (and probably quite clearly) a newbie when it comes to graphics,
> so this description tells me very little. Moreover, the help menu lists options
> for starting Bumblebee, something I believe is Nvidia-specific.  Every forum
> thread I've read mentioning this utility involves an Nvidia card.
> 
> My questions are:
> 1. Why or how can I have more CRTCs than officially supported outputs for the
> Intel UHD 620?

Because it's an [actually, more than one] abstraction layer over HW.

> 2. What does the intel-virtual-output utility do for me, a hybrid Intel/AMD
> user?

In your setup, no. It runs as a proxy between discrete X servers,
mirroring the configuration onto the virtual outputs, such that you can
construct a single screen out of multiple. Xvnc in reverse, similar to
Miracast / WiDi.

> 3. Why do I need VIRTUAL1?

If you don't need it, then you don't. It's a small allocation, but
requires an Xorg.conf to disable. The convenience factor of not having
to have an Xorg.conf to use it, outweighed the inconvenience of the
wasted allocation.

> 4. What would happen if I removed the intel-virtual-output utility?

You save 64K of disk space.
-Chris


More information about the Intel-gfx mailing list