Steam cannot use hardware video encoding
Describe the bug
A recent Quest 3 user, I was looking forward to try some games in VR, however it seems it is a hard requirement for Steam Link in VR mode to use hardware encoding, which it can't get access to.
What did you expect to happen?
Steam Link VR works / Steam and use hardware encoding (also applicable for game recording and remote play)
Output of ujust get-logs
Hardware
I have a RTX3060 GPU, which supports hardware encoding as tested with ffmpeg -hwaccel vaapi -vaapi_device /dev/dri/renderD128 ....
$ rpm-ostree status
State: idle
Deployments:
● ostree-unverified-registry:ghcr.io/ublue-os/bazzite-nvidia-open:stable
Digest: sha256:f2d0a0b443baa7d0eda2e1fcbda9ef9c591468f7db9ca128fa4bcf3f627d6e75
Version: 42.20250911 (2025-09-12T01:16:37Z)
LayeredPackages: htop tigervnc-server zsh
ostree-unverified-registry:ghcr.io/ublue-os/bazzite-nvidia-open:stable
Digest: sha256:d204697186880bbfebde83de3d2bfd92a81ad948b9606ae8a42c39e41b022d83
Version: 42.20250908 (2025-09-08T06:43:15Z)
LayeredPackages: htop tigervnc-server zsh
$ vainfo
Trying display: wayland
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib64/dri/nvidia_drv_video.so
libva info: Found init function __vaDriverInit_1_0
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.22 (libva 2.22.0)
vainfo: Driver version: VA-API NVDEC driver [direct backend]
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileH264Main : VAEntrypointVLD
VAProfileH264High : VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointVLD
VAProfileVP8Version0_3 : VAEntrypointVLD
VAProfileVP9Profile0 : VAEntrypointVLD
VAProfileAV1Profile0 : VAEntrypointVLD
VAProfileHEVCMain10 : VAEntrypointVLD
VAProfileHEVCMain12 : VAEntrypointVLD
VAProfileVP9Profile2 : VAEntrypointVLD
VAProfileHEVCMain444 : VAEntrypointVLD
VAProfileHEVCMain444_10 : VAEntrypointVLD
VAProfileHEVCMain444_12 : VAEntrypointVLD
Extra information or context
I have seen https://github.com/ublue-os/bazzite/issues/2706 which claims to have their issue resolved, however it looks like the resolution affects the MESA drivers but not NVidia.
I've found this issue after trying to use SteamVR on Bazzite with Quest3. Got an error: "Video Encoder Error (499) - Couldn't set up a video encoder".
I've tried to execute vainfo to see what I get, and...
root@bazzite:~# vainfo
Trying display: wayland
Trying display: x11
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib64/dri/nvidia_drv_video.so
libva info: va_openDriver() returns -1
vaInitialize failed with error code -1 (unknown libva error),exit
root@bazzite:~# ls -la /usr/lib64/dri/nvidia_drv_video.so
ls: cannot access '/usr/lib64/dri/nvidia_drv_video.so': No such file or directory
my current rpm-ostree:
$ rpm-ostree status
State: idle
Deployments:
● ostree-image-signed:docker://ghcr.io/ublue-os/bazzite-dx-nvidia:stable
Digest: sha256:8435849716078d36cd920e489ea10735a145e6c00f1a06375d349e22f5a287ba
Version: 43.20251029 (2025-10-29T21:24:50Z)
ostree-image-signed:docker://ghcr.io/ublue-os/bazzite-dx-nvidia:stable
Digest: sha256:b8879006cc5ad5220780fa3102102855fd70a25a6574f74229c30679c006bc4f
Version: 43.20251028 (2025-10-29T00:55:02Z)
Let's see what provides the missing file
$ dnf provides /usr/lib64/dri/nvidia_drv_video.so
Updating and loading repositories:
Repositories loaded.
libva-nvidia-driver-0.0.14-3.fc43.x86_64 : A VA-API implemention using NVIDIA's NVDEC
Repo : fedora
Matched From :
Filename : /usr/lib64/dri/nvidia_drv_video.so
$ dnf info libva-nvidia-driver-0.0.14-3.fc43.x86_64
Updating and loading repositories:
Repositories loaded.
Available packages
Name : libva-nvidia-driver
Epoch : 0
Version : 0.0.14
Release : 3.fc43
Architecture : x86_64
Download size : 52.1 KiB
Installed size : 99.6 KiB
Source : libva-nvidia-driver-0.0.14-3.fc43.src.rpm
Repository : fedora
Summary : A VA-API implemention using NVIDIA's NVDEC
URL : https://github.com/elFarto/nvidia-vaapi-driver
License : MIT
Description : This is an VA-API implementation that uses NVDEC as a backend. This
: implementation is specifically designed to be used by Firefox for accelerated
: decode of web content, and may not operate correctly in other applications.
Vendor : Fedora Project
The package's description just doesn't feel right.... SteamVR issues aside - what am I missing here? Why vainfo does not just work for me?
UPDATE/EDIT:
Bazzite 43 is borked. After downgrading to 42 vainfo is found and works:
$ vainfo
Trying display: wayland
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib64/dri/nvidia_drv_video.so
libva info: Found init function __vaDriverInit_1_0
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.22 (libva 2.22.0)
vainfo: Driver version: VA-API NVDEC driver [direct backend]
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileH264Main : VAEntrypointVLD
VAProfileH264High : VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointVLD
VAProfileVP8Version0_3 : VAEntrypointVLD
VAProfileVP9Profile0 : VAEntrypointVLD
VAProfileAV1Profile0 : VAEntrypointVLD
VAProfileHEVCMain10 : VAEntrypointVLD
VAProfileHEVCMain12 : VAEntrypointVLD
VAProfileVP9Profile2 : VAEntrypointVLD
VAProfileHEVCMain444 : VAEntrypointVLD
VAProfileHEVCMain444_10 : VAEntrypointVLD
VAProfileHEVCMain444_12 : VAEntrypointVLD
$ rpm-ostree status -v
State: idle
AutomaticUpdates: disabled
Deployments:
● ostree-image-signed:docker://ghcr.io/ublue-os/bazzite-dx-nvidia:stable-42.20251019 (index: 0)
Digest: sha256:e3fc1593209c132277fc604b8d1fe8ab0b9889c05c536ff0d149d02902f0d135
Version: 42.20251019 (2025-10-19T17:30:03Z)
Commit: cfbee6ff8fea099c01c8d18ffa6c10485166fc25f0906a86d984db2bf3a7151b
Staged: no
StateRoot: default
ostree-image-signed:docker://ghcr.io/ublue-os/bazzite-dx-nvidia:stable (index: 1)
Digest: sha256:8435849716078d36cd920e489ea10735a145e6c00f1a06375d349e22f5a287ba
Version: 43.20251029 (2025-10-29T21:24:50Z)
Commit: 99808a78149259f190586b50901931f360d384c344c2b3997dde322efed6f10e
StateRoot: default
Same here on Bazzite 43:
$ vainfo
Trying display: wayland
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib64/dri/nvidia_drv_video.so
libva info: va_openDriver() returns -1
vaInitialize failed with error code -1 (unknown libva error),exit
Bazzite 42: (both is nvidia-open, no other changes)
$ vainfo
Trying display: wayland
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib64/dri/nvidia_drv_video.so
libva info: Found init function __vaDriverInit_1_0
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.22 (libva 2.22.0)
vainfo: Driver version: VA-API NVDEC driver [direct backend]
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileH264Main : VAEntrypointVLD
VAProfileH264High : VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointVLD
VAProfileVP8Version0_3 : VAEntrypointVLD
VAProfileVP9Profile0 : VAEntrypointVLD
VAProfileAV1Profile0 : VAEntrypointVLD
VAProfileHEVCMain10 : VAEntrypointVLD
VAProfileHEVCMain12 : VAEntrypointVLD
VAProfileVP9Profile2 : VAEntrypointVLD
VAProfileHEVCMain444 : VAEntrypointVLD
VAProfileHEVCMain444_10 : VAEntrypointVLD
VAProfileHEVCMain444_12 : VAEntrypointVLD
I got it working by layering the libva-nvidia-driver package. I also made it work in Firefox by changing the config as mentioned in the README, and additionally following these instructions to make it work with Flatpak Firefox (though I used Flatseal for the environment variables).
Nice! libva-nvidia-driver worked for me on 43. Just so you know there is an option under ujust configure-nvidia to fix Firefox automatically :) the only difference I could see is that it also adds MOZ_ENABLE_WAYLAND=1
Testing is building with that package layered. Let me know if you still need to layer it in testing.
Nice!
libva-nvidia-driverworked for me on 43. Just so you know there is an option underujust configure-nvidiato fix Firefox automatically :) the only difference I could see is that it also addsMOZ_ENABLE_WAYLAND=1
That would've saved me a lot of headaches 👍
Testing is building with that package layered. Let me know if you still need to layer it in testing.
Works perfectly for me, it even removed the package layer automatically. Thanks for the quick fix!