On the Zephyrus G14 the gpu situation is as follows:
- HDMI port is wired to the iGPU (amd)
- USB-C Displayport is wired to the dGPU (nvidia)
Sway (wayland) now supports prime render offloading with nvidia 470 drivers however:
- Render offloading has a performance hit so not ideal for gaming
- Using the dGPU as primary doesn't work to my knowledge
- As such no usb-c -> displayport support
- So gsync isn't working yet either
- Hardware: 2021 Zephyrus G14 GA401QM
- Distribution: Archlinux
- External monitor connected via HDMI and USB-C Displayport
In order to use the nvidia as primary gpu when gaming with gsync support I want to:
- switch to tty2
- launch an xorg session utilizing the nvidia gpu as primary
- windowmanager should be something minimal (i3,openbox etc.)
- when done, logout, switch back to tty1 and turn the dGPU back off.
Running sway on tty1 using the amd iGPU, nvidia dGPU is off
asusctl graphics -m integrated
Switch to tty2, run startgamex script to:
- switch dGPU to compute mode
- launch xserver using the nvidia dGPU as primary gpu
- launch i3 with custom config (optional)
Create a new folder for our special xorg.conf
mk /etc/X11/xorg_nvidia/
Create a new xorg config file there : /etc/X11/xorg_nvidia/99-nvidia.conf
It will set the nvidia gpu as primary and the amdgpu as secondary.
Make sure to have it start with 99- so it gets loaded last.
Section "OutputClass"
Identifier "AMDgpu"
MatchDriver "amdgpu"
Driver "amdgpu"
Option "PrimaryGPU" "no"
Option "VariableRefresh" "true"
EndSection
Section "OutputClass"
Identifier "nvidia"
MatchDriver "nvidia-drm"
Driver "nvidia"
Option "AllowEmptyInitialConfiguration"
Option "PrimaryGPU" "yes"
EndSection
Create start script startgamex
and put it somewhere accessible.
Replace i3 with openbox or whatever your system and .xinitrc is equiped to handle
#!/bin/bash
asusctl graphics -m compute
startx i3 -- -config xorg_nvidia/99-nvidia.conf
Don't forget to make it executable chmod +x startgamex
If you want to use the monitor of your notebook instead or in addition to an external one, you need to run this:
xrandr --setprovideroutputsource modesetting NVIDIA-0
xrandr --output eDP-1-1 --auto
For i3 putting it at the end of your .config/i3/config
will work.
So like this:
exec xrandr --setprovideroutputsource modesetting NVIDIA-0
exec xrandr --output eDP-1-1 --auto
Run lsof /dev/nvidia0
to figure out which process is hogging it.
For instance launching firefox after the dGPU has been turned on will for some reason hog the nvidia modules.
Closing firefox, switching to integrated and then starting firefox again will be fine.
Having firefox running before the dGPU is turned off is also fine
All done. You should now be able to switch to tty2 run the stargamex script and launch an xserver with i3, using the dgpu with working gsync and no render offload overhead.