Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!

Bug 716918

Summary: x11-misc/bumblebee depends on libglvnd use flags
Product: Gentoo Linux Reporter: Kete Tefid <ketetefid>
Component: Current packagesAssignee: Pacho Ramos <pacho>
Status: UNCONFIRMED ---    
Severity: normal CC: hhfeuer, jstein, ketetefid, main.haarp, mihais23, pacho, proxy-maint, rei4dan, remy, Xeha
Priority: Normal    
Version: unspecified   
Hardware: All   
OS: Linux   
Whiteboard:
Package list:
Runtime testing required: ---

Description Kete Tefid 2020-04-10 10:43:27 UTC
On systems with hybrid graphics, after the current update which has libglvnd use flag enabled, neither optirun nor primusrun can successfully work, as they fail with the following error:

primus: fatal: failed to load any of the libraries: /usr/lib64/opengl/nvidia/lib/libGL.so.1:/usr/lib32/opengl/nvidia/lib/libGL.so.1:/usr/lib/opengl/nvidia/lib/libGL.so.1

emerge --info:

Portage 2.3.89 (python 3.6.10-final-0, default/linux/amd64/17.1/desktop, gcc-9.3.0, glibc-2.29-r7, 5.2.20-gentoo x86_64)
=================================================================
System uname: Linux-5.2.20-gentoo-x86_64-Intel-R-_Core-TM-_i7-8750H_CPU_@_2.20GHz-with-gentoo-2.6
KiB Mem:    32629104 total,    641268 free
KiB Swap:   33554428 total,  33554428 free
Timestamp of repository gentoo: Thu, 09 Apr 2020 21:45:01 +0000
Head commit of repository gentoo: ccd6fa117173bc4fb0ba74519d1c4a99a2ec996f
sh bash 4.4_p23-r1
ld GNU ld (Gentoo 2.33.1 p2) 2.33.1
distcc[8603] (dcc_trace_version) distcc 3.3.3 x86_64-pc-linux-gnu; built Mar 24 2020 21:31:00 [disabled]
app-shells/bash:          4.4_p23-r1::gentoo
dev-java/java-config:     2.2.0-r4::gentoo
dev-lang/perl:            5.30.1::gentoo
dev-lang/python:          2.7.17-r2::gentoo, 3.6.10-r1::gentoo, 3.7.7-r1::gentoo
dev-util/cmake:           3.16.5::gentoo
dev-util/pkgconfig:       0.29.2::gentoo
sys-apps/baselayout:      2.6-r1::gentoo
sys-apps/openrc:          0.42.1::gentoo
sys-apps/sandbox:         2.13::gentoo
sys-devel/autoconf:       2.13-r1::gentoo, 2.69-r4::gentoo
sys-devel/automake:       1.15.1-r2::gentoo, 1.16.1-r1::gentoo
sys-devel/binutils:       2.33.1-r1::gentoo
sys-devel/gcc:            8.3.0-r1::gentoo, 9.3.0::gentoo
sys-devel/gcc-config:     2.2.1::gentoo
sys-devel/libtool:        2.4.6-r6::gentoo
sys-devel/make:           4.2.1-r4::gentoo
sys-kernel/linux-headers: 5.4::gentoo (virtual/os-headers)
sys-libs/glibc:           2.29-r7::gentoo
Repositories:

gentoo
    location: /usr/portage
    sync-type: rsync
    sync-uri: rsync://rsync.de.gentoo.org/gentoo-portage
    priority: -1000
    sync-rsync-verify-metamanifest: yes
    sync-rsync-extra-opts: 
    sync-rsync-verify-max-age: 24
    sync-rsync-verify-jobs: 1

crossdev
    location: /usr/local/portage-crossdev
    masters: gentoo
    priority: 10

localportage
    location: /usr/local/portage/localportage
    masters: gentoo
    priority: 10

4nykey
    location: /var/lib/layman/4nykey
    masters: gentoo
    priority: 50

steam-overlay
    location: /var/lib/layman/steam-overlay
    masters: gentoo
    priority: 50

tlp
    location: /var/lib/layman/tlp
    masters: gentoo
    priority: 50

Installed sets: @steam, @xfce
ACCEPT_KEYWORDS="amd64"
ACCEPT_LICENSE="* Google-TOS RAR TeamViewer Intel-SDP PUEL sun-bcla-java-vm skype-eula dlj-1.1 RTCW-ETEULA AdobeFlash-10.3 AdobeFlash-10 Nero-EULA-US skype-4.0.0.7-copyright Oracle-BCLA-JavaSE google-chrome AdobeFlash-11.x FraunhoferFDK"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-O2 -march=skylake -mtune=skylake -pipe"
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/boot /etc /etc/stunnel/stunnel.conf /usr/share/gnupg/qualified.txt /usr/share/themes/oxygen-gtk/gtk-2.0"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/dconf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/php/apache2-php7.4/ext-active/ /etc/php/cgi-php7.4/ext-active/ /etc/php/cli-php7.4/ext-active/ /etc/revdep-rebuild /etc/sandbox.d /etc/splash /etc/terminfo /etc/texmf/language.dat.d /etc/texmf/language.def.d /etc/texmf/updmap.d /etc/texmf/web2c"
CXXFLAGS="-O2 -march=skylake -mtune=skylake -pipe"
DISTDIR="/share/distfiles/"
EMERGE_DEFAULT_OPTS="--jobs=13 --load-average=8.0 --with-bdeps y --keep-going y"
ENV_UNSET="DBUS_SESSION_BUS_ADDRESS DISPLAY GOBIN PERL5LIB PERL5OPT PERLPREFIX PERL_CORE PERL_MB_OPT PERL_MM_OPT XAUTHORITY XDG_CACHE_HOME XDG_CONFIG_HOME XDG_DATA_HOME XDG_RUNTIME_DIR"
FCFLAGS="-O2 -pipe"
FEATURES="assume-digests binpkg-docompress binpkg-dostrip binpkg-logs buildpkg config-protect-if-modified distlocks ebuild-locks fixlafiles ipc-sandbox merge-sync multilib-strict network-sandbox news parallel-fetch pid-sandbox preserve-libs protect-owned qa-unresolved-soname-deps sandbox sfperms unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr"
FFLAGS="-O2 -pipe"
GENTOO_MIRRORS="http://distfiles.gentoo.org"
LANG="en_US.utf8"
LDFLAGS="-Wl,-O1 -Wl,--as-needed"
LINGUAS="en ar fa"
MAKEOPTS="-j13 -l8"
PKGDIR="/share/GentooPackages/"
PORTAGE_CONFIGROOT="/"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --exclude=/.git"
PORTAGE_TMPDIR="/share/prtgtmp/"
USE="3dnow 3dnowext 3gp X a52 aac aalib acl acpi aes alsa amd64 amr apache2 archive asf automount avahi avx avx2 berkdb bittorrent blas bluetooth bmp branding bzip2 cairo cdda cddb cdio cdparanoia cdr cli consolekit crypt cups dbus directfb djvu double-precision dri dts dv dvb dvd dvdnav dvdr emboss encode exif f16c faac faad fbcon fbcondecor fbsplash fdk ffmpeg firefox flac flash fma3 fortran fortran95 fuse gd gdbm gif glamor gmp gnome-keyring gpg gpm gstreamer gtk gtk3 gzip h323 iconv icu id3tag inotify ipv6 jingle jpeg jpeg2 lame lapack lcms ldap libinput libnotify libtirpc live lm_sensors lock lz4 lzma mad matroska mjpeg mms mmx mmxext mng modemmanager mozilla mp3 mp4 mpeg mtp ncurses network networkmanager nfs nls nptl nptlonly nsplugin nvidia ogg ogm openal openconnect opengl openmp opus oss p2p pam pango pclmul pcre pdf pm-utils png pnm policykit popcnt postscript ppds pulseaudio python3 qt5 quicktime rar rdesktop readline real s3tc samba sasl scanner sdl search seccomp session sftp sip slp smp socks socks5 spell spice split-usr sse sse2 sse3 sse4 sse4_1 sse4_2 sse4a ssh ssl ssse3 startup-notification stream svg symlink taglib tcpd theora thinkpad thunar tiff tk truetype type3 udev udisks unicode upower usb v4l vaapi vcd vcdx vdpau vlm vnc vorbis vpx wav wavpack webgl wifi wma wmf wxwidgets x264 x265 xattr xcb xfce xinerama xml xpm xscreensaver xv xvid yahoo youtube zeroconf zlib" ABI_X86="64" ADA_TARGET="gnat_2018" ALSA_CARDS="ali5451 als4000 atiixp atiixp-modem bt87x ca0106 cmipci emu10k1x ens1370 ens1371 es1938 es1968 fm801 hda-intel intel8x0 intel8x0m maestro3 trident usb-audio via82xx via82xx-modem ymfpci" APACHE2_MODULES="auth_form session request proxy xml2enc proxy_ajp proxy_connect proxy_fcgi proxy_ftp proxy_html proxy_http proxy_scgi proxy_wstunnel authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="karbon sheets words" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" CPU_FLAGS_X86="aes avx avx2 f16c fma3 mmx mmxext pclmul popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock greis isync itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf skytraq superstar2 timing tsip tripmate tnt ublox ubx" GRUB_PLATFORMS="pc efi-64" INPUT_DEVICES="evdev synaptics joystick" KERNEL="linux" L10N="en ar fa" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php7-2" POSTGRES_TARGETS="postgres10 postgres11" PYTHON_SINGLE_TARGET="python3_6" PYTHON_TARGETS="python2_7 python3_6" QEMU_SOFTMMU_TARGETS="x86_64 aarch64 arm i386" QEMU_USER_TARGETS="x86_64 aarch64 arm i386" RUBY_TARGETS="ruby25" SANE_BACKENDS="gt68xx" USERLAND="GNU" VIDEO_CARDS="intel nvidia i965" XFCE_PLUGINS="brightness clock trash battery multiload-nandhp power" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq steal rawnat logmark ipmark dhcpmac delude chaos account"
Unset:  CC, CPPFLAGS, CTARGET, CXX, INSTALL_MASK, LC_ALL, PORTAGE_BINHOST, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS



Reproducible: Always
Comment 1 Jonas Stein gentoo-dev 2020-04-11 16:16:09 UTC
Thank you for the report.
Please explain what you found out regarding the use flags.
We need to have all information at hand before ticket assignment. That is why I ask you to 
* attach the logs and 
* paste the emerge info 
as described on 
https://wiki.gentoo.org/wiki/Attach_the_logs_to_the_bug_ticket
Please reopen this ticket (Status:UNCONFIRMED) afterwards.
Comment 2 Kete Tefid 2020-04-11 16:30:19 UTC
This bug is not about a failed emerge, it is about how an enabled use flag, i.e. libglvnd breaks optirun/primusrun that are installed by x11-misc/bumblebee and x11-misc/primus.

The mentioned packages compile just fine. It is the libglvnd flag that breaks the functionality of primusrun and optirun. As I already mentioned, this means whenever one wants to offload the task to the discrete GPU by using optirun or primusrun, the following error occurs:

primus: fatal: failed to load any of the libraries: /usr/lib64/opengl/nvidia/lib/libGL.so.1:/usr/lib32/opengl/nvidia/lib/libGL.so.1:/usr/lib/opengl/nvidia/lib/libGL.so.1

When the system is built without libglvnd, primusrun and optirun work as intended. In fact, if we want to enable libglvnd flag, we need to take care of x11-misc/bumblebee and x11-misc/primus so that they will work while media-libs/libglvnd is present.

Please let me know if you need more information.
Comment 3 Maik 2020-04-11 17:01:54 UTC
(In reply to Kete Tefid from comment #2)
Maybe som info to shed some light on this:
The move to libglvnd was taken (among other things) to enable proper render offload using the nvidia drivers to get rid of bumblebee.
Regarding bumblebee, the primus-bridge is defunct anyway for nvidia drivers >418 due to removal of the non-glvnd compat libs. So for current nvidia-drivers, you'll have to switch to the virtual-gl bridge.
Bumblebee is only still relevant for nvidia legacy users (driver 390).
I actually don't know if the 390 drivers still use -libglvnd. Maybe this could be some kind of legacy support since 390 users don't have that much advantage from using libglvnd.

Which nvidia-drivers version are you using?

Glancing at the ebuilds, it looks like the primus/bumblebee ebuilds are setting paths, so need to be remerged after switching to libglvnd.
Comment 4 haarp 2020-04-11 17:07:04 UTC
(In reply to Maik from comment #3)
> The move to libglvnd was taken (among other things) to enable proper render
> offload using the nvidia drivers to get rid of bumblebee.

You can't get rid of Bumblebee yet, because the use case of external displays hooked up on the Nvidia (as is common among laptops from Lenovo and others) is not covered by libglvnd. The Nvidia driver does not support reverse Prime. There's the option of doing this using intel-virtual-output and Bumblebee tho.
Comment 5 Maik 2020-04-11 17:18:30 UTC
Doesn't change the fact that the primus-bridge is dead anyway with current drivers, the rest of bumblebee still works.
Not talking about the state of xf86-video-intel.

So, again, which driver version are you using, maybe there could be some solution found so all users of hybrid graphics are happy with?
Comment 6 Kete Tefid 2020-04-11 17:32:20 UTC
(In reply to Maik from comment #3)
> (In reply to Kete Tefid from comment #2)
> Maybe som info to shed some light on this:
> The move to libglvnd was taken (among other things) to enable proper render
> offload using the nvidia drivers to get rid of bumblebee.
> Regarding bumblebee, the primus-bridge is defunct anyway for nvidia drivers
> >418 due to removal of the non-glvnd compat libs. So for current
> nvidia-drivers, you'll have to switch to the virtual-gl bridge.

Thanks for the info. It seems that still the primus backend works as I have it setup with the latest nvidia-drivers without libglvnd (see the end of comment), I might be wrong though.

> Bumblebee is only still relevant for nvidia legacy users (driver 390).
> I actually don't know if the 390 drivers still use -libglvnd. Maybe this
> could be some kind of legacy support since 390 users don't have that much
> advantage from using libglvnd.
> 
> Which nvidia-drivers version are you using?

I am using the latest stable one currently 440.64
> 
> Glancing at the ebuilds, it looks like the primus/bumblebee ebuilds are
> setting paths, so need to be remerged after switching to libglvnd.

I have done this to no avail.

(In reply to haarp from comment #4)
> (In reply to Maik from comment #3)
> > The move to libglvnd was taken (among other things) to enable proper render
> > offload using the nvidia drivers to get rid of bumblebee.
> 
> You can't get rid of Bumblebee yet, because the use case of external
> displays hooked up on the Nvidia (as is common among laptops from Lenovo and
> others) is not covered by libglvnd. The Nvidia driver does not support
> reverse Prime. There's the option of doing this using intel-virtual-output
> and Bumblebee tho.
You are exactly right as I have to rely on it on my Thinkpad P52.

(In reply to Maik from comment #5)
> Doesn't change the fact that the primus-bridge is dead anyway with current
> drivers, the rest of bumblebee still works.
> Not talking about the state of xf86-video-intel.
> 
> So, again, which driver version are you using, maybe there could be some
> solution found so all users of hybrid graphics are happy with?
If it is dead, what solution should we take as an acceptable way instead of relying on primusrun or optirun to offload to the GPU? (so that if this libglvnd thing is the trend, we can adapt to it)

emerge -pv nvidia-drivers mesa xorg-server

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild   R    ] media-libs/mesa-19.3.5::gentoo  USE="X classic dri3 egl gallium gbm gles2 llvm vaapi vdpau -d3d9 -debug -gles1 -libglvnd -lm-sensors -opencl -osmesa -pax_kernel (-selinux) -test -unwind -valgrind -vulkan -vulkan-overlay -wayland -xa -xvmc" ABI_X86="32 (64) (-x32)" VIDEO_CARDS="i965 intel (-freedreno) -i915 -iris (-lima) -nouveau (-panfrost) -r100 -r200 -r300 -r600 -radeon -radeonsi (-vc4) -virgl (-vivante) -vmware" 0 KiB
[ebuild   R    ] x11-base/xorg-server-1.20.7:0/1.20.7::gentoo  USE="ipv6 suid udev xorg -debug -dmx -doc -elogind -kdrive -libglvnd -libressl -minimal (-selinux) -static-libs -systemd -unwind -wayland -xcsecurity -xephyr -xnest -xvfb" 0 KiB
[ebuild   R    ] x11-drivers/nvidia-drivers-440.64:0/440::gentoo  USE="X acpi compat driver gtk3 kms multilib static-libs tools uvm -libglvnd -wayland" ABI_X86="32 (64) (-x32)" 0 KiB
Comment 7 Kete Tefid 2020-04-11 17:35:40 UTC
The relevant info from /etc/bumblebee/bumblebee.conf

[optirun]
# Acceleration/ rendering bridge, possible values are auto, virtualgl and                                                                                                                     
# primus.                                                                                                                                                                                     
Bridge=primus
# The method used for VirtualGL to transport frames between X servers.                                                                                                                        
# Possible values are proxy, jpeg, rgb, xv and yuv.                                                                                                                                           
VGLTransport=proxy
# List of paths which are searched for the primus libGL.so.1 when using                                                                                                                       
# the primus bridge                                                                                                                                                                           
PrimusLibraryPath=/usr/lib/primus:/usr/lib32/primus
# Should the program run under optirun even if Bumblebee server or nvidia card                                                                                                                
# is not available?                                                                                                                                                                           
AllowFallbackToIGC=false


And the primus bridge is still working with the latest drivers.
Comment 8 haarp 2020-04-11 17:48:15 UTC
(In reply to Maik from comment #5)
> So, again, which driver version are you using, maybe there could be some
> solution found so all users of hybrid graphics are happy with?

In my case, nvidia-drivers-440.59. In any case, until Nvidia supports reverse Prime (and they've made no indication that they're planning to), there simply isn't a satisfactory solution when external monitors are involved.

On older hardware, you can run modesetting on the Intel and nouveau on the Nvidia. This works, but of course nouveau's rendering performance is abysmal.

On newer hardware, you have to run Nvidia's driver on the Nvidia. Either run X directly on the Nvidia card, and lose the ability to switch it off. Or use intel-virtual-output via Bumblebee, which is low-performance and buggy, but still the best compromise.
Comment 9 Maik 2020-04-11 18:52:40 UTC
I'm really astonished that the primus bridge still works for you without the compat libs. Let's assume it does.
the error
primus: fatal: failed to load any of the libraries: /usr/lib64/opengl/nvidia/lib/libGL.so.1:/usr/lib32/opengl/nvidia/lib/libGL.so.1:/usr/lib/opengl/nvidia/lib/libGL.so.1
obviously still uses the old eselect paths which come from the primus ebuild:
export PRIMUS_libGLa='/usr/$$LIB/opengl/nvidia/lib/libGL.so.1'
so this should be changed, can you check if the primusbridge works when you set the export to the correct path manually?
Comment 10 Maik 2020-04-11 18:56:28 UTC
As a sidenote, nvidia already said they're looking into supporting the needed PRIME output sink capability.
For some historical laughs, some time ago I came across a post from an nvidia dev from the early time of PRIME development on xork mailing list where he asked if anyone was interested in them implementing also the output sink and nobody cared to say 'yes'.
Comment 11 Adam Feldman gentoo-dev 2020-04-11 22:18:08 UTC
(In reply to Maik from comment #5)
> Doesn't change the fact that the primus-bridge is dead anyway with current
> drivers, the rest of bumblebee still works.
> Not talking about the state of xf86-video-intel.
> 
> So, again, which driver version are you using, maybe there could be some
> solution found so all users of hybrid graphics are happy with?


https://github.com/amonakov/primus/issues/206#issuecomment-529549399

Seems like it should still work, with some workarounds

Additionally, looks like we have https://github.com/felixdoerre/primus_vk in the works which we can look into.
Comment 12 Kete Tefid 2020-04-27 12:52:33 UTC
OK, I was not able to have access to a Gentoo machine with GLVND enabled, so I made a backup and continued testing on my own production laptop.

In order to make primusrun work with GLVND two changes are required. The first:

export __GLVND_DISALLOW_PATCHING=1

Another change was to make it point to the correct libraries with:

export PRIMUS_libGLa='/usr/$LIB/libGL.so.1'

I did some testing and primus seems to work fine. The first export command is not necessary for optirun (which is a part of bumblebee package) but the performance is awful relative to primus (over 2.5x increase with primus).

So with these changes, primusrun and bumblebee will continue working with GLVND. Are there other implications?

All in all, GLVND is a cool feature, however, most machines cannot rely on it as a replacement of bumblebee:

- As stated by @haarp in some machines like Lenovo Thinkpad W & P series the HDMI and display ports are hardwired to the Nvidia chip and GLVND cannot work in reverse prime.

- GLVND cannot completely turn off cards prior to Turing architecture, so those devices will see increase power consumption and worse battery life. Any card that is not Turing based will be put to the lowest state of power but not completely turned off.

At this point, I am not sure what is the exact benefit of GLVND if it only helps very new cards like Nvidia RTX ones. This is while the state of hybrid graphics is only relevant in laptops and in those machines battery runtime is important.

Sure the implementation is cool by itself, but what extra usability does it provide? It would be cool if a developer, or a person with knowledge of GLVND gives us information on this.
Comment 13 Maik 2020-04-28 12:01:48 UTC
Kete Tefid, you're confusing things which results in comparing apples to oranges.
GLVND just makes it possible that different OpenGL implementations (mesa,nvidia,...) can now reside side by side instead of having some more or less crude method (eselect opengl, LD_PRELOAD,...) to manually switch between them.
Bumblebee just starts an Xserver, it doesn't care for glvnd. In contrary, glvnd even helps for a much simpler bumblebee config since no extra library paths for client GL and GLX have to be set up. Same goes for VirtualGL.
Obviously, primus is the same, it previously needed the export for the path to the nvidia libraries. With glvnd, this is not necessary anymore.
Though I'm really anstonished that primus is actually working with glvnd enabled libs since it achieves its speed by some deep hack. Doesn't seem to be the case (anymore) so just the ebuild has to be changed.

What you're really thinking of is bumblebee/primus vs. PRIME render offload. GLVND is just a prerequisite for that.
What's the advatage of PRIME render offload over bumblebee? Simple: less overhead, maximum performance.
You're asking for faster horses, I'd rather have a car.
Comment 14 Kete Tefid 2020-04-28 13:42:17 UTC
(In reply to Maik from comment #13)
> Kete Tefid, you're confusing things which results in comparing apples to
> oranges.
> GLVND just makes it possible that different OpenGL implementations
> (mesa,nvidia,...) can now reside side by side instead of having some more or
> less crude method (eselect opengl, LD_PRELOAD,...) to manually switch
> between them.
> Bumblebee just starts an Xserver, it doesn't care for glvnd. In contrary,
> glvnd even helps for a much simpler bumblebee config since no extra library
> paths for client GL and GLX have to be set up. Same goes for VirtualGL.
> Obviously, primus is the same, it previously needed the export for the path
> to the nvidia libraries. With glvnd, this is not necessary anymore.
> Though I'm really anstonished that primus is actually working with glvnd
> enabled libs since it achieves its speed by some deep hack. Doesn't seem to
> be the case (anymore) so just the ebuild has to be changed.
> 
> What you're really thinking of is bumblebee/primus vs. PRIME render offload.
> GLVND is just a prerequisite for that.
> What's the advatage of PRIME render offload over bumblebee? Simple: less
> overhead, maximum performance.
> You're asking for faster horses, I'd rather have a car.

Thanks for the explanation. Yes, I should have chosen the wording better by comparing PRIME offloading (with the use of GLVND) vs. bumblebee+primus.

So the main advantage would be the speed increase which is very desirable, of course.

Another item that is needed by (GLVND-enabled) PRIME offloading is use of the modesetting drivers instead of xf86-video-intel. Unfortunately, while being newer, it has some bugs that need to be ironed out (like increased power consumption after wake up from suspend/hibernate). Also, it is another block for those devices where Nvidia is wired to the output ports (which needs intel driver instead of modesetting).

The lack of graphics output for some laptops and the inability of completely shutting down the discrete card will be a deal breaker for some people. However, those with newer setups will enjoy the faster implementation.
Comment 15 Kete Tefid 2020-08-21 19:39:16 UTC
Some feedback:

I finally moved to GLVND + bbswitch only. The performance on prime offloading relative to primus and bumblebee was around 20% more for some games and CUDA applications I tested (I was expecting better performance though).

Right now, I have to restart X for changing the implementation which is something I have accepted to do for the rest of life of this machine, in order to have a cleaner setup with the improved performance as the bonus.

I created a solution for myself adopted from https://github.com/openSUSE/SUSEPrime. I think it can be a fair substitute for a bumblebee setup and it would be great if Gentoo provided something like that.