xserver/hw/xfree86/common
Dave Airlie 078277e4d9 xf86: autobind GPUs to the screen
This is a modified version of a patch we've been carry-ing in Fedora and
RHEL for years now. This patch automatically adds secondary GPUs to the
master as output sink / offload source making e.g. the use of
slave-outputs just work, with requiring the user to manually run
"xrandr --setprovideroutputsource" before he can hookup an external
monitor to his hybrid graphics laptop.

There is one problem with this patch, which is why it was not upstreamed
before. What to do when a secondary GPU gets detected really is a policy
decission (e.g. one may want to autobind PCI GPUs but not USB ones) and
as such should be under control of the Desktop Environment.

Unconditionally adding autobinding support to the xserver will result
in races between the DE dealing with the hotplug of a secondary GPU
and the server itself dealing with it.

However we've waited for years for any Desktop Environments to actually
start doing some sort of autoconfiguration of secondary GPUs and there
is still not a single DE dealing with this, so I believe that it is
time to upstream this now.

To avoid potential future problems if any DEs get support for doing
secondary GPU configuration themselves, the new autobind functionality
is made optional. Since no DEs currently support doing this themselves it
is enabled by default. When DEs grow support for doing this themselves
they can disable the servers autobinding through the servers cmdline or a
xorg.conf snippet.

Signed-off-by: Dave Airlie <airlied@gmail.com>
[hdegoede@redhat.com: Make configurable, fix with nvidia, submit upstream]
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
---
Changes in v2:
-Make the default enabled instead of installing a xorg.conf
 snippet which enables it unconditionally

Changes in v3:
-Handle GPUScreen autoconfig in randr/rrprovider.c, looking at
 rrScrPriv->provider, rather then in hw/xfree86/modes/xf86Crtc.c
 looking at xf86CrtcConfig->provider. This fixes the autoconfig not
 working with the nvidia binary driver
2019-08-07 12:26:59 +02:00
..
.gitignore .gitignore: use common defaults with custom section #24239 2009-11-11 21:40:20 -08:00
Makefile.am Promote file containing date & time build was configured to top-level 2019-05-02 15:42:58 +00:00
compiler.h compiler.h: Do not include sys/io.h on ARM with glibc 2019-07-15 18:59:59 +00:00
dgaproc.h dga: Make shutdown less magical and/or terrifying 2018-09-12 19:18:05 +00:00
extramodes xfree86: add default modes for 16:9 and 16:10 2018-01-18 14:16:35 -05:00
fourcc.h xfree86: define FOURCC_NV12 and XVIMAGE_NV12 2018-09-11 15:54:57 -04:00
meson.build Promote file containing date & time build was configured to top-level 2019-05-02 15:42:58 +00:00
modeline2c.awk Use ARRAY_SIZE all over the tree 2017-10-30 13:45:20 -04:00
vesamodes
xaarop.h xfree86: Drop some dead XAA decls from SDK headers 2012-07-25 14:03:31 -07:00
xf86.h xfree86: Remove -flippixels 2018-09-27 16:50:22 +00:00
xf86AutoConfig.c xfree86: Improved autoconfig drivers matching 2017-05-09 17:36:05 -07:00
xf86Bus.c xfree86: Remove vestigial lastScrnFlag 2018-09-12 20:47:15 +00:00
xf86Bus.h xfree86: Remove vestigial lastScrnFlag 2018-09-12 20:47:15 +00:00
xf86Config.c xf86: autobind GPUs to the screen 2019-08-07 12:26:59 +02:00
xf86Config.h loader: Turn LoaderListDirs into LoaderListDir 2017-01-25 14:22:06 -05:00
xf86Configure.c dix: Merge AbortDDX into ddxGiveUp 2018-09-28 16:25:12 -04:00
xf86Cursor.c Remove SIGIO support for input [v5] 2016-05-26 16:07:54 -07:00
xf86DGA.c dga: Make shutdown less magical and/or terrifying 2018-09-12 19:18:05 +00:00
xf86DPMS.c dix: Lift DPMS to a screen hook 2017-03-27 15:59:42 -04:00
xf86Events.c dix: Remove LegalModifier() 2018-09-28 16:25:17 -04:00
xf86Extensions.c vidmode: move to a separate library of its own 2016-02-29 16:29:01 -05:00
xf86Extensions.h xf86: Re-export extension disable flags 2012-07-16 18:24:49 -07:00
xf86Globals.c xf86: autobind GPUs to the screen 2019-08-07 12:26:59 +02:00
xf86Helper.c xfree86: Remove -flippixels 2018-09-27 16:50:22 +00:00
xf86InPriv.h xfree86/common: Warning fixes. Mostly const string handling. 2014-01-12 10:14:48 -08:00
xf86Init.c xf86: autobind GPUs to the screen 2019-08-07 12:26:59 +02:00
xf86MatchDrivers.h xfree86: Improved autoconfig drivers matching 2017-05-09 17:36:05 -07:00
xf86Mode.c glamor: Implement GetSupportedModifiers 2018-03-05 13:27:55 -05:00
xf86Module.h xfree86: bump video ABI version to 25.0 2018-10-24 15:11:54 -04:00
xf86Opt.h hw: Rename boolean config value field from bool to boolean 2019-07-22 20:28:27 -04:00
xf86Option.c hw: Rename boolean config value field from bool to boolean 2019-07-22 20:28:27 -04:00
xf86Optionstr.h hw/xfree86: Lots of constant string support 2014-01-12 10:14:48 -08:00
xf86PM.c xfree86: Remove driver entity hooks and private 2017-03-30 11:32:02 -04:00
xf86PciInfo.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
xf86Priv.h xf86: autobind GPUs to the screen 2019-08-07 12:26:59 +02:00
xf86Privstr.h xf86: autobind GPUs to the screen 2019-08-07 12:26:59 +02:00
xf86RandR.c xfree86: Remove pointless xf86RandRCreateScreenResources 2014-07-29 09:53:01 -04:00
xf86VGAarbiter.c xfree86: vgaarb: Initialize local variable rsrc_decodes 2016-08-15 12:30:39 -04:00
xf86VGAarbiter.h Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
xf86VGAarbiterPriv.h xfree86: Hold input_lock across SPRITE functions in VGA arbiter 2017-12-13 12:06:31 -05:00
xf86VidMode.c vidmode: remove redundant DIX function 2016-02-29 16:29:14 -05:00
xf86Xinput.c Fix maybe-uninitialized warning in xf86NewInputDevice() 2019-04-17 13:57:38 +01:00
xf86Xinput.h Drop valuator mask argument from GetKeyboardEvents 2015-03-13 12:31:21 +10:00
xf86cmap.c xfree86: Hook up colormaps and RandR 1.2 gamma code v6 2016-07-28 10:12:05 +09:00
xf86cmap.h Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
xf86fbBus.c xfree86: use udev to provide device enumeration for kms devices (v10) 2012-07-06 10:20:19 +01:00
xf86fbman.c Convert hw/xfree86 to new *allocarray functions 2015-04-21 16:58:08 -07:00
xf86fbman.h Replace 'pointer' type with 'void *' 2014-01-12 10:24:11 -08:00
xf86noBus.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
xf86pciBus.c xfree86: Try nouveau on NetBSD as well. 2019-01-10 21:24:49 +00:00
xf86pciBus.h xfree86: Improved autoconfig drivers matching 2017-05-09 17:36:05 -07:00
xf86platformBus.c xf86: autobind GPUs to the screen 2019-08-07 12:26:59 +02:00
xf86platformBus.h xfree86: Improved autoconfig drivers matching 2017-05-09 17:36:05 -07:00
xf86sbusBus.c Convert hw/xfree86 to new *allocarray functions 2015-04-21 16:58:08 -07:00
xf86sbusBus.h Replace 'pointer' type with 'void *' 2014-01-12 10:24:11 -08:00
xf86str.h xfree86: Remove -flippixels 2018-09-27 16:50:22 +00:00
xf86xv.c Convert hw/xfree86 to new *allocarray functions 2015-04-21 16:58:08 -07:00
xf86xv.h xfree86: Remove xv clip notify driver hook 2014-09-26 15:27:18 -04:00
xf86xvmc.c xf86XvMCScreenInit: Clear pScreenPriv->dixinfo when freeing pAdapt 2018-01-24 11:21:08 -05:00
xf86xvmc.h Drop trailing whitespaces 2014-11-12 10:25:00 +10:00
xf86xvpriv.h xfree86: Remove xv clip notify driver hook 2014-09-26 15:27:18 -04:00
xisb.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
xisb.h Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
xorgHelper.c Introduce a consistent coding style 2012-03-21 13:54:42 -07:00
xorgVersion.h Introduce a consistent coding style 2012-03-21 13:54:42 -07:00