etnaviv Mesa driver achieves OpenGL ES 3.0 conformance on NXP i.MX8M SoCs
The open-source etnaviv driver passed over 235,000 Khronos conformance tests with zero failures on the i.MX8M Plus and i.MX8M Quad by emulating missing hardware features including 128-bit pixel formats, float depth buffers, and transform feedback.
Summary
Igalia announced that etnaviv, the open-source Mesa driver for Vivante GPUs, has achieved official OpenGL ES 3.0 conformance on two popular NXP i.MX8M system-on-chips. Between May and October 2026, more than 200 commits were merged upstream to transform the driver from reporting ES 2.0 support to passing the full Khronos conformance suite on both the i.MX8M Plus (GC7000UL) and i.MX8M Quad (GC7000L).
The work was substantially accelerated by Mecha Systems, which sponsored development to ensure its Mecha Comet handheld Linux computer—built around the i.MX8M Plus—could run a fully open graphics stack. The GPUs in these SoCs lack native hardware support for three critical ES 3.0 features: 128-bit pixel formats, 32-bit floating-point depth buffers, and transform feedback. Igalia engineers emulated all three through novel driver-level techniques, including NIR shader passes that split 128-bit pixels across paired 64-bit render targets and vertex shader variants that write captured outputs directly to memory.
How etnaviv emulated missing ES 3.0 hardware
- 128-bit pixel formats: etnaviv stores each 128-bit pixel as two 64-bit halves using hidden companion render targets; a NIR pass splits color writes and merges paired texture fetches, with special handling for per-word color masks on certain GPU revisions that was silently dropping alpha channels.
- Float depth emulation: DEPTH_COMPONENT32F and DEPTH32F_STENCIL8 are implemented by storing depth as 24-bit integer throughout the pipeline, converting on upload and readback via Mesa's u_transfer_helper, and lowering shadow comparisons in shaders—permitted precision under the ES 3.0 specification.
- Transform feedback in software: Without dedicated hardware, etnaviv injects store instructions into dedicated vertex shader variants using uniforms for buffer addressing, with CPU-side computation of primitives-written queries; a critical fix reduced batch sizes from 136 to 16 vertices after discovering the GC7000UL vertex cache limit.
- Blit and resolve engine fixes: The i.MX8MP lacks the BLT engine present in the i.MX8MQ, forcing less-tested RS engine paths; late conformance bugs included clamping texelFetch coordinates to prevent GPU page faults and correcting a 2017 RS resolve offset scaling bug that shifted antialiased images by 32 pixels.
- GLSL version reporting: A one-line change to properly advertise GLSL version support to Mesa removed the artificial ES 2.0 cap that had hidden the driver's actual capabilities.
Why it matters
Conformance gives Linux on NXP i.MX8M hardware a fully open, upstream-maintained graphics path that matches proprietary driver functionality, strengthening the position of ARM-based embedded and handheld devices like the Mecha Comet in markets requiring open-source supply chains. The upstream Mesa commits are already flowing into distributions, and Igalia's focus now shifts to performance optimization and bringing the i.MX8QuadMax's GC7000XSVX into conformance, followed by OpenGL ES 3.1.
Original reference: www.igalia.com →