Keep guest-to-host pointer synchronization active while an attempted
surface exit is blocked by the edge of a Wayland output. Continue
forwarding relative motion and wait for wl_pointer.leave before marking
the cursor outside the window.
Distinguish whole-surface releases from exits into letterbox space so
the expected asynchronous release callback cannot disable the feedback
loop before the pointer is confined again.
Treat Wayland pointer capability loss as a real leave so an unrelated
inactive callback cannot be mistaken for the intentional release.
Track cadence, interruption, and calibration wake reasons independently
across X11 and Wayland. Feed phase correction back only when a pure
cadence wake renders the exact frame that was queued at that wake.
Propagate EGL swap results through the display-server boundary. Reject
failed presentations and keep pending Wayland HDR descriptions inactive
until the preceding surface commit succeeds.
Always track Wayland surface outputs alongside fractional scaling and use
RandR modes for X11 cadence. Remove render-derived feedback so a
throttled client cannot teach the producer to remain throttled.
Release scheduling after nominal output timing remains unavailable.
Use the current wl_output mode for the requested producer cadence.
Presentation feedback can follow a slower VRR cadence, feeding that low
update rate back into the IDD. Select the fastest nominal mode when a
window spans multiple outputs.
Correlate received frames with the texture update actually consumed by
the renderer and retain damage until its token becomes renderable.
Split client latency into dispatch, import, queue, preparation, setup,
effects, desktop, composition, and swap stages in FRAME LATENCY.
Exclude diagnostic overlay work from composition and preserve client
wait time when producer timing is unavailable.
Publish joined samples through a bounded token queue, avoid sleeping
while producer timing is finalized, and correct Wayland photon units.
libdecor_decorate() already creates an xdg_surface and xdg_toplevel
internally for the frame. Calling xdg_surface_get_toplevel() again on
that same xdg_surface just to fetch the toplevel for icon handling
assigns the xdg_toplevel role to the underlying wl_surface a second
time, which is a protocol violation.
On GNOME Shell 50 (mutter) this is no longer tolerated: mutter
terminates the Wayland connection ("WL: error in client
communication"), and since libdecor_shellInit() waits for the initial
configure with a blocking, error-less libdecor_dispatch(-1) loop, the
client hangs forever with no window and no diagnostic output. This
made -DENABLE_LIBDECOR=ON (the default when libdecor-0 is present)
appear completely broken on current GNOME/Wayland.
Use libdecor_frame_get_xdg_toplevel() instead, which returns the
xdg_toplevel libdecor already owns, without requesting a second role
assignment.
Require libdecor-0 >= 0.1.1, which is available in Debian oldstable,
so the new accessor is guaranteed by the build dependency.
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.
Validate mastering primaries and luminance independently so one
unsupported component does not discard the other.
Trust content chromaticities when extended target volumes are supported,
and report the exact values and reason when metadata must be omitted.
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.
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.
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.
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.
This commit turns the icon handling into using a macro so we don't need to do
weird conversions from unsigned long (needed by X11) to uint32_t (needed by
Wayland).
Also simplified the error handling path on Wayland.
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.
There is no reason to call a bunch of stuff before the xdg_surface is
configured, so let's not call them and cause early painting to happen
should the compositor decide to send the `preferred_scale` message early.
In fractional-scale-v1, the scaling is defined as follows:
> For toplevel surfaces, the size is rounded halfway away from zero.
Previously, it is undefined. This commit makes waylandScaleMulInt follow
the round half away from zero behaviour.