Commit graph

159 commits

Author SHA1 Message Date
Vlad Zahorodnii
7f883fa724 Make EGL_KHR_surfaceless_context mandatory
We use surfaceless contexts with internal windows. We also require
the EGL_KHR_surfaceless_context extension for making context current
without outputs.

Arguably, we could use pbuffers, but since mainstream drivers (Mesa and
NVIDIA) support surfaceless contexts, the extra complexity doesn't buy
us anything.
2021-08-16 10:56:46 +00:00
Xaver Hugl
1041ef8275 platforms/drm: introduce virtual outputs
When the last output gets disconnected, create a virtual output as a
placeholder until we have access to a physical output again. While
this placecholder never gets rendered to, with virtual outputs in
general that is possible (with gbm and qpainter atm) and can be done
for future use cases like wireless displays.

CCBUG: 420160
CCBUG: 438839
2021-08-07 17:18:40 +02:00
Xaver Hugl
7879450cdf platforms/drm: work around tigerlake bug
CCBUG: 440361
2021-08-05 12:25:54 +00:00
Xaver Hugl
81136a0448 platforms/drm: drop unused methods 2021-08-04 15:06:43 +02:00
Andrey Butirsky
998bbf4eba fix wrong cursor hotspot under Wayland on VMs 2021-08-02 09:03:07 +00:00
Xaver Hugl
2e473a21fb platforms/drm: small logging improvements 2021-08-01 23:26:49 +02:00
l10n daemon script
d2aac8cb05 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"
2021-08-01 01:21:11 +00:00
Aleix Pol
475993db70 kscreen effect: Work per screen
Makes it possible to apply the dpms settings per screen instead of
applying it to all of them, which is wrong at many levels.
Will be even more important with other effects like rotation.
2021-07-28 10:57:27 +00:00
Vlad Zahorodnii
cb219da766 Remove screenGeometryChanged() in OpenGLBackend and QPainterBackend
The screenGeometryChanged() function is very X11-specific. On Wayland,
it's effectively unused.
2021-07-26 14:55:54 +00:00
Vlad Zahorodnii
d4c7486fe1 Remove Q_UNUSED
damage is used.
2021-07-26 08:40:41 +03:00
Vlad Zahorodnii
e087b2ce2f platforms/drm: Add buffer age support in qpainter backend
Currently, the entire screen will be repainted when using the qpainter
render backend. With this change, kwin will repaint only the dirty parts
on the screen.
2021-07-25 09:59:00 +03:00
Vlad Zahorodnii
501298b0e0 Introduce DamageJournal helper 2021-07-24 16:32:13 +03:00
Vlad Zahorodnii
2fe102768a Remove QPainterBackend::needsFullRepaint()
A better alternative is to return the damage region in the beginFrame()
function. This way, the render backend can force full screen repaints or
indicate what parts of the buffer needs to be repainted (for buffer age)
2021-07-24 14:54:17 +03:00
Vlad Zahorodnii
4abbb6f0d6 Make OpenGLBackend and QPainterBackend QObjects
Almost all their subclasses are QObjects. This simplifies the class
hierarchy by making OpenGLBackend and QPainterBackend qobjects.
2021-07-24 11:30:13 +03:00
Vlad Zahorodnii
d543c0dff6 Remove unused mask param in QPainterBackend::endFrame()
It is unused and it is not a good idea to pass Scene's mask to the
render backend as it results in higher coupling between Platform and
Scene.
2021-07-23 20:42:59 +00:00
Vlad Zahorodnii
85654236d7 Fix build 2021-07-23 18:45:54 +03:00
Vlad Zahorodnii
964c487d4f wayland: Switch to ClientBuffer
The main motivation behind the split is to simplify client buffer code
and allow adding new features easier, for example referencing the shm
pool when a shm buffer is destroyed, or monitoring for readable linux
dmabuf file descriptors, etc.

Also, a referenced ClientBuffer cannot be destroyed, unlike the old
BufferInterface.
2021-07-23 15:33:38 +00:00
Xaver Hugl
97f8bfac5c platforms/drm: where necessary, disconnect CRTCs after VT switch 2021-07-16 17:19:26 +02:00
Xaver Hugl
f9f474d7e4 platforms/drm: fix property updating
A wrong index caused some properties to contain wrong values
2021-07-16 16:34:40 +02:00
Xaver Hugl
afcef2a6f8 platforms/drm: fix crash with secondary GPUs and buffer age
CCBUG: 433107
2021-07-15 11:42:57 +00:00
Xaver Hugl
2977ae8e37 platforms/drm: don't take the rotation property for granted
Should fix the crash on the pinephone
2021-07-12 14:28:38 +02:00
Xaver Hugl
3c28a78956 Fix build 2021-07-10 23:54:08 +02:00
Xaver Hugl
303132ae0f platforms/drm: update plane properties before updating outputs
Seems like some drivers change the properties in the time it takes to
initialize the scene
2021-07-10 21:18:37 +02:00
Xaver Hugl
b23dfd55ac platforms/drm: optimize cursor setting 2021-07-10 21:18:37 +02:00
Xaver Hugl
5ad0d18476 platforms/drm: update properties on VT switch and failing commits 2021-07-10 21:18:37 +02:00
Xaver Hugl
586efe94d4 platforms/drm: Introduce DrmPipeline
DrmPipeline is now what contains all the thing related to drm calls,
instead of DrmOutput. This allows for some more flexibility and tidies
the code up a bit. Additionally instead of rolling back changes if
presentation fails, changes are directly tested with atomic test only
commits.
2021-07-10 21:18:33 +02:00
Xaver Hugl
92726372f4 platforms/drm: simplify deleted output handling 2021-07-10 20:13:01 +02:00
Xaver Hugl
c89961a4e2 platforms/drm: save modelist in DrmConnector 2021-07-10 20:13:01 +02:00
Xaver Hugl
ee4b4fc9a3 platforms/drm: refactor presentation in gbm backend 2021-07-10 20:13:01 +02:00
Xaver Hugl
da71d218c8 platforms/drm: refactor the gbm surface 2021-07-10 20:13:01 +02:00
Aleix Pol
eb62dbb9c5 Allow the KScreenEffect to work on Wayland
Makes it possible for wayland systems to show a dimming effect when a
display dpms is off.
2021-07-09 12:39:42 +02:00
Aleix Pol
1012adeaf7 Add support to DPMS to the Wayland Backend
Moves the DpmsInputEventFilter to libkwin, so that it can be used by
other backends other than DRM.
This mostly helps develop features around DPMS.
2021-07-09 02:41:26 +02:00
Xaver Hugl
caa8c8fd45 platforms/drm: always populate atomic req with connector props
If we don't then overscan and underscan are never applied
2021-07-08 16:14:25 +00:00
Xaver Hugl
4d8ae93f06 platforms/drm: fix underscan
The enums belong to "underscan", not to "underscan hborder".
The aspect ratio also needed correction
2021-07-08 16:14:25 +00:00
Xaver Hugl
a1847f77f1 platforms/drm: only show cursor on dpms on if not hidden
While always calling showCursor isn't a problem for when there's no
pointing device as the cursor image is empty in that case, it can
cause a temporarily stuck cursor image when it's supposed to be
hidden because of touch input
2021-07-07 21:05:49 +02:00
Xaver Hugl
925ff96401 platforms/drm: support underscan 2021-07-07 15:03:39 +02:00
Erik Kurzinger
770875a76e platforms/drm: check wl_eglstream buffers before attaching
If a wl_eglstream buffer is attached to a surface, but then later a different
type of buffer, such as a dmabuf, is attached to the same surface, kwin will
mistakenly keep trying to acquire frames from the EGLStream associated with the
previous buffer. This can happen if an Xwayland window is made full-screen
causing it to switch to the flipping presentation path, for instance. The
result is that the window contents will no longer be updated.

Instead, the eglstream backend's loadTexture and updateTexture functions should
first pass the buffer to eglCreateStreamAttribNV. If it fails with
EGL_BAD_STREAM_KHR, that indicates it is indeed a wl_eglstream, and that we've
already associated a server-side EGLStream with it in attachStreamConsumer, so
we can proceed as usual. If it fails with EGL_BAD_ACCESS, though, that
indicates it is not a wl_eglstream and we should fall back to the parent class
which handles attaching other buffer types. If it doesn't fail at all, that
means the client tried to attach a new wl_eglstream to a surface without first
attaching the stream consumer. There's not really a great way to handle this,
so just re-use the previous EGLStream.
2021-07-05 11:13:24 +00:00
David Redondo
b4150e3eb5 Fix build 2021-06-29 10:32:06 +02:00
Xaver Hugl
2ecce63d93 platforms/drm: don't crash if drmModeGetConnector fails
I don't think this is the cause of 439208, where it's likely only a
side effect of some other issue; should be guarded against anyways.

CCBUG: 439208
2021-06-28 20:13:36 +00:00
Xaver Hugl
6260c03548 platforms/drm: don't create modeset dumb buffer for import gpu
When the EglStreamBackend is used for the secondary GPU we don't need
the modesetting dumb buffer.
2021-06-25 10:08:36 +00:00
Xaver Hugl
7e96f09670 platforms/drm: use correct size for soft rotation 2021-06-25 00:46:32 +02:00
Xaver Hugl
80a7362efc platforms/drm: refactor post processing bits
Putting the OpenGL post processing rotation into its own class cleans
the EglGbmBackend code up a bit and adds post processing rotation for
the EglStreamBackend
2021-06-22 16:35:42 +00:00
Xaver Hugl
9194c0c974 platforms/drm: some improvements for logging 2021-06-21 17:57:36 +02:00
Xaver Hugl
7552b53066 partially revert 2742e5b422
It seems like without a surface creation of the scene fails somehow. At
least until the exact problem is solved, update outputs for EglStream
gpus before creating the EglStreamBackend.

BUG: 438363
2021-06-21 14:49:44 +02:00
Xaver Hugl
0223136712 platforms/drm: fix mistake in DrmGbmBuffer
When gbm_bo_get_handle_for_plane isn't supported or doesn't work we'd be
passing the buffer format as its handle to drmModeAddFB(2).
2021-06-20 18:47:10 +02:00
Xaver Hugl
b33fef02f5 platforms/drm: show cursor when exiting dpms
BUG: 438824
2021-06-18 14:10:22 +00:00
Xaver Hugl
250169ff84 platforms/drm: make context current without outputs in eglstream 2021-06-15 23:21:08 +02:00
Ömer Fadıl Usta
dc73d622c0 Guard gbm and eglstreams parts for non-gbm or non-eglstreams systems 2021-06-10 20:10:14 +00:00
Xaver Hugl
40c485f2a6 platforms/drm: fix EglStreamBackend init
BUG: 438363
2021-06-10 13:06:43 +00:00
Xaver Hugl
3d6659b0d7 platforms/drm: on NVidia do pageflips with QPainter
Otherwise it's just gonna display a static black screen

CCBUG: 438363
2021-06-10 11:19:07 +00:00