aboutsummaryrefslogtreecommitdiff
path: root/backend/drm/drm.c
AgeCommit message (Collapse)Author
2018-09-28backend/drm: don't free connector immediatelyemersion
When a pageflip is pending, we'll get a DRM event for the connector in the future. We don't want to free the connector immediately otherwise we'll use-after-free in the pageflip handler. This commit adds a new state, "DISAPPEARED". This asks the pageflip handler to destroy the output after it's done pageflipping.
2018-09-18backend/drm: add assertionsemersion
2018-09-15backend/drm: steal CRTCs from disabled outputsemersion
This commit allows outputs that need a CRTC to steal it from user-disabled outputs. Note that in the case there are enough CRTCs, disabled outputs don't loose it (so there's no modeset and plane initialization needed after DPMS). CRTC allocation still prefers to keep the old configuration, even if that means allocating an extra CRTC to a disabled output. CRTC reallocation now happen when enabling/disabling an output as well as when trying to modeset. When enabling an output without a CRTC, we realloc to try to steal a CRTC from a disabled output (that doesn't really need the CRTC). When disabling an output, we try to give our CRTC to an output that needs one. Modesetting is similar to enabling. A new DRM connector field has been added: `desired_enabled`. Outputs without CRTCs get automatically disabled. This field keeps track of the state desired by the user, allowing to automatically re-enable outputs when a CRTC becomes free. This required some changes to the allocation algorithm. Previously, the algorithm tried to keep the previous configuration even if a new configuration with a better score was possible (it only changed configuration when the old one didn't work anymore). This is now changed and the old configuration (still preferred) is only retained without considering new possibilities when it's perfect (all outputs have CRTCs). User-disabled outputs now have `possible_crtcs` set to 0, meaning they can only retain a previous CRTC (not acquire a new one). The allocation algorithm has been updated to do not bump the score when assigning a CRTC to a disabled output.
2018-09-14output: make wlr_output_enable return a boolemersion
2018-09-10backend/drm: de-allocate unused CRTCsemersion
They can be re-used by another output after a subsequent hotplug.
2018-09-04backend/drm: damage outputs when switching CRTCsemersion
2018-09-04backend/drm: log when de-allocating CRTCemersion
2018-09-04backend/drm: better hotplug handlingemersion
This commit handles better situations in which the number of connected outputs is greater than the number of available CRTCs. It'll enable as many outputs as possible, and transfer CRTCs to outputs that need one on unplug. This changes CRTC and plane reallocation to happen after scanning DRM connectors instead of on modeset. This cleanups CRTCs and planes on unplug to allow them to be re-used for other outputs. On modeset, if an output doesn't have a CRTC, the desired mode is saved and used later when the output gains a CRTC. Future work includes giving priority to enabled outputs over disabled ones for CRTC allocation. This requires the compositor to know about all outputs (even outputs without CRTCs) to properly modeset outputs enabled in the compositor config file and disable outputs disabled in the config file.
2018-09-02backend/drm: fix invalid VLA size in scan_drm_connectorsemersion
I failed to see this issue with Valgrind because of the +1.
2018-09-02backend/drm: emit new_output after scanning connectorsemersion
This prevents receiving modesetting requests from the compositor while we don't have the whole picture (ie. while we haven't yet scanned all connectors). This also makes connectors without CRTCs disabled (they can't be enabled yet even if some CRTCs are free'd -- this is future work).
2018-09-01backend/drm: allow disabling outputs in NEEDS_MODESET stateemersion
This correctly frees CRTCs when disabling outputs without setting a mode.
2018-08-05Check for DRM primeScott Anderson
This will indicate the user properly when multi-GPU is not supported by their GPU driver.
2018-08-04Fix hardware cursor on secondary GPUScott Anderson
Create rendering resources on parent GPU, so that we can sample the passed in texture properly. The cursor buffer needs to remain on the same GPU.
2018-08-02backend/drm: remove unnecessary castsemersion
2018-08-02backend/drm: allow to pass empty gamma ramp to reset itemersion
2018-08-02Implement wlr-gamma-control-unstable-v1emersion
2018-07-09util: add wlr_ prefix to log symbolsemersion
2018-07-07Merge pull request #1095 from agx/output-add-modeDrew DeVault
Allow to add additional modes to outputs
2018-07-07drm: Allow to add additional modesGuido Günther
This allows to add additional modes to the list of available video modes using VESA Coordinated Video Timing information. Closes #1080
2018-06-30screencopy: add support for frame flagsemersion
2018-06-30drm backend: overflow fixesDominique Martinet
These operations are done in 32-bit arithmetics before being casted to 64-bit, thus can overflow before the cast. Casting early fixes the issue. Found through static analysis
2018-05-31Merge branch 'master' into screencontentemersion
2018-05-29backend/drm: support multi-planar DMA-BUFs when exportingemersion
2018-05-29output, backend/drm: add wlr_output_export_dmabufemersion
2018-05-27backend/drm: better connector cleanup, add more logsemersion
2018-05-16recalculate cursor projection matrix on set_cursorMarkus Ongyerth
Updates the projection matrix for the cursor plane in the DRM backend, when the cursor is set, so new cursor are uploaded with the correct transformation.
2018-05-09Fix hardware cursors scale & transformemersion
2018-05-04Merge pull request #936 from emersion/full-hardware-cursorsemersion
output: always use hardware cursors if available
2018-05-03drm: only disable atomic modesetting when WLR_DRM_NO_ATOMIC == 1Guido Günther
Don't allow any value of the env var to disable atomic mode setting.
2018-05-01output: always use hardware cursors if availableemersion
This changes the `wlr_output_impl.set_cursor` function to take a `wlr_texture` instead of a byte buffer. This simplifies the DRM and Wayland backends since they were creating textures from the byte buffer anyway. With this commit, performance should be improved when moving the cursor since outputs don't need to be re-rendered anymore.
2018-04-25Make sure we don't use others' prefixesemersion
2018-04-25Remove wlr_ prefix from local symbolsemersion
2018-04-18output: don't emit the mode event if it hasn't changedemersion
This also fixes #535.
2018-03-31Fix cursor transform on DRM backendemersion
2018-03-24Redesign wlr_textureemersion
- Textures are now immutable (apart from those created from raw pixels), no more invalid textures - Move all wl_drm stuff in wlr_renderer - Most of wlr_texture fields are now private - Remove some duplicated DMA-BUF code in the DRM backend - Add more assertions - Stride is now always given as bytes rather than pixels - Drop wl_shm functions Fun fact: this patch has been written 10,000 meters up in the air.
2018-03-21backend/drm: remove remaining raw GL callemersion
This makes the hardware cursor code a less efficient. Can be fixed with a GLES3 renderer.
2018-03-21render/gles2: make wlr_renderer_begin take viewport sizeemersion
This allows raw GL calls outside wlr_renderer to be removed.
2018-03-19render: split render.h into wlr_renderer.h and wlr_texture.hemersion
2018-03-15matrix: rename wlr_matrix_texture to wlr_matrix_projectionemersion
2018-03-15renderer: replace wlr_texture_get_matrix by wlr_render_textureemersion
2018-03-15matrix: use 2D matricesemersion
2018-03-15matrix: unify API, don't use array pointersemersion
2018-03-15matrix: move to types/emersion
2018-03-12backend/drm: fix cursor hotspot not updatedemersion
2018-03-11backend/drm: refactor wlr_drm_connector_set_cursoremersion
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-25Add alpha to wlr_render_with_matrixGuido Günther
so we can use the alpha channel to e.g. blend in textures
2018-02-19Revert "ELF Visibility"Drew DeVault
2018-02-19Explicitly export EFL symbolsScott Anderson