Add X11 support for the DRIVE CX
The spec, added in 5.7.0, simply defined WIN_INTERFACE_CUSTOM, leading to the generic, non-X11 typedefs for the EGL native types. This is fine for the typical embedded use, but is not what is wanted when targeting xcb, and leads to disabling EGL-on-X support. Therefore, move the define into a comon header and let the individual libs decide by defining or not defining QT_EGL_NO_X11. This sets both MESA_EGL_NO_X11_HEADERS and WIN_INTERFACE_CUSTOM in qt_egl_p.h. This way Qt builds supporting all three of eglfs (DRM+EGLDevice), wayland, and xcb (EGL) can be generated out of the box. [ChangeLog][Platform Specific Changes][Linux] xcb with EGL and OpenGL ES, as well as eglfs with the eglfs_x11 backend, are now supported on DRIVE CX boards when using the linux-drive-cx-g++ device spec. Done-with: Louai Al-Khanji <louai.al-khanji@qt.io> Task-number: QTBUG-55140 Change-Id: I6f186d16612e170995e3bca1214bcabad59af08e Reviewed-by: Andy Nichols <andy.nichols@qt.io>bb10
parent
c35fef9d3b
commit
e694ced803
|
|
@ -10,6 +10,10 @@
|
|||
# -no-gcc-sysroot \
|
||||
# -opengl es2
|
||||
|
||||
# Note: This enables eglfs and wayland only. To enable xcb (with EGL
|
||||
# support) as well, add -qt-xcb and fix the SDK's X11 headers. See
|
||||
# QTBUG-55140.
|
||||
|
||||
include(../common/linux_device_pre.conf)
|
||||
|
||||
isEmpty(VIBRANTE_SDK_TOPDIR):error("You must pass -device-option VIBRANTE_SDK_TOPDIR=/path/to/sdk")
|
||||
|
|
@ -31,7 +35,10 @@ QMAKE_LFLAGS += \
|
|||
-Wl,-rpath-link,$$[QT_SYSROOT]/lib/aarch64-linux-gnu
|
||||
|
||||
DISTRO_OPTS += aarch64
|
||||
COMPILER_FLAGS += -mtune=cortex-a57.cortex-a53 -march=armv8-a -DWIN_INTERFACE_CUSTOM
|
||||
|
||||
# Do not define WIN_INTERFACE_CUSTOM here. It is suitable for drm and
|
||||
# wayland, but not X11. Leave it to qt_egl_p.h instead.
|
||||
COMPILER_FLAGS += -mtune=cortex-a57.cortex-a53 -march=armv8-a
|
||||
|
||||
EGLFS_DEVICE_INTEGRATION = eglfs_kms_egldevice
|
||||
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@
|
|||
#define QEGLNATIVECONTEXT_H
|
||||
|
||||
#include <QtCore/QMetaType>
|
||||
#include <EGL/egl.h>
|
||||
#include <QtPlatformSupport/private/qt_egl_p.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
contains(QT_CONFIG,egl) {
|
||||
HEADERS += \
|
||||
$$PWD/qeglconvenience_p.h \
|
||||
$$PWD/qeglstreamconvenience_p.h
|
||||
$$PWD/qeglstreamconvenience_p.h \
|
||||
$$PWD/qt_egl_p.h
|
||||
|
||||
SOURCES += \
|
||||
$$PWD/qeglconvenience.cpp \
|
||||
|
|
@ -15,8 +16,8 @@ contains(QT_CONFIG,egl) {
|
|||
$$PWD/qeglpbuffer.cpp
|
||||
}
|
||||
|
||||
# Avoid X11 header collision
|
||||
DEFINES += MESA_EGL_NO_X11_HEADERS
|
||||
# Avoid X11 header collision, use generic EGL native types
|
||||
DEFINES += QT_EGL_NO_X11
|
||||
|
||||
contains(QT_CONFIG,xlib) {
|
||||
HEADERS += \
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@
|
|||
#include <QtGui/QSurfaceFormat>
|
||||
#include <QtCore/QVector>
|
||||
#include <QtCore/QSizeF>
|
||||
#include <EGL/egl.h>
|
||||
#include <QtPlatformSupport/private/qt_egl_p.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
|
|
|
|||
|
|
@ -53,7 +53,6 @@
|
|||
|
||||
#include <qpa/qplatformoffscreensurface.h>
|
||||
#include <QtPlatformSupport/private/qeglplatformcontext_p.h>
|
||||
#include <EGL/egl.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@
|
|||
#include <qpa/qplatformwindow.h>
|
||||
#include <qpa/qplatformopenglcontext.h>
|
||||
#include <QtCore/QVariant>
|
||||
#include <EGL/egl.h>
|
||||
#include <QtPlatformSupport/private/qt_egl_p.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
|
|
|
|||
|
|
@ -52,8 +52,7 @@
|
|||
//
|
||||
|
||||
#include <qglobal.h>
|
||||
#include <EGL/egl.h>
|
||||
#include <EGL/eglext.h>
|
||||
#include <QtPlatformSupport/private/qt_egl_p.h>
|
||||
|
||||
// This provides runtime EGLDevice/Output/Stream support even when eglext.h in
|
||||
// the sysroot is not up-to-date.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,117 @@
|
|||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the QtGui module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** 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 https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://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 3 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL3 included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 3 requirements
|
||||
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 2.0 or (at your option) the GNU General
|
||||
** Public license version 3 or any later version approved by the KDE Free
|
||||
** Qt Foundation. The licenses are as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
|
||||
** https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QT_EGL_P_H
|
||||
#define QT_EGL_P_H
|
||||
|
||||
//
|
||||
// W A R N I N G
|
||||
// -------------
|
||||
//
|
||||
// This file is not part of the Qt API. It exists purely as an
|
||||
// implementation detail. This header file may change from version to
|
||||
// version without notice, or even be removed.
|
||||
//
|
||||
// We mean it.
|
||||
//
|
||||
|
||||
#ifdef QT_EGL_NO_X11
|
||||
# define MESA_EGL_NO_X11_HEADERS // MESA
|
||||
# define WIN_INTERFACE_CUSTOM // NV
|
||||
#endif // QT_EGL_NO_X11
|
||||
|
||||
#ifdef QT_EGL_WAYLAND
|
||||
# define WAYLAND // NV
|
||||
#endif // QT_EGL_WAYLAND
|
||||
|
||||
#include <EGL/egl.h>
|
||||
#include <EGL/eglext.h>
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
namespace QtInternal {
|
||||
|
||||
template <class FromType, class ToType>
|
||||
struct QtEglConverter
|
||||
{
|
||||
static inline ToType convert(FromType v)
|
||||
{ return v; }
|
||||
};
|
||||
|
||||
template <>
|
||||
struct QtEglConverter<uint32_t, uintptr_t>
|
||||
{
|
||||
static inline uintptr_t convert(uint32_t v)
|
||||
{ return v; }
|
||||
};
|
||||
|
||||
#if Q_PROCESSOR_WORDSIZE > 4
|
||||
template <>
|
||||
struct QtEglConverter<uintptr_t, uint32_t>
|
||||
{
|
||||
static inline uint32_t convert(uintptr_t v)
|
||||
{ return uint32_t(v); }
|
||||
};
|
||||
#endif
|
||||
|
||||
template <>
|
||||
struct QtEglConverter<uint32_t, void *>
|
||||
{
|
||||
static inline void *convert(uint32_t v)
|
||||
{ return reinterpret_cast<void *>(uintptr_t(v)); }
|
||||
};
|
||||
|
||||
template <>
|
||||
struct QtEglConverter<void *, uint32_t>
|
||||
{
|
||||
static inline uint32_t convert(void *v)
|
||||
{ return uintptr_t(v); }
|
||||
};
|
||||
|
||||
} // QtInternal
|
||||
|
||||
template <class ToType, class FromType>
|
||||
static inline ToType qt_egl_cast(FromType from)
|
||||
{ return QtInternal::QtEglConverter<FromType, ToType>::convert(from); }
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
#endif // QT_EGL_P_H
|
||||
|
|
@ -49,7 +49,7 @@
|
|||
#include <QtPlatformSupport/private/qeglplatformcontext_p.h>
|
||||
#include <QtPlatformSupport/private/qeglconvenience_p.h>
|
||||
|
||||
#include <EGL/egl.h>
|
||||
#include <QtPlatformSupport/private/qt_egl_p.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ CONFIG += egl
|
|||
LIBS += -lbcm_host
|
||||
QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF
|
||||
|
||||
# Avoid X11 header collision
|
||||
DEFINES += MESA_EGL_NO_X11_HEADERS
|
||||
# Avoid X11 header collision, use generic EGL native types
|
||||
DEFINES += QT_EGL_NO_X11
|
||||
|
||||
SOURCES += $$PWD/qeglfsbrcmmain.cpp \
|
||||
$$PWD/qeglfsbrcmintegration.cpp
|
||||
|
|
|
|||
|
|
@ -8,8 +8,8 @@ QT += core-private gui-private platformsupport-private eglfs_device_lib-private
|
|||
|
||||
INCLUDEPATH += $$PWD/../.. $$PWD/../eglfs_kms_support
|
||||
|
||||
# Avoid X11 header collision
|
||||
DEFINES += MESA_EGL_NO_X11_HEADERS
|
||||
# Avoid X11 header collision, use generic EGL native types
|
||||
DEFINES += QT_EGL_NO_X11
|
||||
|
||||
CONFIG += link_pkgconfig
|
||||
!contains(QT_CONFIG, no-pkg-config) {
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@ QT += core-private gui-private platformsupport-private eglfs_device_lib-private
|
|||
|
||||
INCLUDEPATH += $$PWD/../.. $$PWD/../eglfs_kms_support
|
||||
|
||||
DEFINES += MESA_EGL_NO_X11_HEADERS
|
||||
# Avoid X11 header collision, use generic EGL native types
|
||||
DEFINES += QT_EGL_NO_X11
|
||||
|
||||
CONFIG += link_pkgconfig
|
||||
!contains(QT_CONFIG, no-pkg-config) {
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@ QT += core-private gui-private platformsupport-private eglfs_device_lib-private
|
|||
|
||||
INCLUDEPATH += $$PWD/../..
|
||||
|
||||
# Avoid X11 header collision
|
||||
DEFINES += MESA_EGL_NO_X11_HEADERS
|
||||
# Avoid X11 header collision, use generic EGL native types
|
||||
DEFINES += QT_EGL_NO_X11
|
||||
|
||||
CONFIG += link_pkgconfig
|
||||
!contains(QT_CONFIG, no-pkg-config) {
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ TARGET = qeglfs-mali-integration
|
|||
|
||||
QT += core-private gui-private platformsupport-private eglfs_device_lib-private
|
||||
|
||||
# Avoid X11 header collision
|
||||
DEFINES += MESA_EGL_NO_X11_HEADERS
|
||||
# Avoid X11 header collision, use generic EGL native types
|
||||
DEFINES += QT_EGL_NO_X11
|
||||
|
||||
INCLUDEPATH += $$PWD/../..
|
||||
CONFIG += egl
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@ TARGET = qeglfs-x11-integration
|
|||
|
||||
QT += core-private gui-private platformsupport-private eglfs_device_lib-private
|
||||
|
||||
# Avoid X11 header collision
|
||||
DEFINES += MESA_EGL_NO_X11_HEADERS
|
||||
# Avoid X11 header collision, use generic EGL native types
|
||||
DEFINES += QT_EGL_NO_X11
|
||||
|
||||
INCLUDEPATH += $$PWD/../..
|
||||
|
||||
|
|
|
|||
|
|
@ -281,12 +281,12 @@ EGLNativeWindowType QEglFSX11Integration::createNativeWindow(QPlatformWindow *pl
|
|||
|
||||
xcb_flush(m_connection);
|
||||
|
||||
return m_window;
|
||||
return qt_egl_cast<EGLNativeWindowType>(m_window);
|
||||
}
|
||||
|
||||
void QEglFSX11Integration::destroyNativeWindow(EGLNativeWindowType window)
|
||||
{
|
||||
xcb_destroy_window(m_connection, window);
|
||||
xcb_destroy_window(m_connection, qt_egl_cast<xcb_window_t>(window));
|
||||
}
|
||||
|
||||
bool QEglFSX11Integration::hasCapability(QPlatformIntegration::Capability cap) const
|
||||
|
|
|
|||
|
|
@ -9,8 +9,8 @@ CONFIG += no_module_headers internal_module
|
|||
QT += core-private gui-private platformsupport-private
|
||||
LIBS += $$QMAKE_LIBS_DYNLOAD
|
||||
|
||||
# Avoid X11 header collision
|
||||
DEFINES += MESA_EGL_NO_X11_HEADERS
|
||||
# Avoid X11 header collision, use generic EGL native types
|
||||
DEFINES += QT_EGL_NO_X11
|
||||
|
||||
DEFINES += QT_BUILD_EGL_DEVICE_LIB
|
||||
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@
|
|||
#define Q_EGLFS_EXPORT Q_DECL_IMPORT
|
||||
#endif
|
||||
|
||||
#include <EGL/egl.h>
|
||||
#include <QtPlatformSupport/private/qt_egl_p.h>
|
||||
#undef Status
|
||||
#undef None
|
||||
#undef Bool
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@ QT += core-private gui-private platformsupport-private
|
|||
|
||||
#DEFINES += Q_OPENKODE
|
||||
|
||||
#Avoid X11 header collision
|
||||
DEFINES += MESA_EGL_NO_X11_HEADERS
|
||||
# Avoid X11 header collision, use generic EGL native types
|
||||
DEFINES += QT_EGL_NO_X11
|
||||
|
||||
SOURCES = main.cpp \
|
||||
qminimaleglintegration.cpp \
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@
|
|||
#include <QtGui/QOpenGLContext>
|
||||
#include <QtGui/QScreen>
|
||||
|
||||
#include <EGL/egl.h>
|
||||
#include <QtPlatformSupport/private/qt_egl_p.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@
|
|||
|
||||
#include <QtCore/QTextStream>
|
||||
|
||||
#include <EGL/egl.h>
|
||||
#include <QtPlatformSupport/private/qt_egl_p.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@
|
|||
#include <QtGui/private/qcssparser_p.h>
|
||||
#include <QtGui/private/qtextengine_p.h>
|
||||
|
||||
#include <EGL/egl.h>
|
||||
#include <QtPlatformSupport/private/qt_egl_p.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@
|
|||
#include <QtGui/private/qguiapplication_p.h>
|
||||
|
||||
#ifdef XCB_USE_EGL
|
||||
#include <EGL/egl.h>
|
||||
# include <QtPlatformSupport/private/qt_egl_p.h>
|
||||
#endif
|
||||
|
||||
#ifdef XCB_USE_XLIB
|
||||
|
|
|
|||
Loading…
Reference in New Issue