Intel video-acceleration changes going from 23.11->24.05?

I do game streaming from a Windows PC to an Intel NUC running NixOS and the moonlight-qt package. As part of the config for this device I have

hardware.opengl.extraPackages = with pkgs; [
    intel-media-driver
];

This NUC is new, so this is the correct driver. On 23.11 moonlight-qt correctly picked up this driver and video decoding was hardware accelerated.

However, I upgraded to 24.05 (I just changed which branch my nixpkgs input pointed to in my flake) and now at startup moonlight-qt says that it can’t find a hardware video decoder.

Is this a change in how drivers, etc work from one release to the next, or is it a problem with moonlight-qt?

Have you tried some of the troubleshooting steps in Hardware video acceleration - ArchWiki? Are there any messages in the journal?

hardware.opengl

is being renamed to

hardware.graphics

I am not sure if that change has hit 24.05

check what’s in nixos-hardware repo for intel: nixos-hardware/common/gpu/intel/default.nix at 6e253f12b1009053eff5344be5e835f604bb64cd · NixOS/nixos-hardware · GitHub

I also have NUC (probably 1-2 generations old already), there are 3 packages i use there:

hardware.opengl = {
    enable = true;
    extraPackages = with pkgs; [
      intel-media-driver
      libvdpau-va-gl
      vaapiIntel
    ];
  };

(not sure about vaapiIntel there, got it from old wiki entry and it has been there ever since)
Haven’t tested specifically moonlight-qt, but vlc and firefox have hardware acceleration, no problem

This works both in 23.11 and 24.05 for me

That will probably never reach 24.05 as that’s a breaking API change.

We can check by running the following command, as the intel section on Accelerated Video Playback - NixOS Wiki suggests:

nix-shell -p libva-utils --run vainfo

If there are no errors, it’s more likely an issue with moonlight-qt.

We might want to add this to the wiki if we can confirm which drivers make it work.

So here’s what I’ve found. All the drivers exist both on 23.11 and 24.05, and the moonlight-qt revision is the same from 23.11 to 24.05.

The difference is found in the moonlight-qt logs. On 23.11 you see this:

libva info: VA-API version 1.20.0
libva info: Trying to open /run/opengl-driver/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_20
libva info: va_openDriver() returns 0

whereas on 24.05 you see this:

libva info: VA-API version 1.20.0
libva info: Trying to open /run/opengl-driver/lib/dri/iHD_drv_video.so
libva error: /run/opengl-driver/lib/dri/iHD_drv_video.so has no function __vaDriverInit_1_0

So the driver exists, but on 24.05 it’s looking for a different symbol name that appears not to exist.

1 Like

I found similar issues on GitHub, but there doesn’t seem to be any apparent solution. However, I found the following configuration in nixos-hardware:

From this, I assume you need to add intel-vaapi-driver in addition to intel-media-driver for it to work properly.

Yeah I actually already have both of those drivers included

have you tried with any other software that uses hardware encoding? is it just moonlight-qt that have those issues, or all other softwares too?

in VLC, you will see the same kind of log when you open a video that supports hardware decoding

p.s. also it’s strange that it looks for __vaDriverInit_1_0, when it should be 1_20,
you can check exported symbols with readelf --symbols -C /run/opengl-driver/lib/dri/iHD_drv_video.so | grep -i vadriver
my guess is that’s something fishy with moonlight-qt, but i don’t know how libva picks init function and what env (or smth else) affects it

1 Like

Appears to be something fishy with moonlight-qt. VLC works fine with an H264 video and the driver is picked up, but on 24.05 it’s __vaDriverInit_1_21. That readelf command only shows that symbol as well, not __vaDriverInit_1_1.

I think the issue may be that libva for moonlight-qt expects a different driver version. At startup on both 23.11 and 24.05 you see this:

libva info: VA-API version 1.20.0

and on 23.11 that matches the driver version, whereas on 24.05 the driver version is 1.21.0.

Using moonlight-qt from this open PR solves the problem.

1 Like

is very old and unmaintained. Unless you know exactly why you need it, you shouldn’t use it.

2 Likes

thank you for pointing that out.

I see that it has been removed from the official wiki’s Accelerated_Video_Playback article, but it is still present in some other articles, i guess those need to be updated.
found in: