You are not logged in.

#1 2023-09-13 06:14:38

phoenix324
Member
Registered: 2023-08-23
Posts: 106

[Solved] Harware Video Accelration for hybrid Intel/NVIDIA graphics

I am having hard time reading Hardware video acceleration and figuring which drivers and environment variables to use.

System Details:

                         OS : Arch Linux x86_64 
                         Kernel : 6.5.2-arch1-1
                         Resolution : 1920x1080 
                         DE : Hyprland 
                         CPU : Intel i7-9750H (12) @ 2.601GHz 
                         GPU : Intel CoffeeLake-H GT2 [UHD Graphics 630] 
                         GPU : NVIDIA GeForce GTX 1660 Ti Mobile 
                         GPU Driver : Micro-Star International Co., Ltd. [MSI] Cof 

From Intel Section ->

HD Graphics series starting from Broadwell (2014) and newer (e.g. Intel Arc) are supported by intel-media-driver.
GMA 4500 (2008) up to Coffee Lake (2017) are supported by libva-intel-driver.

Which one am i suppose to use ? On arch-discord ( unofficial ) - i am being told to install both.


From Nvidia Section ->

NVIDIA proprietary driver supports via nvidia-utils:
    VDPAU on GeForce 8 series and newer GPUs;
    NVDEC on Fermi and newer GPUs [1];
    NVENC on Kepler and newer GPUs.

The part `newer GPUs` confuses me, from three which one should i use ?


In Translation Layer Section ->

Translation layers

    libva-vdpau-driver — A VDPAU-based backend for VA-API.

    https://cgit.freedesktop.org/vaapi/vdpau-driver || libva-vdpau-driver, libva-vdpau-driver-chromiumAUR, libva-vdpau-driver-vp9-gitAUR

    libvdpau-va-gl — VDPAU driver with OpenGL/VAAPI backend. H.264 only.

    https://github.com/i-rinat/libvdpau-va-gl || libvdpau-va-gl

    nvidia-vaapi-driver — A CUDA NVDEC based backend for VA-API.

    https://github.com/elFarto/nvidia-vaapi-driver/ || libva-nvidia-driverAUR

same confusion is there.

What fundamental i am missing here to understand this?


Ouputs of my current configs ->

[phoenix@ArchLinux ~]$ yay -Qs intel
local/intel-gmmlib 22.3.3-1
    Intel Graphics Memory Management Library
local/intel-gpu-tools 1.27-2
    Tools for development and testing of the Intel DRM driver
local/intel-media-driver 23.3.1-1
    Intel Media Driver for VAAPI — Broadwell+ iGPUs
local/intel-ucode 20230808-1
    Microcode update files for Intel CPUs
local/libmfx 23.2.2-2
    Intel Media SDK dispatcher library
local/libva-intel-driver 2.4.1-2
    VA-API implementation for Intel G45 and HD Graphics family
local/libva-utils 2.19.0-1
    Intel VA-API Media Applications and Scripts for libva
local/nvtop 3.0.2-1
    GPUs process monitoring for AMD, Intel and NVIDIA
local/onetbb 2021.9.0-1
    High level abstract threading library (oneAPI Threading Building Blocks)
[phoenix@ArchLinux ~]$ yay -Qs nvidia
local/egl-wayland 2:1.1.12-1
    EGLStream-based Wayland external platform
local/ffnvcodec-headers 12.0.16.0-1
    FFmpeg version of headers required to interface with Nvidias codec APIs
local/hyprland-nvidia 0.29.1-1
    A dynamic tiling Wayland compositor based on wlroots that doesn't sacrifice on
    its looks. (NVIDIA patch)
local/lib32-nvidia-utils 535.104.05-1
    NVIDIA drivers utilities (32-bit)
local/libva-nvidia-driver 0.0.10-1
    VA-API implementation that uses NVDEC as a backend
local/libvdpau 1.5-2
    Nvidia VDPAU library
local/libxnvctrl 535.104.05-1
    NVIDIA NV-CONTROL X extension
local/nvidia-dkms 535.104.05-1
    NVIDIA drivers - module sources
local/nvidia-prime 1.0-4
    NVIDIA Prime Render Offload configuration and utilities
local/nvidia-prime-rtd3pm 1.0-2
    Configure your discrete NVIDIA GPU to power down when not in use.
local/nvidia-settings 535.104.05-1
    Tool for configuring the NVIDIA graphics driver
local/nvidia-utils 535.104.05-1
    NVIDIA drivers utilities
local/nvtop 3.0.2-1
    GPUs process monitoring for AMD, Intel and NVIDIA
[phoenix@ArchLinux ~]$ yay -Qs libva
local/libva 2.19.0-2
    Video Acceleration (VA) API for Linux
local/libva-intel-driver 2.4.1-2
    VA-API implementation for Intel G45 and HD Graphics family
local/libva-nvidia-driver 0.0.10-1
    VA-API implementation that uses NVDEC as a backend
local/libva-utils 2.19.0-1
    Intel VA-API Media Applications and Scripts for libva
[phoenix@ArchLinux ~]$ LIBVA_DRIVER_NAME=i965 vainfo
Trying display: wayland
vainfo: VA-API version: 1.19 (libva 2.19.0)
vainfo: Driver version: Intel i965 driver for Intel(R) Coffee Lake - 2.4.1
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
[phoenix@ArchLinux ~]$ LIBVA_DRIVER_NAME=iHD vainfo
Trying display: wayland
vainfo: VA-API version: 1.19 (libva 2.19.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 23.3.1 ()
vainfo: Supported profile and entrypoints
      VAProfileNone                   :	VAEntrypointVideoProc
      VAProfileNone                   :	VAEntrypointStats
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Simple            :	VAEntrypointEncSlice
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointFEI
      VAProfileH264Main               :	VAEntrypointEncSliceLP
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointFEI
      VAProfileH264High               :	VAEntrypointEncSliceLP
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileJPEGBaseline           :	VAEntrypointVLD
      VAProfileJPEGBaseline           :	VAEntrypointEncPicture
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline:	VAEntrypointFEI
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSliceLP
      VAProfileVP8Version0_3          :	VAEntrypointVLD
      VAProfileVP8Version0_3          :	VAEntrypointEncSlice
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointEncSlice
      VAProfileHEVCMain               :	VAEntrypointFEI
      VAProfileHEVCMain10             :	VAEntrypointVLD
      VAProfileHEVCMain10             :	VAEntrypointEncSlice
      VAProfileVP9Profile0            :	VAEntrypointVLD
      VAProfileVP9Profile2            :	VAEntrypointVLD
[phoenix@ArchLinux ~]$ LIBVA_DRIVER_NAME=nvidia vainfo
Trying display: wayland
libva error: /usr/lib/dri/nvidia_drv_video.so init failed
vaInitialize failed with error code 1 (operation failed),exit
[phoenix@ArchLinux ~]$ LIBVA_DRIVER_NAME=vdpau vainfo
Trying display: wayland
vaInitialize failed with error code -1 (unknown libva error),exit
[phoenix@ArchLinux ~]$ VDPAU_DRIVER=va_gl vdpauinfo
display: :1   screen: 0
API version: 1
Information string: OpenGL/VAAPI backend for VDPAU

Video surface:

name   width height types
-------------------------------------------
420     4096  4096  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 NV24 YV24 P010 P016 Y_U_V_444_16 
422     4096  4096  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 NV24 YV24 P010 P016 Y_U_V_444_16 
444     4096  4096  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 NV24 YV24 P010 P016 Y_U_V_444_16 
420_16  4096  4096  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 NV24 YV24 P010 P016 Y_U_V_444_16 
422_16  4096  4096  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 NV24 YV24 P010 P016 Y_U_V_444_16 
444_16  4096  4096  NV12 YV12 UYVY YUYV Y8U8V8A8 V8U8Y8A8 NV24 YV24 P010 P016 Y_U_V_444_16 

Decoder capabilities:

name                        level macbs width height
----------------------------------------------------
MPEG1                          --- not supported ---
MPEG2_SIMPLE                   --- not supported ---
MPEG2_MAIN                     --- not supported ---
H264_BASELINE                  51 16384  2048  2048
H264_MAIN                      51 16384  2048  2048
H264_HIGH                      51 16384  2048  2048
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      51 16384  2048  2048
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                      --- not supported ---
HEVC_MAIN_10                   --- not supported ---
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         32768 32768    y  
R8G8B8A8         32768 32768    y  
R10G10B10A2      32768 32768    y  
B10G10R10A2      32768 32768    y  
A8               32768 32768    y  

Bitmap surface:

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

Video mixer:

feature name                    sup
------------------------------------
DEINTERLACE_TEMPORAL             -
DEINTERLACE_TEMPORAL_SPATIAL     -
INVERSE_TELECINE                 -
NOISE_REDUCTION                  -
SHARPNESS                        -
LUMA_KEY                         -
HIGH QUALITY SCALING - L1        -
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              -  
VIDEO_SURFACE_HEIGHT             -  
CHROMA_TYPE                      -  
LAYERS                           -  

attribute name                  sup      min      max
-----------------------------------------------------
BACKGROUND_COLOR                 -  
CSC_MATRIX                       -  
NOISE_REDUCTION_LEVEL            -  
SHARPNESS_LEVEL                  -  
LUMA_KEY_MIN_LUMA                -  
LUMA_KEY_MAX_LUMA                - 
[phoenix@ArchLinux ~]$ VDPAU_DRIVER=nvidia vdpauinfo
display: :1   screen: 0
Error creating VDPAU device: 1

Last edited by phoenix324 (2023-09-13 12:16:45)

Offline

#2 2023-09-13 08:21:38

V1del
Forum Moderator
Registered: 2012-10-16
Posts: 25,237

Re: [Solved] Harware Video Accelration for hybrid Intel/NVIDIA graphics

Use the intel card for everything. You'll lose most of the benefits of doing HWVA (direct output of the decoded video to the screen without unnecessary roundtrips to the CPU) when going over nvidia, because the nvidia card is not attached to your screen.

And there you use intel-media-driver which is the new and actively maintained VAAPI implementation for GPUs as new as yours, you do not need libva-intel-driver. As for translation layers, you can mostly ignore those/depends on your usecases. Since intel doesn't natively do VDPAU  (and VAAPI has basically become the dominant API for video out) there are not going to be many tools still using VDPAU (those that  really benefit from nvidia, e.g. if you want to accelerate ffmpeg encoding/decoding/OBS or similar, can and will benefit from NVENC/NVDEC and you can use them there)

In a general sense if you are talking about browsers/video players, use VAAPI and the intel implementation, for specialized usecases that benefit from the nvidia card and that have the relevant implementation use NVENC/NVDEC.

Offline

#3 2023-09-13 12:16:27

phoenix324
Member
Registered: 2023-08-23
Posts: 106

Re: [Solved] Harware Video Accelration for hybrid Intel/NVIDIA graphics

Thank you.

Offline

Board footer

Powered by FluxBB