User Tools

Site Tools


fourier:journey

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

fourier:journey [2026/04/28 22:06] – fourier: chronological journey (chromium -> qt6 -> kwin -> capture pool -> RFC) markus_fritschefourier:journey [2026/04/29 04:16] (current) – fix HTML-entity over-escape (' -> ' ; " -> "); restores monospace markup markus_fritsche
Line 3: Line 3:
 Chronological account of how a single-patch chromium V4L2 dispatch Chronological account of how a single-patch chromium V4L2 dispatch
 unlock turned into a 4-series + RFC + 3 upstream draft campaign. unlock turned into a 4-series + RFC + 3 upstream draft campaign.
-Each step uncovered the next layer's contributing bug.+Each step uncovered the next layer's contributing bug.
 Index: [[fourier:start]]. Index: [[fourier:start]].
  
 ===== The cascade ===== ===== The cascade =====
  
-  - **Started as a single chromium V4L2 dispatch unlock** — flip ''kAcceleratedVideoDecodeLinux'' default + re-allow direct EGL/GLES2 in ''WaylandSurfaceFactory''. Two patches, "does it decode?"+  - **Started as a single chromium V4L2 dispatch unlock** — flip ''kAcceleratedVideoDecodeLinux'' default + re-allow direct EGL/GLES2 in ''WaylandSurfaceFactory''. Two patches, "does it decode?"
-  - **Discovered every NV12 modifier on panfrost is ''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.+  - **Discovered every NV12 modifier on panfrost is ''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.
   - **Validated patch 3** → discovered chrome stalled at 3 s under KWin. Different bug, deeper layer.   - **Validated patch 3** → discovered chrome stalled at 3 s under KWin. Different bug, deeper layer.
-  - **Attributed stall to Qt 6 ''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). +  - **Attributed stall to Qt 6 ''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). 
-  - **Stall persisted at 6 s** → identified KWin'''Transaction::watchDmaBuf'' parking transactions on stub fences. The compositor was waiting for a fence the producer never signalled. +  - **Stall persisted at 6 s** → identified KWin'''Transaction::watchDmaBuf'' parking transactions on stub fences. The compositor was waiting for a fence the producer never signalled. 
-  - **Wrote kwin-fourier 0001** (diagnostic bypass) → stall persisted at 22 s → identified the V4L2 capture pool depth equal to chrome's pipeline depth. Decoder running, compositor working, but the pipeline deadlocked itself on buffer count.+  - **Wrote kwin-fourier 0001** (diagnostic bypass) → stall persisted at 22 s → identified the V4L2 capture pool depth equal to chrome's pipeline depth. Decoder running, compositor working, but the pipeline deadlocked itself on buffer count.
   - **Wrote chromium patch 4** (capture pool floor at 16) → **end-to-end smooth playback** on ohm. ~81 % chrome CPU vs ~131 % pre-patch baseline.   - **Wrote chromium patch 4** (capture pool floor at 16) → **end-to-end smooth playback** on ohm. ~81 % chrome CPU vs ~131 % pre-patch baseline.
-  - **Drafted upstream-shape kwin patch 0002** (poll dmabuf fd directly instead of going through ''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. +  - **Drafted upstream-shape kwin patch 0002** (poll dmabuf fd directly instead of going through ''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. 
-  - **Restructured public github repo** from ''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. +  - **Restructured public github repo** from ''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. 
-  - **Mesa ''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. +  - **Mesa ''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. 
-  - **firefox-fourier patch 3 runtime defect identified and corrected** (today, 2026-04-28; rebuild pending on boltzmann). ''MOZ_LOG'' showed patch 3 only walked the generic codec'''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''.+  - **firefox-fourier patch 3 runtime defect identified and corrected** (today, 2026-04-28; rebuild pending on boltzmann). ''MOZ_LOG'' showed patch 3 only walked the generic codec'''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''.
  
 ===== Source-of-truth narratives ===== ===== Source-of-truth narratives =====
  
-The investigation thread is documented in ''[[https://git.reauktion.de/marfrit/marfrit-packages|gitea/marfrit-packages]]'' under:+The investigation thread is documented in ''[[https://git.reauktion.de/marfrit/marfrit-packages|gitea/marfrit-packages]]'' under:
  
-  * ''arch/chromium-fourier/NEXT.md'' — campaign chronology, including the 2026-04-28 closing section +  * ''arch/chromium-fourier/NEXT.md'' — campaign chronology, including the 2026-04-28 closing section 
-  * ''arch/chromium-fourier/KWIN_PIVOT.md'' — the discovery story for the qt6 + kwin layers +  * ''arch/chromium-fourier/KWIN_PIVOT.md'' — the discovery story for the qt6 + kwin layers 
-  * ''docs/dmabuf-zero-copy.md'' (in github.com/marfrit/fourier) — the panfrost ''external_only'' finding and how it cascaded into chromium patches 2 + 3+  * ''docs/dmabuf-zero-copy.md'' (in github.com/marfrit/fourier) — the panfrost ''external_only'' finding and how it cascaded into chromium patches 2 + 3
  
 ===== Pattern ===== ===== Pattern =====
  
-> //Every 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.//+> //Every 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 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+kernel video producer), and it's a //correctness// patch rather than a
 gating one — kwin-fourier 0002 already works without it; the RFC just gating one — kwin-fourier 0002 already works without it; the RFC just
 removes the need for the workaround. removes the need for the workaround.
  
fourier/journey.1777414013.txt.gz · Last modified: by markus_fritsche