Geoffrey McRae
f3155647d2
[client] wayland: serialize surface commits with EGL swaps
...
NVIDIA's Wayland EGL implementation sets explicit-sync acquire and
release points while presenting a frame. The requests emitted by
eglSwapBuffers and its final surface commit must be treated as one
logical transaction.
The pointer-warp path can commit the main surface from the input
thread while the render thread is inside eglSwapBuffers. If this
occurs between the explicit-sync requests, the cursor commit applies
incomplete pending state and the compositor disconnects the client
with:
explicit sync is used, but no release point is set
Add a surface lock and hold it across EGL presentation. Use the same
lock for direct commits, frame callback registration, and
pointer-constraint updates, replacing the narrower confinement lock.
This prevents another thread from splitting the EGL transaction and
removes the need for __NV_DISABLE_EXPLICIT_SYNC=1.
2026-07-30 11:09:07 +10:00
Geoffrey McRae
a9b8f437d4
[client] overlay: show layout-translated hotkey labels
...
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / module (push) Has been cancelled
build / host-linux (push) Has been cancelled
build / host-windows-cross (push) Has been cancelled
build / host-windows-native (push) Has been cancelled
build / idd (push) Has been cancelled
build / obs (clang) (push) Has been cancelled
build / obs (gcc) (push) Has been cancelled
build / docs (push) Has been cancelled
Related to #1298
2026-07-30 10:30:47 +10:00
Geoffrey McRae
e754f5841e
[client] keybind: use physical keycodes for layout-independent hotkeys
...
Fixes #1298
2026-07-30 10:21:26 +10:00
Geoffrey McRae
61f00ae625
[client] hdr: refactor name to clean up log output
2026-07-29 12:39:10 +10:00
Geoffrey McRae
0e113d9d83
[client] wayland: use the locally configured white level for SDR
2026-07-23 09:44:00 +10:00
Geoffrey McRae
719ffeaa60
[client] wayland: separate PQ and mastering volumes
...
Describe PQ pixels with the protocol-defined primary luminance range and
keep mastering luminance in the target volume. Track extended target-volume
support and omit unsupported metadata instead of creating an invalid image
description.
2026-07-23 09:44:00 +10:00
Geoffrey McRae
dbc5ca104e
[client] wayland: retain coherent HDR state on failure
...
Keep the reference white associated with the active PQ description until
a replacement is ready. If asynchronous description creation fails, the
renderer now retains the complete previous HDR state instead of combining
new white-level values with stale compositor metadata.
2026-07-23 09:44:00 +10:00
Geoffrey McRae
4c7b5b2531
[client] wayland: harden native HDR colour state
...
Serialize asynchronous image-description state and publish compositor
capabilities safely across the Wayland and render threads.
Use the predefined Windows-scRGB description, query each output image
description for its configured reference white, and reapply HDR when the
surface moves to an output with different colour settings.
2026-07-23 09:44:00 +10:00
Geoffrey McRae
2d4f0dbf00
wayland: make HDR descriptions asynchronous
...
Publish HDR metadata through a locked request snapshot and wait for
image-description readiness before using it. Commit encoding changes with
matching content, preserve the active description during same-format
metadata replacements, and handle creation failures without protocol
errors.
2026-07-23 09:44:00 +10:00
Geoffrey McRae
c234866055
[client] wayland: forward HDR mastering metadata
...
Propagate valid ST 2086 mastering primaries and luminance data, MaxCLL,
and MaxFALL to the Wayland compositor using the protocol's expected
units.
2026-07-23 09:44:00 +10:00
Geoffrey McRae
275253181a
egl: correct ImGui overlay luminance in HDR
...
Render ImGui to an intermediate SDR framebuffer and map it into the
native PQ or scRGB output using the Wayland surface reference white.
Preserve premultiplied alpha during conversion and limit composition to
damaged overlay regions.
2026-07-23 09:43:59 +10:00
Geoffrey McRae
993c724e67
[client] wayland: set the application icon
2026-07-23 09:43:59 +10:00
Geoffrey McRae
da7d1a2ead
[client] wayland: fix color management errors
2026-07-16 05:34:09 +10:00
Geoffrey McRae
364485ded8
[client] wayland: implement HDR support
2026-07-16 05:34:09 +10:00
Quantum
4bb2c58fb6
[client] wayland: delete useless enum EGLSwapWithDamageState
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / module (push) Has been cancelled
build / host-linux (push) Has been cancelled
build / host-windows-cross (push) Has been cancelled
build / host-windows-native (push) Has been cancelled
build / idd (push) Has been cancelled
build / obs (clang) (push) Has been cancelled
build / obs (gcc) (push) Has been cancelled
build / docs (push) Has been cancelled
2026-06-09 19:31:45 +10:00
Quantum
e203bca480
[client] wayland: set content type to game
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / module (push) Has been cancelled
build / host-linux (push) Has been cancelled
build / host-windows-cross (push) Has been cancelled
build / host-windows-native (push) Has been cancelled
build / idd (push) Has been cancelled
build / obs (clang) (push) Has been cancelled
build / obs (gcc) (push) Has been cancelled
build / docs (push) Has been cancelled
2026-06-07 07:04:12 +10:00
Quantum
938a2a6c22
[client] wayland: get scale from wp-fractional-scale-v1 if possible
2026-06-06 02:32:23 +10:00
Geoffrey McRae
69f44a003d
[all] refresh copyright
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / module (push) Has been cancelled
build / host-linux (push) Has been cancelled
build / host-windows-cross (push) Has been cancelled
build / host-windows-native (push) Has been cancelled
build / idd (push) Has been cancelled
build / obs (clang) (push) Has been cancelled
build / obs (gcc) (push) Has been cancelled
build / docs (push) Has been cancelled
2026-05-31 15:13:57 +10:00
Geoffrey McRae
e9b7bdfea1
Revert "[all] refresh copyright"
...
Corrupted IDD sources due to lack of UTF-8 with BOM support in the
script.
2026-05-31 15:10:44 +10:00
Geoffrey McRae
98602fb95e
[all] refresh copyright
2026-05-31 15:03:37 +10:00
Geoffrey McRae
01b8724cfe
[client] wayland: improve fractional scaling
...
avoids the 24.8 quantisation without introducing floating-point
equality/rounding behaviour throughout the Wayland state.
Closes #1257
2026-05-31 13:15:42 +10:00
Janrupf
b181859c1b
[client] wayland: fix discrete mouse scroll speed
2026-01-17 12:43:10 +11:00
Geoffrey McRae
66ac453c98
[client] input: add support for evdev keyboard capture mode
...
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Waiting to run
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Waiting to run
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Waiting to run
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Waiting to run
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Waiting to run
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Waiting to run
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Waiting to run
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Waiting to run
build / module (push) Waiting to run
build / host-linux (push) Waiting to run
build / host-windows-cross (push) Waiting to run
build / host-windows-native (push) Waiting to run
build / obs (clang) (push) Waiting to run
build / obs (gcc) (push) Waiting to run
build / docs (push) Waiting to run
The new configuration option `input:evdev` accepts a comma separated
list of `/dev/input/` keyboard devices to use for input when in capture
mode. This makes it possible to capture only a specific keyboard instead
of all keyboards.
2025-03-07 02:36:00 +11:00
Geoffrey McRae
551298ed5b
[doc] all: update copyright year
2025-03-05 12:24:38 +11:00
rs189
e25492a3a3
[client] x11/wayland: add application id
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / module (push) Has been cancelled
build / host-linux (push) Has been cancelled
build / host-windows-cross (push) Has been cancelled
build / host-windows-native (push) Has been cancelled
build / obs (clang) (push) Has been cancelled
build / obs (gcc) (push) Has been cancelled
build / docs (push) Has been cancelled
2024-10-15 11:52:10 +11:00
Geoffrey McRae
0b210a280d
[all] update the copyright to 2024
2024-02-01 17:16:31 +11:00
Geoffrey McRae
aa9dbe654d
[client] wayland: move libdecor and xdg into seperate backends
...
This allows us to build with libdecor enabled as the selection to use it
is decided upon at runtime if the compositor `gnome-shell` is detected.
If the libdecor development headers are installed, by default it will
now be compiled in unless overridden by the user at compile time.
2023-11-10 06:28:05 +11:00
Geoffrey McRae
2e515657dd
[all] update/add license headers
2023-10-20 15:36:34 +11:00
Quantum
60ac03ebaf
[client] wayland: implement window size setting for xdg-shell
...
This should allow win:autoResize to work on Wayland when the compositor
supports such an operation.
2022-12-08 21:08:33 +11:00
Tudor Brindus
da548e3858
[client] ds: expose activation requesting
2022-02-08 14:54:55 +11:00
Tudor Brindus
21a349343b
[client] wayland: implement activation request
2022-02-08 14:54:55 +11:00
Tudor Brindus
4ee6bdf198
[client] wayland: bind xdg_activation_v1 when available
2022-02-08 14:54:55 +11:00
Geoffrey McRae
952ebea2c5
[all] refresh copyright dates
2022-01-05 19:42:46 +11:00
SytheZN
12321a8880
[client] wayland: implement resizing for libdecor
2021-10-14 18:17:00 +11:00
Quantum
7cd0c55847
[client] wayland: support high DPI cursors when needed
2021-08-15 09:49:38 +10:00
Quantum
7045760490
[client] wayland: add keyboard typing handling with xkbcommon
2021-08-14 14:44:26 +10:00
Quantum
51b9cd4e5a
[all] copyright: use unicode copyright sign ©
...
This is done for consistency with the license strings in appstrings.c.
2021-08-04 21:16:35 +10:00
Geoffrey McRae
80c9f7223a
[client] wayland: fix failure to build
2021-08-04 07:21:57 +10:00
Quantum
f08e2ece93
[client] wayland: implement stopWaitFrame
2021-08-01 19:54:28 +10:00
Quantum
2e4614cbc4
[client] wayland: make waitFrame work when not rendering
...
Implement skipFrame and do various things to wake waitFrame.
2021-08-01 18:54:55 +10:00
Quantum
77b3d45e0e
[client] ds: change signalNextFrame to waitFrame
2021-08-01 17:29:15 +10:00
Quantum
0ad469178a
[client] wayland: make it possible to disable fractional scaling
...
The method used is not guaranteed to work on all Wayland compositors,
so offer a way out. We need to support it anyways in case xdg_output
or wp_viewporter protocols are not available.
2021-08-01 13:05:41 +10:00
Quantum
b3ca872cef
[client] wayland: improve fractional scale handling
...
Currently, we scale the desktop up to the next largest integer, and rely on
the wayland compositor to scale it back down to the correct size.
This is obviously undesirable.
In this commit, we attempt to detect the actual fractional scaling by finding
the current active mode in wl_output, and dividing it by the logical screen
size reported by xdg_output, taking into consideration screen rotation.
We then use wp_viewporter to set the exact buffer and viewport sizes if
fractional scaling is needed.
2021-08-01 13:05:41 +10:00
Quantum
a213ee960a
[client] wayland: implement signalNextFrame with frame callbacks
2021-07-31 19:05:21 +10:00
Quantum
11a5864969
[client] wayland: implement support for other cursors
2021-07-31 14:56:04 +10:00
Quantum
da28db2ca4
[client] ds: change showPointer to setPointer for more cursors
...
Currently everything only supports LG_POINTER_NONE and LG_POINTER_SQUARE.
2021-07-31 14:56:04 +10:00
Quantum
0cbc529640
[client] ds: refactor common EGL swap with damage logic
...
This commit creates a new utility library, eglutil.h, which contains code
to detect and use EGL_KHR_swap_buffers_with_damage or its EXT equivalent.
This logic used to be duplicated between the X11 and Wayland display servers,
which is not ideal.
2021-07-19 19:35:52 +10:00
Quantum
09893fd728
[client] wayland: display swap to photon latency graph
2021-07-18 16:15:10 +10:00
Quantum
e87bc3a83e
[client] wayland: measure presentation time
2021-07-18 16:15:10 +10:00
Quantum
4b99bba200
[client] wayland: lock confine-related code to avoid race
...
This should fix the occasional Wayland protocol errors that arise when
the UI thread and the cursor thread race.
Example of error that is fixed:
zwp_pointer_constraints_v1@11: error 1: a pointer constraint with a wl_pointer of the same wl_seat is already on this surface
2021-06-08 21:04:14 +10:00