Commit graph

6615 commits

Author SHA1 Message Date
Alexander Orzechowski
9ac94516b8 wlr_scene: Skip direct scanout if there is no damage 2023-03-09 05:38:53 +01:00
Kirill Primak
774d2c82f0 xwm: remove misleading comment
The surfaces are stored in the bottom-to-top order, as specified
in include/xwayland/xwm.h and expected by
wlr_xwayland_surface_restack().
2023-03-07 17:51:27 +00:00
Simon Ser
38839ac536 gamma-control-v1: simplify get_gamma_control error handling
Allocate resources only after checking the request.
2023-03-06 13:23:51 +01:00
Simon Ser
9108717d5d gamma-control-v1: fix handling of duplicate control
When a new client comes in and tries to create a
zwlr_gamma_control_v1 object for an output which already has one,
we were destroying the old object and early-returning. The early
return causes the new object to not be set up properly: it's not
inserted in the list and doesn't get the gamma_size event.

Fix this by destroying the new object, and leave the old object
intact, which is what was the intent I think.

Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3605
2023-03-06 11:40:48 +01:00
Kirill Primak
3a200aa279 tinywl: init server to zeros
This fixes e.g. accessing grabbed_view on a toplevel unmap if no
toplevel was grabbed before.
2023-03-04 17:01:11 +03:00
Isaac Freund
5ae17de23f
xdg-shell: improve validation of resize edges
The current validation doesn't catch some invalid values such as 3 or 7.
2023-03-02 21:31:51 +01:00
Simon Ser
97c8ad7c65 backend/wayland: fix leak of some globals
Fix a few globals which weren't properly cleaned up. Discovered
in [1].

[1]: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3604
2023-03-01 16:07:54 +01:00
Simon Ser
cab47d33e2 util/log: prefix WLR_REL_SRC_DIR with underscore
Just like _WLR_FILENAME and _WLR_ATTRIB_PRINTF, this makes it more
obvious that this isn't part of our API.
2023-03-01 00:52:18 +01:00
Simon Ser
af5cc860e1 backend/wayland: destroy zwp_linux_buffer_params_v1 objects
Don't leak these.
2023-02-28 20:05:46 +01:00
Simon Ser
a160304289 backend/drm: use libdisplay-info for CVT mode generation 2023-02-28 14:44:02 +00:00
Simon Ser
35da997001 backend/drm: use libdisplay-info to parse EDID 2023-02-28 14:44:02 +00:00
Simon Ser
40117e1e0d render/vulkan: prefer render node for wlr_renderer_get_drm_fd()
Instead of returning a primary node from wlr_renderer_get_drm_fd(),
prefer to return a render node if any.
2023-02-28 14:25:21 +00:00
Simon Ser
8db0d82890 examples/dmabuf-capture: fix frame_number deprecated in FFmpeg 6.0
Fixes the following error:

    ../examples/dmabuf-capture.c:524:33: error: 'frame_number' is deprecated [-Werror=deprecated-declarations]
      524 |                                 ctx->avctx->frame_number, get_fifo_size(&ctx->vid_frames));
          |                                 ^~~
2023-02-28 11:57:07 +01:00
Simon Ser
bec94cc040 backend: move #ifdefs to nested functions
Instead of littering #ifdefs everywhere, move them to the dedicated
attempt_XXX_backend() functions. This makes the logic in
wlr_backend_autocreate() more readable, and provides better error
messages when the X11/Wayland backends are disabled at compile-time,
or when WLR_BACKENDS contains a backend disabled at compile-time.
2023-02-27 11:33:52 +01:00
Simon Ser
8acaabcbab backend: make wlr_backend_autocreate() fail when DRM is missing
When we change the required dependencies for the DRM backend,
Meson might auto-disable the backend for users missing the new
requirements. This results in confused users [1] because they don't
notice the "drm-backend: NO" line burried in the Meson logs, and
then get a black screen when starting the compositor.

Update wlr_backend_autocreate() to refuse to create a backend with
only libinput (without DRM).

Users really wanting to start their compositor with a libinput
backend and without a DRM backend can manually set WLR_BACKENDS.

[1]: https://github.com/swaywm/sway/issues/7457
2023-02-27 11:18:58 +01:00
Simon Ser
5079000e49 output: allow modeset with buffer while frame is pending
Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3600
2023-02-26 18:42:31 +01:00
Simon Ser
ab7eabac84 output: leverage wlr_output_configure_primary_swapchain()
Replace our current logic to setup the primary swapchain with
wlr_output_configure_primary_swapchain().

- Removes some code, reducing duplication
- Stop overwriting wlr_output.swapchain with a yet-to-be-tested
  swapchain: remove the error_destroy_swapchain label.
2023-02-24 18:22:20 +00:00
Simon Ser
fef8ab22e3 output: introduce wlr_output_configure_primary_swapchain()
The goal is to simplify wlr_output by moving all of its rendering
API into separate helpers. Here is a first step to sunset
wlr_output_attach_render(). Instead, compositors call
wlr_output_configure_primary_swapchain(), wlr_swapchain_acquire(),
wlr_renderer_begin_with_buffer() and wlr_output_attach_buffer().

Note that compositors can supply a base struct wlr_output_state.
This is useful to allocate a buffer suitable for submission with
a modeset, for instance.

Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3079
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3197
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3984
2023-02-24 18:22:20 +00:00
Jan Beich
59acc69737 vulkan: silence -Wint-conversion on 32-bit architectures
render/vulkan/renderer.c:388:70: error: incompatible pointer to integer conversion passing 'void *' to parameter of type 'VkFence' (aka 'unsigned long long') [-Werror,-Wint-conversion]
        VkResult res = vkQueueSubmit(renderer->dev->queue, 1, &submit_info, NULL);
                                                                            ^~~~
render/vulkan/renderer.c:1141:81: error: incompatible pointer to integer conversion passing 'void *' to parameter of type 'VkFence' (aka 'unsigned long long') [-Werror,-Wint-conversion]
        VkResult res = vkQueueSubmit(renderer->dev->queue, submit_count, submit_infos, NULL);
                                                                                       ^~~~
/usr/include/sys/_null.h:34:14: note: expanded from macro 'NULL'
 #define NULL    ((void *)0)
                 ^~~~~~~~~~~
/usr/local/include/vulkan/vulkan_core.h:4054:49: note: passing argument to parameter 'fence' here
    VkFence                                     fence);
                                                ^

Fixes: a8a194d695 ("render/vulkan: switch to timeline semaphores")
2023-02-24 16:41:40 +00:00
Simon Ser
8619ffab21 swapchain: remove allocator listener on destroy
Past that point the wlr_allocator is gone and the listeners are
invalidated.
2023-02-24 00:07:41 +01:00
Simon Ser
254c5fc752 Switch to "meson setup"
Fixes this warning:

    WARNING: Running the setup command as `meson [options]` instead of `meson setup [options]` is ambiguous and deprecated.
2023-02-22 11:01:04 +01:00
Simon Ser
b33ab26fe7 render/swapchain: make public
We've had this struct for a while. It'd be useful for compositors
if they want to manage the swap chains themselves instead of being
forced to use wlr_output's. Some compositors might also want to use
a swapchain without an output.
2023-02-21 17:14:31 +01:00
Simon Ser
c667e64892 backend: disable DRM backend monitor when WLR_DRM_DEVICES is used
WLR_DRM_DEVICES specifies a static list of DRM devices to open
at startup.

Do not create DRM backends for hotplugged DRM devices when it's
set.

Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3595
2023-02-21 12:55:26 +01:00
Simon Ser
7303e13808 backend: avoid adding NULL backend in attempt_backend_by_name() 2023-02-21 12:52:20 +01:00
Simon Ser
2849712356 backend: create DRM backend monitor when WLR_BACKENDS is used 2023-02-21 12:51:46 +01:00
Simon Ser
3874577d3c output-layer: document interactions with screen capture
When e.g. screencopy-v1 is active, callers are responsible for
disabling output layers.
2023-02-21 10:35:30 +00:00
Simon Ser
bea6bee55d backend/headless: unconditionally accept all output layers
We don't need to do anything special to handle these.
2023-02-21 10:12:35 +00:00
Simon Ser
8338d17d7e backend/drm: drop wlr_drm_layer.pending_{width,height}
No need to store this info in struct wlr_drm_layer. We can just
extract the size when we need it.
2023-02-21 09:45:47 +00:00
Simon Ser
7215bd1e0f output: expose wlr_output_state_set_buffer() 2023-02-21 09:43:43 +00:00
Simon Ser
4629d0ef40 output: expose wlr_output_state_finish()
Same as the original function, but check for the bitfield before
calling pixman_region32_fini(), because that function expects an
initialized region.
2023-02-21 09:43:43 +00:00
Simon Ser
d25ab03326 screencopy-v1: drop unnecessary pixman_region32_t casts
The Pixman API now accepts const parameters.
2023-02-21 09:37:59 +00:00
Simon Ser
bbd5145d8a backend/drm: drop unnecessary pixman_region32_t casts
The Pixman API now accepts const parameters.
2023-02-21 09:37:59 +00:00
John Lindgren
7d90cd055d xwayland: Send synthetic ConfigureNotify per ICCCM 4.1.5
X11 clients expect a ConfigureNotify after a ConfigureRequest. If
the compositor/window manager chooses not to honor the request
(e.g. due to the window being maximized), XWayland will not send a
"real" ConfigureNotify event and the window manager is expected to
send a synthetic event instead. Otherwise, the X11 client is left
waiting and may not repaint its window properly.

For comparison, see Openbox's client_configure() or Weston's
weston_wm_window_send_configure_notify().

v2: Move logic to wlr_xwayland_surface_configure()
2023-02-21 09:32:06 +00:00
Alexander Orzechowski
3ef9f91283 wlr_scene: Add dmabuf_feedback helper 2023-02-20 17:21:17 -05:00
Alexander Orzechowski
4ddc20e14c wlr_scene: Extract considering logic for direct scanout 2023-02-20 16:53:59 -05:00
Alexander Orzechowski
323f0b94db wlr_scene: Cleanup header includes
We don't need to pull wlr_compositor.
2023-02-20 16:53:59 -05:00
Simon Ser
9a425841b0 examples/output-layers: relay feedback events 2023-02-20 18:38:57 +01:00
Simon Ser
849c362ffb linux-dmabuf-v1: add helper for output layer feedback events 2023-02-20 18:38:57 +01:00
Simon Ser
22d9df2af4 backend/drm: send output layer feedback events 2023-02-20 18:38:57 +01:00
Simon Ser
e1335a792a output-layer: add feedback event 2023-02-20 18:38:57 +01:00
Simon Ser
4d6fbb2289 backend/drm: add support for output layers 2023-02-20 18:38:57 +01:00
Simon Ser
2398621b8b backend/drm: add libliftoff composition layer
This will be useful for implementing the output layers API.
2023-02-20 18:38:57 +01:00
Simon Ser
9d43e7e4d6 backend/drm: add libliftoff interface 2023-02-20 18:38:57 +01:00
Simon Ser
b4e9487312 backend/drm: init wlr_drm_plane for all plane types 2023-02-20 18:38:57 +01:00
Simon Ser
c3d969d2d4 examples/output-layers: new example 2023-02-20 18:38:57 +01:00
Simon Ser
cd17b18495 backend/wayland: implement output layers 2023-02-20 18:38:57 +01:00
Simon Ser
3e0ce761ad output: add wlr_output_set_layers() 2023-02-20 18:38:09 +01:00
Simon Ser
2f29b0c438 Add wlr_output_layer
This is based on previous work [1] [2].

This new API allows compositors to display buffers without needing to
perform rendering operations. This API can be implemented on Wayland
using subsurfaces and on DRM using KMS planes.

Compared to [1], this approach leverages wlr_addon_set to let backends
attach their own private state to layers, removes the pending
state (necessary for interop with wlr_output_commit_state()) and
enum wlr_output_layer_state_field.

[1]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/1985
[2]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3447
2023-02-20 18:38:09 +01:00
Simon Ser
0335ae9566 build: enable subproject for libxkbcommon
References: https://github.com/xkbcommon/libxkbcommon/pull/315
2023-02-19 11:02:20 +01:00
Simon Zeni
782b5e6565 Revert "render/egl: skip incompatible EGL devices"
Reverts commit c73e20628a.

This caused a regression in the GLES2 renderer because `egl->exts.EXT_device_drm` is set in
`egl_init_display()`, which is invoked after `get_egl_device_from_drm_fd()`. So the function will
always return `EGL_NO_DEVICE_EXT`.
2023-02-18 11:49:51 -05:00