Missing VP9/AV1 hardware decode

Fairly fresh Tumbleweed install, everything up-to-date, using Packman packages where applicable.
GPU is a Radeon 7800XT.
vpdauinfo:

display: :1   screen: 0
API version: 1
Information string: G3DVL VDPAU Driver Shared Library version 1.0

Video surface:

name   width height types
-------------------------------------------
420    16384 16384  NV12 YV12
422    16384 16384  UYVY YUYV
444    16384 16384  Y8U8V8A8 V8U8Y8A8
420_16 16384 16384  P010 P016
422_16 16384 16384
444_16 16384 16384

Decoder capabilities:

name                        level macbs width height
----------------------------------------------------
MPEG1                          --- not supported ---
MPEG2_SIMPLE                   --- not supported ---
MPEG2_MAIN                     --- not supported ---
H264_BASELINE                  52 65536  4096  4096
H264_MAIN                      52 65536  4096  4096
H264_HIGH                      52 65536  4096  4096
VC1_SIMPLE                     --- not supported ---
VC1_MAIN                       --- not supported ---
VC1_ADVANCED                   --- not supported ---
MPEG4_PART2_SP                 --- not supported ---
MPEG4_PART2_ASP                --- not supported ---
DIVX4_QMOBILE                  --- not supported ---
DIVX4_MOBILE                   --- not supported ---
DIVX4_HOME_THEATER             --- not supported ---
DIVX4_HD_1080P                 --- not supported ---
DIVX5_QMOBILE                  --- not supported ---
DIVX5_MOBILE                   --- not supported ---
DIVX5_HOME_THEATER             --- not supported ---
DIVX5_HD_1080P                 --- not supported ---
H264_CONSTRAINED_BASELINE       0 65536  4096  4096
H264_EXTENDED                  --- not supported ---
H264_PROGRESSIVE_HIGH          --- not supported ---
H264_CONSTRAINED_HIGH          --- not supported ---
H264_HIGH_444_PREDICTIVE       --- not supported ---
VP9_PROFILE_0                  --- not supported ---
VP9_PROFILE_1                  --- not supported ---
VP9_PROFILE_2                  --- not supported ---
VP9_PROFILE_3                  --- not supported ---
HEVC_MAIN                      186 139264  8192  4352
HEVC_MAIN_10                   186 139264  8192  4352
HEVC_MAIN_STILL                --- not supported ---
HEVC_MAIN_12                   --- not supported ---
HEVC_MAIN_444                  --- not supported ---
HEVC_MAIN_444_10               --- not supported ---
HEVC_MAIN_444_12               --- not supported ---
AV1_MAIN                       --- not supported ---
AV1_HIGH                       --- not supported ---
AV1_PROFESSIONAL               --- not supported ---

Output surface:

name              width height nat types
----------------------------------------------------
B8G8R8A8         16384 16384    y  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 P010 P016 A8I8 I8A8
R8G8B8A8         16384 16384    y  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 P010 P016 A8I8 I8A8
R10G10B10A2      16384 16384    y  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 P010 P016 A8I8 I8A8
B10G10R10A2      16384 16384    y  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 P010 P016 A8I8 I8A8

Bitmap surface:

name              width height
------------------------------
B8G8R8A8         16384 16384
R8G8B8A8         16384 16384
R10G10B10A2      16384 16384
B10G10R10A2      16384 16384
A8               16384 16384

Video mixer:

feature name                    sup
------------------------------------
DEINTERLACE_TEMPORAL             y
DEINTERLACE_TEMPORAL_SPATIAL     -
INVERSE_TELECINE                 -
NOISE_REDUCTION                  y
SHARPNESS                        y
LUMA_KEY                         y
HIGH QUALITY SCALING - L1        y
HIGH QUALITY SCALING - L2        -
HIGH QUALITY SCALING - L3        -
HIGH QUALITY SCALING - L4        -
HIGH QUALITY SCALING - L5        -
HIGH QUALITY SCALING - L6        -
HIGH QUALITY SCALING - L7        -
HIGH QUALITY SCALING - L8        -
HIGH QUALITY SCALING - L9        -

parameter name                  sup      min      max
-----------------------------------------------------
VIDEO_SURFACE_WIDTH              y        48     4096
VIDEO_SURFACE_HEIGHT             y        48     4096
CHROMA_TYPE                      y
LAYERS                           y         0        4

attribute name                  sup      min      max
-----------------------------------------------------
BACKGROUND_COLOR                 y
CSC_MATRIX                       y
NOISE_REDUCTION_LEVEL            y      0.00     1.00
SHARPNESS_LEVEL                  y     -1.00     1.00
LUMA_KEY_MIN_LUMA                y
LUMA_KEY_MAX_LUMA                y

vainfo:

Trying display: wayland
libva info: VA-API version 1.20.0
libva info: User environment variable requested driver 'radeonsi'
libva info: Trying to open /usr/lib64/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_1_20
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.20 (libva 2.20.1)
vainfo: Driver version: Mesa Gallium driver 24.0.3 for AMD Radeon RX 7800 XT (radeonsi, navi32, LLVM 18.1.2, DRM 3.57, 6.8.1-1-default)
vainfo: Supported profile and entrypoints
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointEncSlice
      VAProfileHEVCMain10             :	VAEntrypointVLD
      VAProfileHEVCMain10             :	VAEntrypointEncSlice
      VAProfileJPEGBaseline           :	VAEntrypointVLD
      VAProfileNone                   :	VAEntrypointVideoProc

As you can see, lots of codecs and profiles are reported as unsupported. Obviously the hardware supports them, my understanding is the driver definitely should also support them, and hardware decoding works for the codecs listed above, their patent encumbrance notwithstanding.

I’m unsure where to proceed from here, I’ve been out of the Linux desktop game for a good 15 years, but I’m open to any useful suggestions or pointers.

Is that synonymous with “I did the vendor switch to Packman”?

That is what I meant by that, yes.

I’m seeing this as well, also on a 7800XT.

Pretty sure I had them before the update to 24.0.3, not able to test this right now though. :thinking:

vainfo:

Trying display: wayland
libva info: VA-API version 1.20.0
libva info: Trying to open /usr/lib64/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_1_20
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.20 (libva 2.20.1)
vainfo: Driver version: Mesa Gallium driver 24.0.3 for AMD Radeon RX 7800 XT (radeonsi, navi32, LLVM 18.1.2, DRM 3.57, 6.8.1-1-default)
vainfo: Supported profile and entrypoints
      VAProfileH264ConstrainedBaseline: VAEntrypointVLD
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
      VAProfileH264Main               : VAEntrypointVLD
      VAProfileH264Main               : VAEntrypointEncSlice
      VAProfileH264High               : VAEntrypointVLD
      VAProfileH264High               : VAEntrypointEncSlice
      VAProfileHEVCMain               : VAEntrypointVLD
      VAProfileHEVCMain               : VAEntrypointEncSlice
      VAProfileHEVCMain10             : VAEntrypointVLD
      VAProfileHEVCMain10             : VAEntrypointEncSlice
      VAProfileJPEGBaseline           : VAEntrypointVLD
      VAProfileNone                   : VAEntrypointVideoProc

That tracks, actually. I was thinking I had seen it working a couple days ago, but wasn’t sure if I was was misremembering it and/or it was just on a HEVC or AVC stream, so I wasn’t confident to mention it.

But if that’s the case, then that’s a very recent issue.

I see same on Tumbleweed latest. I hadn’t noticed this which probably means it isn’t too impactful for me but beyond like:
opi codecs

Is there something else anyone normally does to enable av1?

I went ahead and did a fresh install, and fully updated without Packman repos looks like this:

Trying display: wayland
libva info: VA-API version 1.20.0
libva info: Trying to open /usr/lib64/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_1_20
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.20 (libva 2.20.1)
vainfo: Driver version: Mesa Gallium driver 24.0.3 for AMD Radeon RX 7800 XT (radeonsi, navi32, LLVM 18.1.2, DRM 3.57, 6.8.1-1-default)
vainfo: Supported profile and entrypoints
      VAProfileJPEGBaseline           : VAEntrypointVLD
      VAProfileVP9Profile0            : VAEntrypointVLD
      VAProfileVP9Profile2            : VAEntrypointVLD
      VAProfileAV1Profile0            : VAEntrypointVLD
      VAProfileAV1Profile0            : VAEntrypointEncSlice
      VAProfileNone                   : VAEntrypointVideoProc

So it appears to be a Packman bug of some sort.

Actually looking closer at it, I might have found something. Though my ability to read Meson files is limited:

In Mesas meson.build I found this snippet:

_codecs = get_option('video-codecs')
patent_codecs = ['vc1dec', 'h264dec', 'h264enc', 'h265dec', 'h265enc']
free_codecs = ['av1dec', 'av1enc', 'vp9dec']
all_codecs = patent_codecs + free_codecs

if _codecs.contains('all')
  _codecs = all_codecs
elif _codecs.contains('all_free')
  selected_codecs = _codecs
  _codecs = free_codecs
  foreach c : patent_codecs
    if selected_codecs.contains(c)
      _codecs += c
    endif
  endforeach
endif
foreach c : all_codecs
   pre_args += '-DVIDEO_CODEC_@0@=@1@'.format(c.to_upper(), _codecs.contains(c).to_int())
endforeach

and in the Mesa.spec file we find these lines:

# Possible patent issues, see
# https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15258
# for more details
%if 0%{?BUILD_ORIG}
%define video_codecs 1
%else
%define video_codecs 0
%endif

[....]

%if %{video_codecs}
            -Dvideo-codecs=h264dec,h264enc,h265dec,h265enc,vc1dec \
%endif

My current guess is that there is a mismatch here and that the spec file should read:

%if %{video_codecs}
            -Dvideo-codecs=h264dec,h264enc,h265dec,h265enc,vc1dec,av1dec,av1enc,vp9dec\
%endif

Or just use the catch-all phrase video_codecs=all.

1 Like

Post

zypper se -si mesa
zypper se -si vdpau

And
:~> vdpauinfo
, not vpdauinfo.

AMD uses Video Acceleration API (VA-API), so use
:~> vainfo
as the main source.

~ zypper se -si mesa                            
Loading repository data...
Reading installed packages...

S  | Name                            | Type    | Version              | Arch   | Repository
---+---------------------------------+---------+----------------------+--------+----------------------
i  | libOSMesa8                      | package | 24.0.3-1699.373.pm.1 | x86_64 | Packman Repository
i  | libOSMesa8-32bit                | package | 24.0.3-1699.373.pm.1 | x86_64 | Packman Repository
i  | Mesa                            | package | 24.0.3-1699.373.pm.1 | x86_64 | Packman Repository
i+ | Mesa-32bit                      | package | 24.0.3-1699.373.pm.1 | x86_64 | Packman Repository
i  | Mesa-demo                       | package | 9.0.0-3.3            | x86_64 | Main Repository (OSS)
i  | Mesa-demo-egl                   | package | 9.0.0-3.3            | x86_64 | Main Repository (OSS)
i  | Mesa-demo-es                    | package | 9.0.0-3.3            | x86_64 | Main Repository (OSS)
i  | Mesa-demo-x                     | package | 9.0.0-3.3            | x86_64 | Main Repository (OSS)
i  | Mesa-dri                        | package | 24.0.3-1699.372.pm.2 | x86_64 | Packman Repository
i+ | Mesa-dri-32bit                  | package | 24.0.3-1699.373.pm.1 | x86_64 | Packman Repository
i  | Mesa-gallium                    | package | 24.0.3-1699.372.pm.2 | x86_64 | Packman Repository
i+ | Mesa-gallium-32bit              | package | 24.0.3-1699.373.pm.1 | x86_64 | Packman Repository
i  | Mesa-libEGL1                    | package | 24.0.3-1699.373.pm.1 | x86_64 | Packman Repository
i  | Mesa-libGL1                     | package | 24.0.3-1699.373.pm.1 | x86_64 | Packman Repository
i+ | Mesa-libGL1-32bit               | package | 24.0.3-1699.373.pm.1 | x86_64 | Packman Repository
i  | Mesa-libglapi0                  | package | 24.0.3-1699.373.pm.1 | x86_64 | Packman Repository
i+ | Mesa-libglapi0-32bit            | package | 24.0.3-1699.373.pm.1 | x86_64 | Packman Repository
i  | Mesa-libva                      | package | 24.0.3-1699.372.pm.2 | x86_64 | Packman Repository
i  | Mesa-vulkan-device-select       | package | 24.0.3-1699.372.pm.2 | x86_64 | Packman Repository
i  | Mesa-vulkan-device-select-32bit | package | 24.0.3-1699.373.pm.1 | x86_64 | Packman Repository

~ zypper se -si vdpau
Loading repository data...
Reading installed packages...

S  | Name               | Type    | Version              | Arch   | Repository
---+--------------------+---------+----------------------+--------+----------------------
i+ | libva-vdpau-driver | package | 0.7.4-8.2            | x86_64 | Main Repository (OSS)
i  | libvdpau1          | package | 1.5-2.2              | x86_64 | Main Repository (OSS)
i  | libvdpau1-32bit    | package | 1.5-2.2              | x86_64 | Main Repository (OSS)
i  | libvdpau_r600      | package | 24.0.3-1699.372.pm.2 | x86_64 | Packman Repository
i  | libvdpau_radeonsi  | package | 24.0.3-1699.372.pm.2 | x86_64 | Packman Repository
i  | vlc-vdpau          | package | 3.0.20-1699.8.pm.17  | x86_64 | Packman Repository

~ vainfo 
Trying display: wayland
libva info: VA-API version 1.20.0
libva info: User environment variable requested driver 'radeonsi'
libva info: Trying to open /usr/lib64/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_1_20
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.20 (libva 2.20.1)
vainfo: Driver version: Mesa Gallium driver 24.0.3 for AMD Radeon RX 7800 XT (radeonsi, navi32, LLVM 18.1.2, DRM 3.57, 6.8.2-1-default)
vainfo: Supported profile and entrypoints
      VAProfileH264ConstrainedBaseline: VAEntrypointVLD
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
      VAProfileH264Main               : VAEntrypointVLD
      VAProfileH264Main               : VAEntrypointEncSlice
      VAProfileH264High               : VAEntrypointVLD
      VAProfileH264High               : VAEntrypointEncSlice
      VAProfileHEVCMain               : VAEntrypointVLD
      VAProfileHEVCMain               : VAEntrypointEncSlice
      VAProfileHEVCMain10             : VAEntrypointVLD
      VAProfileHEVCMain10             : VAEntrypointEncSlice
      VAProfileJPEGBaseline           : VAEntrypointVLD
      VAProfileNone                   : VAEntrypointVideoProc

From the latest snapshot release notes:

=== Details ===

==== Mesa ====
Subpackages: Mesa-libEGL1 Mesa-libGL1 Mesa-libglapi0 libgbm1

  • fix missing free codecs in builds with non-free codecs enabled

==== Mesa-drivers ====
Subpackages: Mesa-dri Mesa-gallium Mesa-libva libxatracker2

  • fix missing free codecs in builds with non-free codecs enabled

Going to assume this will be fixed when this trickles down to the Packman packages.

Fixed with the latest Mesa updates from Packman. Thanks to whoever caught and corrected it.

âžś  ~ vainfo                               
Trying display: wayland
libva info: VA-API version 1.20.0
libva info: User environment variable requested driver 'radeonsi'
libva info: Trying to open /usr/lib64/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_1_20
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.20 (libva 2.20.1)
vainfo: Driver version: Mesa Gallium driver 24.0.3 for AMD Radeon RX 7800 XT (radeonsi, navi32, LLVM 18.1.3, DRM 3.57, 6.8.4-rc1-1-default)
vainfo: Supported profile and entrypoints
      VAProfileH264ConstrainedBaseline: VAEntrypointVLD
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
      VAProfileH264Main               : VAEntrypointVLD
      VAProfileH264Main               : VAEntrypointEncSlice
      VAProfileH264High               : VAEntrypointVLD
      VAProfileH264High               : VAEntrypointEncSlice
      VAProfileHEVCMain               : VAEntrypointVLD
      VAProfileHEVCMain               : VAEntrypointEncSlice
      VAProfileHEVCMain10             : VAEntrypointVLD
      VAProfileHEVCMain10             : VAEntrypointEncSlice
      VAProfileJPEGBaseline           : VAEntrypointVLD
      VAProfileVP9Profile0            : VAEntrypointVLD
      VAProfileVP9Profile2            : VAEntrypointVLD
      VAProfileAV1Profile0            : VAEntrypointVLD
      VAProfileAV1Profile0            : VAEntrypointEncSlice
      VAProfileNone                   : VAEntrypointVideoProc

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.