Snapshot of the four sibling patch series as of 2026-04-28 evening. Index: fourier.
Reference target: ohm — PineTab2 / RK3566 / Mali-G52 / panfrost / mainline kernel 6.19.10 / KDE Plasma 6.6.4 Wayland.
enable-v4l2-decoder-default.patch — flip kAcceleratedVideoDecodeLinux defaultwayland-allow-direct-egl-gles2.patch — re-allow direct EGL/GLES2 in WaylandSurfaceFactorynv12-external-oes-on-modifier-external-only.patch — pick GL_TEXTURE_EXTERNAL_OES for NV12 dmabufs whose modifier is external_onlyv4l2-capture-pool-floor-at-16.patch — floor V4L2 capture pool at 16 buffers
Result on ohm: bbb_1080p30_h264.mp4 plays end-to-end on KDE Plasma
6.6.4 Wayland, ~81 % combined chrome CPU vs ~131 % pre-patch baseline
(~3.8× reduction).
Side-effect: Brave's YouTube playback also feels markedly snappier on ohm —
patches 2 + 3 are not chromium-fourier-binary-specific, they help any
Wayland Chromium-derived browser through the panfrost external_only
modifier path, and patch from the kwin layer (see below) helps every
wp_linux_dmabuf-v1 client.
Build: cross-compiled on CT 220 chromium-builder-x86 (Proxmox container
on data) — see fourier:hosts.
Pure spec-correctness fix. OpenGL ES 3.0 deprecated GL_ALPHA as a
glTexImage2D internalFormat; Qt 6 was hard-coding it via the
QT_CONFIG(opengles2) build branch with no runtime ES-version check.
Affects every Qt 6 GLES3 client on Mali-class hardware.
0001-qopengltextureglyphcache-pick-GL_R8-on-ES3.patch0002-qrhigles2-RED_OR_ALPHA8-pick-GL_R8-on-ES3.patch0003-qopengltextureuploader-pick-GL_R8-on-ES3.patch
Zero GL_INVALID_VALUE in journal post-relogin. Cleanly
upstream-targetable to bugreports.qt.io + Gerrit; submission body is
written and parked in
upstream-submissions/qt6-base-fourier/qt-bug-report.md.
0001-transaction-bypass-watchDmaBuf-fence-wait.patch — diagnostic bypass; this is what identified the bug0002-transaction-poll-dmabuf-fd-directly-upstream-shape.patch — the actual upstream-bound shape: poll the dmabuf fd directly instead of going through EXPORT_SYNC_FILE + QSocketNotifier round-trip; validated on ohm
Both are shaped to address the per-frame
DMA_BUF_IOCTL_EXPORT_SYNC_FILE overhead in KWin's compositor scheduling
path. Side-effect benefit: every wp_linux_dmabuf-v1 client (chrome,
brave, mpv, VLC) feels markedly snappier on Mali-class hardware.
The discovery story is in arch/chromium-fourier/KWIN_PIVOT.md in
gitea/marfrit-packages — see also journey.
The upstream-shape patch's submission body is at
upstream-submissions/kwin-fourier/kde-mr-body.md.
Today (2026-04-28) the runtime defect on patch 3 was identified via
MOZ_LOG: patch 3 only walked the generic codec's hw_configs.
libavcodec on ALARM registers v4l2_request as separate AVCodec
entries (h264_v4l2request etc.). Patch 3 has been corrected to
probe by name first, falling back to hw_configs. Rebuild pending
on boltzmann.
chromium-fourier/, qt6-base-fourier/, kwin-fourier/, docs/, tools/arch/{chromium,qt6-base,kwin,firefox}-fourier/