fix(stats): decode stage measures GPU completion; Alt+Enter fullscreen alias
The Vulkan path's receive_frame returns at SUBMISSION (~0.1 ms) — the hardware decodes asynchronously, so the decode stat was truthful but measured the wrong boundary. The pump now ships the frame to the presenter FIRST, then waits the frame's timeline fence (vkWaitSemaphores resolved through the shared device's proc chain) and stamps received→decode-COMPLETE — true NVDEC time at zero pipeline cost, since the presenter's own GPU wait is what actually gates sampling. Software/ VAAPI keep their synchronous stamps. Also: Alt+Enter joins F11 as the fullscreen toggle (some keyboards' Fn layer sends a media key for plain F11 — observed on glass as 'F11 only works with shift'); the shell's shortcuts panel lists both. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,12 +1,15 @@
|
||||
---
|
||||
title: Sway / wlroots
|
||||
description: Configure a punktfunk host on a wlroots compositor (Sway, Hyprland).
|
||||
description: Configure a punktfunk host on a wlroots compositor (Sway, River).
|
||||
---
|
||||
|
||||
The wlroots family can host — but **Sway is the only validated path.** The host adds a per-client
|
||||
headless output at the client's exact mode and captures it through the xdg-desktop-portal-wlr (xdpw)
|
||||
ScreenCast portal, injecting input via the wlroots virtual pointer/keyboard protocols. Hyprland and
|
||||
other wlroots compositors are best-effort (see [How it works](#how-it-works) for the caveat).
|
||||
Sway (and other wlroots-proper compositors like River) can host: the host adds a per-client headless
|
||||
output at the client's exact mode with `swaymsg create_output` and captures it through the
|
||||
xdg-desktop-portal-wlr (xdpw) ScreenCast portal, injecting input via the wlroots virtual
|
||||
pointer/keyboard protocols.
|
||||
|
||||
> On **Hyprland**? It's a separate first-class backend (its own `hyprctl` IPC and xdph portal) —
|
||||
> see [Hyprland](/docs/hyprland). This page is for sway and other wlroots-proper compositors.
|
||||
|
||||
This is **not a primary target.** It works and is validated live on **sway 1.11** (zero-copy), but it
|
||||
sees far less testing than the KDE and GNOME paths — expect rougher edges. If you have a choice,
|
||||
@@ -24,7 +27,7 @@ The host auto-detects a wlroots session, so you usually need nothing here. To fo
|
||||
these in `~/.config/punktfunk/host.env`:
|
||||
|
||||
```ini
|
||||
PUNKTFUNK_COMPOSITOR=wlroots # aliases: sway, hyprland
|
||||
PUNKTFUNK_COMPOSITOR=wlroots # aliases: sway, wlr (Hyprland has its own: PUNKTFUNK_COMPOSITOR=hyprland)
|
||||
PUNKTFUNK_INPUT_BACKEND=wlr
|
||||
PUNKTFUNK_VIDEO_SOURCE=virtual
|
||||
# GPU zero-copy capture→encode is ON by default; auto-falls back to CPU. Set PUNKTFUNK_ZEROCOPY=0 to force CPU.
|
||||
@@ -35,9 +38,8 @@ See [Configuration](/docs/configuration) for the full reference.
|
||||
## How it works
|
||||
|
||||
- **Video** — the host adds a headless output at the client's exact mode with `swaymsg create_output`.
|
||||
This uses Sway's IPC specifically; other wlroots compositors (Hyprland, …) don't expose an
|
||||
equivalent, so virtual-output creation isn't wired up for them yet — Sway is the supported wlroots
|
||||
path today.
|
||||
This uses Sway's IPC specifically; other wlroots-proper compositors (River, …) are best-effort on
|
||||
this path. (Hyprland is driven by its own [backend](/docs/hyprland), not this one.)
|
||||
- **Capture** — it captures that output through the **xdg-desktop-portal-wlr (xdpw)** ScreenCast
|
||||
portal. The host writes a managed chooser config so the output pick is automatic — no interactive
|
||||
picker dialog to answer.
|
||||
@@ -49,7 +51,8 @@ For how long the virtual output lives, and extend-vs-exclusive topology, see
|
||||
|
||||
## Requirements
|
||||
|
||||
- A running wlroots session (Sway, Hyprland, …).
|
||||
- A running wlroots-proper session (Sway, River, …). On Hyprland, use the
|
||||
[Hyprland backend](/docs/hyprland) instead.
|
||||
- **xdg-desktop-portal-wlr (xdpw)** installed and running — the host captures through its ScreenCast
|
||||
portal. Without it there is no video.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user