aboutsummaryrefslogtreecommitdiff
path: root/backend/drm/backend.c
AgeCommit message (Collapse)Author
2019-02-04Allow cursor render surface to be used as fbVincent Vanlaer
In order for a surface to be used as a cursor plane framebuffer, it appears that requiring the buffer to be linear is sufficient. GBM_BO_USE_SCANOUT is added in case GBM_BO_USE_LINEAR isn't sufficient on untested hardware. Fixes #1323 Removed wlr_drm_plane.cursor_bo as it does not serve any purpose anymore. Relevant analysis (taken from the PR description): While trying to implement a fix for #1323, I found that when exporting the rendered surface into a DMA-BUF and reimporting it with `GBM_BO_USE_CURSOR`, the resulting object does not appear to be valid. After some digging (turning on drm-kms debugging and switching to legacy mode), I managed to extract the following error: ``` [drm:__setplane_check.isra.1 [drm]] Invalid pixel format AR24 little-endian (0x34325241), modifier 0x100000000000001 ``` The format itself refers to ARGB8888 which is the same format as `renderer->gbm_format` used in master to create the cursor bo. However, using `gbm_bo_create` with `GBM_BO_USE_CURSOR` results in a modifier of 0. A modifier of zero represents a linear buffer while the modifier of the surface that is rendered to is `I915_FORMAT_MOD_X_TILED` (see https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/include/uapi/drm/drm_fourcc.h?h=v4.20.6#n263). In order to fix this mismatch in modifier, I added the `GBM_BO_USE_LINEAR` to the render surface and everything started to work just fine. I wondered however, whether the export and import is really necessary. I then decided to test if the back buffer of the render surface works as well, and at least on my hardware (Intel HD 530 and Intel UHD 620) it does. This is the patch in this PR and this requires no exporting and importing. I have to note that I cheated in order to import DMA_BUFs into a cursor bo when doing the first tests, since on import the Intel drivers check that the cursor is 64x64. This is strange since cursor sizes other than 64x64 have been around for quite some time now (https://lists.freedesktop.org/archives/mesa-commit/2014-June/050268.html). Removing this check made everything work fine. I later (while writing this PR) found out that `__DRI_IMAGE_USE_CURSOR` (to which `GBM_BO_USE_CURSOR` translates) has been deprecated in mesa (https://gitlab.freedesktop.org/mesa/mesa/blob/master/include/GL/internal/dri_interface.h#L1296), which makes me wonder what the usecase of `GBM_BO_USE_CURSOR` is. The reason we never encountered this is that when specifying `GBM_BO_USE_WRITE`, a dumb buffer is created trough DRM and the usage flag never reaches the Intel driver directly. The relevant code is in https://gitlab.freedesktop.org/mesa/mesa/blob/master/src/gbm/backends/dri/gbm_dri.c#L1011-1089 . From this it seems that as long as the size, format and modifiers are right, any surface can be used as a cursor.
2018-10-04Rename get_present_clock to get_presentation clock, use itemersion
2018-10-04backend: add get_present_clockemersion
2018-10-04Merge pull request #1262 from nyorain/session_fixDrew DeVault
Improve session handling
2018-10-03backend/drm: reset gamma table on VT switchemersion
2018-09-24Rework session handlingnyorain
Sessions can now be retrieved from a backend in a more general manner. Multi-backend gets back its `session` field that contains the session if one was created, removing the interfacing from multi backend with the drm backend directly. This adds the possibility to use sessions even without the drm backend. It additionally fixes the bug that 2 session objects got created when WLR_BACKENDS were set to "libinput,drm". To allow vt switching without drm backend (and drm fd) on logind, start listening to PropertiesChanged signals from dbus and parse the session "Active" property when no master fd was created (this does not change current drm backend behaviour in any way).
2018-09-18backend/drm: add assertionsemersion
2018-08-03multi-backend: do not expose internal renderersMariusz Bialonczyk
backend_get_renderer() is now returning the renderer of the primary GPU, instead of its own renderer, since that's the thing which actually does all of the "real" rendering wlr_multi_backend_add() is now adding all subbackends (otherwise only one GPU is handled). credits: @ascent12
2018-07-09util: add wlr_ prefix to log symbolsemersion
2018-05-25Merge pull request #993 from emersion/bind-wl-drm-in-rendereremersion
render: bind wl_drm in renderer
2018-05-25backends: implement custom EGL and renderer initializationIlia Bozhinov
Compositors now have more control over how the backend creates its renderer. Currently all backends create an EGL/GLES2 renderer, so the necessary attributes for creating the context are passed to a user-provided callback function. It is responsible for initializing provided wlr_egl and to return a renderer. On fail, return 0. Fixes #987
2018-05-21render: bind wl_drm in rendereremersion
2018-04-25Don't use the wlr_ prefix for static functionsemersion
2018-04-25Make sure we don't use others' prefixesemersion
2018-04-25Remove wlr_ prefix from local symbolsemersion
2018-04-08backend: remove wlr_backend_get_eglemersion
2018-03-21render/egl: use EGL_KHR_debugemersion
2018-03-01prevent current_mode null on output_enable(false)Markus Ongyerth
The current mode was set to NULL to abuse it as state variable persisting DRM suspend/resume, this results resulted in a segfault on normal DPMS cycle. This reverts that change and uses the wlr_output enabled variable, which also persists and makes more sense.
2018-02-26restore dpms state on drm resumeMarkus Ongyerth
If there is no current mode, set outputs to dpms off in drm resume. Sets current mode to null on disable to ensure this can be checked.
2018-02-19Revert "ELF Visibility"Drew DeVault
2018-02-19Explicitly export EFL symbolsScott Anderson
2018-02-12Reformat all #include directivesemersion
2018-02-12Make wlr_signal_emit_safe privateemersion
2018-02-12Add wlr_signal_emit_safeemersion
2018-02-03Merge remote-tracking branch 'upstream/master' into output-damageemersion
2018-02-02backend/drm: support updating cursor when session is pausedemersion
2018-01-30backend: fix use-after-free when destroying backendsemersion
The backend destroy signal is emitted before the output_remove signal is. When the destroy signal is emitted listeners remove their output_remove listener, so the output_remove signal is never received and listeners have an invalid output pointer. The correct way to solve this would be to remove the output_remove signal completely and use the wlr_output.events.destroy signal instead. This isn't yet possible because wl_signal_emit is unsafe and listeners cannot be removed in listeners.
2018-01-30Fix some typosGuido Günther
Prefer initialize over initialise since used more often in the sources.
2018-01-29Merge pull request #580 from emersion/screenshooter-renderer-backportTony Crisci
Backport screenshooter fixes from the renderer redesign v1
2018-01-24Clean up session signal handler on drm init failVincent Vanlaer
2018-01-23Backport screenshooter fixes from the renderer redesign v1emersion
This backports some changes to #319 to fix the screenshooter data format. This also adds wlr_backend_get_renderer which will be useful to support multiple renderers.
2017-12-19remove session from multibackendTony Crisci
2017-12-07Listen to display destroy in backendsemersion
2017-11-01rootston exit: fix drm destroyDominique Martinet
wlr_drm_connector were being freed without removing them from the drm->outputs list, segfaulting on destroy
2017-10-26Do not set hw cursor if disabled when switching VTemersion
2017-10-22Rescan connectors on DRM resumeVersus Void
2017-10-21Merge branch 'master' into heghe/wl_listDrew DeVault
2017-10-21Rename remaining refs to wlr_listDrew DeVault
2017-10-22Move egl.h to render/egl.hScott Anderson
2017-10-20Replace list_t with wl_list for wlr_input_deviceHeghedus Razvan
Signed-off-by: Heghedus Razvan <heghedus.razvan@gmail.com>
2017-10-20Replace list_t with wl_list in wlr_drm_backendHeghedus Razvan
Signed-off-by: Heghedus Razvan <heghedus.razvan@gmail.com>
2017-10-05Fix memory leaksVersus Void
2017-10-01Minor fixesScott Anderson
2017-10-01Multi-GPU DRMScott Anderson
2017-10-01Change wlr_session to open every GPUScott Anderson
2017-09-30Rename wlr_drm_output to wlr_drm_connectorScott Anderson
2017-09-30Rename backend to drmScott Anderson
2017-09-30Split DRM rendering to its own fileScott Anderson
2017-09-30Rename files to remove pointless drm prefixScott Anderson
2017-09-30Removed unused fieldsScott Anderson