Chromium Video Rendering Issue After Omarchy (Hyprland) Update
The error (failed to create GL representation)
After the most recent Omarchy update (Dec 14, 2025), launching Chromium (from the console), returns multiple (as in endless) copies of the following error:
ERR: ImageEGL.cpp:112 (operator()): eglCreateImage failed with 0x00003009
[6859:6859:1214/132211.510928:ERROR:ui/gl/scoped_egl_image.cc:23] Failed to create EGLImage: EGL_SUCCESS
[6859:6859:1214/132211.511064:ERROR:ui/ozone/common/native_pixmap_egl_binding.cc:76] Unable to initialize binding from pixmap
[6859:6859:1214/132211.511202:ERROR:gpu/command_buffer/service/shared_image/ozone_image_backing.cc:316] OzoneImageBacking::ProduceSkiaGanesh failed to create GL representation
[6859:6859:1214/132211.511314:ERROR:gpu/command_buffer/service/shared_image/shared_image_manager.cc:404] SharedImageManager::ProduceSkia: Trying to produce a Skia representation from an incompatible backing: OzoneImageBacking
The relevant part of the error seems to be failed to create GL representation.
From Claude:
OzoneImageBacking::ProduceSkiaGanesh failed to create GL representation suggests Mesa’s GBM (Generic Buffer Management) can’t create EGL images properly - this is the part that handles sharing GPU memory between Wayland, Mesa, and Chromium.
What is a GL representation?
GL refers to Graphics Library, most commonly OpenGL. An OpenGL representation is a description of 2D or 3D vector graphics and the processes used to turn that data into a final image on the screen, using an API that interacts with the GPU.
Disable GPU composting as a temporary fix
Add the following to .config/chromium-flags.conf:
--disable-gpu-compositing
Possible alternate fix (see https://github.com/basecamp/omarchy/issues/3891):
--use-gl=desktop
What is a hybrid GPU?
A hybrid GPU system uses two graphics processors — a low-power integrated GPU (iGPU) and a (more powerful) discrete GPU (dGPU). Apparently to balance performance and energy efficiency. The iGPU is expected to handle basic tasks (browsing, video) and the dGPU is expected to handle demanding apps, games, video editing, etc.
Get GPU info for machine
List PCI devices
The lspci command lists all PCI hardware, including graphics cards:
❯ lspci | grep -E "VGA|3D|Display"
00:02.0 VGA compatible controller: Intel Corporation TigerLake-LP GT2 [Iris Xe Graphics] (rev 01)
01:00.0 VGA compatible controller: NVIDIA Corporation GA106M [GeForce RTX 3060 Mobile / Max-Q] (rev a1)
Alternatively, the lshw (list hardware) command provides more structured output:
❯ sudo lshw -C display
*-display
description: VGA compatible controller
product: TigerLake-LP GT2 [Iris Xe Graphics]
vendor: Intel Corporation
physical id: 2
bus info: pci@0000:00:02.0
logical name: /dev/fb0
version: 01
width: 64 bits
clock: 33MHz
capabilities: pciexpress msi pm vga_controller bus_master cap_list rom fb
configuration: depth=32 driver=i915 latency=0 mode=1920x1080 resolution=1920,1080 visual=truecolor xres=1920 yres=1080
resources: iomemory:620-61f iomemory:400-3ff irq:156 memory:622c000000-622cffffff memory:4000000000-400fffffff ioport:4000(size=64) memory:c0000-dffff memory:4010000000-4016ffffff memory:4020000000-40ffffffff
*-display
description: VGA compatible controller
product: GA106M [GeForce RTX 3060 Mobile / Max-Q]
vendor: NVIDIA Corporation
physical id: 0
bus info: pci@0000:01:00.0
version: a1
width: 64 bits
clock: 33MHz
capabilities: pm msi pciexpress vga_controller bus_master cap_list rom
configuration: driver=nvidia latency=0
resources: iomemory:600-5ff iomemory:620-61f irq:145 memory:83000000-83ffffff memory:6000000000-61ffffffff memory:6200000000-6201ffffff ioport:3000(size=128) memory:84000000-8407ffff
Check current GPU driver setup
# Check if NVIDIA drivers are installed
❯ nvidia-smi # command
Sun Dec 14 20:21:35 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.105.08 Driver Version: 580.105.08 CUDA Version: 13.0 |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 3060 ... Off | 00000000:01:00.0 Off | N/A |
| N/A 42C P8 9W / 60W | 89MiB / 6144MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| 0 N/A N/A 993 G /usr/lib/Xorg 4MiB |
| 0 N/A N/A 1364 G Hyprland 2MiB |
| 0 N/A N/A 1493 C+G /usr/bin/walker 46MiB |
+-----------------------------------------------------------------------------------------+
# Check which GPU is being used; provides details about the currently used OpenGL renderer,
# this can help confirm if the correct drivers are being used
❯ glxinfo | grep "OpenGL renderer" # command
OpenGL renderer string: NVIDIA GeForce RTX 3060 Laptop GPU/PCIe/SSE2
Which GPU is chromium using on my machine?
Browse to chrome://gpu/ and look at the GL_RENDERER line:
ANGLE (Intel, Mesa Intel(R) Iris(R) Xe Graphics (TGL GT2), OpenGL ES 3.2 Mesa 25.2.7-arch1.1)
It’s using Intel, Mesa.
What is Mesa (in the context of graphics rendering)?
Mesa is an open-source implementation of various graphics API specifications: OpenGL, Vulkan, etc. Mesa is a part of the graphics driver stack:
-
API implementation: Mesa translates calls from graphics APIs (like an application’s request to draw a shape) into commands that the specific GPU hardware can understand
-
Open-Source drivers: Mesa hosts a collection of open-source user-space drivers for various hardware vendors: AMD, Intel (relevant to me), Nvidia, …
-
Hardware interfacing: the Linux graphics architecture typically splits the driver into two parts:
-
kernel-space driver: part of the Linux kernel and handles low-level interactin, memory management, and initial configuration of the physical hardward
-
user-space driver: this is where mesa resides. It sits on top of the kernel driver and provides the high-level API implementation for applications.
-
Here’s Claude’s description of Mesa:
- Open-source GPU drivers - Provides drivers for Intel, AMD, and other GPUs
- OpenGL/Vulkan implementation - Implements graphics APIs that applications use 3.Interface layer - Sits between applications (like Chromium) and the kernel’s DRM (Direct Rendering Manager) subsystem
So the flow is: Chromium → Mesa → Kernel DRM → GPU hardware
What is GPU compositing?
GPU compositing uses the Graphics Processing Unit (GPU) to combine multiple visual elements (layers, images, textures) into a single final image for display, speeding up processes like web rendering, video editing, or 3D scene assembly by using the GPU’s parallel processing power instead of letting the CPU take care of everything. The GPU takes over the final “flattening” of layers.
What is ozone platform?
The term ozone-platform comes up a lot in discussions related to configuring Chromium on
Hyprland. Here’s my current ~/.config/chromium-flags.conf file, with references to ozone-platform:
--ozone-platform=wayland
--ozone-platform-hint=wayland
--enable-features=TouchpadOverscrollHistoryNavigation
--load-extension=~/.local/share/omarchy/default/chromium/extensions/copy-url
# Chromium crash workaround for Wayland color management on Hyprland - see https://github.com/hyprwm/Hyprland/issues/11957
--disable-features=WaylandWpColorManagerV1
# tmp fix for Mesa issue
--disable-gpu-compositing
Ozone platform is Chromium’s graphics/input layer for cross-platform compatibility. That (somewhat)
explains --ozone-platform=wayland and ozone-platform-hint=wayland. It acts as an adapter,
translating Chromium’s needs into command for underlying systems like X11 or Wayland.
Here’s the ozone related part of the original error message:
[6859:6859:1214/132211.511064:ERROR:ui/ozone/common/native_pixmap_egl_binding.cc:76] Unable to initialize binding from pixmap
My guess about the cause of the issue
I updated Omarchy today (December 14th). Omarchy pulls updates from its own pacman mirror (I need to
confirm what’s going on with this). Mesa in Arch was updated on December 12th (mesa 1:25.3.1-2).
The current version of mesa that’s available for Omarchy is:
❯ pacman -Q mesa
mesa 1:25.2.7-1