Skip to content

ci: build SDL with the frame-insets fixes, with GLES and a timeout - #4

Merged
foxnne merged 2 commits into
fizzyfrom
test/frame-insets-fixes
Oct 9, 2026
Merged

foxnne merged 2 commits into
fizzyfrom
test/frame-insets-fixes

Conversation

@foxnne

@foxnne foxnne commented Oct 9, 2026 •

Copy link
Copy Markdown

Part of fizzyedit/fizzy#280 (step C2b). Runs fizzyedit/SDL#4.

  • ci: OpenGL ES and a timeout for the Wayland frame-insets suite. wayland_frameInsetsRecreated makes a shown window again (SDL_RecreateWindow) by giving it an OpenGL ES renderer, so both jobs that run FizzyWayland (test-fizzy-wayland-insets, test-fizzy-linux (wayland)) install libegl1 libegl-mesa0 libgles2. Both jobs also time out after 20 minutes. A first version of wayland_frameInsetsShownAgain hung, and while a test traces its stderr is a file, so the run ran silently for an hour.
  • Build fizzyedit/SDL with the fixes to its Wayland frame insets. The pin moves to wayland/frame-insets-fixes (011a2dc5): fizzy-3.4 (fizzy-3.4.16-8) plus SDL#4's test commit and six fixes. Squash into 1 at the next rebase.

.github/workflows/ci.yaml keeps its CRLF line endings.

Verified

  • Green, this branch (011a2dc5) via sdl_zig#4's pin: https://github.com/fizzyedit/sdl_zig/actions/runs/38001031572. In test-fizzy-wayland-insets at scale 1 and 2, and in test-fizzy-linux (wayland) (where libdecor is installed), all 9 FizzyWayland tests pass, 0 asserts fail. The run concludes success. The build (master, …) jobs fail as they do on fizzy itself: Zig master, continue-on-error.
  • Red, the test commit alone (1eb90b75, fizzy-3.4 + suite) on a throwaway sdl_zig branch, since deleted: https://github.com/fizzyedit/sdl_zig/actions/runs/38000927122. At both scales every new assertion fails, and Popup alone passes:
    • opaque region (0, 0, 400, 300) instead of (24, 6, 346, 254) in every floating check (2);
    • created hidden: all four insets -1 (not published) (5);
    • recreated: no set_window_geometry, input region never set, opaque region the whole surface (1);
    • shown again: no set_window_geometry, input and opaque region never set (the hide/show fix);
    • margin 12: input region (16, 0, 362, 268) instead of (12, 0, 370, 272); margin 0: (16, 0, 362, 268) instead of (24, 6, 346, 254) (4).
  • An earlier red run (https://github.com/fizzyedit/sdl_zig/actions/runs/37984303044, on the test commit's first version) showed the same failures for 1, 2 and 5, then hung in wayland_frameInsetsShownAgain with the window still claimed by the GPU device. That is why the test now releases and reclaims the window, and why the jobs have a timeout.
  • 3 is untestable under weston, as above. Checked by reading.
  • Compiles clean with -Wall -Wextra -Wmissing-prototypes -Wmissing-variable-declarations -Wshadow for x86_64-linux and aarch64-macos (suite), and for Linux through sdl_zig (zig build test-fizzy -Dtarget=x86_64-linux-gnu). The macOS runners skip the suite (Wayland only) and pass.

The SDL commit needs a permanent tag (e.g. fizzy-3.4.16-9, the maintainer's to name) before this merges. The pin then moves from 011a2dc5 to the tagged commit (the same one if SDL#4 lands unchanged).

🤖 Generated with Claude Code

foxnne and others added 2 commits October 9, 2026 17:45
The suite's wayland_frameInsetsRecreated (fizzyedit/fizzy#280, C2b) makes a
shown window again through SDL_RecreateWindow by giving it an OpenGL ES
renderer, which needs EGL and GLES: Mesa's libegl-mesa0 (llvmpipe) with
libegl1 and libgles2. Both jobs that run FizzyWayland install them,
test-fizzy-wayland-insets and test-fizzy-linux (wayland).

Both jobs also stop after 20 minutes. While a test traces, its stderr is a
file, and a test that hung (a first version of wayland_frameInsetsShownAgain)
ran silently for an hour before the run gave up.

Fizzy-only, with the SDL pin that follows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The pin moves to branch wayland/frame-insets-fixes of fizzyedit/SDL:
fizzy-3.4 (fizzy-3.4.16-8) plus the six fixes to patch 6 ("Wayland: frame
insets") that fizzyedit/fizzy#280 step C2b asked for, and the FizzyWayland
assertions that check them. A test pin: the SDL commit needs a permanent tag
before this merges, and the pin then moves to it. Squash into 1 at the next
rebase.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@foxnne
foxnne marked this pull request as ready for review October 9, 2026 23:09
@foxnne
foxnne merged commit 5e41c70 into fizzy Oct 9, 2026
12 of 15 checks passed
foxnne added a commit to fizzyedit/fizzy that referenced this pull request Oct 10, 2026
…#314)

Part of #280 (step C2b landed on the forks).

Moves fizzy's `.sdl` pin to sdl_zig `fizzy-1.0.3+3.4.16-9` (SDL
`fizzy-3.4.16-9`), which fixes six problems in SDL patch 6 (Wayland
frame insets, the margins fizzy draws its Linux window shadow in):

| Fix | SDL commit | Shown by the suite |
|---|---|---|
| A window SDL makes again (e.g. for an OpenGL renderer) keeps its
insets | `9258288` | yes |
| An opaque window's opaque region is its frame, not its shadow |
`0ca75f2` | yes |
| The compositor's toplevel bounds are widened by the insets before the
clamp | `0426af9` | no: weston never sends bounds |
| The input band is a creation property,
`SDL_PROP_WINDOW_CREATE_WAYLAND_FRAME_INPUT_MARGIN_NUMBER` (default 8) |
`91b7a29` | yes |
| The insets are published from creation, not only after show |
`883f5c8` | yes |
| A window hidden and shown again is framed again | `011a2dc` | yes (new
bug, found while testing) |

Fork PRs: fizzyedit/SDL#4 → `fizzy-3.4.16-9`, fizzyedit/sdl_zig#4 →
`fizzy-1.0.3+3.4.16-9`.
- [Red](https://github.com/fizzyedit/sdl_zig/actions/runs/38000927122):
with only the test commit, every new assertion fails at scale 1 and 2.
-
[Green](https://github.com/fizzyedit/sdl_zig/actions/runs/38001031572):
with the fixes, all 9 Wayland tests pass at both scales.

Fizzy's own use (`linux_titlebar.zig`) is unchanged: it keeps the
default band, and its insets now also survive a recreate.

**For later:** upstream SDL `main` gained its own version of frame
insets on 2026-09-24. It isn't in `release-3.4.x`, and it has none of
these fixes. `docs/DEPENDENCIES.md` now says to move fizzy to upstream's
API at the rebase onto a release that has it, keeping only what upstream
lacks as patches.

**#312 overlaps:** it moves this pin from the root `build.zig.zon` into
`backend/build.zig.zon`. Whichever PR lands second carries the `-9` pin
into the other's location.

## Verified

On macOS (arm64), in a fresh workspace on `main`:

| Gate | Result |
|---|---|
| `zig build` | 43/43 steps |
| `zig build test` | 75/75 steps |
| `zig build test-integration` | 35/35 steps, 354/354 tests |
| `zig build check-web` | 16/16 steps |
| `zig build test-sdk-version` | 12/12 steps |
| `zig build -Dtarget=x86_64-linux-gnu` | 54/54 steps (builds the
changed Wayland code) |

Not verified: the fixes on a real GNOME desktop with fizzy itself. The
evidence is the fork's suite under headless weston. The SDK fingerprint
doesn't move, since plugins never link SDL.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant