diff options
Diffstat (limited to 'src/core/ozone/gl_surface_egl_qt.cpp')
-rw-r--r-- | src/core/ozone/gl_surface_egl_qt.cpp | 207 |
1 files changed, 31 insertions, 176 deletions
diff --git a/src/core/ozone/gl_surface_egl_qt.cpp b/src/core/ozone/gl_surface_egl_qt.cpp index 8e8e66f63..a0c120ac6 100644 --- a/src/core/ozone/gl_surface_egl_qt.cpp +++ b/src/core/ozone/gl_surface_egl_qt.cpp @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2018 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWebEngine 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$ -** -****************************************************************************/ +// Copyright (C) 2018 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only // Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be @@ -44,58 +8,60 @@ #include "gl_context_qt.h" #include "ozone/gl_surface_egl_qt.h" -#if !defined(OS_MACOSX) #include "ui/gl/egl_util.h" -#include "ui/gl/gl_surface_egl.h" +#include "ui/gl/gl_bindings.h" +#include "ui/gl/gl_display.h" +#include "ui/gl/gl_display_manager.h" #include "ui/gl/init/gl_factory.h" -// From ANGLE's egl/eglext.h. -#ifndef EGL_ANGLE_surface_d3d_texture_2d_share_handle -#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1 -#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200 -#endif +#if !BUILDFLAG(IS_MAC) && !BUILDFLAG(IS_WIN) using ui::GetLastEGLErrorString; -namespace gl{ +namespace gl { bool GLSurfaceEGLQt::g_egl_surfaceless_context_supported = false; bool GLSurfaceEGLQt::s_initialized = false; +GLSurfaceEGLQt::GLSurfaceEGLQt(gl::GLDisplayEGL *display, const gfx::Size& size) + : GLSurfaceQt(size), + m_surfaceBuffer(0) +{ +} + GLSurfaceEGLQt::~GLSurfaceEGLQt() { Destroy(); } -bool GLSurfaceEGLQt::InitializeOneOff() +gl::GLDisplay *GLSurfaceEGLQt::InitializeOneOff(gl::GpuPreference preference) { if (s_initialized) - return true; - - // Must be called before initializing the display. - g_driver_egl.InitializeClientExtensionBindings(); + return g_display; - g_display = GLContextHelper::getEGLDisplay(); - if (!g_display) { + auto *egl_display = GLDisplayManagerEGL::GetInstance()->GetDisplay(preference); + g_display = egl_display; + egl_display->SetDisplay(GLContextHelper::getEGLDisplay()); + if (!egl_display->GetDisplay()) { LOG(ERROR) << "GLContextHelper::getEGLDisplay() failed."; - return false; + return nullptr; } g_config = GLContextHelper::getEGLConfig(); if (!g_config) { LOG(ERROR) << "GLContextHelper::getEGLConfig() failed."; - return false; + return nullptr; } - if (!eglInitialize(g_display, NULL, NULL)) { + if (!eglInitialize(egl_display->GetDisplay(), NULL, NULL)) { LOG(ERROR) << "eglInitialize failed with error " << GetLastEGLErrorString(); - return false; + return nullptr; } - g_extensions = eglQueryString(g_display, EGL_EXTENSIONS); - g_egl_surfaceless_context_supported = ExtensionsContain(g_extensions, "EGL_KHR_surfaceless_context"); + g_extensions = eglQueryString(egl_display->GetDisplay(), EGL_EXTENSIONS); + g_egl_surfaceless_context_supported = ExtensionsContain(g_extensions.c_str(), "EGL_KHR_surfaceless_context"); if (g_egl_surfaceless_context_supported) { - scoped_refptr<GLSurface> surface = new GLSurfacelessQtEGL(gfx::Size(1, 1)); + scoped_refptr<GLSurface> surface = new GLSurfacelessQtEGL(egl_display, gfx::Size(1, 1)); gl::GLContextAttribs attribs; scoped_refptr<GLContext> context = init::CreateGLContext( NULL, surface.get(), attribs); @@ -111,11 +77,8 @@ bool GLSurfaceEGLQt::InitializeOneOff() } } - // Must be called after initializing the display. - g_driver_egl.InitializeExtensionBindings(); - s_initialized = true; - return true; + return egl_display; } bool GLSurfaceEGLQt::InitializeExtensionSettingsOneOff() @@ -123,99 +86,12 @@ bool GLSurfaceEGLQt::InitializeExtensionSettingsOneOff() return s_initialized; } -bool GLSurfaceEGL::InitializeExtensionSettingsOneOff() -{ - return GLSurfaceEGLQt::InitializeExtensionSettingsOneOff(); -} - -EGLDisplay GLSurfaceEGL::GetHardwareDisplay() -{ - return static_cast<EGLDisplay>(GLSurfaceQt::g_display); -} - -bool GLSurfaceEGL::IsCreateContextRobustnessSupported() -{ - return GLContextHelper::isCreateContextRobustnessSupported() && HasEGLExtension("EGL_EXT_create_context_robustness"); -} - -bool GLSurfaceEGL::IsCreateContextBindGeneratesResourceSupported() -{ - return false; -} - -bool GLSurfaceEGL::IsCreateContextWebGLCompatabilitySupported() -{ - return false; -} -bool GLSurfaceEGL::IsEGLSurfacelessContextSupported() -{ - return GLSurfaceEGLQt::g_egl_surfaceless_context_supported; -} -bool GLSurfaceEGL::IsEGLContextPrioritySupported() -{ - return false; -} - -bool GLSurfaceEGL::IsRobustResourceInitSupported() -{ - return false; -} - -bool GLSurfaceEGL::IsDisplayTextureShareGroupSupported() -{ - return false; -} - -bool GLSurfaceEGL::IsCreateContextClientArraysSupported() -{ - return false; -} - -bool GLSurfaceEGL::IsPixelFormatFloatSupported() -{ - return false; -} - -bool GLSurfaceEGL::IsANGLEFeatureControlSupported() -{ - return false; -} - -void GLSurfaceEGL::ShutdownOneOff() -{ -} - -const char* GLSurfaceEGL::GetEGLExtensions() -{ - return GLSurfaceQt::g_extensions; -} - -bool GLSurfaceEGL::HasEGLExtension(const char* name) -{ - return ExtensionsContain(GetEGLExtensions(), name); -} -bool GLSurfaceEGL::InitializeOneOff(gl::EGLDisplayPlatform /*native_display*/) -{ - return GLSurfaceEGLQt::InitializeOneOff(); -} - -bool GLSurfaceEGL::IsAndroidNativeFenceSyncSupported() -{ - return false; -} - -GLSurfaceEGLQt::GLSurfaceEGLQt(const gfx::Size& size) - : GLSurfaceQt(size), - m_surfaceBuffer(0) -{ -} - bool GLSurfaceEGLQt::Initialize(GLSurfaceFormat format) { Q_ASSERT(!m_surfaceBuffer); m_format = format; - EGLDisplay display = g_display; + EGLDisplay display = GLContextHelper::getEGLDisplay(); if (!display) { LOG(ERROR) << "Trying to create surface with invalid display."; return false; @@ -243,7 +119,7 @@ bool GLSurfaceEGLQt::Initialize(GLSurfaceFormat format) void GLSurfaceEGLQt::Destroy() { if (m_surfaceBuffer) { - if (!eglDestroySurface(g_display, m_surfaceBuffer)) + if (!eglDestroySurface(GLContextHelper::getEGLDisplay(), m_surfaceBuffer)) LOG(ERROR) << "eglDestroySurface failed with error " << GetLastEGLErrorString(); m_surfaceBuffer = 0; @@ -281,7 +157,7 @@ void* GLSurfaceEGLQt::GetHandle() return reinterpret_cast<void*>(m_surfaceBuffer); } -GLSurfacelessQtEGL::GLSurfacelessQtEGL(const gfx::Size& size) +GLSurfacelessQtEGL::GLSurfacelessQtEGL(GLDisplayEGL *display, const gfx::Size& size) : GLSurfaceQt(size) { } @@ -318,26 +194,5 @@ void* GLSurfacelessQtEGL::GetShareHandle() return NULL; } -std::string DriverEGL::GetPlatformExtensions() -{ - EGLDisplay display = GLContextHelper::getEGLDisplay(); - if (display == EGL_NO_DISPLAY) - return ""; - - DCHECK(g_driver_egl.fn.eglQueryStringFn); - const char* str = g_driver_egl.fn.eglQueryStringFn(display, EGL_EXTENSIONS); - return str ? std::string(str) : ""; -} -} // namespace gl -#else -namespace gl { -struct GL_EXPORT DriverEGL { - static std::string GetPlatformExtensions(); -}; - -std::string DriverEGL::GetPlatformExtensions() -{ - return ""; -} } // namespace gl -#endif // !defined(OS_MACOSX) +#endif // !BUILDFLAG(IS_MAC) && !BUILDFLAG(IS_WIN) |