Table of Contents

kwin_overlay_subsurface — README

Campaign to identify and remove the per-frame cost in KWin's overlay-subsurface composite path on Mali-G52 / panfrost / KDE Plasma 6.6.4 Wayland.

Spun off from ohm_gl_fix campaign on 2026-05-02 after Phase 3 re-measurement isolated KWin specifically as the residual drop source on the in-scope use case (Brave/Chromium 1080p30 H.264).

Why this is a separate campaign and not Step 3 of ohm_gl_fix

Per Sonnet Architect's 2026-05-02 second consultation (response quoted in phase0_findings):

Hardware target

ohm — PineTab2, Rockchip RK3568 (4× Cortex-A55, Mali-G52 MP2, hantro G1/G2 VPU). Kernel 6.19.10-danctnix1-1-pinetab2. Mesa 26.0.5. KDE Plasma 6.6.4 Wayland.

Existing fourier-flavoured packages already installed and load-bearing for this campaign:

Without these the cage A/B (the entire Phase 0 finding that motivates this campaign) can't run — the GL_ALPHA stall halts playback before any meaningful drop measurement can complete.

Goal — Phase 1 lock

See phase1_lock for the full row schema.

One-line goal: “On PineTab2 RK3568 + Mali-G52 panfrost + KDE Plasma 6.6.4 Wayland, with one wp_subsurface presenting a NV12 dmabuf at 1080p30 and the parent surface being the Brave UI, KWin's per-frame compositor cost reaches parity with the cage single-surface case (drops_post_warmup = 0, drops ⇐ 10, kwin_wayland %CPU within ±20 % of the cage baseline kwin_wayland %CPU).”

In-scope / out-of-scope

In:

Out:

Sources of truth

Pre-MR checklist (Phase 5 review gate)

Per architect's recommendation, baked in from Phase 0 to avoid the “AI slop” rejection mode the user previously hit:

  1. Reproducer minimised to a weston or cage test client + kwin_wayland (no full Brave needed for the bug report).
  2. Before/after measurement under the campaign's locked metric (drops_post_warmup, drops total, kwin_wayland %CPU steady state).
  3. Patch description explains the mechanism not just the symptom.
  4. At least one KDE upstream reviewer has acknowledged the underlying bug report before the MR is filed.
  5. Phase 2 source-read documented (per worklist) BEFORE any patch is written.

Without these the MR risks the same rejection that earlier attempts received.

Non-upstreaming default

Per ohm_gl_fix README line 68-73:

“Patches and changes must be aligned to upstream in syntax and semantics. But no upstream will happen (no pull requests or merge requests, no bug reports) unless specifically tasked to do so. Making Markus aware of the worth of upstreaming something is accepted and welcomed, together with an explanation, why. Upstreaming is cost (mentally and socially) and this cost must be taken in consideration.”

This campaign inherits that default. Bug reports and MRs are explicit user-tasked decisions, not background process steps.