Félix Poisot
32d5fc1d11
render/color: introduce color_transform_compose
...
It flattens color transform pipelines, and facilitates building
pipelines of variable content
2025-12-18 14:58:28 +00:00
Simon Ser
3d8c471aef
color_management_v1: add BT.1886 to TF-from-renderer helper
...
BT.1886 support has been added to wlroots after this helper got
written.
2025-12-18 09:54:27 -05:00
Simon Ser
9b4d9eabb1
color_management_v1: add helpers to get supported TFs/primaries
...
This avoids hardcoding lists of TFs/primaries in compositors.
I've considered adding wlr_color_manager_v1_create_with_renderer()
instead, but I'm worried that some aspects of the options struct
don't really depend on the renderer, but on the compositor. Such
things are features and render intents.
I've considered returning a const array, but this would tie our
hands if we want to make the renderer advertise the set of
TFs/primaries it supports, instead of having a single flag gating
all of them.
2025-12-15 11:07:26 -05:00
Ilia Bozhinov
0e9c6ddefa
seat: add wlr_seat_touch_notify_clear_focus
...
This is needed for cases where the touch operation goes over a region
where no surfaces are present. In this case, we'd want to notify the
touch grabs (for example DnD grabs) that no focus is currently focused.
2025-12-11 21:10:59 +00:00
Ilia Bozhinov
03b465f324
drag: destroy data source on touch_up
...
This is in case we drop the drag with no focus, we want to destroy the
drag to tell the client the drag was cancelled.
2025-12-11 21:10:59 +00:00
llyyr
c45b3b1f5f
color_representation_v1: don't leak supported_* on display destroy
2025-12-04 15:27:22 +05:30
tokyo4j
abf80b529e
wlr-foreign-toplevel: avoid wl_resource_find_for_client()
...
If the client application is composed of multiple components and they
bind the manager global separately, choosing a single toplevel resource
with wl_resource_find_for_client() may result in a component only seeing
unknown toplevel handles from another component.
Maybe we should track which toplevel handle resource originate from
which manager resource so that a component never sees toplevel handles
resources from another component, but it's too annoying to implement.
2025-11-25 18:54:20 +00:00
Félix Poisot
811765ffa0
output: don't rebuild cursor color transform for each update
2025-11-24 23:26:14 +00:00
Félix Poisot
7101a69804
scene: don't rebuild color transforms each frame
2025-11-24 23:26:14 +00:00
Félix Poisot
3d3d5fb1b7
render: remove buffer primaries from pass options
...
colorspace conversion is now carried explicitely by setting a
wlr_color_transform_matrix in the color transform
2025-11-24 23:26:14 +00:00
Félix Poisot
fdb473e675
scene: always apply user gamma after scene color transform
...
Fixes 989cffe , making renderer-applied transform consistent with
hardware-applied transform
2025-11-24 23:26:14 +00:00
Félix Poisot
106f0f9506
output/state: add missing unref for color_transform
2025-11-14 11:10:37 +00:00
Simon Ser
fa7b66bcf4
color_representation_v1: add helper to create global from renderer
2025-11-13 10:35:56 -05:00
Simon Ser
87c3cb5c52
scene: add support for color-representation-v1 coeffs and range
2025-11-13 10:35:56 -05:00
Simon Ser
2fbc0b5ac1
scene: add support for color encoding and range
2025-11-13 10:35:56 -05:00
Félix Poisot
0d24cdb822
cursor: apply output image description when preparing texture
2025-11-11 21:55:06 +00:00
David96
aef84f0e4d
wlr_virtual_pointer: Set axis source on all axis
...
Currently it is possible to crash a wlroots compositor by setting any
axis source other than 0 and sending an axis event in the HORIZONTAL
direction from wlr_virtual_pointer since the axis source is only set on
the first axis.
This then hits the assert in wlr_seat_pointer.c:332.
Fix by always setting the source on all axis.
2025-11-06 16:02:58 +00:00
xurui
47d0a90274
types/wlr_input_device: name maybe NULL
...
Signed-off-by: xurui <xurui@kylinos.cn>
2025-11-04 17:29:23 +08:00
Simon Ser
989cffe70d
scene: add software fallback for gamma LUT
2025-10-18 20:36:01 +02:00
Simon Ser
3e08e3be4a
gamma_control_v1: introduce fallback_gamma_size
2025-10-18 20:36:01 +02:00
Simon Ser
91f4890ec2
gamma_control_v1: add wlr_gamma_control_v1_get_color_transform()
2025-10-18 20:36:01 +02:00
Simon Ser
74ce6c22a5
output: check for color transform no-op changes
...
This allows callers to always set this state and not care whether
the output currently has the same color transform applied.
2025-10-18 20:36:01 +02:00
Simon Ser
6d63871f05
linux_drm_syncobj_v1: fix use-after-free in surface_commit_destroy()
...
surface_commit_destroy() accesses a field from
struct wlr_linux_drm_syncobj_surface_v1, however that struct may have
been free'd earlier:
==1103==ERROR: AddressSanitizer: heap-use-after-free on address 0x7cdef7a6e288 at pc 0x7feefaac335a bp 0x7ffc4de8f570 sp 0x7ffc4de8f560
READ of size 8 at 0x7cdef7a6e288 thread T0
#0 0x7feefaac3359 in surface_commit_destroy ../subprojects/wlroots/types/wlr_linux_drm_syncobj_v1.c:195
#1 0x7feefaac34cd in surface_commit_handle_surface_destroy ../subprojects/wlroots/types/wlr_linux_drm_syncobj_v1.c:211
#2 0x7feefbd194cf in wl_signal_emit_mutable (/usr/lib/libwayland-server.so.0+0x84cf) (BuildId: b9664217748f523995e3f855fa197cf8e59942d1)
#3 0x7feefaa52b22 in surface_handle_resource_destroy ../subprojects/wlroots/types/wlr_compositor.c:730
#4 0x7feefbd1bb9f (/usr/lib/libwayland-server.so.0+0xab9f) (BuildId: b9664217748f523995e3f855fa197cf8e59942d1)
#5 0x7feefaa46a18 in surface_handle_destroy ../subprojects/wlroots/types/wlr_compositor.c:65
#6 0x7feef89afac5 (/usr/lib/libffi.so.8+0x7ac5) (BuildId: d5e3b0d8921923f35438adefa9f864745abc5e90)
#7 0x7feef89ac76a (/usr/lib/libffi.so.8+0x476a) (BuildId: d5e3b0d8921923f35438adefa9f864745abc5e90)
#8 0x7feef89af06d in ffi_call (/usr/lib/libffi.so.8+0x706d) (BuildId: d5e3b0d8921923f35438adefa9f864745abc5e90)
#9 0x7feefbd17531 (/usr/lib/libwayland-server.so.0+0x6531) (BuildId: b9664217748f523995e3f855fa197cf8e59942d1)
#10 0x7feefbd1cd2f (/usr/lib/libwayland-server.so.0+0xbd2f) (BuildId: b9664217748f523995e3f855fa197cf8e59942d1)
#11 0x7feefbd1b181 in wl_event_loop_dispatch (/usr/lib/libwayland-server.so.0+0xa181) (BuildId: b9664217748f523995e3f855fa197cf8e59942d1)
#12 0x7feefbd1d296 in wl_display_run (/usr/lib/libwayland-server.so.0+0xc296) (BuildId: b9664217748f523995e3f855fa197cf8e59942d1)
#13 0x555bf0a55a40 in server_run ../sway/server.c:615
#14 0x555bf0a4a654 in main ../sway/main.c:376
#15 0x7feef9227674 (/usr/lib/libc.so.6+0x27674) (BuildId: 4fe011c94a88e8aeb6f2201b9eb369f42b4a1e9e)
#16 0x7feef9227728 in __libc_start_main (/usr/lib/libc.so.6+0x27728) (BuildId: 4fe011c94a88e8aeb6f2201b9eb369f42b4a1e9e)
#17 0x555bf0a03f54 in _start (/home/leo/code/stuff/sway/build/sway/sway+0x390f54) (BuildId: e3d4e653af1aa0885f0426c403e16fc87c086d33)
0x7cdef7a6e288 is located 8 bytes inside of 176-byte region [0x7cdef7a6e280,0x7cdef7a6e330)
freed by thread T0 here:
#0 0x7feefb71f79d in free /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:51
#1 0x7feefaac29f1 in surface_destroy ../subprojects/wlroots/types/wlr_linux_drm_syncobj_v1.c:84
#2 0x7feefaac2e47 in surface_handle_resource_destroy ../subprojects/wlroots/types/wlr_linux_drm_syncobj_v1.c:143
#3 0x7feefbd1bb9f (/usr/lib/libwayland-server.so.0+0xab9f) (BuildId: b9664217748f523995e3f855fa197cf8e59942d1)
#4 0x7feefaac2a12 in surface_handle_destroy ../subprojects/wlroots/types/wlr_linux_drm_syncobj_v1.c:89
#5 0x7feef89afac5 (/usr/lib/libffi.so.8+0x7ac5) (BuildId: d5e3b0d8921923f35438adefa9f864745abc5e90)
previously allocated by thread T0 here:
#0 0x7feefb7205dd in calloc /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_malloc_linux.cpp:74
#1 0x7feefaac4abd in manager_handle_get_surface ../subprojects/wlroots/types/wlr_linux_drm_syncobj_v1.c:313
#2 0x7feef89afac5 (/usr/lib/libffi.so.8+0x7ac5) (BuildId: d5e3b0d8921923f35438adefa9f864745abc5e90)
Fix this by storing the struct wlr_surface in the field.
Closes: https://github.com/swaywm/sway/issues/8917
2025-10-17 09:05:53 +00:00
Furkan Sahin
06275103f2
input-method-v2: Destroy keyboard grab before input method
...
Fixes race condition in where the keyboard grab tries to reference the
input manager after it's been set to null.
2025-10-16 12:07:47 +00:00
llyyr
5529aae3e6
wlr_scene: fix direct scanout for gamma2.2 buffers
...
Fixes incorrectly rejecting scanout for gamma2.2 buffers when the output
has no image description set. This happens on `hdr off` mode on sway.
Also refactor the scanout check into its own function while at it to
make it easier to follow.
2025-10-05 23:53:25 +05:30
llyyr
6e1c8748ff
render: introduce bt.1886 transfer function
2025-10-04 18:13:37 +05:30
Félix Poisot
d8fb7adcf0
scene, render: use Gamma 2.2 TF as default
2025-10-03 19:48:12 +00:00
Félix Poisot
c2d9ae2142
render: introduce Gamma 2.2 color transform
2025-10-03 19:39:17 +00:00
Simon Ser
6978509f64
Revert "wlr_scene: fix tf/prim comparison for scanout attempt"
...
This reverts commit dde07b6840 .
This is incorrect as discussed here:
https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/5163#note_3118744
2025-10-03 20:42:21 +02:00
llyyr
2252854297
wlr_scene: return scene_direct_scanout_result instead of bool
2025-10-02 13:51:41 +05:30
llyyr
dde07b6840
wlr_scene: fix tf/prim comparison for scanout attempt
...
We were incorrectly doing comparison with `!= 0` to detect non-sRGB
tf/primaries. Since these enums are bit flags, the default sRGB values
are 1, not 0, so sRGB buffers were incorrectly rejected.
Fixes: bf40f396bf ("scene: grab image description from output state")
2025-10-02 11:57:52 +05:30
Simon Ser
7cb3393e75
scene: send color_management_v1 surface feedback
...
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3999
2025-09-23 09:22:00 -04:00
Simon Ser
26c1476827
color_management_v1: add destroy event to manager
2025-09-23 09:22:00 -04:00
Simon Ser
138210f01c
color_management_v1: make from_wlr enum converters public
...
This can be useful for compositors to set surface feedback.
2025-09-23 09:22:00 -04:00
Simon Ser
845a7a581d
color_management_v1: drop duplicated enum converters
2025-09-23 09:22:00 -04:00
xurui
aaf82ee332
wlr_drag: drag motion signal also needs to be sent
...
Signed-off-by: xurui <xurui@kylinos.cn>
2025-09-22 10:04:30 -04:00
Simon Ser
462046ffdc
cursor: use source buffer to signal release timeline point
...
Same as 128cd07e91 ("scene/surface: use source buffer to signal
release timeline point"), but for the cursor.
2025-09-11 12:33:04 +00:00
Simon Ser
bd566225ea
scene/surface: fix NULL deref when source buffer is destroyed
...
Fixes the following crash, witnessed after a GPU reset:
#0 0x00007fba9a32774c n/a (libc.so.6 + 0x9774c)
#1 0x00007fba9a2cddc0 raise (libc.so.6 + 0x3ddc0)
#2 0x00007fba9a2b557a abort (libc.so.6 + 0x2557a)
#3 0x00007fba9a2b54e3 n/a (libc.so.6 + 0x254e3)
#4 0x00007fba9a53fb78 wlr_linux_drm_syncobj_v1_state_signal_release_with_buffer (libwlroots-0.20.so + 0x26b78)
#5 0x00007fba9a590846 surface_reconfigure (libwlroots-0.20.so + 0x77846)
#6 0x00007fba9a590cbb scene_surface_set_clip (libwlroots-0.20.so + 0x77cbb)
#7 0x00007fba9a590efa subsurface_tree_set_clip (libwlroots-0.20.so + 0x77efa)
#8 0x00007fba9a590f1f subsurface_tree_set_clip (libwlroots-0.20.so + 0x77f1f)
#9 0x00007fba9a590f1f subsurface_tree_set_clip (libwlroots-0.20.so + 0x77f1f)
#10 0x00007fba9a590f8d wlr_scene_subsurface_tree_set_clip (libwlroots-0.20.so + 0x77f8d)
Reported-by: Hubert Hirtz <hubert@hirtz.pm>
2025-09-11 12:33:04 +00:00
Simon Ser
b62c6878e1
scene/surface: simplify single-pixel-buffer check in surface_reconfigure()
...
No need to call wlr_client_buffer_get() on wlr_client_buffer.base:
we're already manipulating a wlr_client_buffer.
2025-09-11 12:33:04 +00:00
Simon Ser
fd069ad4f2
output/cursor: fix missing second cursor
...
When attaching more than one cursor to wlr_output, the first one
will pick the output's hardware cursor, then for the second one
output_set_hardware_cursor() would fail (since the hardware cursor
was already taken), but we still ended up resetting the current
hardware cursor (by calling output_disable_hardware_cursor() below).
As a result only the second cursor would be displayed.
To fix this, move the current hardware cursor check to the caller.
Fixes: 510664e79b ("output: disable hardware cursor when falling back to software")
2025-09-11 12:21:52 +00:00
liupeng
5e5842cb1a
drm_lease_v1: initialize device resource link during abnormal exit
...
Signed-off-by: liupeng <liupeng01@kylinos.cn>
2025-09-11 11:05:39 +08:00
David Turner
905465b0fa
color-representation-v1: Actually set supported_*_len
2025-09-09 15:19:30 +01:00
tokyo4j
102a6bd415
input-method: use NULL when emitting signals
2025-09-08 10:56:57 -04:00
tokyo4j
06aacb2a6f
input-method: rename input_method event to new_input_method
2025-09-08 10:56:57 -04:00
Simon Zeni
0166fd9eb7
drm-lease-v1: remove connector active_lease & lease connectors
...
Upon leasing, the wlr_drm_lease_connector_v1 will be automatically clean up by the wlr_output
destroy handler. There is no need for the wlr_drm_lease_manager to keep track of leased connectors.
2025-08-28 16:33:35 +00:00
xurui
7bf5ff4c02
wlr_xdg_toplevel_icon_v1: check the correct resource
...
Signed-off-by: xurui <xurui@kylinos.cn>
2025-08-27 20:01:50 +08:00
Simon Ser
7431d840d0
color-management-v1: handle inert outputs in get_output
...
wlr_output_from_resource() can return NULL if the outputs no longer
exists on the compositor side.
Closes: https://github.com/swaywm/sway/issues/8847
2025-08-18 14:09:13 +02:00
Kirill Primak
bb1f8673b3
compositor: use wl_resource_post_error_vargs()
2025-08-13 20:59:13 +00:00
Kirill Primak
ad1b2f2819
Avoid including generated headers publicly where possible
...
This is possible now that w-p ships enum headers. The remaining includes
are from wlr-protocols.
2025-08-13 22:46:37 +02:00
Kirill Primak
812675ba34
fixes: add implementation
2025-08-13 20:41:21 +00:00