wlroots 0.15.0
Release highlights:
- A new experimental Vulkan renderer has been merged (manually enabled with
`WLR_RENDERER=vulkan`).
- A new scene-graph API has been introduced to enable more code-sharing between
compositors.
- Large parts of the backend and renderer APIs have been refactored and
reworked.
- The `drm-lease-v1` protocol has been implemented.
- Feedback support has been added to the `linux-dmabuf-unstable-v1`
implementation, unlocking many zero-copy and multi-GPU optimizations and
features.
- The `wlr_output` rendering API now supports 10bpc and 16bpc formats.
- The DRM backend now supports hotplugging secondary GPUs at runtime.
- `wlr_region` and `wlr_box` are now stable APIs.
Full changelog below.
Andri Yngvason (2):
screencopy: Use output->front_buffer instead of wlr_output_export_dmabuf
screencopy: Handle shm copy in commit event handler
Anthony Super (1):
Add error handling to backend creation
Chris Chamberlain (2):
backend: fix return value of attempt_drm_backend
backend/drm: add wlr_drm_backend_monitor
Cole Mickens (1):
egl: use alts for EGL_EXT_device_enum, if missing
David Rosca (1):
seat: Only resend keyboard/pointer enter to focused clients
Demi Marie Obenour (1):
Improve wlr_drm_format documentation
Devin J. Pohly (9):
scene: add node reparent function
scene: ensure node cannot be reparented below itself
scene: make graph loops fatal when debugging
scene: stricter assertions on reparent
scene: iterate nodes instead of surfaces when rendering
scene: add RECT node type
scene: replace surface_at() with node_at()
examples/scene-graph: demonstrate scene_rect node type
scene: remove redundant empty-region check in render_texture()
Dylan Araps (1):
util/time: make NSEC_PER_SEC static
Elyes HAOUAS (1):
Fix spelling errors
Guido Günther (3):
xwayland: Allow to retrieve _NET_STARTUP_ID
xwayland: Allow to retrieve startup-id via _NET_STARTUP_INFO
xdg-activation: Allow to submit tokens
Haelwenn (lanodan) Monnier (3):
render/pixman/renderer.c: Fix memory-leak in create_buffer
render/egl.c: Fix memory leaks in egl_create
backend/drm/legacy.c: Fix memory leak in drm_legacy_crtc_set_gamma
Hubert Hirtz (1):
Fix a typo in CONTRIBUTING.md
Isaac Freund (15):
layer-shell: replace close() with destroy()
tinywl: simplify logic for sending pointer events
scene: assert that node != sibling in place above/below
scene: add functions to place node on top/bottom
output: fix leak of wlr_drm_format
text-input/input-method: handle strdup() failure
text-input: fix type of send_preedit_string() args
wlr_drag: emit destroy after wl_data_device.leave
tinywl: use wlr_scene
scene: send surface enter/leave output events
scene: add primary output to wlr_scene_surface
scene: add wlr_scene_send_frame_done()
tinywl: use wlr_scene_send_frame_done()
scene: fix wlr_scene_send_frame_done() API
scene: add wlr_scene_set_presentation()
Jan Beich (2):
backend: drop unconditional and unused <libinput.h>
render: completely disable gles2 if requested but libEGL is found
John Lindgren (1):
Insert new outputs at the end of the list
Jonathan Wong (1):
Added whitespace between "output" and "(not"
Joshua Ashton (2):
render/vulkan: Use image view swizzles instead of shader hack
render/vulkan: Optimize vertex shader
José Expósito (8):
protocol/meson: bump wayland-protocols requirement to 1.23
pointer: add hold pointer event definition
build: check if libinput supports hold gestures
backend/libinput: send hold gesture events
backend/wayland: send hold gesture events
cursor: emit hold gesture events
wlr_pointer_gestures: update protocol to version 2
wlr_pointer_gestures: hold gestures (protocol v3)
Kirill Primak (34):
surface: don't cache frame callback lists
util: add wlr_addon
wlr_outputs: add wlr_addon_set
wlr_output_layout: use wlr_addons
util/addon: find both by owner and impl
surface: fix place_below handling
util/box: introduce wlr_fbox_transform()
surface: fix wlr_surface_get_buffer_source_box()
subsurface: unlock surface on destroy
surface: cache frame callback lists again
surface: move subsurface lists to state
surface: rename impl and its functions
surface: change surface_finalize_state() to surface_finalize_pending()
surface: inline surface_commit_pending()
xdg popup: move function to a file it belongs to
xdg-toplevel: refactor configure/state flow
xdg-surface: simplify configure mechanism
xdg surface: check adding configure_idle for NULL
layer-shell: refactor configure/state flow
layer-shell: add `committed` bitmask
xdg-surface: add pending state
xdg-shell: remove redundant NULL buffer check
layer-shell: move NULL buffer check to role precommit handler
xdg-decoration: refactor configure/state flow
output: disallow NULL event for wlr_output_send_present()
output: add presented flag to presentation event
presentation-time: don't send presented on discard
presentation-time: use a surface addon
CONTRIBUTING.md: add CoC section
surface: fix damage transformation
subsurface: simplify and fix parent commit handling
subsurface: apply position change at the right moment
surface: fix non-buffer damage handling
subsurface: don't add to parent list immediately
Manuel Stoeckl (7):
render/pixel-format: add a few 10-bit and FP16 formats
render/gles2: hide shm formats without GL support
render/gles2: add a few 10-bit and FP16 formats
output: lift up output format fallback logic
output: use XRGB8888 format instead of ARGB8888
output: Add function to set preferred render format
output: remove XRGB8888 cursor fallback format
MarkusVolk (1):
backend.c: do not try to explicitly clean up the libinput backend
Michele Sorcinelli (1):
xwayland: do not free cursor in handle_server_ready()
Moon Sungjoon (1):
backend/wayland: improve wayland input device name
Quantum (3):
viewporter: remove crop and scale state upon destruction
scene: fix compile error in release builds
Fix uninitialized variable errors in release mode
Raphael Robatsch (1):
util/token: don't leak /dev/urandom fd to children
Roman Gilg (1):
backend/headless: unlink input device on destroy
Ronan Pigott (3):
xdg-activation-v1: enable compositors to request their own tokens
xdg-activation-v1: add data field and emit token destroy events
backend/wayland: use xdga client activation
Rouven Czerwinski (6):
backend/drm: return true on test if no crtc
output: check output enabled before sending frame
Revert "backend/drm: Check if output is enabled before sending frame event"
backend/drm: try to allocate crtc for formats
linux-dmabuf-v1: filter out LINEAR if implicit
linux-dmabuf-v1: fix implicit check
Simon Ser (288):
build: bump version to 0.15.0
backend/drm: rename page_flip_handler to handle_page_flip
render/egl: remove stale wlr_egl_export_image_to_dmabuf decl
render/egl: make most functions private
xwayland: improve startup log message
build: use meson.global_build_root()
ci: remove -Dlibseat from Alpine build
ci: make Meson warnings fatal
Drop WLR_VERSION_API_*
surface: remove SURFACE_VERSION
surface: make wlr_subsurface_create private
pointer: document event data types
touch: document event data types
surface: accept commits with buffer size not divisible by scale
render/egl: replace wlr_egl_create with wlr_egl_create_with_drm_fd
Remove unused wlr_list.h includes
util/array: add array_remove_at
backend/libinput: stop using wlr_list internally
tablet: stop using wlr_list
Drop wlr_list
tablet-v2: fix pad and tool object versions
buffer: introduce wlr_readonly_data_buffer
render: use wlr_readonly_data_buffer in wlr_texture_from_pixels
render: drop wlr_renderer_impl.texture_from_pixels
buffer: add wlr_dmabuf_buffer
render: use wlr_dmabuf_buffer in wlr_texture_from_dmabuf
render: drop wlr_renderer_impl.texture_from_dmabuf
buffer: make enum wlr_buffer_cap public
backend/libinput: use wl_array for wlr_libinput_tablet.tools
surface: allow locking pending state in commit handler
Remove reference to the announce mailing list
region: stabilize interface
region: drop leftover reference to the mailing list
Revert "backend/drm: populate cursor plane's current_fb"
backend/drm: don't clear pending cursor FB on failed commit
xcursor: improve documentation
Add a stub wl_drm implementation
drm: add support for DMA-BUFs
buffer: handle wl_drm buffers
render/gles2: use wlr_drm for wl_drm implementation
render: remove wl_drm support from wlr_renderer
render/egl: remove EGL_WL_bind_wayland_display support
buffer: remove renderer param from wlr_resource_get_buffer_size
buffer: stop sending wl_buffer.release events from wlr_client_buffer
buffer: unify texture creation in wlr_client_buffer_import
output: detach buffer from renderer before commit
output-damage: fix output swapchain handling
touch: add frame event
backend/libinput: send touch frame events
backend/wayland: send touch frame events
backend/x11: send touch frame events
cursor: add touch frame event
seat: add wlr_seat_touch_{send,notify}_frame
Fix invalid uses of wl_array_for_each
backend/drm: force linear layout for multi-GPU buffers
backend/drm: stop using drm_surface_make_current in drm_surface_blit
backend/drm: add test_only arg to wlr_drm_interface.crtc_commit
backend/drm: move legacy-specific checks to legacy.c
backend/drm: remove backend arg from wlr_drm_interface.crtc_commit
buffer: rename wlr_client_buffer variables to client_buffer
buffer: stop using source resource in wlr_client_buffer_apply_damage
buffer: add wlr_client_buffer.source
buffer: stop using resource in client_buffer_get_dmabuf
buffer: drop wlr_client_buffer.resource
render/egl: rename wlr_egl.exts to better match Khronos
render/gles2: rename wlr_egl.exts to better match Khronos
render/gles2: set has_alpha for DMA-BUFs
render/gles2: disable blending opportunistically
buffer: drop resource arg from wlr_client_buffer_create
output: add generic wlr_output_export_dmabuf implementation
backend/headless: remove wlr_output_impl.export_dmabuf
backend/drm: remove wlr_output_impl.export_dmabuf
output: remove wlr_output_impl.export_dmabuf
backend/wayland: properly cleanup wlr_wl_pointer
backend/drm: fix NULL data in handle_drm_event
buffer: re-use wlr_shm_client_buffer
backend/drm: stop restoring CRTCs on exit
backend/drm: add DRM_MODE_CONNECTOR_USB to conn_get_name
render: drop wlr_renderer_impl.init_wl_display
render/egl: set EGL_IMAGE_PRESERVED_KHR
render/egl: add support for EGL_EXT_device_drm_render_node
xwayland: simplify argv filling logic
xwayland: embed wlr_xwayland_server_options in server struct
output: fallback to XRGB in output_pick_format
backend/drm: implement get_primary_formats
output: use pending resolution when allocating swapchain
output: allocate and attach empty buffer on modeset
output: fallback to modifier-less allocation on modeset test failure
backend/drm: allow legacy scan-out if FB props match
backend/drm: remove primary swapchain
backend/drm: remove SCANOUT check in drm_connector_test
backend/drm: drop drm_surface_{make,unset}_current
backend/drm: drop get_renderer implementation
backend/drm: stop initializing renderer for parent backend
backend/drm: fix wrong type for get_cursor_format return values
backend/noop: drop attach_render/rollback_render
output: drop wlr_output_impl.{attach,rollback}_render
output-damage: stop using enum wlr_output_state_buffer_type
output: drop wlr_output_state.buffer_type
render/pixel-format: add some 24 and 16-bit formats
render/gles2: add support for some 24 and 16-bit formats
backend/drm: preserve mode order from kernel
render/pixel_format: add more formats for Pixman
render/pixman/pixel_format: add more formats
output: try skipping buffer allocation if the backend allows it
backend/drm: require buffer on modeset in drm_connector_test
examples/fullscreen-shell: remove unused render_data.view field
build: remove "." from include dirs
seat: allow compositors to not load a keymap
ci: add smoke test
backend/drm: add proper error handling to wlr_drm_backend_create
backend/drm: always perform a test commit in drm_connector_test
surface: kill wlr_surface.previous
surface: drop surface_state_copy
buffer: add addon set
render/gles2: make wlr_gles2_buffer an addon
render/gles2: make wlr_gles2_texture a wlr_buffer addon
backend/drm: use addon for wlr_drm_fb
backend/drm: add support for FB_DAMAGE_CLIPS
backend: unify startup messages
backend/drm: generate CVT reduced modes
backend/{drm,libinput}: exclude headers when disabled
Move allocator stuff into new directory
render/egl: reopen DRM node for GBM
backend/drm: introduce wlr_drm_bo_handle_table
Introduce new scene-graph API
examples/scene-graph: new example
scene: add wlr_scene_node_toggle
scene: allow nodes to have arbitrary parents
scene: add user data pointer to wlr_scene_node
scene: add wlr_scene_node_surface_at
contributing: add new section about commit log
contributing: use references for links
contributing: clone wlroots fork with SSH
contributing: turn remaining links into refs
Link to gamja for web chat
render/allocator: re-open GBM FD
render/allocator/gbm: fix create() docs for FD ownership
build: add subproject fallback for wayland
build: add subproject fallback for wayland-protocols
contributing: don't reference issues in commit first line
render/allocator: use legacy authentication for primary nodes
backend/drm: handle drm_surface_blit errors
render/allocator/gbm: add log message for gbm_bo_get_fd_for_plane
util/shm: add allocate_shm_file_pair
keyboard: add wlr_keyboard.keymap_fd
seat: avoid copying the keymap for each client
subsurface: rename wlr_subsurface_state to wlr_subsurface_parent_state
subsurface: move parent link to state
buffer: take a wlr_buffer in wlr_client_buffer_apply_damage
buffer: make wlr_client_buffer_apply_damage return a bool
viewporter: add doc comment explaining compositor requirements
viewporter: hide wlr_viewport
surface: ensure buffer is reset to NULL in surface_state_move
surface: drop wlr_surface_state.buffer_resource
surface: fix abort on NULL buffer attach
backend/drm: rename enum wlr_drm_connector_state to status
backend/drm: introduce wlr_drm_connector_state
backend/drm: fix crash on VT switch
backend/drm: drop unused arg from get_possible_crtcs
backend/drm: drop drm_connector_init_renderer
output-damage: fix damage on modeset
backend/drm: drop attempt_enable_needs_modeset
backend/drm: drop wlr_drm_connector.desired_mode
scene: fix wlr_scene_render_output offset
scene: add scene outputs
scene: add wlr_scene_output_commit
scene: add wlr_scene_node_coords
scene: add damage tracking support
examples/scene-graph: use wlr_scene_output
scene: move source to subdir
scene: add wlr_scene_attach_output_layout
buffer: add data_ptr access flags
ci: switch to seatd-launch
scene: add wlr_scene_tree
surface: add addon set
scene: add wlr_scene_subsurface_tree_create
build: simplify get_variable calls
backend/drm: add support for panel orientation
scene: drop default case in wlr_scene_node_at
scene: unify intersection logic in wlr_scene_node_at
scene: add wlr_scene_buffer
util/box: introduce wlr_fbox_empty
scene: add wlr_scene_buffer_set_source_box
scene: add scene_node_get_size helper
scene: use scene_node_get_size in wlr_scene_node_at
scene: add wlr_scene_buffer_set_dest_size
scene: add wlr_scene_buffer_set_transform
backend: create renderer and allocator in wlr_backend_autocreate
xdg-shell: introduce wlr_xdg_surface.current
xdg-shell: rename wlr_xdg_surface.next_configure_serial
xdg-shell: stop clearing wlr_xdg_surface state on unmap
render/drm_format_set: add wlr_drm_format_has
Require INVALID for implicit format modifiers
backend/drm: fail on explicit modifier in drmModeAddFB2
render/egl: always add LINEAR to supported modifiers
render/drm_format_set: remove special LINEAR case
Revert "render/drm_format_set: remove special LINEAR case"
Revert "render/egl: always add LINEAR to supported modifiers"
Revert "backend/drm: fail on explicit modifier in drmModeAddFB2"
Revert "Require INVALID for implicit format modifiers"
Revert "render/drm_format_set: add wlr_drm_format_has"
render/allocator: use render node if available in reopen_drm_node
render/allocator: use empty DRM lease to re-open node
scene: remove surface commit listener when node is destroyed
render/vulkan: check vulkan-headers dependency
presentation-time: remove unused field
scene: add wlr_scene_output_for_each_surface
scene: add support for direct scan-out
output: split into multiple files
xdg-foreign-v2: use error enum
output: refuse to enable with zero mode
readme: refresh dependencies
backend/drm: add entry for Valve EDID vendor
backend/x11: fix code style in get_touchpoint_from_x11_touch_id
scene: inline subsurface_tree_destroy
sceeencopy-v1: listen to output destroy in capture_output
backend/drm: get rid of BO handle table
output: fix stack variable lifetime in wlr_output_send_present
backend/drm: avoid creating empty FB_DAMAGE_CLIPS prop
ci: add .gitlab-ci.yml
s/GitHub/GitLab/
xwayland: add support for -noTouchPointerEmulation
backend/session: introduce wlr_device_change_event
backend/drm: handle per-connector hotplug events
scene: fix calloc size mismatch
export-dmabuf-v1: stop using wlr_output_export_dmabuf
screencopy-v1: stop using wlr_output_export_dmabuf
output: drop wlr_output_export_dmabuf
linux-dmabuf-v1: properly validate flags
Remove support for DMA-BUF flags
output: add wlr_output_init_render
output: fix renderer buffer cap sanity check in wlr_output_init_render
Introduce WLR_DEVICE_LEASE events
backend/drm: introduce wlr_drm_lease
drm-lease-v1: listen to lease destroy event
backend/drm: scan leases on uevent
linux-dmabuf-v1: hide wlr_linux_buffer_params_v1
backend/wayland: report parent presentation clock
input-device: remove wlr_input_device.link
render/vulkan: quiet glslangValidator
docs/env_vars: drop WLR_DIRECT_TTY
render: pick DRM FD in autocreate
render/allocator: fallback to renderer DRM FD in autocreate
backend/headless: stop picking a DRM FD
render: introduce WLR_RENDER_DRM_DEVICE
backend/headless: drop wlr_headless_backend_create_with_renderer
scene: add wlr_scene_xdg_surface_create
render/drm_format_set: add wlr_drm_format_has
Require INVALID for implicit format modifiers
backend/drm: fail on explicit modifier in drmModeAddFB2
render/egl: always add LINEAR to supported modifiers
render/drm_format_set: remove special LINEAR case
backend/drm: always add LINEAR to supported modifiers
render: add DMA-BUF docs
scene: add support for viewporter
backend/drm: poison buffers which cannot be scanned out
output: destroy swapchain when disabled
output: don't leave dangling cursor_front_buffer
output: fix typo in wlr_output_impl.get_primary_formats docs
output: add wlr_output_get_primary_formats
scene: add wlr_scene_get_scene_output
render/egl: store IMG_context_priority in wlr_egl
render/egl: add wlr_egl_create_with_context
render/pixman: advertise MOD_INVALID instead of MOD_LINEAR
render/egl: improve modifier support detection
output: fix modifier stripping
readme: update wrapper libraries link
render/drm-format-set: add wlr_drm_format_set_intersect
output: add wlr_output_event_commit.buffer
export-dmabuf-v1: use wlr_output_event_commit.buffer
screencopy-v1: use wlr_output_event_commit.buffer
output: drop front_buffer
render: add wlr_renderer_init_wl_shm
linux-dmabuf-v1: implement v4
linux-dmabuf-v1: add per-surface feedback
build: move wayland-client dep to backend/wayland/
examples/layer-shell: remove wlroots dependency
examples: remove unnecessary wlroots deps for clients
examples: remove unnecessary partial_dependency() call
output: introduce wlr_output_set_name
Fix incorrect %zd formatting directives
output: add support for protocol interface version 4
util/global: remove wl_display arg from wlr_global_destroy_safe
backend/drm: use drmModeFormatModifierBlobIterNext
backend/drm: use drmCloseBufferHandle
build: add subproject fallback for libdrm
backend/wayland: add basic linux-dmabuf feedback support
Simon Zeni (36):
types/wlr_box: remove unused wlr_box_from_pixman_box32 and wlr_box_rotated_bounds functions
move wlr_box from /types to /util
util/box: stabilize interface
types/wlr_buffer: split wlr_client_buffer_import function
types/wlr_surface: get buffer size from wlr_buffer_import
types/wlr_buffer: remove wlr_resource_get_buffer_size
types/wlr_buffer: remove wlr_renderer argument from wlr_buffer_from_resource
types/wlr_buffer: introduce wlr_buffer_resource_interface
types/wlr_buffer: create custom wlr_buffer from wl_resource
render/wlr_texture: put wlr_texture_from_buffer into the public API
render/egl: initialize wlr_egl with EGL_PLATFORM_DEVICE_EXT
backend/drm: implement drm lease function
backend/drm: introduce wlr_drm_backend_get_non_master_fd
protocol/meson: bump wayland-protocols requirement to 1.22
types: introduce wlr_drm_lease_v1
types/buffer: make {begin,end}_data_ptr_access part of the public API
backend/multi: implement get_buffer_caps
render/allocator: make wlr_allocator part of the public API
examples: init wlr_output with allocator and renderer
tinywl: autocreate allocator and init output
backend: remove backend ensure renderer and allocator check
backend: remove backend_get_allocator
types/wlr_screencopy_v1: use renderer from output
types/wlr_scene: use renderer from wlr_output
backend/x11: get renderer from wlr_x11_output
backend/headless: don't store the parent renderer
backend/drm: stop initializing backend renderer
backend/multi: remove backend_get_renderer
backend: remove wlr_backend_get_renderer
backend/multi: add asserts in wlr_multi_backend_add
backend: fix attempt_backend_by_name multi backend self insertion
tinywl: init output render before commit
tinywl: build with meson if examples option is enabled
ci/archlinux: enable address and undefined sanitizers
backend: remove noop backend
types/wlr_drm_lease_v1: add NULL check to drm lease resource destroy
Stacy Harper (1):
layer-shell: don't set committed flag if the property didn't change
Tadeo Kondrak (2):
input-method-unstable-v2: Add error for surface with existing role
Implement input_method_v2 popups
Tudor Brindus (3):
input/pointer: try harder to not send duplicate motion events
input/tablet: fix `wl_array_for_each` usage on tablet proximity
xwm: do not restack surfaces on activation
Vyivel (2):
render/pixman: fix texture_is_opaque()
input/pointer: send axis source once per frame
ayaka (1):
backend: make DRM and libinput backends optional
buffet (1):
Update loc count in readme
fwsmit (1):
examples/foreign-toplevel: fix toplevel not being freed
muradm (1):
backend: wait for session to become active
nyorain (1):
render/vulkan: add Vulkan renderer
tiosgz (4):
for_each_surface: only iterate mapped surfaces
surface_at: check if surfaces are mapped
scene/subsurface_tree: hide unmapped subsurfaces
Fix wlr_scene_node_lower_to_bottom
yuiiio (1):
render/egl: fix typo
Érico Nogueira (1):
docs: mention WLR_RENDERER=vulkan.