summaryrefslogtreecommitdiffstats
path: root/src/core/ozone/gl_surface_egl_qt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/ozone/gl_surface_egl_qt.cpp')
-rw-r--r--src/core/ozone/gl_surface_egl_qt.cpp214
1 files changed, 21 insertions, 193 deletions
diff --git a/src/core/ozone/gl_surface_egl_qt.cpp b/src/core/ozone/gl_surface_egl_qt.cpp
index 9b3e0b8ad..a0c120ac6 100644
--- a/src/core/ozone/gl_surface_egl_qt.cpp
+++ b/src/core/ozone/gl_surface_egl_qt.cpp
@@ -8,168 +8,22 @@
#include "gl_context_qt.h"
#include "ozone/gl_surface_egl_qt.h"
-#if !defined(OS_MAC)
#include "ui/gl/egl_util.h"
#include "ui/gl/gl_bindings.h"
-#include "ui/gl/gl_surface_egl.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 {
-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;
-}
-
-bool GLSurfaceEGL::IsANGLEPowerPreferenceSupported()
-{
- return false;
-}
-
-bool GLSurfaceEGL::IsANGLEExternalContextAndSurfaceSupported()
-{
- return false;
-}
-
-bool GLSurfaceEGL::IsDisplaySemaphoreShareGroupSupported()
-{
- return false;
-}
-
-bool GLSurfaceEGL::IsRobustnessVideoMemoryPurgeSupported()
-{
- return false;
-}
-
-bool GLSurfaceEGL::IsANGLEContextVirtualizationSupported()
-{
- return false;
-}
-
-bool GLSurfaceEGL::IsANGLEVulkanImageClientBufferSupported()
-{
- return false;
-}
-
-bool GLSurfaceEGL::IsEGLQueryDeviceSupported()
-{
- return false;
-}
-
-void GLSurfaceEGL::ShutdownOneOff()
-{
-}
-
-const char *GLSurfaceEGL::GetEGLClientExtensions()
-{
- return GLSurfaceQt::g_client_extensions.c_str();
-}
-
-const char *GLSurfaceEGL::GetEGLExtensions()
-{
- return GLSurfaceQt::g_extensions.c_str();
-}
-
-bool GLSurfaceEGL::HasEGLClientExtension(const char *name)
-{
- return ExtensionsContain(GetEGLClientExtensions(), name);
-}
-
-bool GLSurfaceEGL::HasEGLExtension(const char *name)
-{
- return ExtensionsContain(GetEGLExtensions(), name);
-}
-
-bool GLSurfaceEGL::InitializeOneOff(gl::EGLDisplayPlatform /*native_display*/)
-{
- return GLSurfaceEGLQt::InitializeOneOff();
-}
-
-bool GLSurfaceEGL::IsEGLNoConfigContextSupported()
-{
- return false;
-}
-
-bool GLSurfaceEGL::IsAndroidNativeFenceSyncSupported()
-{
- return false;
-}
-
-DisplayType GLSurfaceEGL::GetDisplayType()
-{
- return DisplayType::DEFAULT;
-}
-
-GLSurface *GLSurfaceEGL::createSurfaceless(const gfx::Size& size)
-{
- return new GLSurfacelessQtEGL(size);
-}
-
bool GLSurfaceEGLQt::g_egl_surfaceless_context_supported = false;
bool GLSurfaceEGLQt::s_initialized = false;
-GLSurfaceEGLQt::GLSurfaceEGLQt(const gfx::Size& size)
+GLSurfaceEGLQt::GLSurfaceEGLQt(gl::GLDisplayEGL *display, const gfx::Size& size)
: GLSurfaceQt(size),
m_surfaceBuffer(0)
{
@@ -180,36 +34,34 @@ 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_client_extensions = eglQueryString(EGL_NO_DISPLAY, EGL_EXTENSIONS);
- g_extensions = eglQueryString(g_display, EGL_EXTENSIONS);
+ 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);
@@ -225,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()
@@ -242,7 +91,7 @@ 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;
@@ -270,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;
@@ -308,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)
{
}
@@ -345,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_MAC)
+#endif // !BUILDFLAG(IS_MAC) && !BUILDFLAG(IS_WIN)