Support for Wayland servers on i.MX6
A wayland compositor on i.MX6 needs to create the wl_display before creating the EGL display. This wl_display then needs to be exposed so that QWaylandCompositor can use it. Change-Id: Id60f6dd2fbba05140ca0671da6f17dbc2ecce3a3 Reviewed-by: Laszlo Agocs <laszlo.agocs@theqtcompany.com>
This commit is contained in:
parent
ab1a5f1003
commit
317b9e9c5f
5
config.tests/qpa/wayland-server/wayland-server.pro
Normal file
5
config.tests/qpa/wayland-server/wayland-server.pro
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
SOURCES = wl.cpp
|
||||||
|
|
||||||
|
CONFIG -= qt
|
||||||
|
CONFIG += link_pkgconfig
|
||||||
|
PKGCONFIG += wayland-server
|
40
config.tests/qpa/wayland-server/wl.cpp
Normal file
40
config.tests/qpa/wayland-server/wl.cpp
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2015 The Qt Company Ltd.
|
||||||
|
** Contact: http://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the config.tests of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL21$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at http://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 or version 3 as published by the Free
|
||||||
|
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||||
|
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||||
|
** following information to ensure the GNU Lesser General Public License
|
||||||
|
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** As a special exception, The Qt Company gives you certain additional
|
||||||
|
** rights. These rights are described in The Qt Company LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <wayland-server.h>
|
||||||
|
|
||||||
|
int main(int, char **)
|
||||||
|
{
|
||||||
|
wl_display_create();
|
||||||
|
return 0;
|
||||||
|
}
|
10
configure
vendored
10
configure
vendored
@ -681,6 +681,7 @@ CFG_EGLFS_BRCM=no
|
|||||||
CFG_EGLFS_EGLDEVICE=no
|
CFG_EGLFS_EGLDEVICE=no
|
||||||
CFG_EGLFS_MALI=no
|
CFG_EGLFS_MALI=no
|
||||||
CFG_EGLFS_VIV=no
|
CFG_EGLFS_VIV=no
|
||||||
|
CFG_EGLFS_VIV_WL=no
|
||||||
CFG_DIRECTFB=auto
|
CFG_DIRECTFB=auto
|
||||||
CFG_GBM=auto
|
CFG_GBM=auto
|
||||||
CFG_LINUXFB=auto
|
CFG_LINUXFB=auto
|
||||||
@ -5776,6 +5777,11 @@ if [ "$CFG_EGLFS" != "no" ]; then
|
|||||||
else
|
else
|
||||||
CFG_EGLFS_VIV=no
|
CFG_EGLFS_VIV=no
|
||||||
fi
|
fi
|
||||||
|
if [ "$CFG_EGLFS_VIV" = "yes" ] && compileTest qpa/wayland-server "wayland-server"; then
|
||||||
|
CFG_EGLFS_VIV_WL=yes
|
||||||
|
else
|
||||||
|
CFG_EGLFS_VIV_WL=no
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
CFG_EGLFS="no"
|
CFG_EGLFS="no"
|
||||||
fi
|
fi
|
||||||
@ -6222,6 +6228,9 @@ if [ "$CFG_EGLFS_MALI" = "yes" ]; then
|
|||||||
fi
|
fi
|
||||||
if [ "$CFG_EGLFS_VIV" = "yes" ]; then
|
if [ "$CFG_EGLFS_VIV" = "yes" ]; then
|
||||||
QT_CONFIG="$QT_CONFIG eglfs_viv"
|
QT_CONFIG="$QT_CONFIG eglfs_viv"
|
||||||
|
if [ "$CFG_EGLFS_VIV_WL" = "yes" ]; then
|
||||||
|
QT_CONFIG="$QT_CONFIG eglfs_viv_wl"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# enable openvg
|
# enable openvg
|
||||||
@ -7299,6 +7308,7 @@ report_support " QPA backends:"
|
|||||||
report_support " DirectFB ............." "$CFG_DIRECTFB"
|
report_support " DirectFB ............." "$CFG_DIRECTFB"
|
||||||
report_support " EGLFS ................" "$CFG_EGLFS"
|
report_support " EGLFS ................" "$CFG_EGLFS"
|
||||||
report_support " EGLFS i.MX6 ........" "$CFG_EGLFS_VIV"
|
report_support " EGLFS i.MX6 ........" "$CFG_EGLFS_VIV"
|
||||||
|
report_support " EGLFS i.MX6 Wayland." "$CFG_EGLFS_VIV_WL"
|
||||||
report_support " EGLFS EGLDevice ...." "$CFG_EGLFS_EGLDEVICE"
|
report_support " EGLFS EGLDevice ...." "$CFG_EGLFS_EGLDEVICE"
|
||||||
report_support " EGLFS GBM .........." "$CFG_EGLFS_GBM"
|
report_support " EGLFS GBM .........." "$CFG_EGLFS_GBM"
|
||||||
report_support " EGLFS Mali ........." "$CFG_EGLFS_MALI"
|
report_support " EGLFS Mali ........." "$CFG_EGLFS_MALI"
|
||||||
|
@ -6,3 +6,4 @@ contains(QT_CONFIG, eglfs_egldevice): SUBDIRS += eglfs_kms_egldevice
|
|||||||
contains(QT_CONFIG, eglfs_brcm): SUBDIRS += eglfs_brcm
|
contains(QT_CONFIG, eglfs_brcm): SUBDIRS += eglfs_brcm
|
||||||
contains(QT_CONFIG, eglfs_mali): SUBDIRS += eglfs_mali
|
contains(QT_CONFIG, eglfs_mali): SUBDIRS += eglfs_mali
|
||||||
contains(QT_CONFIG, eglfs_viv): SUBDIRS += eglfs_viv
|
contains(QT_CONFIG, eglfs_viv): SUBDIRS += eglfs_viv
|
||||||
|
contains(QT_CONFIG, eglfs_viv_wl): SUBDIRS += eglfs_viv_wl
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"Keys": [ "eglfs_viv_wl" ]
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
TARGET = qeglfs-viv-wl-integration
|
||||||
|
|
||||||
|
PLUGIN_TYPE = egldeviceintegrations
|
||||||
|
PLUGIN_CLASS_NAME = QEglFSVivWaylandIntegrationPlugin
|
||||||
|
load(qt_plugin)
|
||||||
|
|
||||||
|
QT += core-private gui-private platformsupport-private eglfs_device_lib-private
|
||||||
|
|
||||||
|
INCLUDEPATH += $$PWD/../..
|
||||||
|
CONFIG += egl
|
||||||
|
DEFINES += LINUX=1 EGL_API_FB=1
|
||||||
|
LIBS += -lGAL
|
||||||
|
QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF
|
||||||
|
|
||||||
|
SOURCES += $$PWD/qeglfsvivwlmain.cpp \
|
||||||
|
$$PWD/qeglfsvivwlintegration.cpp
|
||||||
|
|
||||||
|
HEADERS += $$PWD/qeglfsvivwlintegration.h
|
||||||
|
|
||||||
|
OTHER_FILES += $$PWD/eglfs_viv_wl.json
|
||||||
|
|
||||||
|
CONFIG += link_pkgconfig
|
||||||
|
PKGCONFIG_PRIVATE += wayland-server
|
@ -0,0 +1,93 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2015 The Qt Company Ltd.
|
||||||
|
** Contact: http://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL21$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at http://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 or version 3 as published by the Free
|
||||||
|
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||||
|
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||||
|
** following information to ensure the GNU Lesser General Public License
|
||||||
|
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** As a special exception, The Qt Company gives you certain additional
|
||||||
|
** rights. These rights are described in The Qt Company LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "qeglfsvivwlintegration.h"
|
||||||
|
#include <EGL/eglvivante.h>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
#include <wayland-server.h>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
void QEglFSVivWaylandIntegration::platformInit()
|
||||||
|
{
|
||||||
|
QEGLDeviceIntegration::platformInit();
|
||||||
|
|
||||||
|
int width, height;
|
||||||
|
|
||||||
|
bool multiBufferNotEnabledYet = qEnvironmentVariableIsEmpty("FB_MULTI_BUFFER");
|
||||||
|
bool multiBuffer = qEnvironmentVariableIsEmpty("QT_EGLFS_IMX6_NO_FB_MULTI_BUFFER");
|
||||||
|
if (multiBufferNotEnabledYet && multiBuffer) {
|
||||||
|
qWarning() << "QEglFSVivWaylandIntegration will set environment variable FB_MULTI_BUFFER=2 to enable double buffering and vsync.\n"
|
||||||
|
<< "If this is not desired, you can override this via: export QT_EGLFS_IMX6_NO_FB_MULTI_BUFFER=1";
|
||||||
|
qputenv("FB_MULTI_BUFFER", "2");
|
||||||
|
}
|
||||||
|
|
||||||
|
mWaylandDisplay = wl_display_create();
|
||||||
|
mNativeDisplay = fbGetDisplay(mWaylandDisplay);
|
||||||
|
fbGetDisplayGeometry(mNativeDisplay, &width, &height);
|
||||||
|
mScreenSize.setHeight(height);
|
||||||
|
mScreenSize.setWidth(width);
|
||||||
|
}
|
||||||
|
|
||||||
|
QSize QEglFSVivWaylandIntegration::screenSize() const
|
||||||
|
{
|
||||||
|
return mScreenSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
EGLNativeDisplayType QEglFSVivWaylandIntegration::platformDisplay() const
|
||||||
|
{
|
||||||
|
return mNativeDisplay;
|
||||||
|
}
|
||||||
|
|
||||||
|
EGLNativeWindowType QEglFSVivWaylandIntegration::createNativeWindow(QPlatformWindow *window, const QSize &size, const QSurfaceFormat &format)
|
||||||
|
{
|
||||||
|
Q_UNUSED(window)
|
||||||
|
Q_UNUSED(format)
|
||||||
|
|
||||||
|
EGLNativeWindowType eglWindow = fbCreateWindow(mNativeDisplay, 0, 0, size.width(), size.height());
|
||||||
|
return eglWindow;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QEglFSVivWaylandIntegration::destroyNativeWindow(EGLNativeWindowType window)
|
||||||
|
{
|
||||||
|
fbDestroyWindow(window);
|
||||||
|
}
|
||||||
|
|
||||||
|
void *QEglFSVivWaylandIntegration::wlDisplay() const
|
||||||
|
{
|
||||||
|
return mWaylandDisplay;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
@ -0,0 +1,60 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2015 The Qt Company Ltd.
|
||||||
|
** Contact: http://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL21$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at http://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 or version 3 as published by the Free
|
||||||
|
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||||
|
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||||
|
** following information to ensure the GNU Lesser General Public License
|
||||||
|
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** As a special exception, The Qt Company gives you certain additional
|
||||||
|
** rights. These rights are described in The Qt Company LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef QEGLFSVIVINTEGRATION_H
|
||||||
|
#define QEGLFSVIVINTEGRATION_H
|
||||||
|
|
||||||
|
#include "qeglfsdeviceintegration.h"
|
||||||
|
struct wl_display;
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
class QEglFSVivWaylandIntegration : public QEGLDeviceIntegration
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void platformInit() Q_DECL_OVERRIDE;
|
||||||
|
QSize screenSize() const Q_DECL_OVERRIDE;
|
||||||
|
EGLNativeWindowType createNativeWindow(QPlatformWindow *window, const QSize &size, const QSurfaceFormat &format) Q_DECL_OVERRIDE;
|
||||||
|
void destroyNativeWindow(EGLNativeWindowType window) Q_DECL_OVERRIDE;
|
||||||
|
EGLNativeDisplayType platformDisplay() const Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
void *wlDisplay() const Q_DECL_OVERRIDE;
|
||||||
|
private:
|
||||||
|
QSize mScreenSize;
|
||||||
|
EGLNativeDisplayType mNativeDisplay;
|
||||||
|
wl_display *mWaylandDisplay;
|
||||||
|
};
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,50 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2015 The Qt Company Ltd.
|
||||||
|
** Contact: http://www.qt.io/licensing/
|
||||||
|
**
|
||||||
|
** This file is part of the plugins of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL21$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at http://www.qt.io/contact-us.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 or version 3 as published by the Free
|
||||||
|
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
|
||||||
|
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
|
||||||
|
** following information to ensure the GNU Lesser General Public License
|
||||||
|
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
|
||||||
|
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** As a special exception, The Qt Company gives you certain additional
|
||||||
|
** rights. These rights are described in The Qt Company LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "qeglfsdeviceintegration.h"
|
||||||
|
#include "qeglfsvivwlintegration.h"
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
class QEglFSVivWaylandIntegrationPlugin : public QEGLDeviceIntegrationPlugin
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_PLUGIN_METADATA(IID QEGLDeviceIntegrationFactoryInterface_iid FILE "eglfs_viv_wl.json")
|
||||||
|
|
||||||
|
public:
|
||||||
|
QEGLDeviceIntegration *create() Q_DECL_OVERRIDE { return new QEglFSVivWaylandIntegration; }
|
||||||
|
};
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
#include "qeglfsvivwlmain.moc"
|
@ -334,4 +334,9 @@ bool QEGLDeviceIntegration::supportsSurfacelessContexts() const
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *QEGLDeviceIntegration::wlDisplay() const
|
||||||
|
{
|
||||||
|
return Q_NULLPTR;
|
||||||
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -97,6 +97,8 @@ public:
|
|||||||
virtual int framebufferIndex() const;
|
virtual int framebufferIndex() const;
|
||||||
virtual bool supportsPBuffers() const;
|
virtual bool supportsPBuffers() const;
|
||||||
virtual bool supportsSurfacelessContexts() const;
|
virtual bool supportsSurfacelessContexts() const;
|
||||||
|
|
||||||
|
virtual void *wlDisplay() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Q_EGLFS_EXPORT QEGLDeviceIntegrationPlugin : public QObject
|
class Q_EGLFS_EXPORT QEGLDeviceIntegrationPlugin : public QObject
|
||||||
|
@ -251,7 +251,8 @@ enum ResourceType {
|
|||||||
EglContext,
|
EglContext,
|
||||||
EglConfig,
|
EglConfig,
|
||||||
NativeDisplay,
|
NativeDisplay,
|
||||||
XlibDisplay
|
XlibDisplay,
|
||||||
|
WaylandDisplay
|
||||||
};
|
};
|
||||||
|
|
||||||
static int resourceType(const QByteArray &key)
|
static int resourceType(const QByteArray &key)
|
||||||
@ -262,7 +263,8 @@ static int resourceType(const QByteArray &key)
|
|||||||
QByteArrayLiteral("eglcontext"),
|
QByteArrayLiteral("eglcontext"),
|
||||||
QByteArrayLiteral("eglconfig"),
|
QByteArrayLiteral("eglconfig"),
|
||||||
QByteArrayLiteral("nativedisplay"),
|
QByteArrayLiteral("nativedisplay"),
|
||||||
QByteArrayLiteral("display")
|
QByteArrayLiteral("display"),
|
||||||
|
QByteArrayLiteral("wl_display")
|
||||||
};
|
};
|
||||||
const QByteArray *end = names + sizeof(names) / sizeof(names[0]);
|
const QByteArray *end = names + sizeof(names) / sizeof(names[0]);
|
||||||
const QByteArray *result = std::find(names, end, key);
|
const QByteArray *result = std::find(names, end, key);
|
||||||
@ -282,6 +284,9 @@ void *QEglFSIntegration::nativeResourceForIntegration(const QByteArray &resource
|
|||||||
case NativeDisplay:
|
case NativeDisplay:
|
||||||
result = reinterpret_cast<void*>(nativeDisplay());
|
result = reinterpret_cast<void*>(nativeDisplay());
|
||||||
break;
|
break;
|
||||||
|
case WaylandDisplay:
|
||||||
|
result = qt_egl_device_integration()->wlDisplay();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user