aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2021-11-19output: Add function to set preferred render formatManuel Stoeckl
This change introduces new double buffered state to the wlr_output, corresponding to the buffer format to render to. The format being rendered to does not control the bit depth of colors being sent to the display; it does generally determine the format with which screenshot data is provided. The DRM backend _may_ sent higher bit depths if the render format depth is increased, but hardware and other limitations may apply.
2021-11-19output: use XRGB8888 format instead of ARGB8888Manuel Stoeckl
Most (and possibly all) compositors using wlroots only ever render fully opaque content. To provide better performance, this change switches the default format used by wlr_output buffers from ARGB8888 to the opaque XRGB8888. Compositors like mutter, kwin, and weston already default to XRGB8888, so this change is unlikely to expose any new bugs in underlying drivers and hardware. This does not affect the hardware cursor's buffer format, which is still ARGB8888 by default. As part of this change, the X11 backend (which does not support changing format at runtime) now picks a true color, 24 bit depth visual (i.e. XRGB8888) instead of a 32 bit depth (ARGB8888) one.
2021-11-19output: lift up output format fallback logicManuel Stoeckl
This makes it possible for the two functions using output_pick_format (output_pick_cursor_format and output_create_swapchain) to select different buffer formats.
2021-11-19tinywl: init output render before commitSimon Zeni
2021-11-19backend: fix attempt_backend_by_name multi backend self insertionSimon Zeni
2021-11-19backend/multi: add asserts in wlr_multi_backend_addSimon Zeni
2021-11-19output: fix renderer buffer cap sanity check in wlr_output_init_renderSimon Ser
The backend and renderer don't directly interact together, so there's no point in checking that their buffer caps intersect. What we want to check is that: - The backend and allocator buffer caps are compatible, because the backend consumes buffers to display them. - The renderer and allocator buffer caps are compatible, because the renderer imports buffers to sample them or render to them. For instance, when running with the DRM backend and the Pixman renderer, the (backend & renderer) check will fail because backend = DMABUF and renderer = DATA_PTR.
2021-11-19docs: mention WLR_RENDERER=vulkan.Érico Nogueira
This option was added with commit 8e346922508aa3eaccd6e12f2917f6574f349843.
2021-11-18backend: remove wlr_backend_get_rendererSimon Zeni
2021-11-18backend/multi: remove backend_get_rendererSimon Zeni
2021-11-18backend/drm: stop initializing backend rendererSimon Zeni
2021-11-18backend/headless: don't store the parent rendererSimon Zeni
2021-11-18backend/x11: get renderer from wlr_x11_outputSimon Zeni
2021-11-18types/wlr_scene: use renderer from wlr_outputSimon Zeni
2021-11-18types/wlr_screencopy_v1: use renderer from outputSimon Zeni
2021-11-18backend: remove backend_get_allocatorSimon Zeni
2021-11-18backend: remove backend ensure renderer and allocator checkSimon Zeni
2021-11-18tinywl: autocreate allocator and init outputSimon Zeni
2021-11-18examples: init wlr_output with allocator and rendererSimon Zeni
2021-11-18output: add wlr_output_init_renderSimon Ser
Co-authored-by: Simon Zeni <simon@bl4ckb0ne.ca>
2021-11-17Improve wlr_drm_format documentationDemi Marie Obenour
A wlroots user can easily get confused and think that `cap` refers to wlroots buffer capabilities, not array capacity.
2021-11-17Remove support for DMA-BUF flagsSimon Ser
They are never used in practice, which makes all of our flag handling effectively dead code. Also, APIs such as KMS don't provide a good way to deal with the flags. Let's just fail the DMA-BUF import when clients provide flags.
2021-11-17linux-dmabuf-v1: properly validate flagsSimon Ser
We were send a protocol error if INTERLACED or BOTTOM_FIRST was set. This is incorrect for the zwp_linux_dmabuf_params.create code-path because this kills the client without allowing it to gracefully handle the error. We should only send a protocol error if the client provides a bit not listed in the protocol definition.
2021-11-15backend/headless: unlink input device on destroyRoman Gilg
Removing an input device requires unlinking it from the list of all headless input devices. For that implement a destroy function.
2021-11-14util/token: don't leak /dev/urandom fd to childrenRaphael Robatsch
Closes #3324.
2021-11-09egl: use alts for EGL_EXT_device_enum, if missingCole Mickens
2021-11-09render/allocator: make wlr_allocator part of the public APISimon Zeni
2021-11-08text-input: fix type of send_preedit_string() argsIsaac Freund
The protocol uses a signed integer here, which is also what the wlr_input_method_v2_preedit_string struct provides to compositors from the input method protocol. Sway currently just passes those int32_t values directly to this function leading to an implicit conversion.
2021-11-08output: drop wlr_output_export_dmabufSimon Ser
Callers can access output->front_buffer instead.
2021-11-08screencopy-v1: stop using wlr_output_export_dmabufSimon Ser
2021-11-08export-dmabuf-v1: stop using wlr_output_export_dmabufSimon Ser
2021-11-07text-input/input-method: handle strdup() failureIsaac Freund
2021-11-07scene: fix calloc size mismatchSimon Ser
2021-11-06CONTRIBUTING.md: add CoC sectionKirill Primak
2021-11-06output: fix leak of wlr_drm_formatIsaac Freund
2021-11-02backend/drm: handle per-connector hotplug eventsSimon Ser
When a connector ID is specified in a hotplug event, don't scan all connectors. Only scan the connector that has changed.
2021-11-02backend/session: introduce wlr_device_change_eventSimon Ser
This struct contains additional information for session device change events, such as the DRM connector ID that has changed.
2021-11-02xwayland: add support for -noTouchPointerEmulationSimon Ser
This allows compositors to handle touch pointer emulation manually, instead of having Xwayland do it [1]. [1]: https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/691
2021-11-02render: completely disable gles2 if requested but libEGL is foundJan Beich
For `required` to disable search the value needs to be of `feature` type. Checking `gles2` via `in` keyword returns a `bool` but `required: false` makes the dependency optional instead of disabled.
2021-11-01s/GitHub/GitLab/Simon Ser
2021-11-01ci: add .gitlab-ci.ymlSimon Ser
This is a glue file to allow integration with builds.sr.ht.
2021-10-31scene/subsurface_tree: hide unmapped subsurfacestiosgz
2021-10-31backend/wayland: use xdga client activationRonan Pigott
2021-10-31xdg-activation-v1: add data field and emit token destroy eventsRonan Pigott
The data field is useful to track metadata about a token. The destroy events are useful for compositors that track application startup to let them know they can stop doing that.
2021-10-31xdg-activation-v1: enable compositors to request their own tokensRonan Pigott
These new functions allow a compositor to request new managed tokens without participating in the xdg-activation procedure as a wayland client. This enables the compositor itself to behave as a launcher application.
2021-10-29backend/drm: avoid creating empty FB_DAMAGE_CLIPS propSimon Ser
drmModeCreatePropertyBlob cannot create zero-sized blobs, that fails with EINVAL. Closes: https://github.com/swaywm/wlroots/issues/3297
2021-10-29output: fix stack variable lifetime in wlr_output_send_presentSimon Ser
Variables on the stack are released when the parent block is closed. Here, `now` is used outside of the `if` block, causing the following crash when starting Sway with the headless backend: ==49606==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7fff94645f90 at pc 0x5558aeae9e29 bp 0x7fff94645df0 sp 0x7fff94645de0 READ of size 16 at 0x7fff94645f90 thread T0 #0 0x5558aeae9e28 in handle_present ../sway/desktop/output.c:834 #1 0x7fdc8d6792fb in wlr_signal_emit_safe ../subprojects/wlroots/util/signal.c:29 #2 0x7fdc8d54f77f in wlr_output_send_present ../subprojects/wlroots/types/output/output.c:766 #3 0x7fdc8d524a28 in output_commit ../subprojects/wlroots/backend/headless/output.c:71 #4 0x7fdc8d54d2db in wlr_output_commit ../subprojects/wlroots/types/output/output.c:629 #5 0x5558aeb013cb in output_render ../sway/desktop/render.c:1157 #6 0x5558aeae549e in output_repaint_timer_handler ../sway/desktop/output.c:544 #7 0x5558aeae5f8a in damage_handle_frame ../sway/desktop/output.c:606 #8 0x7fdc8d6792fb in wlr_signal_emit_safe ../subprojects/wlroots/util/signal.c:29 #9 0x7fdc8d6007d5 in output_handle_frame ../subprojects/wlroots/types/wlr_output_damage.c:44 #10 0x7fdc8d6792fb in wlr_signal_emit_safe ../subprojects/wlroots/util/signal.c:29 #11 0x7fdc8d54ee84 in wlr_output_send_frame ../subprojects/wlroots/types/output/output.c:720 #12 0x7fdc8d54efc3 in schedule_frame_handle_idle_timer ../subprojects/wlroots/types/output/output.c:728 #13 0x7fdc8c9dcf5a in wl_event_loop_dispatch_idle (/usr/lib/libwayland-server.so.0+0xaf5a) #14 0x7fdc8c9dcfb4 in wl_event_loop_dispatch (/usr/lib/libwayland-server.so.0+0xafb4) #15 0x7fdc8c9dabc6 in wl_display_run (/usr/lib/libwayland-server.so.0+0x8bc6) #16 0x5558aeac8e30 in server_run ../sway/server.c:285 #17 0x5558aeac3c7d in main ../sway/main.c:396 #18 0x7fdc8be35b24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24) #19 0x5558aea8686d in _start (/home/simon/src/sway/build/sway/sway+0x33f86d)
2021-10-29backend/drm: get rid of BO handle tableSimon Ser
The BO handle table exists to avoid double-closing a BO handle, which aren't reference-counted by the kernel. But if we can guarantee that there is only ever a single ref for each BO handle, then we don't need the BO handle table anymore. This is possible if we create the handle right before the ADDFB2 IOCTL, and close the handle right after. The handles are very short-lived and we don't need to track their lifetime. Because of multi-planar FBs, we need to be a bit careful: some FB planes might share the same handle. But with a small check, it's easy to avoid double-closing the same handle (which wouldn't be a big deal anyways). There's one gotcha though: drmModeSetCursor2 takes a BO handle as input. Saving the handles until drmModeSetCursor2 time would require us to track BO handle lifetimes, so we wouldn't be able to get rid of the BO handle table. As a workaround, use drmModeGetFB to turn the FB ID back to a BO handle, call drmModeSetCursor2 and then immediately close the BO handle. The overhead should be minimal since these IOCTLs are pretty cheap. Closes: https://github.com/swaywm/wlroots/issues/3164
2021-10-29sceeencopy-v1: listen to output destroy in capture_outputSimon Ser
If the output is destroyed after capture_output but before frame_handle_copy, it'll have a dangling output pointer. Add the output destroy listener in capture_output. Closes: https://github.com/swaywm/wlroots/issues/3284
2021-10-27scene: inline subsurface_tree_destroySimon Ser
This is only called from one function. To destroy the wlr_scene_subsurface_tree from elsewhere, callers can destroy the scene-graph node returned by wlr_scene_subsurface_tree_create instead (just like a compositor would do). subsurface_tree_handle_surface_destroy does exactly this. Inlining avoids calling subsurface_tree_destroy by mistake.