Commit graph

321 commits

Author SHA1 Message Date
Vlad Zahorodnii
b3d3ca8c0f backends/drm: Remove unused screens.h includes 2022-07-13 10:21:44 +00:00
Vlad Zahorodnii
7d00766629 backends/drm: Make drm backend not touch output configuration if all outputs are disabled
This behavior was added in order to fix a crash reported in bug report
442990. However, the analysis was not 100% correct, kwin failed to
create a placeholder because the relevant check was incorrect. The drm
backend was checking the list of all connected outputs rather than the
list with enabled outputs to decide whether to create a placeholder output.

As a safety measure the proposed behavior makes sense, however the drm
backend is not the right layer to implement it. If the last enabled
output is disconnected, kscreen should view it as a new output
setup and re-enable outputs in order to ask user what desired output
configuration should be.
2022-07-12 09:54:50 +00:00
Xaver Hugl
0d302d5c66 backends/drm: also check for properties in DrmPipeline::needsModeset
Otherwise we may be missing situations where a modeset is needed

BUG: 455814
2022-07-11 14:31:55 +00:00
Xaver Hugl
2d43f3eee2 backends/drm: handle disconnected but not removed connector objects properly
The kernel doesn't disable connector objects that represent physical ports
when the output gets removed. If KWin tries to change the output configuration
without explicitly disabling the connector, atomic commits can fail.
2022-07-10 11:55:57 +00:00
Xaver Hugl
7d5d35928f backends/drm: don't create a new output every time 2022-07-06 09:52:49 +00:00
Xaver Hugl
a71146c999 backends/drm: don't remove connectors the kernel doesn't consider removed
Removing connectors that are still powered leads to a mismatch in atomic
commits: the crtc is still powered, but the connector also still there.
If KWin tries to disable the crtc afterwards, the atomic commits fail because
the connector needs to be disabled at the same time and it's missing from the
atomic commit request.

To fix this, whenever we fail to fetch information or get wrong data from
the kernel (like 0 modes), use the cached information instead and keep the
connector.

BUG: 456298
2022-07-05 19:11:33 +00:00
Aleix Pol
d5ddf55e9b gbm: Don't pass any flags when creating buffers with modifiers
It seems it doesn't bring much and it may backfire. Especially don't
pass GBM_BO_USE_LINEAR as it will limit a lot the buffers that can be
created and GBM_BO_USE_RENDERING use seems to be more harmful than
helpful on most cases.
2022-07-04 22:52:40 +00:00
l10n daemon script
c0307bb402 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2022-07-02 02:03:09 +00:00
Xaver Hugl
0c453739b1 backends/drm: fix common mode generation
The unit for refresh rate was wrong, which caused insanely high as well
as negative refresh rates

BUG: 455477
2022-06-29 20:53:55 +02:00
Xaver Hugl
da7dad1586 surfaceitem, surfacetexture: manage pixmaps and textures with std::unique_ptr 2022-06-29 13:18:51 +00:00
Xaver Hugl
1ff623e95e renderbackends: make SurfaceTexture creation methods use std::unique_ptr 2022-06-29 13:18:51 +00:00
Xaver Hugl
ef97158f96 backends/drm: suppress logging for direct scanout
BUG: 456089
2022-06-29 09:59:10 +02:00
Xaver Hugl
29625218d3 backends/drm: fix flicker with rotation on mobile
When we use a shadow buffer, we always render to the whole surface - setting
the damage region is incorrect and invokes undefined behavior. On the Lima
driver this caused flickering on screen rotation.
To fix this, don't set a damage region when we use a shadow buffer, which is
effectively setting the damage region to the full surface
2022-06-28 08:38:43 +00:00
Xaver Hugl
47c08d6f66 backends/drm: ensure modeset properties are reset properly
Without this, all atomic modeset commits fail on setups with a VR headset
2022-06-27 19:14:08 +00:00
Xaver Hugl
42c5e6bcf6 backends/drm: handle failing commits better
It can happen that the drm backend temporarily lacks permission to do atomic
commits, or that the cached drm property values become out of sync with
the real values held by the kernel. Instead of failing with both, attempt
to update property values and try the commits again at a later time.
2022-06-25 17:25:17 +02:00
Marco Martin
66a54d38d4 effects: Set timestamp for input events
Set the time for mouse and touch events. This is especially important
for the mouse is as the timestamp will be used to discriminate between
single and double click. Previously this was always sending the double
click event, making buttons work only every other click.

BUG: 454275
BUG: 449907
2022-06-24 17:54:55 +00:00
Vlad Zahorodnii
b62dd29210 backends/drm: Change the base class of DrmLeaseOutput
At the moment, the DrmLeaseOutput class inherits from the
KWaylandServer::DrmLeaseConnectionV1Interface class. While this works,
it's not a future-proof design. For example, kwin could also lease its
"desktop" outputs in order to let another wayland compositor run
alongside it.

Also, it's a good practice to prefer composition over inheritance.
2022-06-23 19:51:24 +00:00
Laurent Montel
c83568dfdd GIT_SILENT: remove extra ';' 2022-06-23 13:43:09 +02:00
Laurent Montel
d1837b8603 Remove extra ';' 2022-06-23 06:56:25 +02:00
Xaver Hugl
6d9d4c190a backends/drm: fix enabled+inactive check
When dpms disabled outputs get set active, they require a modeset. If after
that they are set inactive again without resetting the pipelines first,
they no longer require a modeset but still have the pending properties that
would enable a crtc - but without a framebuffer set.

To prevent this, first test the current setup as it is, and only then see
if the pipelines would work if enabled again.
2022-06-22 10:22:30 +02:00
Aleix Pol
9dbd0c4b36 backends/wayland: Offer the connector name as the model
It's more useful than ""
2022-06-22 01:54:19 +02:00
Xaver Hugl
3ea14d6e36 backends: use std::unique_ptr for RenderLoop 2022-06-21 17:50:49 +00:00
Xaver Hugl
a38a44cb2a libinput: use std::unique_ptr for events 2022-06-21 17:50:49 +00:00
Xaver Hugl
d2f7f75d39 manage Session with std::unique_ptr 2022-06-21 17:50:49 +00:00
Xaver Hugl
13d079cdd7 backends/x11: do less manual memory management 2022-06-21 17:50:49 +00:00
Xaver Hugl
e745577b4c backends: port vsync helpers to std::unique_ptr 2022-06-21 17:50:49 +00:00
Xaver Hugl
4cab9c4fc7 backends: port from QScopedPointer to std::unique_ptr 2022-06-21 17:50:49 +00:00
Aleix Pol
1112c29eb4 drm: Drop wrong assert
It blows out on nvidia proving my assumption was wrong back then
2022-06-21 14:16:46 +00:00
Aleix Pol
7b933abc0f backends/wayland: Don't rearrange outputs every time the window is resized
It makes it very hard to debug any use-case that isn't a strip of
outputs and even then, we should have other mechanisms to arrange
outputs properly (i.e. through kscreen).
2022-06-21 10:33:12 +00:00
Aleix Pol
5490b00117 backends/wayland: Allow outputs to have a name
As expected in many parts of our codebase
2022-06-21 10:33:12 +00:00
Aleix Pol i Gonzalez
5338d1a2b0 backends: We need to make current before calling importDmaBufAsTexture
Calls it for the WaylandBackend, ensures the declaration of the pointer
to the EglBackend in the drm case is done in the correct scope.
2022-06-18 20:00:32 +02:00
Xaver Hugl
1966638017 backends/drm: do cross-gpu imports again for test commits
Otherwise all commits will fail without a clear visible reason.

BUG: 454086
2022-06-17 17:45:18 +02:00
Marco Martin
32e6632d13 Make gbm_bo_create_with_modifiers2 inline
needed to link some tests

APPROVED-BY: vlad.zahorodnii@kde.org
2022-06-17 11:16:19 +02:00
Xaver Hugl
34ce3dde87 backends/drm: use GBM_BO_USE_SCANOUT when importing buffers for multi gpu
The gbm surface may not have the scanout use flag, and if the buffer is imported
without it, creating the framebuffer may fail

CCBUG: 454086
2022-06-16 17:02:16 +02:00
Aleix Pol
cd2567a838 drm & wayland: Remove unnecessary close() 2022-06-16 13:18:32 +00:00
Aleix Pol
1d5c803ce0 drm: Change where we call makeCurrent when creating dmabufs
We only need to call it before issuing opengl calls, so it's not
necessary when testing or when gbm fails to create the Buffer Object.
2022-06-16 13:18:32 +00:00
Aleix Pol
538b848f80 backends: Split out a DmaBufParams class
Instead of using a DmaBufAttributes instance to communicate the settings
to create a new dmabuf, use a smaller DmaBufParams class that only
contains the information we need after destroying the BO.
2022-06-16 13:18:32 +00:00
Aleix Pol
56ab74a143 backends: Share gbm create implementations between drm and wayland 2022-06-16 13:18:32 +00:00
Aleix Pol
aa59344be7 Platform: Improve our infrastructure to support dmabufs in backends
Allows creating buffers with modifiers.
Lets the windowed wayland backend support it, which makes testing
everything else much simpler.
2022-06-16 13:18:32 +00:00
Aleix Pol
29946be29f backends/wayland: Fix window title 2022-06-13 14:33:43 +02:00
Vlad Zahorodnii
9d916fa60d wayland: Use shared DmaBufAttributes type 2022-06-13 10:22:29 +00:00
Vlad Zahorodnii
2761df727d wayland: Refactor dmabuf attributes in linux-dmabuf-v1
At the moment, dmabuf importing is scattered all over the place in kwin.
It would be great if we had one function that takes dma-buf attributes
and returns an EGLImage if successful.

As the first step, make linux-dmabuf-v1 implementation provide dmabuf
attrs compatible with KWin::DmaBufAttributes.
2022-06-13 10:22:29 +00:00
l10n daemon script
ef1d97ac86 SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2022-06-13 02:35:40 +00:00
Aleix Pol i Gonzalez
5bea508590 drm: Readability, no need to copy the modifiers vector 2022-06-10 20:54:17 +02:00
Xaver Hugl
baf0f7b8d2 backends/drm: add fallback for systems without gbm modifier support
It was missing for lease outputs, which causes all atomic tests to fail

BUG: 454961
2022-06-09 14:31:15 +02:00
l10n daemon script
51999deadb SVN_SILENT made messages (.desktop file) - always resolve ours
In case of conflict in i18n, keep the version of the branch "ours"
To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2022-06-07 02:21:00 +00:00
Alexander Volkov
00379da3d3 Ignore fake input devices when detecting tablet mode
Otherwise launching firefox, which in turn leads to launching of
xdg-desktop-portal-kde, disables auto-rotation.
2022-06-06 17:25:37 +00:00
Xaver Hugl
4874066423 port many Qt shared pointers to standard smart pointers
There are a few benefits to using smart pointers from the standard library:
- std::unique_ptr has move semantics. With move semantics, transfer of ownership
can be properly expressed
- std::shared_ptr is more efficient than QSharedPointer
- more developers are used to them, making contributions for newcomers easier

We're also already using a mix of both; because Qt shared pointers provide
no benefits, porting to standard smart pointers improves consistency in
the code base. Because of that, this commit ports most of the uses of QSharedPointer
to std::shared_ptr, and some uses of QScopedPointer to std::unique_ptr
2022-06-04 16:57:29 +00:00
Aleix Pol
9db4fd1a17 DmaBufTexture: The modifier is a global dmabuf attribute
We don't get one per plane, but one per allocation.
2022-06-02 03:42:13 +02:00
Aleix Pol
51bfadab63 backends/wayland: Fix behaviour when disabling outputs
Makes sure disabled outputs are reported as such, leaving behind the
assumption that all outputs are always enabled.
Ensures the corresponding outputEnabled/Disabled signals are emitted.
Updates the window title to reflect the output state.
2022-06-01 10:53:03 +00:00