{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreievw2ld2zhgyfyzefb2ztnftve3tmcg6xdxxsbdpk3kis4zlwbl5y",
"uri": "at://did:plc:bqma3dxvtfkv542aaek7xf6c/app.bsky.feed.post/3mnwkfarisgr2"
},
"path": "/2026-06-10-fixing-the-rb-swap-the-right-way/",
"publishedAt": "2026-06-10T10:55:54.031Z",
"site": "https://christian-gmeiner.info",
"tags": [
"Igalia"
],
"textContent": "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.\n\n## The problem\n\nVivante 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.",
"title": "Fixing the R/B swap the right way",
"updatedAt": "2026-06-10T00:00:00.000Z"
}