109 lines
3.6 KiB
Diff
109 lines
3.6 KiB
Diff
https://bugs.kde.org/show_bug.cgi?id=497691
|
|
https://github.com/qutebrowser/qutebrowser/issues/8534
|
|
https://bugreports.qt.io/browse/QTBUG-133570
|
|
https://codereview.qt-project.org/c/qt/qtwebengine/+/634920
|
|
--- a/src/core/configure/BUILD.root.gn.in
|
|
+++ b/src/core/configure/BUILD.root.gn.in
|
|
@@ -406,4 +406,5 @@
|
|
"//ui/base/x:gl",
|
|
"//ui/gfx/linux:gpu_memory_buffer_support_x11",
|
|
+ "//ui/gfx/x",
|
|
]
|
|
|
|
@@ -411,4 +412,6 @@
|
|
"//ui/ozone/platform/x11/gl_egl_utility_x11.cc",
|
|
"//ui/ozone/platform/x11/gl_egl_utility_x11.h",
|
|
+ "//ui/ozone/platform/x11/native_pixmap_egl_x11_binding.cc",
|
|
+ "//ui/ozone/platform/x11/native_pixmap_egl_x11_binding.h",
|
|
]
|
|
}
|
|
--- a/src/core/ozone/gl_ozone_angle_qt.cpp
|
|
+++ b/src/core/ozone/gl_ozone_angle_qt.cpp
|
|
@@ -1,5 +1,9 @@
|
|
-// Copyright (C) 2024 The Qt Company Ltd.
|
|
+// Copyright (C) 2025 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 2016 The Chromium Authors
|
|
+// Use of this source code is governed by a BSD-style license that can be
|
|
+// found in the LICENSE file.
|
|
+
|
|
#include "gl_ozone_angle_qt.h"
|
|
|
|
@@ -13,4 +17,6 @@
|
|
#if BUILDFLAG(IS_OZONE_X11)
|
|
#include "ozone_util_qt.h"
|
|
+
|
|
+#include "ui/ozone/platform/x11/native_pixmap_egl_x11_binding.h"
|
|
#endif
|
|
|
|
@@ -21,4 +27,32 @@
|
|
|
|
namespace ui {
|
|
+namespace {
|
|
+// Based on //ui/ozone/platform/x11/x11_surface_factory.cc
|
|
+enum class NativePixmapSupportType {
|
|
+ // Importing native pixmaps not supported.
|
|
+ kNone,
|
|
+
|
|
+ // Native pixmaps are imported directly into EGL using the
|
|
+ // EGL_EXT_image_dma_buf_import extension.
|
|
+ kDMABuf,
|
|
+
|
|
+ // Native pixmaps are first imported as X11 pixmaps using DRI3 and then into
|
|
+ // EGL.
|
|
+ kX11Pixmap,
|
|
+};
|
|
+
|
|
+NativePixmapSupportType GetNativePixmapSupportType()
|
|
+{
|
|
+ if (gl::GLSurfaceEGL::GetGLDisplayEGL()->ext->b_EGL_EXT_image_dma_buf_import)
|
|
+ return NativePixmapSupportType::kDMABuf;
|
|
+
|
|
+#if BUILDFLAG(IS_OZONE_X11)
|
|
+ if (NativePixmapEGLX11Binding::CanImportNativeGLXPixmap())
|
|
+ return NativePixmapSupportType::kX11Pixmap;
|
|
+#endif
|
|
+
|
|
+ return NativePixmapSupportType::kNone;
|
|
+}
|
|
+} // namespace
|
|
|
|
bool GLOzoneANGLEQt::LoadGLES2Bindings(const gl::GLImplementationParts & /*implementation*/)
|
|
@@ -74,5 +108,14 @@
|
|
bool GLOzoneANGLEQt::CanImportNativePixmap(gfx::BufferFormat format)
|
|
{
|
|
- return gl::GLSurfaceEGL::GetGLDisplayEGL()->ext->b_EGL_EXT_image_dma_buf_import;
|
|
+ switch (GetNativePixmapSupportType()) {
|
|
+ case NativePixmapSupportType::kDMABuf:
|
|
+ return NativePixmapEGLBinding::IsBufferFormatSupported(format);
|
|
+#if BUILDFLAG(IS_OZONE_X11)
|
|
+ case NativePixmapSupportType::kX11Pixmap:
|
|
+ return NativePixmapEGLX11Binding::IsBufferFormatSupported(format);
|
|
+#endif
|
|
+ default:
|
|
+ return false;
|
|
+ }
|
|
}
|
|
|
|
@@ -83,6 +126,17 @@
|
|
GLenum target, GLuint texture_id)
|
|
{
|
|
- return NativePixmapEGLBinding::Create(pixmap, plane_format, plane, plane_size, color_space,
|
|
- target, texture_id);
|
|
+ switch (GetNativePixmapSupportType()) {
|
|
+ case NativePixmapSupportType::kDMABuf:
|
|
+ return NativePixmapEGLBinding::Create(pixmap, plane_format, plane, plane_size, color_space,
|
|
+ target, texture_id);
|
|
+#if BUILDFLAG(IS_OZONE_X11)
|
|
+ case NativePixmapSupportType::kX11Pixmap:
|
|
+ return NativePixmapEGLX11Binding::Create(pixmap, plane_format, plane_size, target,
|
|
+ texture_id);
|
|
+#endif
|
|
+ default:
|
|
+ NOTREACHED();
|
|
+ return nullptr;
|
|
+ }
|
|
}
|
|
|