aboutsummaryrefslogtreecommitdiff
path: root/backend/drm
AgeCommit message (Collapse)Author
2021-01-03backend/drm: stash pending page-flip CRTCSimon Ser
wlr_drm_connector.crtc may be updated by the DRM backend while a page-flip is pending. In this case, the page-flip handler won't be able to find the right wlr_drm_connector from the CRTC ID. Save the CRTC when performing a page-flip to ensure we always find the right connector when we get the event.
2021-01-03backend/drm: ignore hotplug events while inactiveSimon Ser
When the session is inactive, we can't change the KMS state. Ignore hotplug events so that compositors don't try to perform a modeset when a connector is plugged in. We already re-scan connectors when the session becomes active. To test, run a wlroots compositor on VT 1, switch to VT 2, unplug a connector, re-plug it, switch back to VT 1. Without this patch the screen is black on VT 1. References: https://github.com/swaywm/wlroots/issues/2370
2020-12-30Remove wlr_create_renderer_func_tSimon Ser
This callback allowed compositors to customize the EGL config used by the renderer. However with renderer v6 EGL configs aren't used anymore. Instead, buffers are allocated via GBM and GL FBOs are rendered to. So customizing the EGL config is a no-op.
2020-12-30backend/drm: remove special linear case for cursor planeSimon Ser
We now properly mark the cursor plane's formats as linear-only, and we now have a version of wlr_drm_format_intersect that handles the case of linear-only formats and implicit modifiers. We can remove the special drm_plane_init_surface flag we had for cursor planes. This also allows us to use a non-linear layout for cursor planes on drivers that support it. Tested on amdgpu GFX9.
2020-12-30backend/drm: extract linear format creation into functionSimon Ser
Simplifies error handling.
2020-12-30backend/drm: force LINEAR for cursor plane formatsSimon Ser
If the kernel driver doesn't support modifiers, it still expects cursor FBs to have a LINEAR layout. See [1] for expectations for framebuffers attached to the cursor plane. [1]: https://patchwork.freedesktop.org/patch/408512/
2020-12-28drm: add fallback drmModeAddFB for drivers which do not support drmModeAddFB2Ariadne Conill
This makes wlroots able to run on some big-endian machines like G4 and G5 systems with ATI Radeon 7500 AGP graphics.
2020-12-25backend/drm: make listener names more idiomaticSimon Ser
Use the "<object>_<event>" notation for listeners, use "handle_<listener>" for handlers.
2020-12-25Stop using wlr_texture_get_sizeSimon Ser
Just use wlr_texture.{width,height} directly.
2020-12-24backend/drm: use connector log helpers in atomic backendSimon Ser
2020-12-24backend/drm: make drmModePlane arg in add_plane constSimon Ser
Make it clearer it'll be free'd after add_plane returns.
2020-12-24backend/drm: add special case for cursor in add_planeSimon Ser
The code calling add_plane now makes sure not to add a cursor plane to a CRTC which already has one.
2020-12-24backend/drm: log whether ADDFB2 modifiers are supportedSimon Ser
2020-12-23backend/drm: don't retry page-flip when modifiers are unsupportedSimon Ser
Parse WLR_DRM_NO_MODIFIERS at startup. Don't parse IN_FORMATS when WLR_DRM_NO_MODIFIERS is set, so that the legacy behaviour is better reproduced. When modifiers aren't supported, try the initial page-flip once only.
2020-12-23backend/drm: use plural form for possible_crtcsSimon Ser
Make it clearer that this is a bitmask of CRTC indices.
2020-12-22backend/drm: assert connector state after wlr_output_destroySimon Ser
2020-12-22backend/drm: destroy DRM connectors that disappearSimon Ser
This was lost during the refactoring. We were previously calling wlr_output_destroy, which destroyed the connector as well. Fixes: 248c7787c7b4 ("backend/drm: refactor wlr_output destruction")
2020-12-22backend/drm: error on size mismatch in drm_surface_blitSimon Ser
2020-12-22backend/drm: remove drm_fb_acquireSimon Ser
Instead, import the buffer into GBM and KMS in drm_fb_import. Also move the multi-GPU copy there if necessary.
2020-12-22backend/drm: make drm_fb_acquire return a FB IDSimon Ser
2020-12-22backend/drm: drop export_drm_boSimon Ser
Not used anymore.
2020-12-22backend/drm: grab DMA-BUF from wlr_buffer instead of gbm_boSimon Ser
Get the DMA-BUF directly out of the wlr_buffer instead of relying on the gbm_bo. This eliminates a roundtrip through GBM.
2020-12-22backend/drm: don't save texture in gbm_bo user dataSimon Ser
The GBM BO is destroyed when released anyways.
2020-12-18backend/drm: avoid gcc stringop-truncation warningRonan Pigott
2020-12-18backend/drm: remove unused wlr_drm_plane.drm_formatSimon Ser
2020-12-18backend/drm: refactor wlr_output destructionSimon Ser
Instead of hand-rolling our own manual wlr_output cleanup function, rely on wlr_output_destroy to remove an output from the compositor's state.
2020-12-18backend/drm: introduce wlr_drm_connector.nameSimon Ser
The DRM backend is a little special when it comes to wlr_outputs: the wlr_drm_connectors are long-lived and are created even when no screen is connected. A wlr_drm_connector only advertises a wlr_output to the compositor when a screen is connected. As such, most of wlr_output's state is invalid when the connector is disconnected. We want to stop using wlr_output state on disconnected connectors. Introduce wlr_drm_connector.name which is always valid regardless of the connector status to avoid reading wlr_output.name when disconnected.
2020-12-18backend/drm: introduce wlr_drm_conn_logSimon Ser
Simplify and unify connector-specific logging with a new wlr_drm_conn_log macro. This makes it easier to understand which connector a failure is about, without having to explicitly integrate the connector name in each log message.
2020-12-18backend/drm: use wlr_drm_format_{create,add}Simon Ser
Instead of manually allocating and initializing the structs, use the new wlr_drm_format helpers.
2020-12-17backend/drm: print DRM device name when scanning connectorsSimon Ser
2020-12-17backend/drm: add wlr_drm_backend.nameSimon Ser
Save the DRM device name in a wlr_drm_backend field, so that we can easily use it for logging purposes.
2020-12-17backend/drm: remove nouveau workaroundSimon Ser
The workaround is broken because drm_fb_acquire doesn't leave the EGL context current anymore. We'll need to re-introduce it. References: https://github.com/swaywm/wlroots/issues/2525
2020-12-15backend/drm: add wlr_drm_connector.backendSimon Ser
This allows the DRM code to have direct access to the wlr_drm_backend without having to go through an upcast via get_drm_backend_from_backend.
2020-12-15backend/drm: dup FD before wlr_gbm_allocator_createSimon Ser
The GBM allocator takes ownership of the DRM FD.
2020-12-15Remove inline keywordSimon Ser
The compiler is smarter at figuring out whether a function should be inlined or not.
2020-12-13backend/drm: stop using GBM flagsSimon Ser
gbm_bo_create_with_modifiers doesn't take GBM flags, so our wlr_gbm_allocator interface doesn't either. We were still internally using GBM flags in the DRM backend, leading to awkward back-and-forth conversions. The only flag passed to drm_plane_init_surface was GBM_BO_USE_LINEAR, so turn that into a bool to make sure other flags can't be passed in. Move the "force linear" logic out of init_drm_surface, because the supplied wlr_drm_format should already contain that information.
2020-12-11backend/drm: remove workaround for amdgpu DP MSTSimon Ser
Closes: https://github.com/swaywm/wlroots/issues/2533
2020-12-09backend/drm: remove EGL configSimon Ser
Since we're using wlr_swapchain, we don't need to provide an EGL config.
2020-12-08backend/drm: fix missing wlr_drm_format.capSimon Ser
This caused issues with wlr_drm_format_dup.
2020-12-08backend/drm: don't assume possible_crtcs has only one bit setStephane Chauveau
This isn't necessarily the case [1]. This should fix an assertion failure on Raspberry Pi 4 dual screen. [1]: https://lists.freedesktop.org/archives/dri-devel/2020-August/275142.html Closes: https://github.com/swaywm/wlroots/issues/1943 Co-authored-by: Simon Ser <contact@emersion.fr>
2020-12-08backend/drm: stop tracking overlay planesSimon Ser
We don't do anything with them. Once we do, we can easily add this back.
2020-12-08backend/drm: unset current surface before importingSimon Ser
drm_fb_import_wlr may need to change the current EGL context. For instance by calling drm_fb_clear, which calls wlr_buffer_unlock, which may destroy a buffer if the cursor swapchain size has changed, which calls gles2's destroy_buffer, which calls glDeleteFramebuffers. Closes: https://github.com/swaywm/wlroots/issues/2479
2020-12-07backend/drm: use EGL_PLATFORM_GBM_KHRSimon Ser
This is just the vendor-agnostic define for the GBM platform. It has the same value as EGL_PLATFORM_GBM_MESA, so should work with old drivers that only offer the Mesa-vendored extension too.
2020-12-07drm: do not unset make/model before emitting destroy eventIlia Bozhinov
2020-12-04backend/drm: remove unused if in drm_connector_move_cursorSimon Ser
We return early if we don't have a plane.
2020-12-03backend/drm: query render formatsSimon Ser
On some platforms it's possible that the display engine supports modifiers not supported by the render engine. Query render formats and intersect them with plane formats to accommodate for this.
2020-12-03backend/drm: take a wlr_drm_format in init_drm_surfaceSimon Ser
Instead of taking a format code and wlr_drm_format_set, simplify the function signature and take a single wlr_drm_format.
2020-12-01Revert "backend/drm: stop force-probing connectors"Simon Ser
This reverts commit 713c1661b742f93a7d2167321837c0d99541ca87. It turns out we do need to force-probe on startup and on hotplug [1]. This is unfortunate, but that's just how the uAPI works. Fixing this would require patching the kernel. [1]: https://lists.freedesktop.org/archives/dri-devel/2020-November/289506.html Closes: https://github.com/swaywm/wlroots/issues/2499
2020-11-30backend/drm: "scaling mode" is a connector propertySimon Ser
It's not a CRTC property. Remove it altogether since it's unused.
2020-11-30backend/drm: rotation is a plane propertySimon Ser
"rotation" is a plane property, it's not a CRTC property. It was also missing from plane_info.