aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2023-02-03layer-shell: forbid changing the existing popup parentKirill Primak
2023-02-03xwayland/shell: actually use wlr_xwayland_surface_v1.linkKirill Primak
Fixes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3575
2023-02-02render/gles2: default to highp if availableSimon Ser
The spec [1] says that the maximum value for a mediump float is at least 2¹⁴ in section 4.5.2. However, when using a 4k resolution texture coordinates will exceed this value. This causes issues on drivers which implement mediump as a 16-bit [2]. Switch to highp. There's a twist: on GLES2, support for highp is optional. So we need to guard it with cute GL_FRAGMENT_PRECISION_HIGH ifdefs. [1]: https://registry.khronos.org/OpenGL/specs/es/2.0/GLSL_ES_Specification_1.00.pdf [2]: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21082
2023-02-02render/gles2: use correct type for shader typeSimon Ser
Doesn't matter a lot, but let's try to be consistent with the GL headers.
2023-02-02backend/wayland: handle wl_registry.global_remove for wl_seatSimon Ser
Destroy the struct wlr_wl_seat when the global is removed.
2023-02-02backend/wayland: make destroy_wl_seats() handle a single seatSimon Ser
Instead of destroying all seats, destroy a single one. We only need to destroy all seats at one call-site (backend_destroy), but we'll need to destroy a single seat elsewhere in the next commit.
2023-02-02backend/drm: require hwdata pkg-config fileSimon Ser
The hardcoded fallback "/usr/share/hwdata/pnp.ids" was only a temporary solution to get things working while distributions were still working on shipping it.
2023-02-02ci: install hwdata-dev on AlpineSimon Ser
This gives us the pkg-config file.
2023-02-02backend/wayland: update output mode after commit is doneSimon Ser
Do not update the output mode if the commit failed in one of the error codepaths.
2023-02-02backend/wayland: allow superseding a previous commitSimon Ser
During a modeset, the core wlr_output logic will allocate a buffer with a new size and commit it. However if we still have a frame callback pending we'd refuse to perform the commit. This is inconsistent with the DRM backend, which performs a blocking modeset. This is visible when resizing the Wayland toplevel. The logs are filled with "Skipping buffer swap", and the wlr_damage_ring's bounds are not properly updated. Fix this by destroying the pending frame wl_callback.
2023-02-02output: don't attach buffer on first commit if disabledSimon Ser
In output_ensure_buffer() we create a swapchain and attach an empty buffer to the output if necessary. We do that during the first commit. This is fine when the first commit enables the output, however this breaks when the first commit disables the output. A commit which disables an output and has a buffer attached is invalid (see output_basic_test()), and makes the DRM backend crash: 00:00:00.780 [wlr] [backend/drm/drm.c:622] connector eDP-1: Turning off ../subprojects/wlroots/backend/drm/drm.c:652:44: runtime error: member access within null pointer of type 'struct wlr_drm_crtc' AddressSanitizer:DEADLYSIGNAL ================================================================= ==2524==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x7f22e894afc1 bp 0x7ffe1d57c550 sp 0x7ffe1d57c420 T0) ==2524==The signal is caused by a READ memory access. ==2524==Hint: address points to the zero page. #0 0x7f22e894afc1 in drm_connector_commit_state ../subprojects/wlroots/backend/drm/drm.c:652 #1 0x7f22e894b1f5 in drm_connector_commit ../subprojects/wlroots/backend/drm/drm.c:674 #2 0x7f22e89e8da9 in wlr_output_commit_state ../subprojects/wlroots/types/output/output.c:756 #3 0x555ab325624d in apply_output_config ../sway/config/output.c:517 #4 0x555ab31a1aa1 in handle_new_output ../sway/desktop/output.c:974 #5 0x7f22e9272f6d in wl_signal_emit_mutable (/usr/lib/libwayland-server.so.0+0x9f6d) #6 0x7f22e899b012 in new_output_reemit ../subprojects/wlroots/backend/multi/backend.c:161 #7 0x7f22e9272f6d in wl_signal_emit_mutable (/usr/lib/libwayland-server.so.0+0x9f6d) #8 0x7f22e895a153 in scan_drm_connectors ../subprojects/wlroots/backend/drm/drm.c:1488 #9 0x7f22e893c2e4 in backend_start ../subprojects/wlroots/backend/drm/backend.c:24 #10 0x7f22e892ed00 in wlr_backend_start ../subprojects/wlroots/backend/backend.c:56 #11 0x7f22e8999b83 in multi_backend_start ../subprojects/wlroots/backend/multi/backend.c:31 #12 0x7f22e892ed00 in wlr_backend_start ../subprojects/wlroots/backend/backend.c:56 #13 0x555ab317d5cc in server_start ../sway/server.c:316 #14 0x555ab317748d in main ../sway/main.c:400 #15 0x7f22e783c28f (/usr/lib/libc.so.6+0x2328f) #16 0x7f22e783c349 in __libc_start_main (/usr/lib/libc.so.6+0x23349) #17 0x555ab3134c84 in _start (/home/simon/src/sway/build/sway/sway+0x377c84) Fixes: 3be6658ee7b6 ("output: allocate swapchain on first commit") Closes: https://github.com/swaywm/sway/issues/7373
2023-02-02backend/wayland: don't cache next item when destroying buffersSimon Ser
Because wl_buffer.release is per-buffer and not per-commit, the Wayland backend might create multiple struct wlr_wl_buffer per struct wlr_buffer. As a result, the wlr_buffer_unlock() call inside destroy_wl_buffer() can cause another struct wlr_wl_buffer to be destroyed. In backend_destroy() we were iterating the list of buffers with wl_list_for_each_safe(), which is actually not safe in this case: the next buffer is cached, but might be destroyed as a side-effect of calling destroy_wl_buffer(). Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3572
2023-02-02subcompositor: fix mapped parent checkKirill Primak
2023-02-01subcompositor: convert to try_fromSimon Ser
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/884
2023-02-01ext-session-lock-v1: convert to try_fromSimon Ser
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/884
2023-02-01layer-shell-v1: convert to try_fromSimon Ser
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/884
2023-02-01input-method-v2: convert to try_fromSimon Ser
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/884
2023-02-01xdg-shell: convert to try_fromSimon Ser
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/884
2023-02-01xwayland/xwm: reset serial in xwayland_surface_dissociate()Simon Ser
The same X11 window can be used multiple times with a different wl_surface. Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3570
2023-02-01xwayland/xwm: introduce wlr_xwayland_surface_try_from_wlr_surface()Kirill Primak
This new function replaces wlr_surface_is_xwayland_surface() and wlr_xwayland_surface_from_wlr_surface().
2023-02-01examples: use NULL theme name instead of "default"Simon Ser
This leaves it up to wlr_xcursor_theme_load() to pick the theme name.
2023-02-01examples, tinywl: use "default" cursor instead of "left_ptr"Simon Ser
"left_ptr" is the X11 name, "default" is the cursor spec name.
2023-02-01xcursors: Alias existing cursor defaults to cursor-spec cursor namesConsolatis
wlr_xcursor_get_resize_name() returns cursor-spec [1] based names but the default cursor icons shipped in include/xcursor/cursor_data.h use traditional X cursor names instead. Compositors that use wlr_xcursor_get_resize_name() to resolve an edge to a cursor icon name may thus be unable to render appropriate cursor icons for users that don't have a cursor-spec compliant cursor theme installed on their system or have it installed in an unusual place. This patch adds cursor-spec cursor icon name aliases. [1] https://www.freedesktop.org/wiki/Specifications/cursor-spec/
2023-01-31xdg-shell: rename wlr_xdg_popup.committed to sent_initial_configureSimon Ser
We made a similar change to wlr_xdg_toplevel.
2023-01-31xdg-shell: rename wlr_xdg_toplevel.added to sent_initial_configureSimon Ser
This is more descriptive, and avoids the confusion with wlr_xdg_surface.added.
2023-01-31xdg-shell: remove unnecessary returnSimon Ser
We're at the end of the function anyways.
2023-01-31xdg-shell: reset added/committed flag on unmapSimon Ser
When a client attaches a NULL buffer to its wl_surface, it's unmapped. This resets the xdg_surface in its initial state. An extra NULL commit makes the compositor send an initial configure event. Note, wlr_xdg_toplevel.added is separate from wlr_xdg_surface.added. Closes: https://github.com/swaywm/sway/issues/7397
2023-01-31backend/drm: set "max bpc" property based on pixel formatSimon Ser
Since 1d581656c756 ("backend/drm: set "max bpc" to the max") we set the "max bpc" property to the maximum value. The kernel driver is supposed to clamp this value depending on hardware capabilities. All kernel drivers lower the value depending on the GPU capabilities. However, none of the drivers lower the value depending on the DP-MST link capabilities. Thus, enabling a 4k@60Hz mode can fail on some DP-MST setups due to the "max bpc" property. Additionally, it's not a good idea to unconditionally set "max bpc" to the max. A high bpc consumes more lanes and more clock speed, which means higher power consumption and the busy lanes cannot be used for something else (e.g. other data transfers on a USB-C cable). For now, let's tie the "max bpc" to the pixel format of the buffer. Introduce a heuristic to make "high bit-depth buffer" a synonym of "I want the best quality". This is not perfect: a "max bpc" higher than 8 might be desirable for pixel formats with a color depth of 8 bits, for instance when the color management KMS properties are used. But we don't really support that yet, so let's leave this for later. Closes: https://github.com/swaywm/sway/issues/7367
2023-01-26seat/keyboard: constify wlr_seat_keyboard_notify_enter()Simon Ser
2023-01-26seat/keyboard: constify wlr_seat_keyboard_notify_modifiers()Simon Ser
2023-01-26seat/keyboard: constify args in wlr_seat_keyboard_enter()Simon Ser
2023-01-26seat/keyboard: constify wlr_seat_keyboard_send_modifiers()Simon Ser
2023-01-26seat/keyboard: skip wl_array allocationSimon Ser
We can just create a wl_array from the array passed by the user. Here, wl_array is only necessary to make libwayland happy.
2023-01-24tinywl: fix extra whitespaceSimon Ser
2023-01-21wlr_scene: Send intersecting list of scene outputs for outputs_update signalAlexander Orzechowski
2023-01-21output-layout: improve closest point for no outputs caseKirill Primak
Without outputs, all points are equally invalid anyway, but for e.g. cursor warping it makes more sense to preserve the original position.
2023-01-19render/vulkan: check that requested size is smaller than maxSimon Ser
Fail with a clearer error when the requested size is too large. Without this, we allocate a buffer with a size smaller than what was requested. References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3975
2023-01-18vulkan: increase max stage size to support large buffersBrett Ernst
2023-01-18backend/drm: disable all CRTCs after VT switchSimon Ser
When the user switches away from the VT where wlroots is running, the new DRM master may mutate the KMS state in an arbitrary manner. For instance, let's say wlroots uses the following connector/CRTC mapping: - CRTC 42 drives connector DP-1 - CRTC 43 drives connector DP-2 Then the new DRM master may swap the mapping like so: - CRTC 42 drives connector DP-2 - CRTC 43 drives connector DP-1 wlroots needs to restore its own state when the user switches back. Some state is attached to wlr_drm_crtc (e.g. current FB), so reading back and adopting the CRTC/connector mapping left by the previous DRM master would be complicated (this was the source of other bugs in the past, see [1]). With the previous logic, wlroots merely tries to restore the state of each connector one after the other. This fails in the scenario described above: the kernel refuses to use CRTC 42 for DP-1, because that CRTC is already in-use for DP-2. Unfortunately with the legacy uAPI it's not possible to restore the state in one go. We need to support both legacy and atomic uAPIs, so let's fix the bug for the legacy uAPI first, and then improve the situation for the atomic uAPI as a second step [2]. We need to disable the CRTCs we're going to switch the connectors for. This sounds complicated, so let's just disable all CRTCs to simplify. This causes a black screen because of the on/off modesets, but makes VT switch much more reliable, so I'll take it. [1]: https://gitlab.freedesktop.org/wlroots/wlroots/-/commit/c6d8a11d2c438d514473b1cbe20e5550e7227472 [2]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3794 Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3342
2023-01-18render/vulkan: use correct source offset in read_pixelsllyyr
2023-01-16backend/x11: fix delta_discrete valueKirill Primak
Fixes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3563
2023-01-04subcompositor: Clean up subsurface_consider_mapAlexander Orzechowski
check_parent was unecessary: it only served to skip a trivial check and added more complexity than it was worth.
2023-01-04subcompositor: Clarify comment on subsurface mapped considerationAlexander Orzechowski
2023-01-04tinywl: Nuke view->{x, y}Alexander Orzechowski
Instead use the scene node position.
2023-01-03tablet-tool: revert bitfield in enum wlr_tablet_tool_tip_stateSimon Ser
This was changed to a bitfield by mistake. References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3484#note_1697926
2023-01-03backend/x11: fix initial value of wlr_x11_buffer.n_busySimon Ser
We lock the buffer there, so we need to initialize the n_busy count to 1 as well. Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3556
2022-12-23session-lock: send more protocol errorsIsaac Freund
The invalid_destroy and invalid_unlock protocol errors aren't currently sent by wlroots and instead left up to the compositor. However, we can handle these as well without much additional complexity. This also adds a missing wl_resource_destroy() call if the lock is inert in lock_handle_unlock_and_destroy().
2022-12-22addon: Remove extra newline from loggingAlexander Orzechowski
2022-12-22addon: Add more loggingAlexander Orzechowski
2022-12-22presentation-time: finish surface addonKirill Primak
Fixes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3554