docs(readme): trim the performance path to the facts (#90)
* docs(readme): trim the performance path to the facts * docs(readme): list fractional scale in the performance path
- commit
- ba76b13626e868bb8709efeadfb347d97949b292
- author
- bnema · · 2026-10-02 19:32 UTC
- committer
- GitHub · · 2026-10-02 19:32 UTC
- parent
- 980595d
- signature
- GPG Unverified
B5690EEEBB952194The key is unknown
1 file · +9 -11
M README.md +9 -11
| @@ -55,17 +55,15 @@ The terminal command comes from `terminal`, then `$TERMINAL`, then `foot`. `term | |||
| 55 | 55 | ||
| 56 | 56 | ## The performance path | |
| 57 | 57 | ||
| 58 | - | These protocols and kernel features cut copies, waits and latency between the app and the screen: | |
| 59 | - | ||
| 60 | - | - **Zero copy.** GPU clients (`zwp_linux_dmabuf_v1` v4) are sampled in place. Vulkan composes straight into exported scanout images, and the frame fence goes to KMS as `IN_FENCE_FD`: no CPU copy, no CPU wait before a flip. | |
| 61 | - | - **Direct scanout.** A fullscreen window's buffer goes straight to the display plane; dmabuf feedback sends the game a scanout-ready format first. A lone opaque window can use an overlay plane. | |
| 62 | - | - **Tearing and VRR.** `wp_tearing_control_v1` flips without waiting for vblank when the game requests it; variable refresh runs while a fullscreen window covers the output, scanned out or composed. | |
| 63 | - | - **Explicit sync.** `wp_linux_drm_syncobj_v1` passes GPU fences from the app to KMS. NVIDIA drivers need it. | |
| 64 | - | - **Frame pacing.** Apps get real flip times through `wp_presentation`, and can queue frames with `wp_fifo_v1` and `wp_commit_timing_v1`. | |
| 65 | - | - **Only what changed.** NeferWL redraws only damaged regions, skips surfaces hidden behind opaque ones, and leaves idle outputs alone. Frame, cursor, overlay and VRR go to the kernel in one atomic commit. | |
| 66 | - | - **Input.** Relative pointer, pointer constraints and keyboard shortcuts inhibit for games. Input at 1 kHz and more never waits on rendering, and the cursor has its own hardware plane. With CAP_SYS_NICE, input and output threads request real-time scheduling. | |
| 67 | - | - **X11 games.** Steam and X11-only games run through xwayland-satellite, started on the first X11 connection. Wine with its Wayland driver does not need it. | |
| 68 | - | - **VR.** Non-desktop headset connectors are leased to SteamVR and Monado via `wp_drm_lease_v1`. | |
| 58 | + | - `zwp_linux_dmabuf_v1` v4: client buffers are sampled in place. Vulkan composes into exported scanout images and the frame fence goes to KMS as `IN_FENCE_FD`. No CPU copy, no CPU wait. | |
| 59 | + | - Direct scanout of a fullscreen window's buffer; dmabuf feedback gives it a scanout-ready format first. A lone opaque window can use an overlay plane. | |
| 60 | + | - `wp_tearing_control_v1` and VRR while a fullscreen window covers the output. | |
| 61 | + | - `wp_linux_drm_syncobj_v1`: client fences go to KMS. NVIDIA drivers need it. | |
| 62 | + | - `wp_presentation`, `wp_fifo_v1`, `wp_commit_timing_v1` for frame pacing. | |
| 63 | + | - `wp_fractional_scale_v1` and `wp_viewporter`: clients render at the output scale, nothing is rescaled. | |
| 64 | + | - Damage tracking, occlusion of surfaces behind opaque ones, no work on idle outputs. Frame, cursor, overlay and VRR in one atomic commit. | |
| 65 | + | - Input is read on its own thread and never waits on rendering; the cursor has a hardware plane. With CAP_SYS_NICE, input and output threads request real-time scheduling. Relative pointer, pointer constraints and keyboard shortcuts inhibit for games. | |
| 66 | + | - `wp_drm_lease_v1` leases headset connectors to SteamVR and Monado. | |
| 69 | 67 | ||
| 70 | 68 | ## Hardware support | |
| 71 | 69 | ||
| @@ -55,17 +55,15 @@ The terminal command comes from `terminal`, then `$TERMINAL`, then `foot`. `term | |||||
| 55 | 55 | ||||
| 56 | ## The performance path | 56 | ## The performance path | ||
| 57 | 57 | ||||
| 58 | - | These protocols and kernel features cut copies, waits and latency between the app and the screen: | 58 | + | - `zwp_linux_dmabuf_v1` v4: client buffers are sampled in place. Vulkan composes into exported scanout images and the frame fence goes to KMS as `IN_FENCE_FD`. No CPU copy, no CPU wait. |
| 59 | - | 59 | + | - Direct scanout of a fullscreen window's buffer; dmabuf feedback gives it a scanout-ready format first. A lone opaque window can use an overlay plane. | |
| 60 | - | - **Zero copy.** GPU clients (`zwp_linux_dmabuf_v1` v4) are sampled in place. Vulkan composes straight into exported scanout images, and the frame fence goes to KMS as `IN_FENCE_FD`: no CPU copy, no CPU wait before a flip. | 60 | + | - `wp_tearing_control_v1` and VRR while a fullscreen window covers the output. |
| 61 | - | - **Direct scanout.** A fullscreen window's buffer goes straight to the display plane; dmabuf feedback sends the game a scanout-ready format first. A lone opaque window can use an overlay plane. | 61 | + | - `wp_linux_drm_syncobj_v1`: client fences go to KMS. NVIDIA drivers need it. |
| 62 | - | - **Tearing and VRR.** `wp_tearing_control_v1` flips without waiting for vblank when the game requests it; variable refresh runs while a fullscreen window covers the output, scanned out or composed. | 62 | + | - `wp_presentation`, `wp_fifo_v1`, `wp_commit_timing_v1` for frame pacing. |
| 63 | - | - **Explicit sync.** `wp_linux_drm_syncobj_v1` passes GPU fences from the app to KMS. NVIDIA drivers need it. | 63 | + | - `wp_fractional_scale_v1` and `wp_viewporter`: clients render at the output scale, nothing is rescaled. |
| 64 | - | - **Frame pacing.** Apps get real flip times through `wp_presentation`, and can queue frames with `wp_fifo_v1` and `wp_commit_timing_v1`. | 64 | + | - Damage tracking, occlusion of surfaces behind opaque ones, no work on idle outputs. Frame, cursor, overlay and VRR in one atomic commit. |
| 65 | - | - **Only what changed.** NeferWL redraws only damaged regions, skips surfaces hidden behind opaque ones, and leaves idle outputs alone. Frame, cursor, overlay and VRR go to the kernel in one atomic commit. | 65 | + | - Input is read on its own thread and never waits on rendering; the cursor has a hardware plane. With CAP_SYS_NICE, input and output threads request real-time scheduling. Relative pointer, pointer constraints and keyboard shortcuts inhibit for games. |
| 66 | - | - **Input.** Relative pointer, pointer constraints and keyboard shortcuts inhibit for games. Input at 1 kHz and more never waits on rendering, and the cursor has its own hardware plane. With CAP_SYS_NICE, input and output threads request real-time scheduling. | 66 | + | - `wp_drm_lease_v1` leases headset connectors to SteamVR and Monado. |
| 67 | - | - **X11 games.** Steam and X11-only games run through xwayland-satellite, started on the first X11 connection. Wine with its Wayland driver does not need it. | |||
| 68 | - | - **VR.** Non-desktop headset connectors are leased to SteamVR and Monado via `wp_drm_lease_v1`. | |||
| 69 | 67 | ||||
| 70 | ## Hardware support | 68 | ## Hardware support | ||
| 71 | 69 | ||||