Edit Info Other
Login

Optimus"

Differences between revisions 1 and 34 (spanning 33 versions)
Revision 1 as of 2016-10-26 09:48:14
Size: 1443
Comment:
Revision 34 as of 2019-08-20 17:41:11
Size: 5684
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
There are additional steps needed to integrate the package with optimus. ## page was renamed from Howto/NVIDIA_Optimus
## page was renamed from Howto/nVidia_Optimus
== Introduction ==
With Fedora 25 and later, NVIDIA Optimus devices are automatically detected with GDM/Gnome.
They will run with output source and not with offload sync by default.
Line 3: Line 7:
With NVIDIA driver 435.17 and xorg-x11-server 1.20 (add additional patches), it's now possible to have full Optimus support (with offload sync) on Fedora 29 and later.


This Howto is a subset of the main documentation, please read the [[Howto/NVIDIA|NVIDIA]] Howto first.


== Known limitation ==
Full Optimus Support can be achieved with xorg-x11-server 1.20.5 with patches as provided in a COPR repository.
For information, the support as landed officially in Xorg server 1.21 that might be provided by default for Fedora 32.
I Highly recommends Optimus users to enable this COPR repository to benefit from Full Optimus Support ahead of Xorg 1.21.


== NVIDIA PRIME Support ==
Line 4: Line 21:
dnf copr enable kwizart/glvnd
dnf update
grubby --update-kernel=$(uname -r) --args="nvidia-drm.modeset=1" --remove-args="video=vesa:off"

 [ -f /boot/grub2/grub.cfg ] && grub2-mkconfig -o /boot/grub2/grub.cfg

 [ -f /boot/efi/EFI/fedora/grub.cfg ] && grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg
sudo -s
dnf copr enable kwizart/xorg-x11-server_nvidia
dnf update xorg-x11-server\*
dnf update --enablerepo=rpmfusion-nonfree-rawhide xorg-x11-drv-nvidia\*
cat > /etc/modprobe.d/nvidia.conf <<EOF
# Enable DynamicPwerManagement
# http://download.nvidia.com/XFree86/Linux-x86_64/435.17/README/dynamicpowermanagement.html
options nvidia NVreg_DynamicPowerManagement=0x02
EOF
Line 13: Line 32:
For Fedora 24, you still need a (complicated) xorg.conf: == PRIME Render Offload ==
As documented at http://download.nvidia.com/XFree86/Linux-x86_64/435.17/README/primerenderoffload.html

=== Configure Graphics Applications to Render Using the GPU Screen ===

To configure a graphics application to be offloaded to the NVIDIA GPU screen, set the environment variable __NV_PRIME_RENDER_OFFLOAD to 1. If the graphics application uses Vulkan, that should be all that is needed. If the graphics application uses GLX, then also set the environment variable __GLX_VENDOR_LIBRARY_NAME to nvidia, so that GLVND loads the NVIDIA GLX driver. NVIDIA's EGL implementation does not yet support PRIME render offload.

Examples:
Line 15: Line 41:
cat>/etc/X11/xorg.conf<<EOF
# RPM Fusion - nvidia-xorg.conf
#
__NV_PRIME_RENDER_OFFLOAD=1 vkcube
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxinfo | grep vendor
}}}
Line 19: Line 45:
Section "ServerLayout"
    Identifier "layout"
    Screen 0 "nvidia"
    Inactive "intel"
EndSection
=== Finer-Grained Control of Vulkan ===
Line 25: Line 47:
Section "Device"
    Identifier "intel"
    Driver "modesetting"
    # Change BusID if necessary. Tips: (lspci | grep VGA) (Change 00:02.0 to 0:2:0)
    BusID "PCI:0:2:0"
    Option "AccelMethod" "none"
EndSection
The __NV_PRIME_RENDER_OFFLOAD environment variable causes the special Vulkan layer VK_LAYER_NV_optimus to be loaded. Vulkan applications use the Vulkan API to enumerate the GPUs in the system and select which GPU to use; most Vulkan applications will use the first GPU reported by Vulkan. The VK_LAYER_NV_optimus layer causes the GPUs to be sorted such that the NVIDIA GPUs are enumerated first. For finer-grained control, the VK_LAYER_NV_optimus layer looks at the __VK_LAYER_NV_optimus environment variable. The value NVIDIA_only causes VK_LAYER_NV_optimus to only report NVIDIA GPUs to the Vulkan application. The value non_NVIDIA_only causes VK_LAYER_NV_optimus to only report non-NVIDIA GPUs to the Vulkan application.
Line 33: Line 49:
Section "Screen"
    Identifier "intel"
    Device "intel"
EndSection
Examples:
{{{
__NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only vkcube
__NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=non_NVIDIA_only vkcube
}}}
Line 38: Line 55:
Section "Device"
    Identifier "nvidia"
    Driver "nvidia"
    # Change BusID if necessary. Tips: (lspci | grep 3D) (Change 01:00.0 to 1:0:0)
    BusID "PCI:1:0:0"
    Option "AllowEmptyInitialConfiguration"
EndSection
=== Finer-Grained Control of GLX + OpenGL ===
Line 46: Line 57:
Section "Screen"
    Identifier "nvidia"
    Device "nvidia"
EndSection
EOF
For GLX + OpenGL, the environment variable __NV_PRIME_RENDER_OFFLOAD_PROVIDER provides finer-grained control. While __NV_PRIME_RENDER_OFFLOAD=1 tells GLX to use the first NVIDIA GPU screen, __NV_PRIME_RENDER_OFFLOAD_PROVIDER can use an RandR provider name to pick a specific NVIDIA GPU screen, using the NVIDIA GPU screen names reported by `xrandr --listproviders`.

Examples:
{{{
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxgears
__NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0 __GLX_VENDOR_LIBRARY_NAME=nvidia glxgears
}}}

== NVIDIA PrimaryGPU Support ==
Before the Full optimus support, the only way to enable the NVIDIA driver was to set the NVIDIA GPU to be used by default.
To recover this previous behaviour, you can use:
{{{
cp -p /usr/share/X11/xorg.conf.d/nvidia.conf /etc/X11/xorg.conf.d/nvidia.conf
}}}

And edit the file to use: Option "PrimaryGPU" "yes"
Line 53: Line 75:
cat>/etc/X11/xinit/xinitrc.d/05-nvidia.sh<<EOF
#!/bin/bash
== PRIME Synchronization ==
With Xorg server 1.19 (Fedora 25 and later), this feature allows buffer sharing between the Intel and the NVIDIA card when using Xorg (not relevant for Wayland).
It should be enabled bytThen you can enable Prime Synchronisation for your session:
{{{
xrandr --output <output> --set "PRIME Synchronization" 1
}}}
Line 56: Line 82:
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --auto
Line 59: Line 83:
EOF
chmod +x /etc/X11/xinit/xinitrc.d/05-nvidia.sh
== Proprietary/FLOSS switch ==
At this time, this can be done by manually editing "rd.driver.blacklist=nouveau modprobe.blacklist=nouveau nvidia-drm.modeset=1" from the grub2 cmdline. And replace by "rd.driver.blacklist=nvidia,nvidia_drm,nvidia_modeset modprobe.blacklist=nvidia,nvidia_drm,nvidia_modeset"
The plan is to have a grub2 menu to have the choice. Please see [[https://bugzilla.rpmfusion.org/show_bug.cgi?id=4315|Bugzilla [RFE] Switcher for Xorg nvidia/FOSS config]]
Line 62: Line 87:
}}}
== FAQ ==
 *Q: Why there is no nvidia-prime package ?
 *A: nvidia-prime is not something from NVIDIA despite the name. It's a collection of integration scripts made by canonical for Ubuntu. Better to avoid using custom scripts and to have the driver to setup appropriately if on Optimus hardware or single GPU setup. With Fedora 25 and later, everything is automatically setup.

== References ==
 * http://download.nvidia.com/XFree86/Linux-x86_64/435.17/README/primerenderoffload.html
 * http://download.nvidia.com/XFree86/Linux-x86_64/435.17/README/dynamicpowermanagement.html
 * https://devtalk.nvidia.com/default/topic/957814/linux/prime-and-prime-synchronization/
 * https://devtalk.nvidia.com/default/topic/925605/linux/nvidia-364-12-release-vulkan-glvnd-drm-kms-and-eglstreams/

Introduction

With Fedora 25 and later, NVIDIA Optimus devices are automatically detected with GDM/Gnome. They will run with output source and not with offload sync by default.

With NVIDIA driver 435.17 and xorg-x11-server 1.20 (add additional patches), it's now possible to have full Optimus support (with offload sync) on Fedora 29 and later.

This Howto is a subset of the main documentation, please read the NVIDIA Howto first.

Known limitation

Full Optimus Support can be achieved with xorg-x11-server 1.20.5 with patches as provided in a COPR repository. For information, the support as landed officially in Xorg server 1.21 that might be provided by default for Fedora 32. I Highly recommends Optimus users to enable this COPR repository to benefit from Full Optimus Support ahead of Xorg 1.21.

NVIDIA PRIME Support

sudo -s
dnf copr enable kwizart/xorg-x11-server_nvidia
dnf update xorg-x11-server\*
dnf update --enablerepo=rpmfusion-nonfree-rawhide xorg-x11-drv-nvidia\*
cat > /etc/modprobe.d/nvidia.conf <<EOF
# Enable DynamicPwerManagement
# http://download.nvidia.com/XFree86/Linux-x86_64/435.17/README/dynamicpowermanagement.html
options nvidia NVreg_DynamicPowerManagement=0x02
EOF

PRIME Render Offload

As documented at http://download.nvidia.com/XFree86/Linux-x86_64/435.17/README/primerenderoffload.html

Configure Graphics Applications to Render Using the GPU Screen

To configure a graphics application to be offloaded to the NVIDIA GPU screen, set the environment variable NV_PRIME_RENDER_OFFLOAD to 1. If the graphics application uses Vulkan, that should be all that is needed. If the graphics application uses GLX, then also set the environment variable GLX_VENDOR_LIBRARY_NAME to nvidia, so that GLVND loads the NVIDIA GLX driver. NVIDIA's EGL implementation does not yet support PRIME render offload.

Examples:

__NV_PRIME_RENDER_OFFLOAD=1 vkcube
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxinfo | grep vendor

Finer-Grained Control of Vulkan

The NV_PRIME_RENDER_OFFLOAD environment variable causes the special Vulkan layer VK_LAYER_NV_optimus to be loaded. Vulkan applications use the Vulkan API to enumerate the GPUs in the system and select which GPU to use; most Vulkan applications will use the first GPU reported by Vulkan. The VK_LAYER_NV_optimus layer causes the GPUs to be sorted such that the NVIDIA GPUs are enumerated first. For finer-grained control, the VK_LAYER_NV_optimus layer looks at the VK_LAYER_NV_optimus environment variable. The value NVIDIA_only causes VK_LAYER_NV_optimus to only report NVIDIA GPUs to the Vulkan application. The value non_NVIDIA_only causes VK_LAYER_NV_optimus to only report non-NVIDIA GPUs to the Vulkan application.

Examples:

__NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only vkcube
__NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=non_NVIDIA_only vkcube

Finer-Grained Control of GLX + OpenGL

For GLX + OpenGL, the environment variable NV_PRIME_RENDER_OFFLOAD_PROVIDER provides finer-grained control. While NV_PRIME_RENDER_OFFLOAD=1 tells GLX to use the first NVIDIA GPU screen, NV_PRIME_RENDER_OFFLOAD_PROVIDER can use an RandR provider name to pick a specific NVIDIA GPU screen, using the NVIDIA GPU screen names reported by xrandr --listproviders.

Examples:

__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxgears
__NV_PRIME_RENDER_OFFLOAD_PROVIDER=NVIDIA-G0 __GLX_VENDOR_LIBRARY_NAME=nvidia glxgears

NVIDIA PrimaryGPU Support

Before the Full optimus support, the only way to enable the NVIDIA driver was to set the NVIDIA GPU to be used by default. To recover this previous behaviour, you can use:

cp -p /usr/share/X11/xorg.conf.d/nvidia.conf /etc/X11/xorg.conf.d/nvidia.conf

And edit the file to use: Option "PrimaryGPU" "yes"

PRIME Synchronization

With Xorg server 1.19 (Fedora 25 and later), this feature allows buffer sharing between the Intel and the NVIDIA card when using Xorg (not relevant for Wayland). It should be enabled bytThen you can enable Prime Synchronisation for your session:

xrandr --output <output> --set "PRIME Synchronization" 1

Proprietary/FLOSS switch

At this time, this can be done by manually editing "rd.driver.blacklist=nouveau modprobe.blacklist=nouveau nvidia-drm.modeset=1" from the grub2 cmdline. And replace by "rd.driver.blacklist=nvidia,nvidia_drm,nvidia_modeset modprobe.blacklist=nvidia,nvidia_drm,nvidia_modeset" The plan is to have a grub2 menu to have the choice. Please see Bugzilla [RFE] Switcher for Xorg nvidia/FOSS config

FAQ

  • Q: Why there is no nvidia-prime package ?
  • A: nvidia-prime is not something from NVIDIA despite the name. It's a collection of integration scripts made by canonical for Ubuntu. Better to avoid using custom scripts and to have the driver to setup appropriately if on Optimus hardware or single GPU setup. With Fedora 25 and later, everything is automatically setup.

References

Howto/Optimus (last edited 2023-11-14 09:37:58 by anonymous)