Alexander Orzechowski
544e678be0
output: Nuke wlr_output->events.present
2023-10-03 05:41:41 -04:00
Alexander Orzechowski
c299c13d13
wlr_output: Introduce struct wlr_output_commit
2023-10-03 05:40:50 -04:00
Alexander Orzechowski
1b0694b794
treewide: Migrate from sizeof(struct) to sizeof(*pointer) where practical
2023-10-03 01:51:07 -04:00
Kirill Primak
a09d649439
docs: replace the less commonly used "::" with "."
2023-10-02 22:10:16 +03:00
Rose Hudson
83af3202f9
output: defer fake present events until after commit
...
Since headless and wayland-without-presentation-feedback were firing
present inside their commit impls, present was getting fired before
commit, which is cursed. Defer this with an idle timer so that commit
handlers can run before present handlers.
2023-10-02 12:34:06 +00:00
Simon Ser
a1679c92ce
backend/drm: restore pending page-flip check when tearing
...
DRM_MODE_PAGE_FLIP_ASYNC doesn't allow user-space to submit new
buffers before waiting for the uevent: the kernel will return EBUSY
in that case.
Fixes: c2aa7fd965 ("backend/drm: Add async page flip support to legacy")
2023-10-02 10:26:47 +02:00
vaxerski
c2aa7fd965
backend/drm: Add async page flip support to legacy
...
Atomic doesn't support such flags yet.
2023-09-28 16:53:08 +00:00
Alexander Orzechowski
9be72ec4ca
backend/drm: Compute custom mode correctly
2023-09-07 01:56:32 +00:00
Simon Ser
717ded9bb0
backend/drm: drop no-op shortcut
...
Since e5fc8cd4c7 ("output: trigger frame/present events on all
commits on enabled output"), any commit on an enabled output is
supposed to trigger frame/present events.
The DRM backend was skipping the commit completely for no-op
commits. Stop doing so.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3719
2023-08-25 17:16:05 +02:00
Simon Ser
e5fc8cd4c7
output: trigger frame/present events on all commits on enabled output
...
Up until now, frame/present events were only triggered when the
user submitted a buffer. Change the wlr_output API so that these
events are triggered when any commit is applied on an enabled
output.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3708
2023-08-23 15:42:22 +00:00
Rose Hudson
fc81d06add
backend/drm: report !presented if session is inactive
2023-08-23 16:36:43 +02:00
Rose Hudson
f7afef0b1f
backend/drm: don't set frame_pending on modeset
...
https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3664#note_2020392
we're gonna have to trust Simon on this one 🤞
2023-08-23 16:36:43 +02:00
Simon Ser
6c1a2a6657
backend/headless: fix broken output frame events
...
frame_delay was set to 0.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3712
2023-08-21 16:18:26 +02:00
Simon Ser
22b6581a18
backend/wayland: wait for xdg_surface.configure explicitly
...
We were assuming a roundtrip was enough to get an
xdg_surface.configure event. That's not the case, the protocol
spec doesn't make such a guarantee.
2023-08-16 22:09:01 +02:00
Alexander Orzechowski
8f0d4c9332
backend/drm: Use output state to set init mode
2023-08-16 18:37:40 +02:00
Alexander Orzechowski
a34d349963
backend/drm: Move output variable up in connect_drm_connector
2023-08-16 11:46:27 -04:00
Alexander Orzechowski
a60361050e
backend/headless: Use output state to set init custom mode
2023-08-16 11:46:27 -04:00
Alexander Orzechowski
83d9764ed8
backend/wayland: Use output state to set init custom mode
2023-08-16 11:46:27 -04:00
Alexander Orzechowski
869b0f14bc
backend/x11: Use output state to set init custom mode
2023-08-16 11:46:27 -04:00
Alexander Orzechowski
6cda3e251c
output: Add initialization state to wlr_output_init
2023-08-16 11:46:27 -04:00
Simon Ser
8678633fc9
backend/wayland: add wlr_wl_output_create_from_surface()
...
By using this function, a compositor can display a wlroots
compositor in a sub-surface, for instance.
2023-08-16 16:39:52 +02:00
Simon Ser
4f88886199
backend/wayland: tag wl_surface
...
When integrating wlroots with another toolkit, wlroots may receive
wl_pointer.enter events for surfaces not backed by a wlr_output.
Ignore such surfaces by tagging the ones we're aware of with
wl_proxy_set_tag().
2023-08-16 16:38:53 +02:00
Simon Ser
dd24991c9e
backend/wayland: take existing wl_display in wlr_wl_backend_create()
...
This allows compositors to use an existing wl_display, to integrate
wlroots with an existing toolkit.
2023-08-16 16:29:09 +02:00
Simon Ser
307720d501
backend/drm: restore custom modes
...
We were only restoring fixed modes here. The DRM backend no longer
creates fixed modes when the compositor sets a custom mode, so we
need to handle this situation when restoring.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3698
2023-07-26 17:08:47 +00:00
Brett Ernst
7ce4d557c5
backend/x11: log output test failure reasons
2023-07-18 15:27:44 -07:00
Brett Ernst
49c7fcdfb1
backend/wayland: log output test failure reasons
2023-07-18 15:26:54 -07:00
Simon Ser
37ef9d7356
backend/drm: stop checking for wlr_client_buffer
...
wlr_client_buffer is a bad indicator for direct scan-out.
Compositors might use the underlying wlr_buffer instead.
2023-07-14 15:20:35 +02:00
Simon Ser
fe06e5f49a
Use wl_container_of() instead of casts
...
This slightly improves type safety.
The culprits were found with:
git grep -E '\([a-z0-9_ ]+ \*\)\W?[a-z]'
2023-07-11 20:16:17 +02:00
Simon Ser
7a9f8d8d6b
Use struct initializers instead of memset()
...
This is a bit more type-safe.
2023-07-07 17:31:11 +02:00
Clayton Craft
aca48124ad
backend/drm: use panel_orientation if it is set
...
This fixes an issue where the panel_orientation parameter was set but wlroots was ignoring it and
returning OUTPUT_TRANSFORM_NORMAL.
Fixes 2e12de96
2023-06-30 09:34:28 -07:00
Simon Ser
aa1055134d
backend/drm: handle output layer damage
2023-06-30 04:31:50 +00:00
Simon Ser
7811f22250
backend/wayland: handle output layer damage
2023-06-30 04:31:50 +00:00
Simon Ser
f4ee5eae93
backend/headless: leave new outputs disabled by default
2023-06-27 16:26:30 +00:00
Simon Ser
e1bdc62c38
backend/x11: leave new outputs disabled by default
2023-06-27 16:26:30 +00:00
Simon Ser
1f716f4bc0
backend/wayland: mark new outputs as disabled
...
Leave it up to the compositor to enable new outputs (just like the
DRM backend does).
2023-06-27 16:26:30 +00:00
Simon Ser
611ce13625
backend/headless: add support for disabled outputs
...
We have nothing to do when a headless output is enabled/disabled.
2023-06-27 16:26:30 +00:00
Simon Ser
6c53f7badf
backend/headless: only schedule a new frame if buffer was submitted
...
A no-op commit should not schedule a new frame. This aligns the
headless backend with the rest of the backends.
This will be important to handle the enabled → disabled transition.
2023-06-27 16:26:30 +00:00
Simon Ser
bfe8138210
backend/x11: unmap when output is disabled
2023-06-27 16:26:30 +00:00
Simon Ser
c0fd37c491
backend/wayland: unmap when output is disabled
2023-06-27 16:26:30 +00:00
Alexander Orzechowski
8243399385
output: Set output mode during main commit
...
Removes duplication across all the backends to finally apply the mode
to the output.
2023-06-27 11:47:58 -04:00
Alexander Orzechowski
530e58b96e
backend/wayland: Reject non 0 refresh rate mode sets
2023-06-27 11:47:58 -04:00
Alexander Orzechowski
99314aac9f
backend/x11: Reject non 0 refresh rate mode sets
2023-06-27 11:45:44 -04:00
Alexander Orzechowski
5567aefb1c
backend/drm: Don't add pollute fixed modes list with custom modes
...
Nobody remembers why this is done and it isn't that great if people
use a lot of custom modes.
2023-06-27 11:14:55 -04:00
Simon Ser
cbcd99435f
backend/drm: remove duplicate needs_frame() in set_cursor()
...
wlr_output_update_needs_frame() is called unconditionally at the
end of the function already.
2023-06-26 11:49:38 +02:00
Simon Ser
be05097968
output: add wlr_output_state_init()
...
This changes the semantics of wlr_output_state. Instead of having
fields with uninitialized memory when missing from the committed
bitflag, all fields are always initialized (and maybe NULL/empty),
just like we do in wlr_surface_state. This reduces the chances of
footguns when reading a field, and removes the need to check for
the committed bitfield everywhere.
A new wlr_output_state_init() function takes care of initializing
the Pixman region.
2023-06-23 18:07:26 +00:00
Simon Ser
fffa1908af
backend/drm: fix libliftoff_plane double-free
...
Destroying the liftoff_device invalidates all of the liftoff_planes.
Destroy the liftoff_planes before the liftoff_device to fix this.
2023-06-22 18:00:34 +00:00
Alexander Orzechowski
ecbe48f3bc
backend/drm: Fix typo
2023-06-21 10:23:56 +02:00
Alexander Orzechowski
e8887f76ed
backend/drm: Use texture blend_mode for multigpu blit
2023-06-19 13:16:35 -04:00
Simon Ser
2d9659d765
backend/libinput: use struct initializers for events
...
This is more readable and consistent with the rest of wlroots.
2023-06-14 15:20:41 +02:00
Simon Ser
e1c6801b65
backend/libinput: ignore multiple events for same pointer button
...
If the same button is pressed on two devices on the same seat,
ignore the second event.
This is also what Mutter does.
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3665
2023-06-14 10:48:44 +00:00