aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2021-06-19render/gles2: add wlr_renderer_is_gles2zccrs
Export the interface used to determine whether the wlr_renderer object is gles2.
2021-06-17xdg-activation-v1: fix wlr_xdg_activation_v1_create error pathSimon Ser
2021-06-17build: simplify version scriptSimon Ser
Let's expose all of our prefixed symbols. Instead of trying to have fine-grained rules and only expose our public API, let's just expose all symbols that won't cause a conflict. Users won't be able to use the symbols without a proper header declaration anyways. If they go through the process of re-defining wlr_ symbols manually, that's on them if their build breaks. This aligns the rules with [1]. [1]: https://github.com/swaywm/wlroots/pull/2969
2021-06-17ci: Build both static and sharedKenny Levinsen
This allows us to validate the objcopy trick in CI. It's basically free to build both static and shared libraries anyway. We only enable this for GCC builds right now, as Meson currently lacks support for prelinking with other compilers.
2021-06-17meson: Make private static library symbols localKenny Levinsen
Static libraries are not affected by our symbol file, so private symbols are globally visible by default. Use objcopy to make symbols that we do not want to expose local. Closes: https://github.com/swaywm/wlroots/issues/1892 Closes: https://github.com/swaywm/wlroots/issues/2952
2021-06-17backend/session: use DRM_PRIMARY_MINOR_NAMESimon Ser
Instead of hardcoding the string "card", use DRM_PRIMARY_MINOR_NAME. Some systems may use another prefix, e.g. OpenBSD uses "drm" instead.
2021-06-17backend/session: use drmIsKMSSimon Ser
This moves the magic incantation into libdrm and is clearer. See [1] for details. While at it, fixup the doc comment and improve logging. [1]: https://gitlab.freedesktop.org/mesa/drm/-/commit/523b3658aa8efa746417e916c987de23740ce313
2021-06-17backend/drm: populate cursor plane's current_fbSimon Ser
The set_cursor() hook is a little bit special: it's not really synchronized to commit() or test(). Once set_cursor() returns true, the new cursor is part of the current state. This fixes a state where wlr_drm_connector.cursor_enabled is true but there is no FB available. This is triggered by set_cursor() followed by a failed commit(), which resets pending_fb. We should definitely fix the output interface to make the cursor part of the pending state, but that's a more involved change.
2021-06-13output: reset back buffer on failed commitSimon Ser
On commit failure, we need to unbind the back buffer from the renderer. This fixes assertions triggered on commits following a failed commit where the compositor called wlr_output_attach_render.
2021-06-13backend/drm: remove test_bufferSimon Ser
Instead, call drm_connector_set_pending_fb.
2021-06-13backend/drm: move session check from test_buffer to drm_connector_testSimon Ser
The other caller (drm_connector_commit_state) already checks this.
2021-06-13backend/drm: move drm_connector_set_pending_fb upSimon Ser
This will be used in drm_connector_test shortly.
2021-06-13backend/drm: allocate a CRTC in drm_connector_testSimon Ser
We can't perform a test-only atomic commit if the connector is missing a CRTC.
2021-06-13backend/drm: allocate a CRTC in drm_connector_commit_stateSimon Ser
drm_connector_set_pending_fb needs a CRTC to import the buffer.
2021-06-13backend/drm: introduce drm_connector_alloc_crtcSimon Ser
This function allocates a CRTC for a connector if necessary.
2021-06-13backend/drm: allow committing a buffer and a mode togetherSimon Ser
Set the plane's pending FB before calling drm_connector_set_mode.
2021-06-13backend/drm: use atomic test-only commits for modifier fallbackSimon Ser
Instead of trying to perform a real modeset in init_renderer, perform an atomic test-only commit to find out whether disabling modifiers is necessary because of bandwidth limitations. This decouples init_renderer from the actual commit, making it possible to modeset an output with a user-supplied buffer instead of a black frame. We loose the ability to make sure the buffers coming from the swapchain will work fine when using the legacy interface. This can break i915 when atomic is disabled and modifiers enabled. But i915 always has atomic (so the user must explicitly disable it to run into potential bandwidth limitations) and is the only known problematic driver.
2021-06-09render: add missing arg to wlr_renderer_impl.get_buffer_capsSimon Ser
The types of buffers supported by the renderer might depend on the renderer's instance. For instance, a renderer might only support DMA-BUFs if the necessary EGL extensions are available. Pass the wlr_renderer to get_buffer_caps so that the renderer can perform such checks. Fixes: 982498fab3c4 ("render: introduce renderer_get_render_buffer_caps")
2021-06-09render: drop wlr_ prefix from wlr_renderer_bind_bufferSimon Ser
Make it clear this function is a private wlroots API and will stay that way.
2021-06-09backend/x11: use wlr_renderer_begin_with_buffer for cursorSimon Ser
2021-06-09output: use wlr_renderer_begin_with_buffer for cursorSimon Ser
2021-06-09screencopy-v1: use wlr_renderer_begin_with_bufferSimon Ser
2021-06-07matrix: deprecate wlr_matrix_projectionSimon Ser
This function has baked-in GL assumptions. Compositors shouldn't need to use it.
2021-06-07backend/wayland: remove swapchainSimon Ser
Rely on wlr_output's generic swapchain handling.
2021-06-07backend/wayland: implement get_dmabuf_primary_formatsSimon Ser
2021-06-07backend/x11: remove swapchainSimon Ser
Rely on wlr_output's generic swapchain handling. We still need a renderer for cursor readback, sadly.
2021-06-07backend/x11: implement get_dmabuf_primary_formatsSimon Ser
2021-06-07backend/headless: remove swapchainSimon Ser
Rely on wlr_output's generic swapchain support instead of creating our own. The headless output now simply keeps a reference to the front buffer and does nothing else.
2021-06-07output: make attach_render and rollback_render optionalSimon Ser
If these aren't provided by the backend, allocate a swapchain for the output.
2021-06-07output: split output_pick_cursor_formatSimon Ser
Introduce output_pick_format that can be re-used for the primary buffer too.
2021-06-07output: add get_primary_formats to interfaceSimon Ser
This function returns the set of formats the backend can use for the primary buffer. It can be used to allocate a buffer suitable for scan-out.
2021-06-07buffer: use wlr_texture_from_buffer for wl_shm_bufferSimon Ser
2021-06-07buffer: introduce wlr_shm_client_bufferSimon Ser
Introduce wlr_shm_client_buffer, which provides a wlr_buffer wrapper around wl_shm_buffer. Because the client can destroy the wl_buffer while we still are using it, we need to do some libwayland tricks to still be able to continue accessing its underlying storage. We need to reference the wl_shm_pool and save the data pointer.
2021-06-07render/pixman: implement texture_from_bufferSimon Ser
2021-06-07render/gles2: add support for DATA_PTR buffers in texture_from_bufferSimon Ser
2021-06-07buffer: replace get_data_ptr with {begin,end}_data_ptr_accessSimon Ser
This new API allows buffer implementations to know when a user is actively accessing the buffer's underlying storage. This is important for the upcoming client-backed wlr_buffer implementation.
2021-06-03surface: allow placing subsurfaces below parentSimon Ser
Prior to this commit, subsurfaces could only be placed above their parent. Any place_{above,below} request involving the parent would fail with a protocol error. However the Wayland protocol allows using the parent surface in the place_{above,below} requests, and allows subsurfaces to be placed below their parent. Weston's implementation adds a dummy wl_list node in the subsurface list. However this is potentially dangerous: iterating the list requires making sure the dummy wl_list node is checked for, otherwise memory corruption will happen. Instead, split the list in two: one for subsurfaces above the parent, the other for subsurfaces below. Tested with wleird's subsurfaces demo client. Closes: https://github.com/swaywm/wlroots/issues/1865
2021-06-03Make the xdg_popup_get_position to publiczccrs
Rename the xdg_popup_get_position to wlr_xdg_popup_get_position
2021-06-02xdg-activation-v1: add token timeoutSimon Ser
There isn't always a good time to prune old tokens. Compositors which only implement a "give focus on activation" logic can prune tokens on focus change. However other compositors might want to implement other semantics, e.g. "mark urgent on activation". In this case a focus change shouldn't invalidate other tokens. Additionally, some tokens aren't necessarily tied to a seat. To avoid ending up with an ever-growing list of tokens, add a timeout.
2021-06-02xdg-activation-v1: new protocol implementationSimon Ser
This implements the new xdg-activation-v1 protocol [1]. [1]: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/50
2021-06-02backend/drm: move cursor fields to wlr_drm_connectorSimon Ser
Doesn't make a lot of sense to split the cursor fields between wlr_drm_plane and wlr_drm_connector. Let's just move everything to wlr_drm_connector.
2021-06-02output: take a wlr_buffer in set_cursorSimon Ser
Instead of passing a wlr_texture to the backend, directly pass a wlr_buffer. Use get_cursor_size and get_cursor_formats to create a wlr_buffer that can be used as a cursor. We don't want to pass a wlr_texture because we want to remove as many rendering bits from the backend as possible.
2021-06-02backend/drm: introduce drm_plane_pick_render_formatSimon Ser
This is a new helper function to pick a render format suitable for a plane. The next commit will use it to initialize the cursor multi-GPU surface.
2021-06-02backend/drm: remove format arg from drm_plane_init_surfaceSimon Ser
This was always set to ARGB8888.
2021-06-02backend/drm: implement get_cursor_formats and get_cursor_sizeSimon Ser
2021-06-02backend/wayland: implement get_cursor_formatsSimon Ser
2021-06-02output: add get_cursor_formats and get_cursor_size to interfaceSimon Ser
2021-06-01render: add wlr_renderer_begin_with_bufferSimon Ser
This allows compositors to choose a wlr_buffer to render to. This is a less awkward interface than having to call bind_buffer() before and after begin() and end(). Closes: https://github.com/swaywm/wlroots/issues/2618
2021-06-01render: disallow wlr_renderer_destroy while renderingSimon Ser
This probably already felt apart, but let's make it explicit that this is not allowed.
2021-05-31backend: stop using renderer to get the buffer typeSimon Ser
When picking a format, the backend needs to know whether the buffers allocated by the allocator will be DMA-BUFs or shared memory. So far, the backend used the renderer's supported buffer types to guess this information. This is pretty fragile: renderers in general don't care about the SHM cap (they only care about the DATA_PTR one). Additionally, nothing stops a renderer from supporting both DMA-BUFs and shared memory, but this would break the backend's guess. Instead, use wlr_allocator.buffer_caps. This is more reliable since the buffers created with the allocator are guaranteed to have these caps.