8#include <QtGui/private/qeglconvenience_p.h> 
    9#include "private/qeglfswindow_p.h" 
   10#include "private/qeglfscursor_p.h" 
   11#include <QLoggingCategory> 
   12#include <private/qmath_p.h> 
   20    qCDebug(qLcEglfsKmsDebug, 
"New DRM/KMS on EGLDevice integration created");
 
   26    format.setAlphaBufferSize(8);
 
   37    qCDebug(qLcEglfsKmsDebug, 
"Creating display");
 
   44        qWarning(
"EGL_EXT_platform_device not available, falling back to legacy path!");
 
   45        display = eglGetDisplay(nativeDisplay);
 
   49        qFatal(
"Could not get EGL display");
 
   53        qFatal(
"Could not initialize egl display");
 
   55    if (
Q_UNLIKELY(!eglBindAPI(EGL_OPENGL_ES_API)))
 
   56        qFatal(
"Failed to bind EGL_OPENGL_ES_API\n");
 
  101    qCDebug(qLcEglfsKmsDebug, 
"Creating stream");
 
  104    EGLint streamAttribs[3];
 
  105    int streamAttribCount = 0;
 
  107    if (fifoLength > 0) {
 
  109        streamAttribs[streamAttribCount++] = fifoLength;
 
  111    streamAttribs[streamAttribCount++] = EGL_NONE;
 
  115        qWarning(
"resetSurface: Couldn't create EGLStream for native window");
 
  124            qCDebug(qLcEglfsKmsDebug, 
"Using EGLStream FIFO mode with %d frames", 
count);
 
  126            qCDebug(qLcEglfsKmsDebug, 
"Using EGLStream mailbox mode");
 
  128        qCDebug(qLcEglfsKmsDebug, 
"Could not query number of EGLStream FIFO frames");
 
  136    qCDebug(qLcEglfsKmsDebug, 
"Output has %d layers", 
count);
 
  149    const uint32_t wantedId = !
output.wants_forced_plane ? 
output.crtc_id : 
output.forced_plane_id;
 
  150    qCDebug(qLcEglfsKmsDebug, 
"Searching for id: %d", wantedId);
 
  153    for (
int i = 0; 
i < actualCount; ++
i) {
 
  156            qCDebug(qLcEglfsKmsDebug, 
"  [%d] layer %p - crtc %d", 
i, 
layers[
i], (
int) 
id);
 
  160            qCDebug(qLcEglfsKmsDebug, 
"  [%d] layer %p - plane %d", 
i, 
layers[
i], (
int) 
id);
 
  169    if (!reqLayerIndex.
isEmpty()) {
 
  170        int idx = reqLayerIndex.
toInt();
 
  171        if (idx >= 0 && idx < 
layers.size()) {
 
  172            qCDebug(qLcEglfsKmsDebug, 
"EGLOutput layer index override = %d", idx);
 
  178        qWarning(
"resetSurface: Couldn't get EGLOutputLayer for native window");
 
  185        qWarning(
"resetSurface: Unable to connect stream");
 
  193    qCDebug(qLcEglfsKmsDebug, 
"Creating stream producer surface of size %dx%d", 
w, 
h);
 
  195    const EGLint stream_producer_attribs[] = {
 
  215        qFatal(
"Required extensions missing!");
 
  223        qFatal(
"Could not set up EGL device!");
 
  227        qFatal(
"Failed to query device name from EGLDevice");
 
  232bool QEglFSKmsEglDeviceIntegration::query_egl_device()
 
  236        qFatal(
"EGL_EXT_device_base missing");
 
  240        qWarning(
"eglQueryDevicesEXT failed: eglError: %x", eglGetError());
 
  247        qWarning(
"eglQueryDevicesEXT could not find any EGL devices");
 
  258        return new QEglFSCursor(
screen);
 
int toInt(bool *ok=nullptr, int base=10) const
Returns the byte array converted to an int using base base, which is ten by default.
bool isEmpty() const noexcept
Returns true if the byte array has size 0; otherwise returns false.
void initialize(EGLDisplay dpy)
PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC query_output_layer_attrib
PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC create_stream_producer_surface
PFNEGLQUERYSTREAMKHRPROC query_stream
PFNEGLCREATESTREAMKHRPROC create_stream
PFNEGLGETOUTPUTLAYERSEXTPROC get_output_layers
bool has_egl_platform_device
PFNEGLDESTROYSTREAMKHRPROC destroy_stream
PFNEGLQUERYDEVICESTRINGEXTPROC query_device_string
PFNEGLQUERYDEVICESEXTPROC query_devices
bool has_egl_stream_producer_eglsurface
PFNEGLSTREAMCONSUMEROUTPUTEXTPROC stream_consumer_output
bool has_egl_stream_consumer_egloutput
PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display
static EGLConfig chooseConfig(EGLDisplay display, const QSurfaceFormat &format)
EGLDisplay createDisplay(EGLNativeDisplayType nativeDisplay) override
friend class QEglFSKmsEglDeviceWindow
QEglFSWindow * createWindow(QWindow *window) const override
bool supportsPBuffers() const override
QSurfaceFormat surfaceFormatFor(const QSurfaceFormat &inputFormat) const override
QEglFSKmsEglDeviceIntegration()
EGLint surfaceType() const override
QPlatformCursor * createCursor(QPlatformScreen *screen) const override
QKmsDevice * createDevice() override
bool supportsSurfacelessContexts() const override
void invalidateSurface() override
Invalidates the window's surface by releasing its surface buffers.
QEglFSKmsEglDeviceWindow(QWindow *w, const QEglFSKmsEglDeviceIntegration *integration)
~QEglFSKmsEglDeviceWindow()
void resetSurface() override
EGLStreamKHR m_egl_stream
const QEglFSKmsEglDeviceIntegration * m_integration
QKmsScreenConfig * screenConfig() const
QSurfaceFormat surfaceFormatFor(const QSurfaceFormat &inputFormat) const override
QRect rawGeometry() const override
EGLDisplay display() const
void invalidateSurface() override
Invalidates the window's surface by releasing its surface buffers.
QEglFSScreen * screen() const override
constexpr int height() const noexcept
Returns the height of the rectangle.
constexpr int width() const noexcept
Returns the width of the rectangle.
struct wl_display * display
Combined button and popup list for selecting options.
QSurfaceFormat q_glFormatFromConfig(EGLDisplay display, const EGLConfig config, const QSurfaceFormat &referenceFormat)
#define EGL_NO_DEVICE_EXT
#define EGL_DRM_PLANE_EXT
#define EGL_DRM_DEVICE_FILE_EXT
#define EGL_STREAM_BIT_KHR
EGLDeviceEXT EGLint * num_devices
#define EGL_STREAM_FIFO_LENGTH_KHR
#define EGL_NO_OUTPUT_LAYER_EXT
typedef EGLDisplay(EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC)(EGLenum platform
const EGLAttrib EGLOutputLayerEXT * layers
#define EGL_PLATFORM_DEVICE_EXT
#define EGL_NO_STREAM_KHR
#define qCDebug(category,...)
GLfloat GLfloat GLfloat w
[0]
GLenum GLenum GLsizei count
GLint GLsizei GLsizei GLenum format
GLfloat GLfloat GLfloat GLfloat h
Q_CORE_EXPORT QByteArray qgetenv(const char *varName)
Q_CORE_EXPORT int qEnvironmentVariableIntValue(const char *varName, bool *ok=nullptr) noexcept
QT_BEGIN_NAMESPACE typedef uchar * output