The Diagonal Seam

Two more dEQP tests down: dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_mag -- Pass dEQP-GLES3.functional.fbo.blit.rect.nearest_consistency_min -- Pass This one was a fun geometry puzzle. The problem Mesa’s u_blitter is the utility that drivers use for framebuffer blits – copying pixel data between surfaces, optionally scaling and filtering. It works by drawing a textured quad: set up the source as a texture, the destination as a render target, and draw a rectangle with the appropriate texture coordinates. Simple. ...

June 19, 2026 · 4 min · Christian Gmeiner

Fixing the R/B swap the right way

If you’ve ever looked at a GPU render and seen blue where red should be, you’ve met the R/B swap problem. For etnaviv this has been a long-standing source of complexity. We were solving it in the shader, but the proprietary blob driver had a simpler approach all along. As part of my work at Igalia, I finally sat down and did it properly. The problem Vivante GPUs have a quirk: the Pixel Engine (PE) always writes pixels in BGRA byte order. When your API says “render to R8G8B8A8_UNORM”, what actually lands in memory is B, G, R, A. Every byte of every pixel, every frame. The hardware just works that way. ...

June 10, 2026 · 11 min · Christian Gmeiner

Multiple Render Targets for etnaviv

Modern graphics programming revolves around achieving high-performance rendering and visually stunning effects. Among OpenGL’s capabilities, Multiple Render Targets (MRTs) are particularly valuable for enabling advanced rendering techniques with greater efficiency. With the latest release of Mesa 24.03 and the commitment from Igalia, the etnaviv GPU driver now includes support for MRTs. If you’ve ever wondered how MRTs can transform your graphics pipeline or are curious about the challenges of implementing this feature, this blog post is for you. ...

January 16, 2025 · 6 min · Christian Gmeiner

CI-Tron: A Long Road to a Better Board Farm

I’m a big supporter of finding problems before they get into the code base. The earlier you catch issues, the easier they are to fix. One of the main tools that helps with this is a Continuous Integration (CI) farm. A CI farm allows you to run extensive tests like deqp or piglit on a merge request or even on a private git branch before any code is merged, which significantly helps catch problems early. ...

October 30, 2024 · 5 min · Christian Gmeiner

It All Started With a Nop - Part I

Note ...

July 11, 2024 · 9 min · Christian Gmeiner