protonscr

Streaming hardware decoding broken

steamopen StreamingDistro Family: Fedora
ValveSoftware/steam-for-linux#6865 · opened 2020-02-04 by Peetz0r · updated 2021-05-16 · 9 comments · github
PPeetz0r 2020-02-04 github

First: I don't think this issue is similar to all the previous libva issues since steam upgraded from libva1 to libva2 a short while back and all those issues seem to be related to libva1 being required while linba2 is shipped by distro's. Since the vaapi2 update last november this should not be a thing anymore.

Your system information

Please describe your issue in as much detail as possible:

When streaming between my two computers (high-end gaming desktop to low power laptop) it should use hardware decoding using Intel VAAPI (since it has an Intel HD 620 inside and the option is enabled and libva is installed). Instead it fails at VAAPI and uses software decoding as a fallback.

(software decoding works, but the performance is not great - as is expected, not part of the bug)

Steps for reproducing this issue:

  1. Setup two computers, one with Intel graphics, with Fedora 31 and steam (from negativo17 steam repo)
  2. Enable Remote Play hardware decoding and detailed overlay
  3. Stream any game to the Intel machine
  4. Check overlay or terminal output (or fan noise) for decoding method

Expected: VAAPI accelerated decoding
Actual: libavcodec software decoding with 4 threads

Part of steam terminal output: https://gist.github.com/Peetz0r/c6fbc8de7fe2162d550fc542c1e8142d
vainfo in another terminal: https://gist.github.com/Peetz0r/ce72ceebb394cfedb48903d212ed0cab

The weird thing is that vainfo works fine outside steam, but breaks inside steam.

All the libva packages are installed for both x86_64 and i686 using dnf.

Specs of desktop:

  • Ryzen 3600
  • Radeon 5700
  • gnome-shell Xorg mode

Specs of laptop

  • Thinkpad Yoga 370
  • Intel i5 7300U
  • Intel HD Graphics 620
  • gnome-shell in Wayland mode
Kkisak-valve maintainer 2020-02-04 github

Hello @Peetz0r, please copy your system information from Steam (Steam -> Help -> System Information) and put it in a gist, then include a link to the gist in this issue report.

PPeetz0r 2020-02-04 github

Done (https://gist.github.com/Peetz0r/054d8d859e70c141e8eec19acb776630)

Also thanks for replying so quickly!

And I forgot to mention that the steam version is exactly the same on both ends.

Llostgoat 2020-02-10 github

Can you run a 32 bit vainfo binary inside the steam runtime? You can use steam's run.sh to bootstrap the binary into the runtime, e.g.:

~/.steam/steam/ubuntu12_32/steam-runtime/run.sh vainfo32

PPeetz0r 2020-02-10 github

Hmm, I don't seem to have a 32 bit vainfo on fedora. But if I steal the one from ubuntu then I get the exact same output except for the version numbers and library path.

peter@joogaa ~> ~/.steam/steam/ubuntu12_32/steam-runtime/run.sh /tmp/vainfo_2.5.0+ds1-1_i386/usr/bin/vainfo 
libva info: VA-API version 1.6.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_5
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.6 (libva 2.5.0)
vainfo: Driver version: Intel i965 driver for Intel(R) Kaby Lake - 2.4.0
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Simple            :	VAEntrypointEncSlice
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSliceLP
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointEncSliceLP
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointEncSliceLP
      VAProfileH264MultiviewHigh      :	VAEntrypointVLD
      VAProfileH264MultiviewHigh      :	VAEntrypointEncSlice
      VAProfileH264StereoHigh         :	VAEntrypointVLD
      VAProfileH264StereoHigh         :	VAEntrypointEncSlice
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileNone                   :	VAEntrypointVideoProc
      VAProfileJPEGBaseline           :	VAEntrypointVLD
      VAProfileJPEGBaseline           :	VAEntrypointEncPicture
      VAProfileVP8Version0_3          :	VAEntrypointVLD
      VAProfileVP8Version0_3          :	VAEntrypointEncSlice
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointEncSlice
      VAProfileHEVCMain10             :	VAEntrypointVLD
      VAProfileHEVCMain10             :	VAEntrypointEncSlice
      VAProfileVP9Profile0            :	VAEntrypointVLD
      VAProfileVP9Profile0            :	VAEntrypointEncSlice
      VAProfileVP9Profile2            :	VAEntrypointVLD
PPeetz0r 2020-02-28 github

Hey! I have checked again today (latest steam beta on both sides, everything else the same as before) and it's still doing software decoding.

Have you internally been able to reproduce the issue? Is there any more details I can provide? Does it help to test on other distros from a live usb? Anything else I can do?

Ddarksaboteur 2020-04-01 github

I am seeing this same error on Fedora 31 on my laptop with Intel UHD 620 graphics.
Please let me know what details you need and I can provide them

PPeetz0r 2020-05-18 github

It is now over 3 months later and I have upgraded to Fedora 32, and the issue is still unchanged. Here's the current output of vainfo:

libva info: Trying to open /usr/lib/dri/iHD_drv_video.so
libva info: va_openDriver() returns -1
libva info: Trying to open /usr/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_6
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.7 (libva 2.7.0.pre1)
vainfo: Driver version: Intel i965 driver for Intel(R) Kaby Lake - 2.4.0
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Simple            :	VAEntrypointEncSlice
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSliceLP
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointEncSliceLP
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointEncSliceLP
      VAProfileH264MultiviewHigh      :	VAEntrypointVLD
      VAProfileH264MultiviewHigh      :	VAEntrypointEncSlice
      VAProfileH264StereoHigh         :	VAEntrypointVLD
      VAProfileH264StereoHigh         :	VAEntrypointEncSlice
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileNone                   :	VAEntrypointVideoProc
      VAProfileJPEGBaseline           :	VAEntrypointVLD
      VAProfileJPEGBaseline           :	VAEntrypointEncPicture
      VAProfileVP8Version0_3          :	VAEntrypointVLD
      VAProfileVP8Version0_3          :	VAEntrypointEncSlice
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointEncSlice
      VAProfileHEVCMain10             :	VAEntrypointVLD
      VAProfileHEVCMain10             :	VAEntrypointEncSlice
      VAProfileVP9Profile0            :	VAEntrypointVLD
      VAProfileVP9Profile0            :	VAEntrypointEncSlice
      VAProfileVP9Profile2            :	VAEntrypointVLD
PPeetz0r 2020-05-18 github

I suddenly remembered reading something that I first though would be unrelated, but here it is:
This is only an issue on Wayland! More specifically, libva doesn't work trough XWayland, and steam doesn't do native Wayland yet.

Related issue (from 2017, but still open): https://github.com/intel/libva/issues/79

Bbenjamingwynn 2021-05-16 github

I'm running Fedora Silverblue 34, with Gnome+Wayland. I can't get this to work on Intel HD graphics either. I installed the following packages:

steam libva-intel-driver-2.4.1-5.fc34.i686 libva-intel-driver.i686 libva-utils libva-intel-driver intel-media-driver-21.1.3-1.fc34.i686

Starting Steam with the flags:

VDPAU_DRIVER=va_gl LIBVA_DRIVERS_PATH=/usr/lib/dri LIBVA_DRIVER_NAME=iHD steam

Results in a crash, with the log:

CVDPAUAccel: GL_NV_vdpau_interop not available on current context
ffmpeg verbose: Opened VA display via X11 display :0.
libva info: VA-API version 1.11.0
libva info: User environment variable requested driver 'iHD'
libva info: Trying to open /usr/lib/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_11
libva info: va_openDriver() returns 0
ffmpeg verbose: Initialised VAAPI connection: version 1.11
ffmpeg verbose: Unknown driver "Intel iHD driver for Intel(R) Gen Graphics - 21.1.3 ()", assuming standard behaviour.
VAAPI hardware decoding
ffmpeg verbose: Reinit context to 1920x1088, pix_fmt: vaapi_vld
Marking frame 1 complete with status k_EStreamFrameResultDroppedLate
Marking frame 2 complete with status k_EStreamFrameResultDroppedLate
Marking frame 3 complete with status k_EStreamFrameResultDroppedLate
Marking frame 4 complete with status k_EStreamFrameResultDroppedLate
Marking frame 5 complete with status k_EStreamFrameResultDroppedLate
Marking frame 6 complete with status k_EStreamFrameResultDroppedLate
Marking frame 39 complete with status k_EStreamFrameResultDroppedLate
Marking frame 40 complete with status k_EStreamFrameResultDroppedLate
Video rect: 2560x1440 at 0,0
Texture rect: 1920x1080 at 0,0
Video size: 1920x1080, output size: 2560x1440, overlay size: 2560x1440
Video rect: 2560x1440 at 0,0
Texture rect: 1920x1080 at 0,0
Video rect: 2560x1440 at 0,0
Texture rect: 1920x1080 at 0,0
crash_20210516214242_2.dmp[7981]: Uploading dump (out-of-process)
/tmp/dumps/crash_20210516214242_2.dmp
crash_20210516214242_2.dmp[7981]: Finished uploading minidump (out-of-process): success = yes
crash_20210516214242_2.dmp[7981]: response: CrashID=bp-8a8df86c-548a-49c3-b70d-23d492210516
crash_20210516214242_2.dmp[7981]: file ''/tmp/dumps/crash_20210516214242_2.dmp'', upload yes: ''CrashID=bp-8a8df86c-548a-49c3-b70d-23d492210516''

Dump file referenced can be uploaded on request. Trying to use i965 resulted in steam falling back to SW decoding:

Launched with:

VDPAU_DRIVER=va_gl LIBVA_DRIVERS_PATH=/usr/lib/dri LIBVA_DRIVER_NAME=i965 steam
CVDPAUAccel: GL_NV_vdpau_interop not available on current context
ffmpeg verbose: Opened VA display via X11 display :0.
libva info: VA-API version 1.11.0
libva info: User environment variable requested driver 'i965'
libva info: Trying to open /usr/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_10
libva error: /usr/lib/dri/i965_drv_video.so init failed
libva info: va_openDriver() returns -1
ffmpeg error: Failed to initialise VAAPI connection: -1 (unknown libva error).
CVAAPIAccel: av_hwdevice_ctx_create() failed
libavcodec software decoding with 4 threads

With no arguments, Steam is unable to determine any libva driver and falls back to S/W decoding:

...
libva error: vaGetDriverNameByIndex() failed with unknown libva error, driver_name = (null)
...

Nothing extracted yet.