aboutsummaryrefslogtreecommitdiff
path: root/backend/drm/drm.c
AgeCommit message (Collapse)Author
2024-02-27backend/drm: use CRTC pointers instead of indices in realloc_crtcs()Simon Ser
Improves readability, no functional change.
2024-02-27backend/drm: improve CRTC reallocation pretty printingSimon Ser
Only print the list of connectors once, with both the old and new status. Use CRTC object IDs instead of CRTC indices. Make it obvious when a connector keeps the same CRTC.
2024-02-26backend/drm: move primary FB check after pending buffer logicSimon Ser
If a connector has no current/queued buffer, but has a pending buffer in the commit, we need to process that pending buffer before checking pending.primary_fb.
2024-02-26backend/drm: fix primary FB checkSimon Ser
When turning off a CRTC, we don't need a buffer. It doesn't matter whether this is a modeset or not: we always need a buffer even for regular page-flips as long as a connector is active. Fixes: 374daeb25603 ("backend/drm: Ensure a primary fb is available when configuring an output")
2024-02-26backend/drm: use output_pending_enabled()Simon Ser
Use the helper instead of hand-rolling the logic.
2024-02-25backend/drm: Ensure a primary fb is available when configuring an outputAlexander Orzechowski
2024-02-25backend/drm: Remove dead codeAlexander Orzechowski
We can never hit the case where we try to light up an output without a buffer. output_ensure_buffer() will catch this for now, and when that's removed, output_basic_test() will catch this case.
2024-02-25backend/drm: Init connector after we try to allocate a crtc for itAlexander Orzechowski
drm_connect_state_init() will set primary_fd to null if no CRTC is active for the connector and can crash later if the code expects a CRTC (like when lighting up an output).
2024-02-22backend/drm: Remove erroneous freeKenny Levinsen
init_plane tries to free a single plane on error, but this is an element in a calloc'd array by the caller that we should not touch.
2024-02-22backend/drm: Free current_modeinfo on errorKenny Levinsen
2024-02-21backend/drm: don't destroy previous DRM master blobsSimon Ser
On startup, we fetch the previous MODE_ID blob ID so that compositors can keep using the previous mode if they want to. However, that blob doesn't belong to us, it belongs to the previous DRM master. As a result, we get an error when trying to destroy it. Fix this by tracking whether the blob belongs to us or not. Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3811
2024-02-15Define _POSIX_C_SOURCE globallySimon Ser
Stop trying to maintain a per-file _POSIX_C_SOURCE. Instead, require POSIX.1-2008 globally. A lot of core source files depend on that already. Some care must be taken on a few select files where we need a bit more than POSIX. Some files need XSI extensions (_XOPEN_SOURCE) and some files need BSD extensions (_DEFAULT_SOURCE). In both cases, these feature test macros imply _POSIX_C_SOURCE. Make sure to not define both these macros and _POSIX_C_SOURCE explicitly to avoid POSIX requirement conflicts (e.g. _POSIX_C_SOURCE says POSIX.1-2001 but _XOPEN_SOURCE says POSIX.1-2008). Additionally, there is one special case in render/vulkan/vulkan.c. That file needs major()/minor(), and these are system-specific. On FreeBSD, _POSIX_C_SOURCE hides system-specific symbols so we need to make sure it's not defined for this file. On Linux, we can explicitly include <sys/sysmacros.h> and ensure that apart from symbols defined there the file only uses POSIX toys.
2024-02-15backend/drm: skip reset after VT switch if possibleSimon Ser
If all connectors and planes already have the right CRTC set, or are disabled, we can skip the device-wide reset after a VT switch. I've contemplated using a more fine-grained logic to only reset the connectors, CRTCs and planes that need to be migrated. However, writing a correct algorithm for this would be quite involved, and it doesn't seem worth the trouble anyways. Closes: https://github.com/swaywm/sway/issues/7956
2024-02-15backend/drm: fix typo in restore_drm_device() commentSimon Ser
2024-02-15backend/drm: move restore logic to drm.cSimon Ser
We'll need to use a bunch of internal functions from that file in the next commits.
2024-02-14backend/drm: call get_drm_connector_props() when creating connectorSimon Ser
This function fetches property IDs. These don't change for the lifetime of the connector. Instead of refreshing the property IDs on hotplug (and leaving property IDs unset for disconnected connectors), only fetch the property IDs when we create the connector.
2024-02-14backend/drm: add drm_page_flip_create()Simon Ser
2024-02-12backend/drm: drop unnecessary _XOPEN_SOURCESimon Ser
We only need base POSIX here.
2024-01-31backend/drm: use wlr_drm_backend.name for fd cloningKirill Primak
This also fixes a memleak.
2024-01-27backend/drm: add support for atomic tearing page-flipsSimon Ser
The kernel patches [1] have been merged. [1]: https://patchwork.freedesktop.org/series/120103/
2024-01-25backend/drm: drop wl_display argumentSimon Ser
We can grab the event loop from the wlr_session instead.
2024-01-25backend: stop calling wl_display_terminate()Simon Ser
Leave it up to the compositor to decide what to do when a backend becomes unavailable.
2023-12-30backend/drm: save current refresh rateSimon Ser
wlr_output.refresh is populated by core wlr_output, and thus will be zero for a custom mode with an unset refresh rate. Save the refresh rate from the drmModeModeInfo in wlr_drm_connector instead. Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3791
2023-11-30backend/drm: move drm_plane_finish_surface() to drm.cSimon Ser
This function touches queued_fb/current_fb, which the renderer has nothing to do with.
2023-11-30backend/drm: split wlr_drm_fb related functions into separate fileSimon Ser
2023-11-25Cleanup wlr_matrix.h includesSimon Ser
Many files used to require wlr_matrix but no longer do.
2023-11-23output: take wl_event_loop in wlr_output_init()Simon Ser
We don't need the whole wl_display here anymore. The wl_event_loop is enough.
2023-11-23util/transform: move over wl_output_transform helpersSimon Ser
These aren't really tied to wlr_output.
2023-11-19backend/drm: add wlr_drm_connector_state.nonblockSimon Ser
Instead of having this condition checked in multiple places, centralize it so that they don't go out-of-sync.
2023-11-19backend/drm: fix pending page-flip checkSimon Ser
This chunk of code was moved by mistake. Fixes: 3b53d1cbf199 ("backend/drm: introduce page-flip tracking struct")
2023-11-17backend/drm: Destroy page flips on backend destroyAlexander Orzechowski
When we destroy the backend, page flips will no longer be invoked meaning those won't clean up the page flips for us.
2023-11-17backend/drm: Track page flips in listAlexander Orzechowski
2023-11-17backend/drm: introduce page-flip tracking structSimon Ser
Introduce a per-page-flip tracking struct passed to the kernel when we request a page-flip event for an atomic commit. The kernel will pass us back this pointer when delivering the event. This eliminates any risk of mixing up events together. In particular, if two events are pending, or if the CRTC of a connector is swapped, we no longer blow up in the page-flip event handler. Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3753
2023-11-15backend/drm: ensure plane surfaces are cleaned up on shutdownSimon Ser
Right now this is done "by chance" because we disable all CRTCs on shutdown. However, we'll stop doing this. Plus, if disabling a CRTC fails, we don't cleanup properly.
2023-10-30backend: drop wlr_backend_get_presentation_clock()Simon Ser
We can just assume CLOCK_MONOTONIC everywhere. Simplifies the backend API, and fixes clock mismatches when multiple backends are used together with different clocks.
2023-10-09output: allow_artifacts -> allow_reconfigurationKenny Levinsen
The name "allow_artifacts" and associated description is very vague, and theoretically allow for tearing behavior. Clarify that we only intend to mean artifacts related to output configuration (e.g., modesets). References: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3740
2023-10-02backend/drm: restore pending page-flip check when tearingSimon Ser
DRM_MODE_PAGE_FLIP_ASYNC doesn't allow user-space to submit new buffers before waiting for the uevent: the kernel will return EBUSY in that case. Fixes: c2aa7fd965cb ("backend/drm: Add async page flip support to legacy")
2023-09-28backend/drm: Add async page flip support to legacyvaxerski
Atomic doesn't support such flags yet.
2023-09-07backend/drm: Compute custom mode correctlyAlexander Orzechowski
2023-08-25backend/drm: drop no-op shortcutSimon Ser
Since e5fc8cd4c734 ("output: trigger frame/present events on all commits on enabled output"), any commit on an enabled output is supposed to trigger frame/present events. The DRM backend was skipping the commit completely for no-op commits. Stop doing so. Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3719
2023-08-23output: trigger frame/present events on all commits on enabled outputSimon Ser
Up until now, frame/present events were only triggered when the user submitted a buffer. Change the wlr_output API so that these events are triggered when any commit is applied on an enabled output. Closes: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3708
2023-08-23backend/drm: report !presented if session is inactiveRose Hudson
2023-08-23backend/drm: don't set frame_pending on modesetRose Hudson
https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3664#note_2020392 we're gonna have to trust Simon on this one 🤞
2023-08-16backend/drm: Use output state to set init modeAlexander Orzechowski
2023-08-16backend/drm: Move output variable up in connect_drm_connectorAlexander Orzechowski
2023-08-16output: Add initialization state to wlr_output_initAlexander Orzechowski
2023-07-14backend/drm: stop checking for wlr_client_bufferSimon Ser
wlr_client_buffer is a bad indicator for direct scan-out. Compositors might use the underlying wlr_buffer instead.
2023-07-11Use wl_container_of() instead of castsSimon Ser
This slightly improves type safety. The culprits were found with: git grep -E '\([a-z0-9_ ]+ \*\)\W?[a-z]'
2023-07-07Use struct initializers instead of memset()Simon Ser
This is a bit more type-safe.
2023-06-30backend/drm: use panel_orientation if it is setClayton Craft
This fixes an issue where the panel_orientation parameter was set but wlroots was ignoring it and returning OUTPUT_TRANSFORM_NORMAL. Fixes 2e12de96