Vulkan on Intel Arc

I’ve tried to setup and test h264 vulkan video decoding using ffmpeg-7 benchmark as follows: HWAccelIntro – FFmpeg
ffmpeg -hide_banner -init_hw_device "vulkan=vk:0" -hwaccel vulkan -hwaccel_output_format vulkan -i h264_10bit_yuv422p10le.mp4 -f null - -benchmark

But I get the following output and error messages:

[h264 @ 0x560566feda40] Device does not support the VK_KHR_video_decode_queue extension!
[h264 @ 0x560566feda40] Failed setup for format vulkan: hwaccel initialisation returned error.

For me it seems like Vulkan and Intel drivers should work,
though the missing VK_KHR_video_decode_queue prohibit the ffmpeg benchmark test?

I have the following vulkan, libva and intel related packages installed

    S  | Name                           | Type    | Version              | Arch   | Repository
    ---+--------------------------------+---------+----------------------+--------+-------------------------
    i  | intel-media-driver             | package | 24.1.5-1.1           | x86_64 | openSUSE-Slowroll-Oss
    i  | intel-vaapi-driver             | package | 2.4.1-5.13           | x86_64 | openSUSE-Slowroll-Oss
    i  | kernel-firmware-intel          | package | 20240728-1.1         | noarch | openSUSE-Slowroll-Update
    i  | kernel-firmware-intel          | package | 20240728-1.1         | noarch | openSUSE-Slowroll-Oss
    i  | libdrm_intel1                  | package | 2.4.122-1.1          | x86_64 | openSUSE-Slowroll-Oss
    i  | libgstvulkan-1_0-0             | package | 1.24.6-1.1           | x86_64 | openSUSE-Slowroll-Oss
    i  | libva-drm2                     | package | 2.22.0-1.1           | x86_64 | openSUSE-Slowroll-Oss
    i  | libva-glx2                     | package | 2.22.0-1.1           | x86_64 | openSUSE-Slowroll-Oss
    i+ | libva-utils                    | package | 2.22.0-1.1           | x86_64 | openSUSE-Slowroll-Oss
    i  | libva-wayland2                 | package | 2.22.0-1.1           | x86_64 | openSUSE-Slowroll-Oss
    i  | libva-x11-2                    | package | 2.22.0-1.1           | x86_64 | openSUSE-Slowroll-Oss
    i  | libva2                         | package | 2.22.0-1.1           | x86_64 | openSUSE-Slowroll-Oss
    i  | libvulkan1                     | package | 1.3.290-1.1          | x86_64 | openSUSE-Slowroll-Oss
    i+ | libvulkan_intel                | package | 24.1.2-1699.389.pm.3 | x86_64 | Packman
    i+ | libvulkan_lvp                  | package | 24.1.2-1699.389.pm.3 | x86_64 | Packman
    i  | libVulkanLayerSettings-1_3_290 | package | 1.3.290-1.1          | x86_64 | openSUSE-Slowroll-Oss
    i  | Mesa-libva                     | package | 24.1.2-1699.389.pm.3 | x86_64 | Packman
    i+ | Mesa-vulkan-device-select      | package | 24.1.2-1699.389.pm.3 | x86_64 | Packman
    i+ | Mesa-vulkan-overlay            | package | 24.1.2-1699.389.pm.3 | x86_64 | Packman
    i+ | ucode-intel                    | package | 20240531-1.1         | x86_64 | openSUSE-Slowroll-Oss
    i+ | vulkan-tools                   | package | 1.3.290-1.1          | x86_64 | openSUSE-Slowroll-Oss
    i+ | vulkan-validationlayers        | package | 1.3.290-1.1          | x86_64 | openSUSE-Slowroll-Oss

vulkaninfo | grep VK_KHR_video_decode_queue
- not found

vulkaninfo | grep Arc
        GPU id = 0 (Intel(R) Arc(tm) A750 Graphics (DG2))
        GPU id = 0 (Intel(R) Arc(tm) A750 Graphics (DG2))
        GPU id = 0 (Intel(R) Arc(tm) A750 Graphics (DG2))
GPU id : 0 (Intel(R) Arc(tm) A750 Graphics (DG2)):
    deviceName        = Intel(R) Arc(tm) A750 Graphics (DG2)

ls /usr/share/vulkan/icd.d/
intel_hasvk_icd.x86_64.json  intel_icd.x86_64.json  lvp_icd.x86_64.json

vkcube
Selected GPU 0: Intel(R) Arc(tm) A750 Graphics (DG2), type: DiscreteGpu
- looks ok

@terjejh Hi, I have a A380 (oneapi is installed) here on Tumbleweed…

vulkaninfo | grep VK_KHR_video_decode_queue
	VK_KHR_video_decode_queue                     : extension revision 8

I use intel-opencl;

 ls -la /etc/OpenCL/vendors/
total 12
drwxr-xr-x 1 root root 60 Aug 10 10:42 .
drwxr-xr-x 1 root root 14 Jun 26  2022 ..
lrwxrwxrwx 1 root root 35 Aug 10 10:06 intel.icd -> /usr/share/OpenCL/vendors/intel.icd
lrwxrwxrwx 1 root root 42 Aug 10 10:42 intel64.icd -> /etc/alternatives/opencl-intel-runtime-icd
-r--r--r-- 1 root root 22 Aug  6 18:00 nvidia.icd
ffmpeg -hide_banner -init_hw_device "vulkan=vk:0" -hwaccel vulkan -hwaccel_output_format vulkan -i Downloads/h264.mkv -f null - -benchmark

Input #0, matroska,webm, from 'Downloads/h264.mkv':

  Metadata:
    COM.PANASONIC.SEMI-PRO.METADATA.XML: <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
....
Duration: 00:00:18.72, start: 0.000000, bitrate: 71028 kb/s
  Stream #0:0: Video: h264 (High 4:2:2), yuv422p(tv, bt709, progressive), 3840x2160 [SAR 1:1 DAR 16:9], 50 fps, 50 tbr, 1k tbn (default)
....
      encoder         : Lavc60.31.102 pcm_s16le
[out#0/null @ 0x5582a1a30680] video:439kB audio:1757kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
frame=  936 fps=164 q=-0.0 Lsize=N/A time=00:00:18.71 bitrate=N/A speed=3.28x    
bench: utime=70.346s stime=0.492s rtime=5.707s
bench: maxrss=889716kB

@malcolmlewis Thank you for the tip.
I add-installed intel-opencl, but still get no output from

vulkaninfo | grep VK_KHR_video_decode_queue
 ls -la /etc/OpenCL/vendors/

Can you guide me how to setup this beyond the intel-opencl package installation?

@terjejh as root user run ln -s /usr/share/OpenCL/vendors/intel.icd /etc/OpenCL/vendors/intel.icd

I don’t use Packman, so don’t have those two Vulkan packages installed?

Likewise on Tumbleweed, so Mesa is 24.1.3 which may have some ARC fixes as well…

@terjejh OK, I used the SLE versions (part of oneapi install libvulkan_intel libvulkan_lvp), but the extension is not present, seem I steered you on the wrong track since I also have an Nvidia Quadro T400 installed which has the extension.

Edit: This may be of interest Video Codecs Supported by Intel® Arc™

@malcolmlewis
Ok, setting an environment variable solved the first issue

export ANV_VIDEO_DECODE=1
    vulkaninfo | grep VK_KHR_video_decode_queue
        VK_KHR_video_decode_queue                     : extension revision 8

Still remaining hwaccel initialisation returned error for h264 and h265 input respectively:

[h264 @ 0x55952760cf40] Failed setup for format vulkan: hwaccel initialisation returned error.
    --------
    [hevc @ 0x5580e96e8c80] Failed setup for format vulkan: hwaccel initialisation returned error.
    [hevc @ 0x5580e96e8c80] Unsupported film grain parameters. Ignoring film grain.

@terjejh what about vulkaninfo | grep VK_KHR_video do you see decode and encode entries as well?

So I only see;

	VK_KHR_video_decode_queue                     : extension revision 8
	VK_KHR_video_queue                            : extension revision 8

FYI for others, on GNOME with Wayland on Intel and Nvidia GPU’s it doesn’t like libvulkan_intel I see Error 71 (Protocol error) dispatching to Wayland display when trying to launch the like of Nautilus etc, I suspect because it’s using Prime Render Offload automatically these days…

@malcolmlewis

export ANV_VIDEO_DECODE=1
vulkaninfo | grep VK_KHR_video
	VK_KHR_video_decode_h264                      : extension revision 9
	VK_KHR_video_decode_h265                      : extension revision 8
	VK_KHR_video_decode_queue                     : extension revision 8
	VK_KHR_video_queue                            : extension revision 8

No Vulkan ‘encode’ seen yet, but it is quite new and will be implemented in ffmpeg next, according to Phoronix

Indeed I am most curious on upcoming Vulkan AV1 support:
Regarding Vulkan AV1 Video Decoding Extension

Possibly also AV1 Encoding support next was planned as listed in the dotted box here(?)

1 Like

@terjejh Question, what is your system CPU, Intel Gen 12+? If so you may be interested in https://www.intel.com/content/www/us/en/architecture-and-technology/adaptix/deep-link.html

@malcolmlewis Yes, i7-12700KF, so it may be of interest what it bring out.

Else, I have also requested the FFmpeg-user list about the ffmpeg Vulkan: hwaccel initialisation returned error, and from there it has been forwarded to Intel to possibly have a look at it.
https://ffmpeg.org//pipermail/ffmpeg-user/2024-August/058562.html

1 Like

AVC → Yes (High 10 not supported)

and you want to use ‘10bit’ …
Vulkan video decoding is a experimental feature. Use VA API.

https://intel.github.io/libvpl/latest/appendix/VPL_apnds_e.html

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