Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hardware Video Decoding broken on all browsers... except two #1835

Open
DarkGhostHunter opened this issue Oct 26, 2024 · 15 comments
Open

Hardware Video Decoding broken on all browsers... except two #1835

DarkGhostHunter opened this issue Oct 26, 2024 · 15 comments
Labels
bug Something isn't working

Comments

@DarkGhostHunter
Copy link

DarkGhostHunter commented Oct 26, 2024

Describe the bug

I've tried multiple browsers against YouTube, which is using VP9 codec for all videos, and all of these do play the video using the CPU rather than the VP9 hardware video decoder.

As expected, CPU usage spikes as the video resolution rises. Weaker CPUs will struggle, and older laptops will last less on battery.

What did you expect to happen?

To use the Hardware Video Decoder from the platform.

Output of rpm-ostree status

State: idle
AutomaticUpdates: stage; rpm-ostreed-automatic.timer: last run 28min ago
Deployments:
● ostree-image-signed:docker://ghcr.io/ublue-os/bluefin-dx:stable
                   Digest: sha256:6268e5ef31ce6e6bed0b07f0c46e8fadccbfa5b7f7594008d623db1ae72376a6
                  Version: 40.20241019.0 (2024-10-20T22:26:08Z)

  ostree-image-signed:docker://ghcr.io/ublue-os/bluefin-dx:latest
                   Digest: sha256:dd0b5df2b71d07462b41a2f9143df2928ef5361898365e5455bcfd693bda6e73
                  Version: 40.20240920.0 (2024-09-21T04:53:07Z)

(Yeah, moved from latest to stable because latest borked GNOME Shell preferences on their latest, but I believe I saw the same problem of hardware video acceleration).

Output of groups

amazingdev wheel

Extra information or context

The platform is a Ryzen 8845HS w/ Radeon 780M. It's confirmed to support VP9:

Trying display: wayland
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib64/dri/radeonsi_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.22 (libva 2.21.0)
vainfo: Driver version: Mesa Gallium driver 24.1.7 for AMD Radeon Graphics (radeonsi, gfx1103_r1, LLVM 18.1.8, DRM 3.57, 6.10.10-200.fc40.x86_64)
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

I've tried the following browsers against the same 4K video, all Flatpaks:

Browser Version Hardware Decoding GPU HA (Flatseal)
Zen¹ 1.0.1-a.12 (Firefox 131.0.3) (64-bit) Yes Works even when disabled
GNOME Web (Epiphany) 47.2 (WebKit) Yes Requires it²
Chromium 130.0.6723.58 (64-bit) No Not even when enabled
Google Chrome 130.0.6723.69 (64-bit) No Not even when enabled
Google Chrome (dev) 132.0.6793.2 (64-bit) No Not even when enabled
Mozilla Firefox 131.0.3 (64-bit) No Not even when enabled
Microsoft Edge 130.0.2849.56 (64-bit) No Not even when enabled
Brave 1.71.118 (Chromium 130.0.6723.70) (64-bit) No Not even when enabled
Vivaldi 7.0.3495.6 (Chromium 130.0.6723.70) (64-bit) No Not even when enabled
LibreWolf 131.0.3-1 No Not even when enabled

GPU Decoding was measured through Mission Center 0.6.1.

I will re-test all of them by forcing them to run in Wayland, with Graphic Acceleration. Added GPU HA via Flatseal.

¹: Zen works with Video Hardware Decoding even if the device=dri option from Flatseal comes disabled by default.
²: I loaded GNOME Web on X11 and Hardware Video Decoding was available. I disabled it via Flatseal and the video was decoded by the CPU.
³: Most browsers don't work on Wayland, except Zen, GNOME Web (Epiphany) and LibreWolf.

Related

@DarkGhostHunter DarkGhostHunter changed the title Hardware Video Decoding broken on all browsers... except Zen Hardware Video Decoding broken on all browsers... except two Oct 26, 2024
@dosubot dosubot bot added the bug Something isn't working label Oct 26, 2024
@DarkGhostHunter
Copy link
Author

DarkGhostHunter commented Oct 27, 2024

I stumbled upon an Arch Wiki for enabling hardware acceleration on Chromium based browsers.

What it worked was the Vulkan line:

When using Vulkan, the following flags are required and might also be sufficient on Chromium 126 and Mesa 24.1:

~/.config/chromium-flags.conf

--enable-features=VaapiVideoDecoder,VaapiIgnoreDriverChecks,Vulkan,DefaultANGLEVulkan,VulkanFromANGLE

The config file can be found at ~/.var/app/{your.browser.name}/config/{name}-flags.conf. If it doesn't exists, you may need to create it. Also, flags must be written separated by a new line.

I tried to make Chrome work on Wayland with Video Hardware Acceleration successfully with these flags, if anyone is interested in running it through Wayland. I also disabled the X11 socket on Flatseal just to ensure Chrome doesn't touches it.

--enable-features=VaapiVideoDecoder,VaapiIgnoreDriverChecks,Vulkan,DefaultANGLEVulkan,VulkanFromANGLE,UseOzonePlatform
--ozone-platform=wayland

I tried using --use-gl=vulkan and --use-gl=egl but didn't work. Not sure since I swiped through many flags. YMMV if you're under NVIDIA because driver support for Wayland is sketchy.

@DarkGhostHunter
Copy link
Author

DarkGhostHunter commented Oct 30, 2024

I'll add to this that this will work on AMD graphics card exvlusively.

I've tested on an Intel iGPU (Intel® HD Graphics 630 KBL GT2) and there was no acceleration on Chrome (and probably all other Chromium-based browsers). I also enabled GPU HA via Flatseal, and set the variable LIBVA_DRIVER_NAME=iHD (because that's the library being used for Hardware Video Decode), to no avail.

GNOME Web (Epiphany) and Firefox worked out of the box, both in Wayland and X11. GNOME Web requires GPU HA, while Firefox won't, for Hardware Video Acceleration.

This may be a bug on Chromium side of things, so until that is resolved, you should probably switch to other browser in the meantime if your workflow is video-heavy.

@bsherman
Copy link
Contributor

bsherman commented Nov 2, 2024

First, it's not Chromium, but I started with the related issue linked in the main description and started by troubleshooting with Firefox.

See my results here: #1409 (comment)

TL;DR of that link... Firefox flatpak seems to be working great for me with all default flapak and browser settings on Intel.

And, my system is a bluefin stable nvidia image ( Version: 40.20241101.0 )... So Fedora 40... but this is after the recent fixes to nvidia driver configs last week.

So, I did the same thing with Chrome's most recent flatpak (Version 130.0.6723.91) as I did for Firefox.

  • I reset all settings in Flatseal
  • In chrome://flags I reset all settings to defaults
  • The only thing I have in chrome-flags.conf is: --ozone-platform=wayland (though I'm not sure it's needed)

Finally, I pulled up the same 4K video linked above and tested it both in Firefox and Chromium.

In Firefox I do see the Intel GPU enc/dec hardware getting used, but NOT in Chrome and also Chrome shows higher CPU usage.

So...

  • quit Chrome
  • add: --enable-features=VaapiVideoDecodeLinuxGL to chrome-flags.conf
  • Restart Chrome and watch same video

I now see HW video enc/dec being used on the iGPU and low CPU usage.

So, generally speaking, on at least Intel hardware, Chrome seems to be working with vaapi for HW accelerated decoding.

There is a report in bazzite of vaapi not working for AMD.

I don't have access to AMD hardware for a few days, but at least this much validation is done. I'll do some more testing in a few days when I get access to that hardware again.

@DarkGhostHunter
Copy link
Author

DarkGhostHunter commented Nov 2, 2024

I'm trying the same flags on Chrome (130.0.6723.91) and Edge (130.0.2849.56) and no dice. Plus, the driver log on chrome://gpu is full of:

[61:110:1102/152505.550282:ERROR:gbm_pixmap_wayland.cc(82)] : Cannot create bo with format= YUV_420_BIPLANAR and usage=SCANOUT_CPU_READ_WRITE
[61:110:1102/152505.550377:ERROR:gpu_channel.cc(503)] : Buffer Handle is null.

Just for show I used this flags:

--enable-features=VaapiVideoDecoder,VaapiIgnoreDriverChecks,VaapiVideoDecodeLinuxGL,Vulkan,DefaultANGLEVulkan,VulkanFromANGLE,UseOzonePlatform
--ozone-platform=wayland

No dice. Also tried both LIBVA_DRIVER_NAME=iHD and LIBVA_DRIVER_NAME=i965 environment key-value, also no dice. Note that this system (Intel® HD Graphics 630 KBL GT2) is using iHD.

Trying display: wayland
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.22 (libva 2.21.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 24.3.4 (Full Feature Build)
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

Same results... but at least Vulkan is enabled (ANGLE_VULKAN). Not that it makes a difference on video acceleration.

@bsherman
Copy link
Contributor

bsherman commented Nov 2, 2024

@DarkGhostHunter

I can tell you, I only have the following:

$ cat chrome-flags.conf
--ozone-platform=wayland \
--enable-features=VaapiVideoDecodeLinuxGL

If I enable Vulkan, Chrome stops using the intel haw decoder.

@DarkGhostHunter
Copy link
Author

DarkGhostHunter commented Nov 2, 2024

Weird, because I used only those flags and the results were the same. Enabling Vulkan doesn't make any difference, as by default Chrome uses ANGLE_OPENGL.

Can you output your chrome://gpu first table? You can just screenshot it too.

@bsherman
Copy link
Contributor

bsherman commented Nov 2, 2024

with this:

$ cat chrome-flags.conf
--ozone-platform=wayland \
--enable-features=VaapiVideoDecodeLinuxGL

I get working hardware acceleration:
Image

Graphics Feature Status
=======================
*   Canvas: Hardware accelerated
*   Canvas out-of-process rasterization: Enabled
*   Direct Rendering Display Compositor: Disabled
*   Compositing: Hardware accelerated
*   Multiple Raster Threads: Enabled
*   OpenGL: Enabled
*   Rasterization: Hardware accelerated
*   Raw Draw: Disabled
*   Skia Graphite: Disabled
*   Video Decode: Hardware accelerated
*   Video Encode: Software only. Hardware acceleration disabled
*   Vulkan: Disabled
*   WebGL: Hardware accelerated
*   WebGL2: Hardware accelerated
*   WebGPU: Disabled
*   WebNN: Disabled

Version Information
===================
Data exported              : 2024-11-02T22:23:27.564Z
Chrome version             : Chrome/130.0.6723.91
Operating system           : Linux 6.11.3-200.fc40.x86_64
Software rendering list URL: https://chromium.googlesource.com/chromium/src/+/53ac076783696778ecc8f360ea31765c29c240ad/gpu/config/software_rendering_list.json
Driver bug list URL        : https://chromium.googlesource.com/chromium/src/+/53ac076783696778ecc8f360ea31765c29c240ad/gpu/config/gpu_driver_bug_list.json
ANGLE commit id            : fffbc739779a
2D graphics backend        : Skia/130 3c64459d5df2fa9794b277f0959ed8a92552bf4c
Command Line               : /app/extra/chrome --enable-features=VaapiVideoDecodeLinuxGL --disable-features=WebAssemblyTrapHandler,DesktopPWAsRunOnOsLogin --flag-switches-begin --flag-switches-end

Driver Information
==================
Initialization time             : 1481
In-process GPU                  : false
Passthrough Command Decoder     : true
Sandboxed                       : false
GPU0                            : VENDOR= 0x10de, DEVICE=0x25a0, DRIVER_VENDOR=Mesa, DRIVER_VERSION=24.2.5
GPU1                            : VENDOR= 0x8086, DEVICE=0x46a6, DRIVER_VENDOR=Mesa, DRIVER_VERSION=24.2.5 *ACTIVE*
Optimus                         : true
AMD switchable                  : false
Pixel shader version            : 1.00
Vertex shader version           : 1.00
Max. MSAA samples               : 16
Machine model name              : 
Machine model version           : 
GL implementation parts         : (gl=egl-angle,angle=opengl)
Display type                    : ANGLE_OPENGL
GL_VENDOR                       : Google Inc. (Intel)
GL_RENDERER                     : ANGLE (Intel, Mesa Intel(R) Graphics (ADL GT2), OpenGL 4.6 (Core Profile) Mesa 24.2.5 (git-3b9fcb7e4d))
GL_VERSION                      : OpenGL ES 2.0.0 (ANGLE 2.1.23876 git hash: fffbc739779a)
GL_EXTENSIONS                   : GL_AMD_performance_monitor GL_ANGLE_base_vertex_base_instance_shader_builtin GL_ANGLE_client_arrays GL_ANGLE_compressed_texture_etc GL_ANGLE_depth_texture GL_ANGLE_framebuffer_blit GL_ANGLE_framebuffer_multisample GL_ANGLE_get_serialized_context_string GL_ANGLE_get_tex_level_parameter GL_ANGLE_instanced_arrays GL_ANGLE_logic_op GL_ANGLE_memory_size GL_ANGLE_polygon_mode GL_ANGLE_program_binary_readiness_query GL_ANGLE_program_cache_control GL_ANGLE_provoking_vertex GL_ANGLE_request_extension GL_ANGLE_robust_client_memory GL_ANGLE_texture_compression_dxt3 GL_ANGLE_texture_compression_dxt5 GL_ANGLE_texture_external_update GL_ANGLE_texture_rectangle GL_ANGLE_translated_shader_source GL_APPLE_clip_distance GL_ARB_sync GL_CHROMIUM_bind_generates_resource GL_CHROMIUM_bind_uniform_location GL_CHROMIUM_color_buffer_float_rgb GL_CHROMIUM_color_buffer_float_rgba GL_CHROMIUM_copy_texture GL_CHROMIUM_lose_context GL_CHROMIUM_sync_query GL_EXT_blend_func_extended GL_EXT_blend_minmax GL_EXT_clear_texture GL_EXT_clip_control GL_EXT_color_buffer_half_float GL_EXT_compressed_ETC1_RGB8_sub_texture GL_EXT_debug_label GL_EXT_debug_marker GL_EXT_depth_clamp GL_EXT_discard_framebuffer GL_EXT_disjoint_timer_query GL_EXT_draw_buffers GL_EXT_draw_elements_base_vertex GL_EXT_float_blend GL_EXT_frag_depth GL_EXT_instanced_arrays GL_EXT_map_buffer_range GL_EXT_memory_object GL_EXT_memory_object_fd GL_EXT_multisample_compatibility GL_EXT_occlusion_query_boolean GL_EXT_polygon_offset_clamp GL_EXT_read_format_bgra GL_EXT_robustness GL_EXT_sRGB GL_EXT_sRGB_write_control GL_EXT_semaphore GL_EXT_semaphore_fd GL_EXT_shader_texture_lod GL_EXT_shadow_samplers GL_EXT_texture_border_clamp GL_EXT_texture_compression_bptc GL_EXT_texture_compression_dxt1 GL_EXT_texture_compression_rgtc GL_EXT_texture_compression_s3tc_srgb GL_EXT_texture_filter_anisotropic GL_EXT_texture_format_BGRA8888 GL_EXT_texture_mirror_clamp_to_edge GL_EXT_texture_norm16 GL_EXT_texture_rg GL_EXT_texture_sRGB_decode GL_EXT_texture_storage GL_EXT_texture_type_2_10_10_10_REV GL_EXT_unpack_subimage GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_KHR_debug GL_KHR_parallel_shader_compile GL_KHR_robustness GL_KHR_texture_compression_astc_ldr GL_KHR_texture_compression_astc_sliced_3d GL_MESA_framebuffer_flip_y GL_NV_depth_buffer_float2 GL_NV_fence GL_NV_framebuffer_blit GL_NV_pack_subimage GL_NV_pixel_buffer_object GL_NV_polygon_mode GL_NV_read_depth GL_NV_read_stencil GL_OES_compressed_EAC_R11_signed_texture GL_OES_compressed_EAC_R11_unsigned_texture GL_OES_compressed_EAC_RG11_signed_texture GL_OES_compressed_EAC_RG11_unsigned_texture GL_OES_compressed_ETC1_RGB8_texture GL_OES_compressed_ETC2_RGB8_texture GL_OES_compressed_ETC2_RGBA8_texture GL_OES_compressed_ETC2_punchthroughA_RGBA8_texture GL_OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture GL_OES_compressed_ETC2_sRGB8_alpha8_texture GL_OES_compressed_ETC2_sRGB8_texture GL_OES_depth24 GL_OES_depth32 GL_OES_depth_texture GL_OES_draw_elements_base_vertex GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_get_program_binary GL_OES_mapbuffer GL_OES_packed_depth_stencil GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_surfaceless_context GL_OES_texture_3D GL_OES_texture_border_clamp GL_OES_texture_float GL_OES_texture_float_linear GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_vertex_array_object GL_WEBGL_video_texture
Disabled Extensions             : GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_MESA_framebuffer_flip_y
Disabled WebGL Extensions       : 
Window system binding vendor    : Google Inc. (Intel)
Window system binding version   : 1.5 (ANGLE 2.1.23876 git hash: fffbc739779a)
Window system binding extensions: EGL_EXT_create_context_robustness EGL_KHR_create_context EGL_KHR_get_all_proc_addresses EGL_ANGLE_create_context_webgl_compatibility EGL_CHROMIUM_create_context_bind_generates_resource EGL_CHROMIUM_sync_control EGL_ANGLE_sync_control_rate EGL_EXT_pixel_format_float EGL_KHR_surfaceless_context EGL_ANGLE_display_texture_share_group EGL_ANGLE_display_semaphore_share_group EGL_ANGLE_create_context_client_arrays EGL_ANGLE_program_cache_control EGL_ANGLE_robust_resource_initialization EGL_ANGLE_create_context_extensions_enabled EGL_ANDROID_blob_cache EGL_ANDROID_recordable EGL_ANGLE_create_context_backwards_compatible EGL_KHR_create_context_no_error EGL_NOK_texture_from_pixmap EGL_KHR_reusable_sync
XDG_CURRENT_DESKTOP             : GNOME
XDG_SESSION_TYPE                : wayland
GDMSESSION                      : gnome
Ozone platform                  : x11
Direct rendering version        : unknown
Reset notification strategy     : 0x8252
GPU process crash count         : 0
gfx::BufferFormats supported for allocation and texturing: R_8: supported,  R_16: supported,  RG_88: supported,  RG_1616: supported,  BGR_565: supported,  RGBA_4444: supported,  RGBX_8888: supported,  RGBA_8888: supported,  BGRX_8888: supported,  BGRA_1010102: supported,  RGBA_1010102: supported,  BGRA_8888: supported,  RGBA_F16: supported,  YVU_420: not supported,  YUV_420_BIPLANAR: not supported,  YUVA_420_TRIPLANAR: supported,  P010: not supported

@DarkGhostHunter
Copy link
Author

Command Line               : /app/extra/chrome --enable-features=VaapiVideoDecodeLinuxGL --disable-features=WebAssemblyTrapHandler,DesktopPWAsRunOnOsLogin --flag-switches-begin --flag-switches-end
XDG_SESSION_TYPE                : wayland
GDMSESSION                      : gnome
Ozone platform                  : x11

You're running on X11 (XWayland, to be precise). Also, Tiger Lake GT2 (Gen 12.1).

Does vainfo shows you're using iHD or i965 for video acceleration purposes?

@DarkGhostHunter
Copy link
Author

DarkGhostHunter commented Nov 5, 2024

I fixed it on my end by adding custom kernel arguments, even if it taints the kernel, by following the Arch guide to enable HVA on Intel graphics, but adding the kernel parameters via rpm-ostree instead of adding a modprobe file.

rpm-ostree kargs --add=i915.enable_guc=3

For some reason, using dsmeg | grep i915 I found these lines:

[    3.757788] i915 0000:00:02.0: [drm] Found KABYLAKE (device ID 591b) display version 9.00
[    3.757912] i915 0000:00:02.0: [drm] GT0: Incompatible option enable_guc=3 - GuC submission is N/A
[    3.981785] i915 0000:00:02.0: vgaarb: deactivate vga console
[    3.986527] i915 0000:00:02.0: vgaarb: VGA decodes changed: olddecodes=io+mem,decodes=io+mem:owns=io+mem
[    3.990924] i915 0000:00:02.0: [drm] Finished loading DMC firmware i915/kbl_dmc_ver1_04.bin (v1.4)
[    4.044745] i915 0000:00:02.0: [drm] GT0: GuC firmware i915/kbl_guc_70.1.1.bin version 70.1.1
[    4.044751] i915 0000:00:02.0: [drm] GT0: HuC firmware i915/kbl_huc_4.0.0.bin version 4.0.0
[    4.070188] i915 0000:00:02.0: [drm] GT0: HuC: authenticated for all workloads
[    4.070193] i915 0000:00:02.0: [drm] GT0: GUC: submission disabled
[    4.070195] i915 0000:00:02.0: [drm] GT0: GUC: SLPC disabled

Th thing is, if I put enable_guc=2 to avoid Incompatible option enable_guc=3, acceleration doesn't work.

People without Video Hardware Acceleration on Intel iGPU (for any reason) may need kernel parameters to enable it. Also, that kernel parameter is the only one added to the bunch.

After that, Chrome and Edge loaded, but they needed the --enable-features=VaapiVideoDecodeLinuxGL for video acceleration.

@bsherman Can you return the output of rpm-ostree kargs and dsmg | grep i915? The first returns the kernel arguments you're using, while the second shows how the drivers load.

@bsherman
Copy link
Contributor

bsherman commented Nov 5, 2024

You're running on X11 (XWayland, to be precise). Also, Tiger Lake GT2 (Gen 12.1).

@DarkGhostHunter I completely missed that. :-) Whoops

Does vainfo shows you're using iHD or i965 for video acceleration purposes?

iHD

$ vainfo|head
libva info: VA-API version 1.22.0
libva info: Trying to open /usr/lib64/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_22
libva info: va_openDriver() returns 0
Trying display: wayland
vainfo: VA-API version: 1.22 (libva 2.21.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 24.3.4 (Full Feature Build)
vainfo: Supported profile and entrypoints
      VAProfileNone                   :	VAEntrypointVideoProc
      VAProfileNone                   :	VAEntrypointStats
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Simple            :	VAEntrypointEncSlice
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointEncSlice

Also, I retested Chrome on this machine with wayland, re-verifying settings:

  • flatpak Chrome Version 130.0.6723.91, no flatpak overrides
  • chrome-flags.conf now only contains: --enable-features=VaapiVideoDecodeLinuxGL
  • in chrome://flags i set Preferred Ozone platform to Wayland

Image

Graphics Feature Status
=======================
*   Canvas: Hardware accelerated
*   Canvas out-of-process rasterization: Enabled
*   Direct Rendering Display Compositor: Disabled
*   Compositing: Hardware accelerated
*   Multiple Raster Threads: Enabled
*   OpenGL: Enabled
*   Rasterization: Hardware accelerated
*   Raw Draw: Disabled
*   Skia Graphite: Disabled
*   Video Decode: Hardware accelerated
*   Video Encode: Software only. Hardware acceleration disabled
*   Vulkan: Disabled
*   WebGL: Hardware accelerated
*   WebGL2: Hardware accelerated
*   WebGPU: Disabled
*   WebNN: Disabled

Version Information
===================
Data exported              : 2024-11-05T14:21:43.419Z
Chrome version             : Chrome/130.0.6723.91
Operating system           : Linux 6.11.3-200.fc40.x86_64
Software rendering list URL: https://chromium.googlesource.com/chromium/src/+/53ac076783696778ecc8f360ea31765c29c240ad/gpu/config/software_rendering_list.json
Driver bug list URL        : https://chromium.googlesource.com/chromium/src/+/53ac076783696778ecc8f360ea31765c29c240ad/gpu/config/gpu_driver_bug_list.json
ANGLE commit id            : fffbc739779a
2D graphics backend        : Skia/130 3c64459d5df2fa9794b277f0959ed8a92552bf4c
Command Line               : /app/extra/chrome --enable-features=VaapiVideoDecodeLinuxGL --disable-features=WebAssemblyTrapHandler,DesktopPWAsRunOnOsLogin --flag-switches-begin --ozone-platform-hint=wayland --flag-switches-end --ozone-platform=wayland

Driver Information
==================
Initialization time             : 1470
In-process GPU                  : false
Passthrough Command Decoder     : true
Sandboxed                       : false
GPU0                            : VENDOR= 0x10de, DEVICE=0x25a0, DRIVER_VENDOR=Mesa, DRIVER_VERSION=24.2.5
GPU1                            : VENDOR= 0x8086, DEVICE=0x46a6, DRIVER_VENDOR=Mesa, DRIVER_VERSION=24.2.5 *ACTIVE*
Optimus                         : true
AMD switchable                  : false
Pixel shader version            : 1.00
Vertex shader version           : 1.00
Max. MSAA samples               : 16
Machine model name              : 
Machine model version           : 
GL implementation parts         : (gl=egl-angle,angle=opengl)
Display type                    : ANGLE_OPENGL
GL_VENDOR                       : Google Inc. (Intel)
GL_RENDERER                     : ANGLE (Intel, Mesa Intel(R) Graphics (ADL GT2), OpenGL ES 3.2 Mesa 24.2.5 (git-3b9fcb7e4d))
GL_VERSION                      : OpenGL ES 2.0.0 (ANGLE 2.1.23876 git hash: fffbc739779a)
GL_EXTENSIONS                   : GL_AMD_performance_monitor GL_ANGLE_base_vertex_base_instance_shader_builtin GL_ANGLE_client_arrays GL_ANGLE_compressed_texture_etc GL_ANGLE_depth_texture GL_ANGLE_framebuffer_blit GL_ANGLE_framebuffer_multisample GL_ANGLE_get_serialized_context_string GL_ANGLE_get_tex_level_parameter GL_ANGLE_instanced_arrays GL_ANGLE_memory_size GL_ANGLE_program_binary_readiness_query GL_ANGLE_program_cache_control GL_ANGLE_request_extension GL_ANGLE_robust_client_memory GL_ANGLE_texture_compression_dxt3 GL_ANGLE_texture_compression_dxt5 GL_ANGLE_texture_external_update GL_ANGLE_translated_shader_source GL_ARB_sync GL_CHROMIUM_bind_generates_resource GL_CHROMIUM_bind_uniform_location GL_CHROMIUM_color_buffer_float_rgba GL_CHROMIUM_copy_texture GL_CHROMIUM_lose_context GL_CHROMIUM_sync_query GL_EXT_blend_func_extended GL_EXT_blend_minmax GL_EXT_clear_texture GL_EXT_clip_control GL_EXT_color_buffer_half_float GL_EXT_compressed_ETC1_RGB8_sub_texture GL_EXT_debug_label GL_EXT_debug_marker GL_EXT_depth_clamp GL_EXT_discard_framebuffer GL_EXT_disjoint_timer_query GL_EXT_draw_buffers GL_EXT_draw_elements_base_vertex GL_EXT_float_blend GL_EXT_frag_depth GL_EXT_instanced_arrays GL_EXT_map_buffer_range GL_EXT_memory_object GL_EXT_memory_object_fd GL_EXT_occlusion_query_boolean GL_EXT_polygon_offset_clamp GL_EXT_read_format_bgra GL_EXT_robustness GL_EXT_sRGB GL_EXT_sRGB_write_control GL_EXT_semaphore GL_EXT_semaphore_fd GL_EXT_shader_framebuffer_fetch GL_EXT_shader_framebuffer_fetch_non_coherent GL_EXT_shadow_samplers GL_EXT_texture_border_clamp GL_EXT_texture_compression_bptc GL_EXT_texture_compression_dxt1 GL_EXT_texture_compression_rgtc GL_EXT_texture_compression_s3tc_srgb GL_EXT_texture_filter_anisotropic GL_EXT_texture_format_BGRA8888 GL_EXT_texture_mirror_clamp_to_edge GL_EXT_texture_norm16 GL_EXT_texture_rg GL_EXT_texture_sRGB_decode GL_EXT_texture_storage GL_EXT_texture_type_2_10_10_10_REV GL_EXT_unpack_subimage GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent GL_KHR_debug GL_KHR_parallel_shader_compile GL_KHR_robustness GL_KHR_texture_compression_astc_ldr GL_KHR_texture_compression_astc_sliced_3d GL_MESA_framebuffer_flip_y GL_NV_depth_buffer_float2 GL_NV_fence GL_NV_framebuffer_blit GL_NV_pack_subimage GL_NV_pixel_buffer_object GL_NV_read_depth GL_NV_read_stencil GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_EGL_sync GL_OES_compressed_EAC_R11_signed_texture GL_OES_compressed_EAC_R11_unsigned_texture GL_OES_compressed_EAC_RG11_signed_texture GL_OES_compressed_EAC_RG11_unsigned_texture GL_OES_compressed_ETC1_RGB8_texture GL_OES_compressed_ETC2_RGB8_texture GL_OES_compressed_ETC2_RGBA8_texture GL_OES_compressed_ETC2_punchthroughA_RGBA8_texture GL_OES_compressed_ETC2_punchthroughA_sRGB8_alpha_texture GL_OES_compressed_ETC2_sRGB8_alpha8_texture GL_OES_compressed_ETC2_sRGB8_texture GL_OES_depth24 GL_OES_draw_elements_base_vertex GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_get_program_binary GL_OES_mapbuffer GL_OES_packed_depth_stencil GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_surfaceless_context GL_OES_texture_3D GL_OES_texture_border_clamp GL_OES_texture_float GL_OES_texture_float_linear GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_vertex_array_object GL_WEBGL_video_texture
Disabled Extensions             : GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent
Disabled WebGL Extensions       : 
Window system binding vendor    : Google Inc. (Intel)
Window system binding version   : 1.5 (ANGLE 2.1.23876 git hash: fffbc739779a)
Window system binding extensions: EGL_EXT_create_context_robustness EGL_KHR_create_context EGL_KHR_image_base EGL_KHR_gl_colorspace EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_cubemap_image EGL_KHR_gl_texture_3D_image EGL_KHR_gl_renderbuffer_image EGL_KHR_get_all_proc_addresses EGL_KHR_fence_sync EGL_KHR_wait_sync EGL_ANGLE_create_context_webgl_compatibility EGL_CHROMIUM_create_context_bind_generates_resource EGL_KHR_swap_buffers_with_damage EGL_EXT_pixel_format_float EGL_KHR_surfaceless_context EGL_ANGLE_display_texture_share_group EGL_ANGLE_display_semaphore_share_group EGL_ANGLE_create_context_client_arrays EGL_ANGLE_program_cache_control EGL_ANGLE_robust_resource_initialization EGL_ANGLE_create_context_extensions_enabled EGL_ANDROID_blob_cache EGL_ANDROID_recordable EGL_ANDROID_native_fence_sync EGL_ANGLE_create_context_backwards_compatible EGL_KHR_no_config_context EGL_KHR_create_context_no_error EGL_EXT_image_dma_buf_import EGL_EXT_image_dma_buf_import_modifiers EGL_KHR_reusable_sync EGL_ANGLE_external_context_and_surface EGL_ANGLE_context_virtualization
XDG_CURRENT_DESKTOP             : GNOME
XDG_SESSION_TYPE                : wayland
GDMSESSION                      : gnome
Interfaces exposed by the Wayland compositor: wl_compositor:6 wl_shm:2 wl_output:4 zxdg_output_manager_v1:3 wl_data_device_manager:3 zwp_primary_selection_device_manager_v1:1 wl_subcompositor:1 xdg_wm_base:6 gtk_shell1:5 wp_viewporter:1 wp_fractional_scale_manager_v1:1 zwp_pointer_gestures_v1:3 zwp_tablet_manager_v2:1 wl_seat:8 zwp_relative_pointer_manager_v1:1 zwp_pointer_constraints_v1:1 zxdg_exporter_v2:1 zxdg_importer_v2:1 zxdg_exporter_v1:1 zxdg_importer_v1:1 wp_single_pixel_buffer_manager_v1:1 zwp_keyboard_shortcuts_inhibit_manager_v1:1 zwp_text_input_manager_v3:1 wp_presentation:1 xdg_activation_v1:1 zwp_idle_inhibit_manager_v1:1 wp_linux_drm_syncobj_manager_v1:1 wl_output:4 wl_output:4 zwp_linux_dmabuf_v1:5 wl_drm:2
Ozone platform                  : wayland
Direct rendering version        : unknown
Reset notification strategy     : 0x8252
GPU process crash count         : 0
gfx::BufferFormats supported for allocation and texturing: R_8: supported,  R_16: supported,  RG_88: supported,  RG_1616: supported,  BGR_565: supported,  RGBA_4444: supported,  RGBX_8888: supported,  RGBA_8888: supported,  BGRX_8888: supported,  BGRA_1010102: supported,  RGBA_1010102: supported,  BGRA_8888: supported,  RGBA_F16: supported,  YVU_420: not supported,  YUV_420_BIPLANAR: not supported,  YUVA_420_TRIPLANAR: supported,  P010: not supported
$ sudo dmesg|grep i915
[    2.700876] i915 0000:00:02.0: [drm] Found ALDERLAKE_P (device ID 46a6) display version 13.00
[    2.701488] i915 0000:00:02.0: [drm] VT-d active for gfx access
[    2.701524] i915 0000:00:02.0: vgaarb: deactivate vga console
[    2.701571] i915 0000:00:02.0: [drm] Using Transparent Hugepages
[    2.701944] i915 0000:00:02.0: vgaarb: VGA decodes changed: olddecodes=io+mem,decodes=io+mem:owns=io+mem
[    2.705386] i915 0000:00:02.0: [drm] Finished loading DMC firmware i915/adlp_dmc.bin (v2.20)
[    2.747475] i915 0000:00:02.0: [drm] GT0: GuC firmware i915/adlp_guc_70.bin version 70.29.2
[    2.747479] i915 0000:00:02.0: [drm] GT0: HuC firmware i915/tgl_huc.bin version 7.9.3
[    2.762175] i915 0000:00:02.0: [drm] GT0: HuC: authenticated for all workloads
[    2.763115] i915 0000:00:02.0: [drm] GT0: GUC: submission enabled
[    2.763116] i915 0000:00:02.0: [drm] GT0: GUC: SLPC enabled
[    2.763600] i915 0000:00:02.0: [drm] GT0: GUC: RC enabled

I have no custom kargs... nor anything custom in /etc/modprobe.d etc...

This is now a fresh installation.

@bsherman
Copy link
Contributor

bsherman commented Nov 5, 2024

I fixed it on my end by adding custom kernel arguments, even if it taints the kernel, by following the Arch guide to enable HVA on Intel graphics, but adding the kernel parameters via rpm-ostree instead of adding a modprobe file.

rpm-ostree kargs --add=i915.enable_guc=3

Th thing is, if I put enable_guc=2 to avoid Incompatible option enable_guc=3, acceleration doesn't work.

People without Video Hardware Acceleration on Intel iGPU (for any reason) may need kernel parameters to enable it. Also, that kernel parameter is the only one added to the bunch.

After that, Chrome and Edge loaded, but they needed the --enable-features=VaapiVideoDecodeLinuxGL for video acceleration.

This is a good summary. Unfortunately that seems to be a quirk of the intel driver on specific hardware.

But thanks for reporting the problem and a workaround.

@DarkGhostHunter
Copy link
Author

It cold be added as a ujust recipe if it doesn't detect GuC or HuC submission in dsmeg and the user doesn't have HVA.

Also, weird that I can submit GuC and still get HVA, while your installation does it without kernel flags and has HVA. Was because I rebased from NVIDIA?

@n3thshan
Copy link

n3thshan commented Nov 6, 2024

i had a similar experience with firefox where h264 wasnt hardware decoded but vp9 and av1 were. i updated to the latest 132.0.1 and now the issue is fixed. Please try this update and see

@bsherman
Copy link
Contributor

bsherman commented Nov 7, 2024

It cold be added as a ujust recipe if it doesn't detect GuC or HuC submission in dsmeg and the user doesn't have HVA.

I'm pushing back on new ujust recipes right now... and for something like this, we don't yet know what to even code up for it.

I think this should be a bug reports upstream as it's is a firmware/kernel driver issue... this almost certainly could be replicated on Fedora Silverblue (or Workstation) for the same kernel version. And there may even be a bug report if we go looking.

Also, weird that I can submit GuC and still get HVA, while your installation does it without kernel flags and has HVA. Was because I rebased from NVIDIA?

No, I don't think it has to do with rebasing. I think it's just the different hardware.

@DarkGhostHunter
Copy link
Author

Okay... how we push the bug report upstream?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants