Skip to content
wlroots 0.16.0

Release highlights:

- Support for the new ext-session-lock-v1, idle-notify-v1 and
  single-pixel-buffer-v1 protocols has been added.
- The scene-graph API has many new features and optimizations.
- CPU readback for Vulkan renderer is now implemented. The Vulkan renderer
  should be more stable.
- The input device API has been reworked.
- A new `wlr_damage_ring` helper supersedes wlr_output_damage without being
  as invasive.
- Minor version 5 of xdg-shell has been implemented, adding support for popup
  repositioning, configure bounds and WM capabilities.
- High-res scroll wheel events are now supported.
- Minor version 4 of wlr_output_management-v1 has been implemented, adding
  support for managing adaptive sync (VRR).
- Internal refactoring of the wl_surface and DRM backend code.

Full commit history below.

Alexander Orzechowski (84):
      scene_graph: use wlr_scene_output_send_frame_done
      scene_graph: remove unused outputs list
      scene_graph: Simplify computation for offset of new surfaces. This became possible after the usage of wlr_surface_send_frame_done.
      xdg-foreign: Fix crash on destroy of degenerate surface
      wlr_output_damage: Use wlr_output_damage_add for wlr_output_damage_add_box
      wlr_output_damage: Don't schedule a new frame if damage region does not intersect with output
      types/wlr_output: Handle subpixel hints through output commits
      seat: Don't finish wlr_keyboard if server was never started
      wlr_scene: Allow buffer in wlr_scene_buffer to be NULL
      wlr_scene: Add setter for buffer of a wlr_scene_buffer
      wlr_scene_output: Send output leave events before destroying the output
      wlr_scene: Add output_enter/output_leave signals
      wlr_scene: Fix missing calls to scene_node_update_outputs
      wlr_scene: Make wlr_scene_render_output private
      wlr_scene: Add presentation signal for wlr_scene_buffer
      wlr_scene: Add primary_output property to wlr_scene_buffer
      wlr_scene: Add frame_done signal for wlr_scene_buffer
      wlr_scene: Add a way to choose when input interactions happen on a buffer
      wlr_scene: Add a function to also specify damage when applying a buffer to wlr_scene_buffer
      wlr_scene: Make scene_buffer_from_node public
      wlr_scene: Pull scene_node_get_root into a private header
      wlr_scene: Change out surface specific iterator functions
      wlr_scene: Make presentation object public
      wlr_scene: Introduce addons to scene nodes
      wlr_scene: Refactor wlr_scene_surface to be a helper on top of wlr_scene_buffer
      wlr_scene: Parse out WLR_SCENE_DEBUG_DAMAGE
      wlr_scene: Hook up RERENDER logic
      wlr_scene: Hook up HIGHLIGHT logic
      wlr_scene: Refactor wlr_scene (the root element) to encase a wlr_scene_tree
      wlr_scene: Only allow parenting on a wlr_scene_tree
      wlr_scene: Inline wlr_scene_node_state
      wlr_scene: Move children list from wlr_scene_node to wlr_scene_tree
      wlr_scene_buffer: Call output enter/leave after primary_output calculation
      wlr_scene_buffer: Update primary_output on output destroy
      wlr_output_commit_state: Make sure to clear the back buffer
      dmabuf: Don't leak file descriptors on error path
      wlr_scene: Use direct assignment for damage indicator timestamps
      wlr_scene: Maintain damage highlight regions per output
      wlr_scene: Add option to disable direct scanout
      wlr_scene: Introduce scene_nodes_in_box
      wlr_scene: Damage scene on node destroy by disabling node
      wlr_scene: Add per scene node visibility
      wlr_scene: Rework damage handling
      wlr_scene_set_buffer_with_damage: Only damage the visible parts of the node
      wlr_scene: Only send frame done events for visible buffers
      wlr_scene: Don't render non visible parts of textures/rects
      wlr_scene: Rewrite direct scan out logic to rely on visibility
      wlr_scene: Introduce buffer opaque region metadata
      wlr_scene/surface: Hook through opaque metadata
      wlr_scene: Calculate output intersections based on node visibility
      wlr_scene: Account for occlusion by other scene nodes when calculating visibility
      wlr_scene: Remove unused typedef
      util/box: Introduce wlr_box_equal
      util/box: Introduce wlr_fbox_equal
      wlr_scene: Use wlr_fbox_equals
      wlr_scene: Use wlr_box_equal
      Use wl_signal_emit_mutable
      Remove wlr_signal_emit_safe
      wlr_scene: Simplify calculate_visibilty option
      wlr_scene: Only enable black rect optimization if culling is enabled
      wlr_scene: Cull background
      wlr_scene: Improve awkward code style
      util: Introduce env helpers
      Use env helpers
      wlr_scene: Initialize region32 before trying to use it
      wlr_compositor: Use wlr_fbox_equal
      wlr_scene: Only consider visible parts of the node when culling background
      wlr_scene: More sanity checking
      wlr_scene: Don't leak a region32 when texture failed to upload
      wlr_compositor: Don't leak region32 when calculating opaque region
      wlr_scene: Consider screen position when culling background
      wlr_scene: Clarify surface commit frame events
      pixel_format: RGBA4444 and RGBA5551 have alpha components
      wlr_scene: Be resilient against overflow conditions
      wlr_scene: Fix not updating the scene node when setting a new buffer
      wlr_scene: Ignore disabled outputs
      wlr_scene: Apply source box translation
      backend/drm/legacy: Fix whitespace
      wlr_scene: use wl_container_of() instead of casts
      wlr_scene: Destroy the texture when setting a new buffer.
      xwayland: Simplify net_wm_edges_to_wlr
      wlr_scene: Handle fractional scaling better
      wlr_scene: Fix texture reuse
      wlr_scene: Remove duplicate buffer check when submitting a new buffer

Antonin Décimo (1):
      xcursor: check that XDG base directory path is absolute

Bernardo Meurer (1):
      render/vulkan: fix memory type detection

Consolatis (4):
      wlr_scene: Fix scaling with default source_box
      scene/output_layout: Fix crash in scene_output_layout_output_destroy
      wlr_virtual_pointer_v1: fix discrete scrolling
      screencopy-v1: make sure wlr_buffer enum is visible

David96 (4):
      types/wlr_tablet_tool: remove name ambiguity
      render/vulkan: Implement vulkan_read_pixels
      render/vulkan: implement vulkan_preferred_read_format
      render/vulkan: add caching to vulkan_read_pixels

Dean (1):
      Free drmDevice in get_egl_device_from_drm_fd()

Dominique Martinet (2):
      Xwayland: rename notify pipe 'p' to notify_fd
      Xwayland: use -displayfd instead of USR1

Ferdinand Bachmann (3):
      types/wlr_pointer_gestures_v1: null-check both focused_surface and focused_client
      types/wlr_pointer_gestures_v1.c: get client from seat client instead of resource
      types/seat/wlr_seat.c: fix focused_client being null after seat_client recreation

Gentaiii (1):
      Fixed false allocation failed

Guido Günther (4):
      examples/input-method: Don't crash on NULL surrounding text
      layer-shell: Make wlr_layer_surface_v1_from_resource public
      xdg-activation: Deduplicate token creation code
      seat: Allow to cancel touches

Isaac Freund (20):
      layer-shell: fix type of margins
      wlr_texture: remove wlr_texture_from_wl_drm() from header
      tinywl: fix check whether client is focused or not
      foreign-toplevel: send enter if needed on output bind
      xdg-output: remove dead code
      ext-session-lock-v1: new protocol implementation
      wlr_cursor: constify map to region box arguments
      wlr_switch: remove WLR_SWITCH_STATE_TOGGLE
      backend/drm: fix check for no-op commits
      backend/drm: fix NULL pointer deference due to typo
      output: fix leak of empty back buffer lock
      wlr_input_device: remove anon union field
      Document NULL return value of foo_from_wlr_surface() functions
      wlr-output-management: Implement version 3 release requests
      wlr-output-management: fix broken asserts
      output: clean up after modifierless test failure
      backend/wayland: report adaptive sync as enabled
      backend/x11: report adaptive sync as enabled
      output: remove unknown adaptive sync state
      wlr-output-management: implement adaptive sync

Johan Malm (1):
      scene/layer_shell_v1.c: fix bug in width/height calculations

Johannes (1):
      examples/egl_common: switch rgba format

John Lindgren (6):
      Revert "Copy xcb_icccm structs into wlroots"
      wlr_drm_lease_v1: Fix use-after-free in backend_destroy()
      cursor: Add a more general check for infinite/NaN cursor position
      cursor: Don't warp to (0,0) when last output is disconnected
      backend/libinput: Fix SIGSEGV found in low-memory fuzzing
      render/vulkan: Fix type-punned pointer warning/error

Joshua Ashton (1):
      xwayland: Add support for -force-xrandr-emulation

José Expósito (8):
      build: bump Wayland to v1.21
      build: check if libinput supports high-res scroll
      pointer: transform low-res to high-res axis events
      backend/libinput: handle high-res scroll events
      backend/libinput: code style consistency
      backend/wayland: handle high-res scroll events
      seat: support high-resolution clients
      seat: support low-resolution clients

Keith Bowes (1):
      Fixed compiling with FFmpeg 5.0

Kenny Levinsen (8):
      scene: Add layer_shell_v1 helper
      meson: soversion arg should be string
      wlr_{keyboard,pointer,touch}: Update event docs
      Set mapped before firing map/unmap events
      xdg_shell: Destroy popups after unmap event
      scene/layer_shell: Ignore unmapped exclusion zone
      util/array: Add array_realloc for wl_array
      wlr_scene: Convert render_list to wl_array

Kirill Chibisov (1):
      meson: use target_machine instead of host_machine

Kirill Primak (103):
      scene/subsurface_tree: fix handling subsurface destruction
      subcompositor: split out from compositor
      surface: introduce events.client_commit
      surface: move impl to types/wlr_{sub,}compositor.c
      surface: move decl to wlr_{sub,}compositor.h
      surface: deprecate wlr_surface.h
      surface: improve role precommit hook
      compositor: damage the whole buffer on viewport src change
      subsurface: unlock cached state on commit if desynced
      output-layout: make wlr_output_layout_get_box() take a box as parameter
      output-layout: remove useless types/fields
      cursor: store mapped_box as value
      cursor: ensure mapping box is always initialized
      xdg-shell: rename surface role handlers
      xdg-shell: fix create_xdg_popup() param type
      xdg-toplevel: fix functions' main argument type
      xdg-popup: fix functions' main argument type
      xdg-shell: remove "xdg" from docs
      xdg-shell: unify function arguments' names
      xdg-toplevel: change parent type to xdg-toplevel
      xdg-toplevel: change object type in event structs
      xdg-shell: extract role-specific unmap logic
      xdg-shell: fix potential use-after-free
      xdg-popup: destroy popup-less grab
      xdg-surface: minor consistency renaming
      xdg-shell: drop wlr_xdg_toplevel_set_fullscreen_event
      xdg-toplevel: fix `requested` doc
      xdg-surface: avoid emitting signals with their owner object
      xdg-popup: send invalid_positioner to the right resource
      CONTRIBUTING.md: update construction/destruction functions' description
      xdg-{toplevel,popup}: extract destructors
      xdg-positioner: rename structs
      xdg-positioner: rewrite unconstraining, untie from xdg-popup
      xdg-positioner: fix sliding regression
      tinywl: don't generate xdg-shell-protocol.c
      tinywl: remove outdated non-feature from README.md
      xdg-toplevel: treat unmapped parents as NULL
      xdg-foreign-v1: treat unmapped parents as NULL
      xdg-foreign-v2: treat unmapped parents as NULL
      xdg-toplevel: don't schedule configures on state requests
      scene/output-layout: fix scene destroy handler
      backend/wayland/pointer: fix indentation
      backend/wayland: zero out finished input devices
      CONTRIBUTING.md: update init/finish description
      backend/wayland: reset active pointer on destroy
      examples/layer-shell: premultiply alpha
      xdg-toplevel: store states on the stack
      scene/output: check for NULL in destructor
      util/addon: avoid calling finish() twice
      xdg-popup: add proper configure flow
      xdg-popup: use current/pending state pattern
      xdg-positioner: add v3 parameters
      xdg-popup: add reposition support
      xdg-shell: bump version to 3
      tinywl: use xdg-shell v3
      scene/wlr_scene.h: fix indentation
      scene: add wlr_scene_output.events.destroy
      scene/output-layout: improve ownership logic
      scene/output-layout: add initial outputs
      xdg-shell: improve shell version check
      subcompositor: consider map on creation
      xdg-toplevel: post no memory on strdup() fail
      xdg-popup: use configure fields
      types: add wlr_damage_ring
      scene: switch to wlr_damage_ring
      scene: add missing output damage listener
      seat/pointer: rework sending axis events
      util/array: unclutter
      util/set: overhaul
      cursor: avoid uninitialized wlr_box fields
      output-layout: avoid uninitialized wlr_box fields
      output-layout: improve wlr_output_layout_output_in_direction()
      xdg-foreign-v1: s/unmap/destroy
      xdg-foreign-v2: s/unmap/destroy
      subcompositor: move+rename subsurface_parent_commit()
      subcompositor: consider mapping after adding
      xdg-toplevel: validate resize_edge
      foreign-toplevel-management: fix indentation
      output-damage: fix setting pending_attach_render
      output-damage: drop precommit listener
      output-damage: drop unused pending_attach_render
      output: add a swapchain NULL check in wlr_output_commit_state()
      tablet-v2: fix event parameters
      xdg-toplevel: send invalid_parent error
      scene: fix buffer source box transforming
      xdg-shell: fix geometry types
      compositor: introduce wlr_surface_destroy_role_object()
      layer-shell: use role object destroy handler
      subcompositor: use role object destroy handler
      session-lock: use role object destroy handler
      input-method: use role object destroy handler
      drag-icon: use role object destroy handler
      xdg-shell: use role object destroy handler
      xwayland/xwm: use role object destroy handler
      compositor: drop role object NULL checks in handlers
      compositor: enforce surface destruction order
      tinywl: handle view unmap while grabbed
      compositor: use the correct input region
      scene: fix output damage expansion
      render/pixman: apply source image cropping
      Revert "render/pixman: apply source image cropping"
      damage-ring: add missing headers
      output-damage: deprecate

Leonardo Hernández Hernández (1):
      seat: take wlr_keyboard in wlr_seat_set_keyboard()

Manuel Stoeckl (3):
      render/gles: add support for some 16-bpc unsigned shm formats
      screencopy-v1: Fix frame stride for formats with bpp != 32
      render/gles2: simplify alpha depth check

Mark Bolhuis (1):
      types/wlr_xdg_output_v1: Fix wl_output.done bug.

Moon Sungjoon (1):
      xcursor: support XDG Base Directory Specification

Quantum (1):
      seat/pointer: fix uninitialized variable warning

Roman Gilg (2):
      output: clear buffer created for test
      render: allow texture creation while rendering

Rouven Czerwinski (3):
      relative_pointer: handle inert pointer objects
      cursor: re-enable NULL buffer for cursor
      meson: update default options for libdrm

Samuel Čavoj (1):
      Pass O_CLOEXEC to drmModeCreateLease calls

Sebastian Krzyszkowiak (1):
      wlr_output_layout_contains_point: handle outputs that aren't in the layout

Simon Ser (192):
      build: bump to version 0.16.0
      build: bump soversion
      Remove wlr_box.h redirection
      build: simplify Meson subproject fallbacks
      backend: error out in autocreate without libinput support
      scene: schedule an output frame on wl_surface.frame
      readme: drop mention of the Sway project
      render/vulkan: log physical device driver name
      editorconfig: set max_line_length
      subcompositor: document subsurface_from_resource
      subcompositor: destroy subsurface with parent
      scene: try to import buffers as textures before rendering
      buffer: extract interface to separate header
      Revert "scene: try to import buffers as textures before rendering"
      util/addon: fix public include
      Zero-initialize structs in init functions
      Revert "backend/wayland: zero out finished input devices"
      drm-lease-v1: skip device on wlr_drm_backend_get_non_master_fd failure
      xwayland: add wlr_xwayland_server_options.terminate_delay
      xwayland: terminate when no client is connected
      backend/headless: allow variable refresh rate
      tinywl: don't crash when there is no keyboard
      backend/drm: fetch EDID manufacturer from udev_hwdb
      util/shm: clear mode permission bits in allocate_shm_file_pair
      xdg-shell: specify version in wlr_xdg_shell_create
      xwayland: use dict to collect supported features
      build: bump version to 0.16.0-dev
      backend/drm: allow non-linear modifiers for multi-GPU
      backend/drm: remove wlr_drm_surface.{width,height}
      contributing: add section about documentation conventions
      Reformat doc comments
      render/egl: drop MESA_EGL_NO_X11_HEADERS
      render/egl: add wlr_egl_get_{context,display}
      render/egl: make wlr_egl struct opaque
      render/egl: make wlr_egl_{make,unset,is}_current private
      render/egl: document wlr_egl_create_with_context
      backend/drm: fix crash in init_drm_surface
      output: turn make/model/serial into char *
      linux-dmabuf-v1: fix MOD_INVALID handling in feedback tranches
      backend/x11: fix output model strdup call
      docs/env_vars: fix case of WLR_SCENE_DEBUG_DAMAGE values
      gitignore: remove unnecessary entries, add subprojects/
      output: pass wlr_output_state to backend
      output: pass wlr_output_state to output_pending_resolution
      output: pass wlr_output_state to rendering functions
      output: add wlr_output_test_state
      output: add wlr_output_event_precommit.state
      output: add output_state_{init,finish}
      output: add wlr_output_commit_state
      build: make GBM optional
      relative-pointer-v1: remove unnecessary comments
      relative-pointer-v1: remove unnecessary log messages
      relative-pointer-v1: don't allocate when inert
      backend/drm: improve atomic commit flag logging
      output: remove noop backend check in wlr_output_cursor_set_image
      output: introduce wlr_output_cursor_set_buffer
      output: re-implement set_image with set_buffer
      output: drop wlr_output_cursor.events.destroy
      compositor: send WL_SURFACE_ERROR_INVALID_SIZE for non-cursor surfaces
      xdg-shell: add support for v4
      backend/drm: make commits without a buffer blocking
      backend/drm: short-circuit no-op commits
      examples/text-input: stop using strcpy/strcat
      examples/screencopy-dmabuf: stop using strncpy
      Remove remaining wl_signal_emit calls
      backend/drm: unconditionally set "content type" to graphics
      backend/drm: make serial optional
      output: fix make/model/serial memory leak
      util/global: fix memory leak on display destroy in wlr_global_destroy_safe
      output: add output state setters
      output: compare state before commit
      output: use state setters in wlr_output_set_*
      render/gles2: simplify flipped projection
      matrix: remove wlr_matrix_projection()
      gitignore: remove build dir entries
      render/texture: drop wlr_texture_is_opaque
      output-management-v1: add wlr_output_head_v1_state_apply()
      backend/drm: remove unused CRTC count check
      backend/drm: set "max bpc" to the max
      render/gles2: check GBM is found
      render: use internal_features to indicate EGL support
      build: fix enabled GBM when allocators=auto and auto_features=disabled
      output: fix missing buffer when using direct scanout
      backend/drm: use drmModeGetConnectorTypeName
      backend/drm: use drmModeConnectorGetPossibleCrtcs
      xdg-shell: add support for v5
      single-pixel-buffer-v1: new protocol implementation
      backend/drm: remove unused WLR_DRM_CONN_CLEANUP
      backend/drm: drop WLR_DRM_CONN_NEEDS_MODESET
      backend/drm: drop enum wlr_drm_connector_status
      backend/wayland: fix touch device not added on startup
      render: replace wlr_texture_write_pixels with update_from_buffer
      surface: add WLR_SURFACE_STATE_OFFSET
      surface: implement wl_surface.offset
      output: fail commits if adaptive sync cannot be enabled
      compositor: fix wlr_surface_set_role return value docs
      render/vulkan: drop ext params from vulkan_device_create()
      render/vulkan: drop wlr_vk_device.extensions
      render/vulkan: fix format features check for shm textures
      render/vulkan: remove unnecessary casts
      backend/wayland: drop output_set_custom_mode()
      xdg-foreign-v1: return wlr_xdg_toplevel in verify_is_toplevel()
      xdg-foreign-v2: return wlr_xdg_toplevel in verify_is_toplevel()
      render/egl: improve DMA-BUF format/modifier logging
      render/allocator/gbm: log human-readable format and modifier
      output/render: log human-readable format
      render/vulkan: improve format logging
      output/cursor: downgrade error messages
      buffer: split into multiple files
      single-pixel-buffer-v1: fix header guard name
      output: fix wlr_output_set_gamma() with zero size
      render/egl: add support for EGL_KHR_display_reference
      render/vulkan: add error handling for vulkan_find_mem_type()
      output: inline output_attach_render()
      output: drop back_buffer variable in wlr_output_commit_state()
      output: rejigger attach/clear for back buffer
      backend/drm: de-duplicate wlr_drm_mode creation
      output: fix back buffer checks
      output: add wlr_output_mode.picture_aspect_ratio
      backend/drm: pass through mode picture aspect ratio
      screencopy-v1: rename wlr_screencopy_frame_v1.{format,fourcc}
      screencopy-v1: use DRM format code for shm buffers
      screencopy-v1: rename wlr_screencopy_frame_v1.stride
      screencopy-v1: use wlr_buffer APIs
      render: drop trailing whitespace
      output: add wlr_output_state.allow_artifacts
      backend/drm: fix missing wlr_output_state.allow_artifacts
      render/vulkan: use addon for wlr_vk_render_buffer
      render/vulkan: use addon for wlr_vk_texture
      output: fix typo in error message
      render: don't automatically fall back to Vulkan
      render: don't fall back to Pixman if we have a render node
      render/pixman: advertise support for linear format modifier
      render/allocator/drm_dumb: advertise LINEAR instead of INVALID modifier
      render/allocator/drm_dumb: check modifier list
      render/allocator/drm_dumb: get format info before allocating
      render/allocator/drm_dumb: fix error handling
      render/allocator/drm_dumb: drop finish_buffer()
      backend/drm: don't unconditionally set desired_enabled
      backend/drm: remove outdated TODO
      screencopy-v1: fix frame_shm_copy() error path
      screencopy-v1: simplify frame_dma_copy() error path
      render: drop wlr_renderer_read_pixels() flags
      build: alphabetically sort protocol lists
      backend/drm: drop unnecessary wlr_drm_connector.crtc checks
      backend/drm: nuke wlr_drm_connector.desired_enabled
      output/render: early return in output_ensure_buffer()
      output/render: make output_ensure_buffer() no-op when missing renderer
      output: allocate swapchain on first commit
      drm-lease-v1: fix error codepath
      drm-lease-v1: send finished event on failure in submit request
      drm-lease-v1: reject the lease request by default
      backend/drm: drop drm_connector_set_mode()
      render/gles2: assert that GL_OES_EGL_image_external is supported
      output: fix crash in output_test_with_back_buffer()
      render/vulkan: drop wlr_vk_instance.extensions
      backend: use global output name counters
      backend/drm: use wl_container_of() instead of casts for wlr_drm_mode
      idle-notify-v1: new protocol implementation
      backend/drm: use atomic API to fetch current connector's CRTC
      backend/drm: extract connect_drm_connector() logic
      backend/drm: extract current mode logic into separate function
      backend/drm: fix EINVAL atomic commits after VT switch
      backend/drm: log when restoring mode after VT switch fails
      backend/drm: drop drm_crtc_page_flip()
      backend/drm: log failures in drm_surface_blit()
      render/vulkan: add missing entries in vulkan_strerror()
      backend/drm: fetch current CRTC once on startup
      xwyland/xwm: simplify unpaired_link handling
      output: try to use fixed mode in wlr_output_set_custom_mode()
      output: clarify custom modes warning
      egl: add WLR_EGL_NO_MODIFIERS
      render/gles2: remove stale gles2_texture_from_wl_drm() prototype
      render/gles2: log error on shader compilation failure
      render/gles2: move shaders to individual files
      render/gles2: move color uniform from quad.vert to quad.frag
      render/gles2: de-duplicate vertex shaders
      backend/drm: extract create_drm_connector()
      backend/drm: get possible CRTCs in create_drm_connector()
      xwayland: split headers
      render/vulkan: remove exts arg from vulkan_instance_create()
      render/vulkan: drop outdated comments
      render/vulkan: simplify extension checks
      render/vulkan: use struct initializers
      render/vulkan: simplify texture VkPipelineShaderStageCreateInfo
      render/vulkan: fix and add missing wl_list comments
      render/vulkan: use wl_array for wlr_vk_shared_buffer.allocs
      scene: fix whitespace
      scene: destroy addons before cleaning up internal state
      Revert "backend/drm: fetch EDID manufacturer from udev_hwdb"
      backend/drm: request page-flip event on modeset
      build: bump to version 0.16.0

Simon Zeni (57):
      backend/headless: remove unused wlr_headless_input_device
      types/wlr_input_device: default vendor and product id to 0
      interfaces/wlr_input_device: introduce wlr_input_device_finish
      types/wlr_input_device: call the specialized input device destroy function on destroy
      types/wlr_keyboard: add base wlr_input_device
      types/wlr_pointer: add base wlr_input_device
      types/wlr_switch: add base wlr_input_device
      types/wlr_tablet_pad: add base wlr_input_device
      types/wlr_tablet_tool: add base wlr_input_device
      types/wlr_touch: add base wlr_input_device
      types/wlr_tablet_pad: constify impl
      types/wlr_switch: constify impl
      backend/x11: remove wlr_input_device_impl
      backend/wayland: remove wlr_input_device_impl
      backend/libinput: remove wlr_input_device_impl
      interfaces: remove wlr_input_device_impl
      types/wlr_virtual_keyboard_v1: fix wlr_keyboard destroy sequence
      types/wlr_virtual_pointer_v1: fix wlr_pointer destroy sequence
      backend/libinput: add devices wl_list
      backend/libinput: rework keyboard interface
      backend/libinput: rework pointer interface
      backend/libinput: rework switch interface
      backend/libinput: rework touch interface
      backend/libinput: rework tablet interface
      backend/libinput: rework tablet_pad interface
      backend/libinput: public API cleanup
      interface/wlr_keyboard: rework destroy sequence
      interface/wlr_pointer: rework destroy sequence
      interface/wlr_switch: rework destroy sequence
      interface/wlr_tablet_pad: rework destroy sequence
      interface/wlr_tablet_tool: rework destroy sequence
      interface/wlr_touch: rework destroy sequence
      tinywl: destroy keyboard on wlr_input_device event
      types/wlr_input_device: remove wlr_input_device_destroy
      types/wlr_input_device: move init and finish function to private API
      types/wlr_keyboard: remove destroy event
      types/wlr_virtual_keyboard_v1: remove destroy event
      types/wlr_virtual_pointer_v1: remove destroy event
      tinywl: init cursor_mode
      backend/wayland: give wlr_keyboard ownership to wlr_wl_seat
      backend/wayland: give wlr_pointer ownership to wlr_wl_seat
      backend/wayland: drop wlr_switch support
      backend/wayland: give wlr_touch ownership to wlr_wl_seat
      backend/wayland/tablet_v2: give wlr_tablet_* ownership to wlr_wl_seat
      backend/wayland: remove wlr_wl_input_device
      backend/wayland: remove wl_seat_listener from public API
      types/wlr_input_device: move output_name field to wlr_pointer and wlr_touch
      types/wlr_input_device: move width_mm and height_mm fields to wlr_tablet and wlr_touch
      types/wlr_pointer: uniformize events name
      types/wlr_keyboard: uniformize events name
      types/wlr_switch: uniformize events name
      types/wlr_tablet_pad: uniformize events name
      types/wlr_tablet_tool: uniformize events name
      types/wlr_touch: uniformize events name
      tinywl: exit on backend, renderer or allocator creation failure
      build: remove libkms option and disable tests for libdrm fallback
      backend/drm: allocate connector CRTC on lease creation

Steven Newbury (1):
      util: Fix infinite loop in recursive function

Tadeo Kondrak (1):
      input_method_v2: improve mapping detection

Thomas Hebb (1):
      render/gles2: don't constrain shm formats to ones that support reading

Vlad Zahorodnii (1):
      xcursor: garbage collect XcursorLibraryLoadImages

bi4k8 (3):
      render/vulkan/pixel_format: do not leak props->...
      Add missing &
      render/egl: don't leak memory on error return

fakechen (1):
      egl: modify egl_init_display function definition

illiliti (2):
      meson: replace join_paths() with / operator
      backend/drm: use pnp.ids to fetch EDID data

nyorain (1):
      vulkan: Fix imported image layout

tiosgz (1):
      CONTRIBUTING.md: make forks public to let the CI run

vanfanel (2):
      Initialize connectors current mode to the mode used by KMS on startup.
      Only set max_bpc when full modesetting is being done.

vaxerski (1):
      backend/drm: fix crash with null serial

xiaoyaobing (1):
      tinywl/tinywl: clean up tinywl_output when wlr_output is gone

yiqiang (2):
      wlr_scene: fix color value when filtering black boxes
      scene/wlr_scene:fix judgment of invisible node

zccrs (2):
      render/vulkan: fix undefined reference to wlr_texture_is_vk
      render/vulkan: add some interfaces to allow compositors to integrate

zsugabubus (1):
      xwayland: do not double free server on destroy