Repository navigation
[bug][cef] Linux: WebGPU only offers SwiftShader in tauri-runtime-cef, while plain CEF 152.0.6 (cefsimple) finds the hardware GPU #16203
Description
Activity
I fixed this once for bundles before the switch to gtk4, so i don't know if that's what broke it. What did you test here exactly?
tauri devortauri build? And in case of the latter, which bundle type (deb, rpm, appimage)?- addedstatus: needs triageThis issue needs to triage, applied to new issuesThis issue needs to triage, applied to new issues
on Oct 4, 2026 Same failure reproduces with a shipped end-user app built on
tauri-runtime-cef3.0.0-alpha: Koharu 0.83.5 (koharu-rs/koharu, deb bundle) on Arch/CachyOS, AMD RX 7800 XT (RADV/Mesa), Wayland+Niri with XWayland, kernel 7.2.8.Koharu passes its switches exactly through
Cef::command_line_args:.command_line_args([ ("--enable-unsafe-webgpu", None), ("use-angle", Some("vulkan")), ("--ozone-platform", Some("x11")), ])
Reproduced symptoms (identical to the OP's):
- No
--type=gpu-processchild. Only a--type=zygote --no-zygote-sandboxfork (identifiable as the GPU process by its thread namesGpuWatchdog,ANGLE-GC,VizCompositorTh) plus a network utility process. The utility process does receive--use-angle=vulkan; the zygote-forked GPU process has none of the ANGLE/WebGPU switches in its cmdline. ~/.cache/<app>/cef/chrome_debug.logfrom the GPU process on every run:
WARNING:gpu/vulkan/vulkan_function_pointers.cc:22] Failed to bind vulkan entrypoint: vkCreateXcbSurfaceKHR ERROR:gpu/ipc/service/gpu_init.cc:1434] Failed to create and initialize Vulkan implementation. ERROR:ui/gl/gl_surface_egl.cc:380] No suitable EGL configs found for initialization. ERROR:gpu/ipc/service/shared_image_stub.cc:225] SharedImageStub: Unable to create shared image (debug_label: WebGPUSwapBufferProvider_Pid:0)- Web page gets
webgpu found no adapters→ the app's canvas dies.
Root-cause trail I traced in the Chromium sources (for
use-angle=vulkan+ VulkanFromANGLE): withkVulkanFromANGLEdefault,VulkanInstance::InitializeFromANGLE(gpu/vulkan/vulkan_instance.cc) takes ANGLE'sVkInstanceand only binds the extensions reported byQueryVkInstanceExtensionsFromANGLE(ui/gl/gl_angle_util_vulkan.cc). ANGLE's windowless/offscreen display (DisplayVkOffscreen::getWSIExtension()returnsnullptr, src/libANGLE/renderer/vulkan/linux/DisplayVkOffscreen.cpp) never enablesVK_KHR_xcb_surface, soBindInstanceFunctionPointersrefuses to bindvkCreateXcbSurfaceKHRand the whole Vulkan implementation init fails.So it lines up with your "structural difference" observation: the GPU process is a zygote fork that doesn't inherit the browser-process switches, and it initializes Vulkan-from-ANGLE under an OSR display that has no WSI extension.
Extra data point: patching the app's literal
"vulkan"→"gl-egl"(use-angle=gl-egl, CEF's own OSR recommendation from chromiumembedded/cef#3953 / cf5fddc) does propagate to the child and removes thevkCreateXcbSurfaceKHRfailure — but then fails earlier witheglQueryDeviceAttribEXT: Bad attribute→Failed to retrieve vkGetInstanceProcAddr→Failed to get vkGetInstanceProcAddr pointer from ANGLE(gl-egl ANGLE is not Vulkan-backed, whileenable-features=Vulkan,VulkanFromANGLEstill forces the Vulkan-from-ANGLE path). So both current switch combinations are broken for the zygote-forked GPU process on Linux.Happy to attach full logs or test a patched runtime if useful.
- No
- addedscope: cefissues specific to the CEF based runtimeissues specific to the CEF based runtime
on Oct 4, 2026
Describe the bug
On Linux, a
tauri-runtime-cefapp never gets a hardware WebGPU adapter. With theChromium switches that make WebGPU work in stock Chrome on the same machine,
navigator.gpu.requestAdapter()returns only SwiftShader (vendor: google,architecture: swiftshader,isFallbackAdapter: true).Plain CEF from the same CEF build (
cefsimplefrom the officialcef_binary_152.0.6+g708dc14+chromium-152.0.7977.83_linux64_clientdistribution), on the same machine, with the same switches and the same X11
ozone platform, returns the Intel GPU (
vendor: intel,architecture: gen-9,isFallbackAdapter: false). So this looks specific to howtauri-runtime-cefsets CEF up, not to CEF or Chromium.
Separately,
enable-unsafe-webgpupassed throughCef::command_line_argseems tohave no effect at all: with it, not even the SwiftShader fallback adapter is
offered. Passing the same switch on the process command line (with
Cef::allow_chromium_command_line_args(true)) does make the fallback appear.Reproduction
Versions:
tauri3.0.0-alpha.4,tauri-runtime-cef3.0.0-alpha.5 (cef =152.3.0,CEF 152.0.6, Chromium 152.0.7977.83),
tauri-build3.0.0-alpha.3, CLI 3.0.0-alpha.4.src/main.rs(the rest is a defaulttauri.conf.jsonwith one window,frontendDistpointing at a page that runs the snippet below):
Page:
Results (same machine, same session, X11 via XWayland unless noted)
tauri-runtime-cefapptauri-runtime-cefappenable_features(["Vulkan"])+command_line_arg("enable-unsafe-webgpu")tauri-runtime-cefappenable_features(["Vulkan"])+--enable-unsafe-webgpuas argv (allow_chromium_command_line_args(true))cefsimple(CEF 152.0.6 client distribution)cefsimple--enable-unsafe-webgpu --enable-features=Vulkan --ozone-platform=x11--use-alloy-style)--enable-unsafe-webgpu --enable-features=Vulkan(X11 or Wayland)In every
tauri-runtime-cefrun,SystemInfo.getInforeportswebgpu: enabled,vulkan: enabled_on, and WebGL2 is hardware(
ANGLE (Intel, Mesa Intel(R) HD Graphics 630 (KBL GT2), OpenGL 4.6)).One structural difference I noticed (not proven to be the cause)
cefsimpleruns a normal--type=gpu-processchild, plus--type=rendererand--type=utilitychildren. Thetauri-runtime-cefapp shows no--type=gpu-processor--type=rendererprocesses at all, only zygote-forkedprocesses and one utility process. One of those zygote forks maps the system
libvulkan_intel.so(and SwiftShader), so the Intel ICD is loaded, but Dawn doesnot offer it.
Expected behavior
With the same switches,
tauri-runtime-cefshould enumerate the same adapters asplain CEF from the same distribution. And
Cef::command_line_arg("enable-unsafe-webgpu")should have the same effect as the switch on the command line.
Platform and versions
1060 Mobile is present but has no driver loaded.
--ozone-platform=x11, so XWayland.Additional context
On Windows (RTX 3080), the same app gets a hardware adapter with default
settings, and render, compute and present all verify. So this is Linux-only.
Related, and not a Tauri issue: on this GPU, stock Chrome's WebGPU canvas
presentation stalls under X11 while working under native Wayland, and CEF warns
'--ozone-platform=wayland' is not compatible with Vulkan. I'm noting it onlybecause the runtime is X11-only on Linux, so even with an adapter, presentation
may need more work there.