Chronological account of how a single-patch chromium V4L2 dispatch unlock turned into a 4-series + RFC + 3 upstream draft campaign. Each step uncovered the next layer's contributing bug. Index: fourier.
kAcceleratedVideoDecodeLinux default + re-allow direct EGL/GLES2 in WaylandSurfaceFactory. Two patches, “does it decode?”.external_only → wrote chromium patch 3 (NV12 EXTERNAL_OES). Without this, sampling NV12 from a panfrost dmabuf goes through a path that doesn't advertise the modifier correctly.glTexImage2D(GL_ALPHA) errors — GL_ALPHA is deprecated as an internalFormat in OpenGL ES 3.0; Qt 6 was hard-coding it via QT_CONFIG(opengles2) with no runtime ES check. Wrote qt6-base-fourier (3 patches).Transaction::watchDmaBuf parking transactions on stub fences. The compositor was waiting for a fence the producer never signalled.EXPORT_SYNC_FILE + QSocketNotifier), vb2-dma-resv RFC (3-patch kernel series — the architectural correction that makes the kwin wait premise actually true), and the Qt 6 bug report body.chromium-fourier → fourier with sibling subdirs (chromium-fourier/, qt6-base-fourier/, kwin-fourier/, docs/, tools/). The campaign needed a name that reflected what it actually was.Syyuu regression on fresnel diagnosed and worked around — mesa 26.0.5 introduced a panfrost GLX regression on Mali-T860 that crashes sddm-greeter-qt6. Pinned to 26.0.3 via IgnorePkg. Separate from fourier work, captured here because it surfaced during a fresnel install of fourier packages.MOZ_LOG showed patch 3 only walked the generic codec's hw_configs; libavcodec on ALARM registers v4l2_request as separate AVCodec entries (h264_v4l2request etc.). Corrected to probe by name first, fall back to hw_configs.
The investigation thread is documented in gitea/marfrit-packages under:
arch/chromium-fourier/NEXT.md — campaign chronology, including the 2026-04-28 closing sectionarch/chromium-fourier/KWIN_PIVOT.md — the discovery story for the qt6 + kwin layersdocs/dmabuf-zero-copy.md (in github.com/marfrit/fourier) — the panfrost external_only finding and how it cascaded into chromium patches 2 + 3Every time a layer was patched, the next layer's contributing bug surfaced. The campaign was over when all four layers (chromium, Qt 6, KWin, the V4L2 capture pool depth) were patched on the same machine, on the same kernel, on the same compositor.
The vb2-dma-resv RFC is the only piece that adjusts a fifth layer (the kernel video producer), and it's a correctness patch rather than a gating one — kwin-fourier 0002 already works without it; the RFC just removes the need for the workaround.