| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
There is a bug in some versions of the Vivante driver, causing clients
to crash when a window is closed. This patch avoids a crash on startup,
confirmed with GL version "OpenGL ES 3.0 V5.0.11.p4.25762". The crash
happens with both Weston and Qt-based compositors.
Since we do not yet know exactly which versions are affected, we
avoid destroying the temporary surface for all Vivante versions.
Change-Id: I4b5b0ebb04b8441559aebb54a6ec3eb534c5c8e0
Reviewed-by: Jan Arne Petersen <jan.petersen@kdab.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@theqtcompany.com>
|
|\
| |
| |
| | |
Change-Id: Ie70fdd03e1259a8cb75bbdbf1324e3e4a2b51807
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
contains(QT_CONFIG, egl) and CONFIG += egl is the only sane way to test
for and pull in EGL headers and libs. This is particularly important when
trying to be robust and guard against half-broken sysroots on embedded
where a naive PKGCONFIG += egl breaks.
Also add an EGL_WAYLAND_BUFFER_WL define to keep wayland-egl compiling.
We are not testing for that in any config tests may cause a failure in sysroots
that have parts of Mesa thrown in but pick ip an older EGL header from the
vendor's driver.
Change-Id: I7b7e6a7a91e78dbda5b6954ad08761298c538efc
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Directly calling eglCreateGlobalImageBRCM and friends is not ideal due to the
messy RPi distro setups: shipping Mesa (sw rasterizer only) in standard locations
may cause picking up those EGL/GLES libs instead of the Broadcom ones from /opt/vc
when building Qt. While this is something that should be fixed in the sysroot (since
it is a problem at runtime anyway), let's make life easier by resolving via
eglGetProcAddress, which is the right approach in any case.
Change-Id: I73f7698b638691d97743a6f819bc7c8ee6ebd245
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
|
|\|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
examples/wayland/pure-qml/main.cpp
examples/wayland/pure-qml/qml/Chrome.qml
examples/wayland/pure-qml/qml/main.qml
src/client/qwaylanddnd_p.h
src/compositor/compositor_api/qwaylandquicksurface.cpp
src/compositor/compositor_api/qwaylandsurface_p.h
src/compositor/compositor_api/qwaylandsurfaceitem.cpp
src/compositor/extensions/qwlinputmethodcontext_p.h
src/compositor/hardware_integration/qwlclientbufferintegration_p.h
src/compositor/hardware_integration/qwlclientbufferintegrationfactory_p.h
src/compositor/hardware_integration/qwlclientbufferintegrationplugin_p.h
src/compositor/hardware_integration/qwlhwintegration_p.h
src/compositor/hardware_integration/qwlserverbufferintegrationfactory_p.h
src/compositor/hardware_integration/qwlserverbufferintegrationplugin_p.h
src/compositor/wayland_wrapper/qwlcompositor_p.h
src/compositor/wayland_wrapper/qwldatadevice_p.h
src/compositor/wayland_wrapper/qwldatadevicemanager_p.h
src/compositor/wayland_wrapper/qwldatasource_p.h
src/compositor/wayland_wrapper/qwlextendedsurface_p.h
src/compositor/wayland_wrapper/qwlinputdevice_p.h
src/compositor/wayland_wrapper/qwlinputmethod_p.h
src/compositor/wayland_wrapper/qwlinputpanel_p.h
src/compositor/wayland_wrapper/qwlinputpanelsurface_p.h
src/compositor/wayland_wrapper/qwlkeyboard.cpp
src/compositor/wayland_wrapper/qwlkeyboard_p.h
src/compositor/wayland_wrapper/qwloutput_p.h
src/compositor/wayland_wrapper/qwlpointer_p.h
src/compositor/wayland_wrapper/qwlregion_p.h
src/compositor/wayland_wrapper/qwlshellsurface_p.h
src/compositor/wayland_wrapper/qwlsubsurface_p.h
src/compositor/wayland_wrapper/qwlsurface.cpp
src/compositor/wayland_wrapper/qwlsurface_p.h
src/compositor/wayland_wrapper/qwltextinput_p.h
src/compositor/wayland_wrapper/qwltextinputmanager_p.h
src/compositor/wayland_wrapper/qwltouch_p.h
src/compositor/windowmanagerprotocol/waylandwindowmanagerintegration_p.h
src/imports/compositor/WaylandCursorItem.qml
Change-Id: I4e63ef295b297022d4970b3c68b3d565843086bd
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When hiding a window we attach a NULL buffer, which means that any
frame callback that is still waiting will not be sent. In the SHM
case we just destroy it, but we cannot do that in the EGL case, since
we don't have a hold of it. So destroy the EGLSurface, which will
in turn destroy the callback.
Task-number: QTBUG-46921
Change-Id: I20e0d1ca7b53fb88096101d46979996dd944d429
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
|
|/
|
|
| |
Change-Id: I09f34fe3ea6bb3b57e49c63284f48d8af908ec1a
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This occurs for example when a Qt Quick2 application calls
showFullScreen() while a rendering is already in progress.
The GUI thread was calling destroyEglSurfaces() from setGeometry() and
thus destroying the buffers, while the render thread was trying to use
the buffers from swapBuffers().
There was a division by zero in swapBuffers() with the modulo m_count
operation, because EGL surfaces were destroyed and m_count was 0.
This fix is quite fragile, proper locking on buffers would be better.
Change-Id: I41fcb2fcebec84c0dfc82ce56c6e323d3722b30a
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
|
|
|
|
|
| |
Change-Id: I0c6b59eb9d59d6db4a71811562cdf740bfb0a06e
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
|
|
|
|
|
|
|
|
|
|
| |
They were not destroyed until the client quit, so this could be
significant after many resize operations.
This was also leaked server-side as a result.
Change-Id: If9b84a06e3f9c79af92a949bc67e81ef9e00a230
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
|
|
|
|
|
|
|
|
|
| |
eglBindAPI's docs says "defines the current rendering API for EGL in the
thread it is called from". We were instead just calling it in the thread
the context was created in, not in the thread used for rendering.
Change-Id: Iba8ffe75a6f4f8b9d1bba59c0e7cce34499e9c48
Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
|
|\
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
src/client/qwaylandshmbackingstore.cpp
src/client/qwaylandwindow.cpp
Change-Id: I795fd08f0fc5d3cb5ed55bf16e724f66b7567723
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Include wayland-client.h to disambiguate between QtWaylandClient::wl_registry
and wl_registry.
Change-Id: Idf33fd56a6b2c2436f5cbabc953980d05826ebba
Reviewed-by: Olivier Blin <qt@blino.org>
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Qt copyrights are now in The Qt Company, so we could update the source
code headers accordingly. In the same go we should also fix the links to
point to qt.io.
Change-Id: I5a74d32515c3f1fe7aa1916f4241c92832510f8c
Reviewed-by: Antti Kokko <antti.kokko@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
There currently is a QWaylandInputDevice class both in the wayland QPA
plugin and in the QtCompositor API. This causes the qwindow-compositor
example to crash when running nested in a wayland session due to a
mismatch between the two classes.
By namespacing all the plugin code we make sure that name clashes
will not happen anymore.
Change-Id: I17497cff697599200bea68bf01dfde474526390f
Reviewed-by: Jørgen Lind <jorgen.lind@theqtcompany.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Wayland 1.2 added support for display scaling, where wl_output
has a "scale" event informing the the client that the compositor
will scale the output surfaces by the given factor. The client
then has the option of providing large surfaces to match the
target pixel densety and bypass the compositor's scaling. This
is done by calling wl_surface::set_buffer_scale.
Re-use the current high-dpi support in Qt by implementing
devicePixelRatio() for QWaylandScreen and QWaylandWindow.
Provide high resolution buffers both for raster and OpenGL
graphics.
Introduce a new coordinate system: buffer coordinates, which
is related to the window coordinate system via an "int scale"
scale factor. This scale factor corresponds to Qts qreal
devicePixelRatio, but we keep the name and the type in the
QtWayland implementation.
Change-Id: Ie10d7e5b4833480a9a25d96a26ad02150eb6e83f
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
|
|/
|
|
|
|
|
|
|
| |
The native resource getters that are supported by eglfs will have to be
supported by the wayland platform plugin too. (on wayland-egl at least)
Change-Id: Ibbab649c04785dbde177342c45b9bc6f1edd954d
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
Reviewed-by: Andras Becsi <andras.becsi@theqtcompany.com>
|
|
|
|
|
|
|
|
|
| |
Use the EGL_KHR_create_context extension if available to create modern gl
contexts. We disable window decorations on core profiles because that
mandates a VAO to be used.
Change-Id: Id6044e64f6736244ae9d593af4d68c4000a31de6
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
|
|
|
|
|
|
|
| |
This is in preparation for decoration plugins.
Change-Id: Idb322a7a5cbc2eb5bf2cce019073f9f4fb46297f
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
|
|
|
|
|
|
|
|
|
|
|
|
| |
You cannot have rounded corners with an alpha-less config. To make OpenGL
applications appearing with the correct decoration, alpha must be enabled.
With this fix the OpenGL apps' decoration will now look identical to the
SHM apps'.
Change-Id: I24431ddab63146f7f697c85277f00f41e5c55e85
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
|
|
|
|
|
| |
Change-Id: Id840ace3d762e47c0076745301e8012755077770
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
|
|
|
|
|
| |
Change-Id: Ibc8eae85219da044812d22967c46b4bebb5e27bf
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Custom client buffer integrations may not care about window decorations.
Setting QT_WAYLAND_DISABLE_WINDOWDECORATION is tedious and error-prone.
And it cannot be omitted since things like input events will be off if the
common client code thinks decorations are in use but the client buffer
integration does not render them at all.
Therefore add a supportsWindowDecoration() virtual in addition to the
environment variable.
Change-Id: If8f621182d5c230f4d8d679c050f5d27aed6c2fb
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In an attempt to make QOpenGLWidget and QQuickWidget working on Wayland.
Since Qt 5.3 all widget windows are of type RasterGLSurface (given that
the plugin reports this capability which wayland will, with this patch).
Such a window can behave either like a raster or an OpenGL window.
This concept maps badly to platform plugins that have a rigid separation
between raster and OpenGL platform window implementations. From now on,
the OpenGL window implementation, that is used pretty much always,
except for raw RasterSurface windows, must be prepared to behave like
a raster window too, which involves having a backingstore.
Change-Id: I0226704b8d5893843fcae68059c5fe9ad2f5e761
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
|
|
|
|
|
| |
Change-Id: I6a21f447f31e9eeeafed81275c33b0c2c79e1c8a
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
|
|
|
|
|
|
|
|
|
|
| |
Currently a global is bound with the version the interface has in the xml
file. This is a problem for apps that explicitly link to libwayland-client
because they may link to a newer libwayland, so the version of some interface
may be higher than the one that it is actually implemented.
Change-Id: Id0dbe6c0f1e05fe91954b9d8d9472d42d2053cdc
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The idea that swapBuffers() randomly changes the state is ridiculous and
breaks even Qt's own OpenGL examples. An application, that has full control
over its context and rendering, is not necessarily prepared for random state
changes in its context.
To overcome this, save and restore all the interesting state. This is fragile
and applications can break it in different ways by setting all sorts of
exotic state, esp. when using modern OpenGL. For GLES2 level stuff it should
be sufficient, though.
Change-Id: I52e7ba4072b241eb92f5f04b81d707ad5bc68f6d
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
That third parameter is dangerous and should never be set to true,
unless you know what you are doing. eglfs does not set this flag either.
Do the same in wayland-egl, otherwise certain context/window creation
patterns (in particular with QOffscrenSurface, which is often created with
an existing context's format()) will end up with incompatible contexts
and surfaces on systems that offer both 565 and 888 configs.
Long story short, setting the flag ignores the extra check in the EGL config
selection logic that ensures that you get a config you asked for, i.e. that
a 888 config will not be returned (unless there is no other choice) if 565
was explicitly requested in the input QSurfaceFormat.
The result is that we may get a 888 config even when explicitly asking for 565.
However asking for unspecified will give 565. In the QOffscreenSurface case
this means having an 565 context and a 888 window -> bad match.
Not setting the flag brings the expected behavior: not specifying the color buffer
sizes chooses the lower buffer size (565), explicitly specifying 565 chooses 565,
while explicitly specifying 888 prioritizes 888 configs.
Change-Id: Ia78086a9f255f2933cda7de4f5787d71d58a1356
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
|
|
|
|
|
|
|
|
|
|
| |
There is no reason we should be allocating and managing our own set of
window decorations. This is only going to add to the total texture
memory used and because it is managed as a shared GL resource, it
would have needed some care during cleanup to clean it up correctly.
Change-Id: I19651837da6b3dfde0f78a964982f3f67e577493
Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
|
|
|
|
|
| |
Change-Id: Id73f8ddffe00359f38c634fc88b1f81ac5638653
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
|
|
|
|
|
| |
Change-Id: I8b810e54531453b6a80250555c21bb0b1e6e76cc
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
|
|
|
|
|
|
|
| |
The API was changed by qtbase's af1e32426c50694c0e4c1c292aa5eeee3b38c7bc
Change-Id: I38ec8f1be5f5ffb4b93097ce4e72c9a61c9459d0
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
|
|
|
|
|
|
|
|
| |
After invalidateSurface() is called we don't want to recreate
the EGLSurface on setGeometry() until makeCurrent is called
Change-Id: Ide10ecf3bff40a01fa1ed249986a631c77c2bf63
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
|
|
|
|
|
| |
Change-Id: I0fb0dcdf9d9691bbda602a7cf6cd04ce2e094769
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
|
|
|
|
|
| |
Change-Id: I7f2a72ad1430d48f54565b3996b61260756f3edf
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
|
|
|
|
|
|
| |
Change-Id: Ifae97cc4538989bc45641bda5ce2ec8a7d8980ce
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
|
|
|
|
|
|
| |
Change-Id: I848a9f37f1b2e9616c3e5254a6329531e8eec825
Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com>
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
|
|
|
|
|
|
|
| |
wl_egl_windows must have both the width and height > 0 to be valid
Change-Id: I444f3732d9df3eabf12bbd966ac62093866b6926
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
|
|
|
|
|
|
|
|
|
| |
Add a hardwareintegration plugin to make Qt server side EGL buffers
shareable from the compositor to the client, such as what the
server-buffer example does.
Change-Id: I24558324d51202ca449b47b0ee395c8e81c10698
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
|
|
|
|
|
|
|
|
| |
If the context does not support the NPOTTextureRepeat (i.e. GL_OES_texture_npot extension), wrapping must be set to CLAMP_TO_EDGE to prevent invalid texture mapping.
Change-Id: I3ededccc14a32188986529c14fa91161fb383cfc
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
|
|
|
|
|
| |
Change-Id: I2de94481f7d3e109fdce7ca961f8969299cf5d9e
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
|
|
|
|
|
|
|
| |
Remove the removed argument from the EGL platform context constructor.
Change-Id: I6203d07c356f7191a698d8d5bc958923cbdc2d96
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
|
|
|
|
|
|
|
|
|
|
| |
The egl config should be calculated when creating the window, and
the format of it should be set accordingly. The format of the window
and the one of the context will then match if using the same format
as input.
Change-Id: Ie93735171d8945111a450263089e192919249b68
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
|
|\
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
src/client/hardwareintegration/qwaylandclientbufferintegrationplugin_p.h
src/client/hardwareintegration/qwaylandserverbufferintegrationplugin_p.h
src/compositor/hardware_integration/qwaylandclientbufferintegrationplugin.h
src/compositor/hardware_integration/qwaylandserverbufferintegrationplugin.h
src/plugins/hardwareintegration/client/brcm-egl/main.cpp
src/plugins/hardwareintegration/client/drm-egl-server/main.cpp
src/plugins/hardwareintegration/client/wayland-egl/main.cpp
src/plugins/hardwareintegration/client/xcomposite-egl/main.cpp
src/plugins/hardwareintegration/client/xcomposite-glx/main.cpp
src/plugins/hardwareintegration/compositor/brcm-egl/main.cpp
src/plugins/hardwareintegration/compositor/drm-egl-server/main.cpp
src/plugins/hardwareintegration/compositor/wayland-egl/main.cpp
src/plugins/hardwareintegration/compositor/xcomposite-egl/main.cpp
src/plugins/hardwareintegration/compositor/xcomposite-glx/main.cpp
Change-Id: I9a9b418075970dd334babc3590b9b0315c2afb0d
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Some EGL implementations resize the EGL buffers after eglSwapBuffers,
so we need to send the geometry change event after the swap, or else
the Qt window size and the physical buffer size will be different to
each other. Do not force this behavior though, but use it only when
the QT_WAYLAND_RESIZE_AFTER_SWAP environment variable is set.
Change-Id: I79e39442b3010c563a81d7c94e747a982e158fc1
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
|
| |
| |
| |
| |
| | |
Change-Id: I092eaebad40785a68c0c9c22201c9e2d39666ea9
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
|
| |
| |
| |
| |
| | |
Change-Id: I2a25c7d0b5019c30f31cba1f608a8731be6b1f10
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
There is no need to do attach/damage/commit on the gui thread, doing it
on whatever thread we are (e.g. the render thread of scenegraph) is fine.
There is no need for flushRequests() either which means the entire metacall
can be removed.
Change-Id: Ia2ecf7cacc97787e68a97dc6a02641653e072ed3
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
|
| |
| |
| |
| |
| |
| |
| | |
Still needs some renaming and verification, but this makes it compile at least
Change-Id: Ifb7fc68e8705f235bf0edf2ae9bb38274b693d3c
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
|
| |
| |
| |
| |
| |
| |
| | |
The hardware integrations needs to pick up the correct include path
Change-Id: I457028803d3a4086bff53be4aa91417c1b293623
Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
|