Diff
Modified: trunk/ChangeLog (230561 => 230562)
--- trunk/ChangeLog 2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/ChangeLog 2018-04-12 08:19:35 UTC (rev 230562)
@@ -1,3 +1,12 @@
+2018-04-12 Zan Dobersek <zdober...@igalia.com>
+
+ [WPE] Switch testing process to using WPEBackend-fdo
+ https://bugs.webkit.org/show_bug.cgi?id=184357
+
+ Reviewed by Carlos Alberto Lopez Perez.
+
+ * Source/cmake/FindWPEBackend-fdo.cmake: Renamed from Source/cmake/FindWPEBackend-mesa.cmake.
+
2018-04-11 Thibault Saunier <tsaun...@igalia.com>
[GStreamer] Use of playbin3 when USE_PLAYBIN3 environment variable is set
Added: trunk/Source/cmake/FindWPEBackend-fdo.cmake (0 => 230562)
--- trunk/Source/cmake/FindWPEBackend-fdo.cmake (rev 0)
+++ trunk/Source/cmake/FindWPEBackend-fdo.cmake 2018-04-12 08:19:35 UTC (rev 230562)
@@ -0,0 +1,47 @@
+# - Try to find WPEBackend-fdo.
+# Once done, this will define
+#
+# WPEBACKEND_FDO_FOUND - system has WPEBackend-fdo.
+# WPEBACKEND_FDO_INCLUDE_DIRS - the WPEBackend-fdo include directories
+# WPEBACKEND_FDO_LIBRARIES - link these to use WPEBackend-fdo.
+#
+# Copyright (C) 2016 Igalia S.L.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS
+# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+find_package(PkgConfig)
+pkg_check_modules(PC_WPEBACKEND_FDO QUIET wpebackend-fdo)
+
+find_path(WPEBACKEND_FDO_INCLUDE_DIRS
+ NAMES wpe-fdo/initialize-egl.h
+ HINTS ${PC_WPEBACKEND_FDO_INCLUDEDIR} ${PC_WPEBACKEND_FDO_INCLUDE_DIRS}
+)
+
+find_library(WPEBACKEND_FDO_LIBRARIES
+ NAMES WPEBackend-fdo
+ HINTS ${PC_WPEBACKEND_FDO_LIBDIR} ${PC_WPEBACKEND_FDO_LIBRARY_DIRS}
+)
+
+mark_as_advanced(WPEBACKEND_FDO_INCLUDE_DIRS WPEBACKEND_FDO_LIBRARIES)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(WPEBackend-fdo REQUIRED_VARS WPEBACKEND_FDO_INCLUDE_DIRS WPEBACKEND_FDO_LIBRARIES)
Deleted: trunk/Source/cmake/FindWPEBackend-mesa.cmake (230561 => 230562)
--- trunk/Source/cmake/FindWPEBackend-mesa.cmake 2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Source/cmake/FindWPEBackend-mesa.cmake 2018-04-12 08:19:35 UTC (rev 230562)
@@ -1,47 +0,0 @@
-# - Try to find WPE-mesa.
-# Once done, this will define
-#
-# WPE_MESA_FOUND - system has WPE-mesa.
-# WPE_MESA_INCLUDE_DIRS - the WPE-mesa include directories
-# WPE_MESA_LIBRARIES - link these to use WPE-mesa.
-#
-# Copyright (C) 2016 Igalia S.L.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS
-# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-find_package(PkgConfig)
-pkg_check_modules(PC_WPE_MESA QUIET wpe-mesa)
-
-find_path(WPE_MESA_INCLUDE_DIRS
- NAMES wpe-mesa/view-backend-exportable-dma-buf.h
- HINTS ${PC_WPE_MESA_INCLUDEDIR} ${PC_WPE_MESA_INCLUDE_DIRS}
-)
-
-find_library(WPE_MESA_LIBRARIES
- NAMES WPEBackend-mesa
- HINTS ${PC_WPE_MESA_LIBDIR} ${PC_WPE_MESA_LIBRARY_DIRS}
-)
-
-mark_as_advanced(WPE_MESA_INCLUDE_DIRS WPE_MESA_LIBRARIES)
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(WPEBackend-mesa REQUIRED_VARS WPE_MESA_INCLUDE_DIRS WPE_MESA_LIBRARIES)
Modified: trunk/Tools/ChangeLog (230561 => 230562)
--- trunk/Tools/ChangeLog 2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/ChangeLog 2018-04-12 08:19:35 UTC (rev 230562)
@@ -1,3 +1,51 @@
+2018-04-12 Zan Dobersek <zdober...@igalia.com>
+
+ [WPE] Switch testing process to using WPEBackend-fdo
+ https://bugs.webkit.org/show_bug.cgi?id=184357
+
+ Reviewed by Carlos Alberto Lopez Perez.
+
+ Switch WPE testing to using the WPEBackend-fdo implementation that
+ depends on the WL_bind_wayland_display EGL extension, as defined under
+ the freedesktop.org project.
+ https://cgit.freedesktop.org/mesa/mesa/tree/docs/specs/WL_bind_wayland_display.spec
+
+ HeadlessViewBackend is refactored to use the WPEBackend-fdo API, but
+ otherwise is not changed in functionality.
+
+ Unit tests now have to unconditionally use HeadlessViewBackend as a
+ wpe_view_backend provider, since WPEBackend-fdo does not provide a
+ default wpe_view_backend implementation. Unit tests covering that are
+ adjusted to instead use a mock wpe_view_backend interface.
+
+ * Scripts/webkitdirs.pm:
+ (builtDylibPathForName): Fix the libWPEWebKit.so name to also include
+ the API version that was added in r230449.
+ * Scripts/webkitpy/port/waylanddriver.py:
+ (WaylandDriver._setup_environ_for_test): Export EGL_PLATFORM=wayland.
+ * Scripts/webkitpy/port/wpe.py:
+ (WPEPort._driver_class): Use WaylandDriver by default.
+ * TestWebKitAPI/PlatformWebView.h:
+ (): Deleted.
+ * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
+ (testWebViewWebBackend):
+ * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
+ (Test::createWebViewBackend):
+ * TestWebKitAPI/wpe/PlatformWebViewWPE.cpp:
+ (TestWebKitAPI::PlatformWebView::~PlatformWebView):
+ (TestWebKitAPI::PlatformWebView::initialize):
+ * wpe/HeadlessViewBackend/CMakeLists.txt:
+ * wpe/HeadlessViewBackend/HeadlessViewBackend.cpp:
+ (getEGLDisplay):
+ (HeadlessViewBackend::HeadlessViewBackend):
+ (HeadlessViewBackend::~HeadlessViewBackend):
+ (HeadlessViewBackend::backend const):
+ (HeadlessViewBackend::createSnapshot):
+ (HeadlessViewBackend::performUpdate):
+ (HeadlessViewBackend::makeCurrent): Deleted.
+ * wpe/HeadlessViewBackend/HeadlessViewBackend.h:
+ * wpe/jhbuild.modules: Module name cleanup. Dyz version is bumped.
+
2018-04-12 Carlos Garcia Campos <cgar...@igalia.com>
[GTK] Switch to use always complex text code path
Modified: trunk/Tools/Scripts/webkitdirs.pm (230561 => 230562)
--- trunk/Tools/Scripts/webkitdirs.pm 2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/Scripts/webkitdirs.pm 2018-04-12 08:19:35 UTC (rev 230562)
@@ -1036,7 +1036,7 @@
}
}
if (isWPE()) {
- return "$configurationProductDir/lib/libWPEWebKit.so";
+ return "$configurationProductDir/lib/libWPEWebKit-0.1.so";
}
die "Unsupported platform, can't determine built library locations.\nTry `build-webkit --help` for more information.\n";
Modified: trunk/Tools/Scripts/webkitpy/port/waylanddriver.py (230561 => 230562)
--- trunk/Tools/Scripts/webkitpy/port/waylanddriver.py 2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/Scripts/webkitpy/port/waylanddriver.py 2018-04-12 08:19:35 UTC (rev 230562)
@@ -49,6 +49,7 @@
self._port._copy_value_from_environ_if_set(driver_environment, 'WAYLAND_DISPLAY')
self._port._copy_value_from_environ_if_set(driver_environment, 'WAYLAND_SOCKET')
driver_environment['GDK_BACKEND'] = 'wayland'
+ driver_environment['EGL_PLATFORM'] = 'wayland'
driver_environment['LOCAL_RESOURCE_ROOT'] = self._port.layout_tests_dir()
if self._driver_tempdir is not None:
driver_environment['DUMPRENDERTREE_TEMP'] = str(self._driver_tempdir)
Modified: trunk/Tools/Scripts/webkitpy/port/wpe.py (230561 => 230562)
--- trunk/Tools/Scripts/webkitpy/port/wpe.py 2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/Scripts/webkitpy/port/wpe.py 2018-04-12 08:19:35 UTC (rev 230562)
@@ -66,9 +66,7 @@
@memoized
def _driver_class(self):
- if self._display_server == "wayland":
- return WaylandDriver
- return HeadlessDriver
+ return WaylandDriver
def setup_environ_for_server(self, server_name=None):
environment = super(WPEPort, self).setup_environ_for_server(server_name)
Modified: trunk/Tools/TestWebKitAPI/PlatformWebView.h (230561 => 230562)
--- trunk/Tools/TestWebKitAPI/PlatformWebView.h 2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/TestWebKitAPI/PlatformWebView.h 2018-04-12 08:19:35 UTC (rev 230562)
@@ -88,9 +88,6 @@
PlatformWKView m_view;
PlatformWindow m_window;
-#if PLATFORM(WPE)
- struct wpe_view_backend* m_backend { nullptr };
-#endif
};
} // namespace TestWebKitAPI
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp (230561 => 230562)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp 2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp 2018-04-12 08:19:35 UTC (rev 230562)
@@ -108,8 +108,19 @@
#if PLATFORM(WPE)
static void testWebViewWebBackend(Test* test, gconstpointer)
{
+ static struct wpe_view_backend_interface s_testingInterface = {
+ // create
+ [](void*, struct wpe_view_backend*) -> void* { return nullptr; },
+ // destroy
+ [](void*) { },
+ // initialize
+ [](void*) { },
+ // get_renderer_host_fd
+ [](void*) -> int { return -1; }
+ };
+
// User provided backend with default deleter (we don't have a way to check the backend will be actually freed).
- GRefPtr<WebKitWebView> webView = adoptGRef(webkit_web_view_new(webkit_web_view_backend_new(wpe_view_backend_create(), nullptr, nullptr)));
+ GRefPtr<WebKitWebView> webView = adoptGRef(webkit_web_view_new(webkit_web_view_backend_new(wpe_view_backend_create_with_backend_interface(&s_testingInterface, nullptr), nullptr, nullptr)));
test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webView.get()));
auto* viewBackend = webkit_web_view_get_backend(webView.get());
g_assert(viewBackend);
@@ -118,7 +129,7 @@
webView = nullptr;
// User provided backend with destroy notify.
- wpeBackend = wpe_view_backend_create();
+ wpeBackend = wpe_view_backend_create_with_backend_interface(&s_testingInterface, nullptr);
webView = adoptGRef(webkit_web_view_new(webkit_web_view_backend_new(wpeBackend, [](gpointer userData) {
auto* backend = *static_cast<struct wpe_view_backend**>(userData);
wpe_view_backend_destroy(backend);
@@ -145,7 +156,7 @@
struct wpe_view_backend* backend;
};
- auto* owner = new BackendOwner(wpe_view_backend_create());
+ auto* owner = new BackendOwner(wpe_view_backend_create_with_backend_interface(&s_testingInterface, nullptr));
g_assert(hasInstance);
webView = adoptGRef(webkit_web_view_new(webkit_web_view_backend_new(owner->backend, [](gpointer userData) {
delete static_cast<BackendOwner*>(userData);
Modified: trunk/Tools/TestWebKitAPI/glib/WebKitGLib/TestMain.h (230561 => 230562)
--- trunk/Tools/TestWebKitAPI/glib/WebKitGLib/TestMain.h 2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/TestWebKitAPI/glib/WebKitGLib/TestMain.h 2018-04-12 08:19:35 UTC (rev 230562)
@@ -143,11 +143,6 @@
#if PLATFORM(WPE)
static WebKitWebViewBackend* createWebViewBackend()
{
- const char* useHeadlessViewBackend = g_getenv("WPE_USE_HEADLESS_VIEW_BACKEND");
- if (!useHeadlessViewBackend || !strcmp(useHeadlessViewBackend, "0")) {
- auto* backend = wpe_view_backend_create();
- return webkit_web_view_backend_new(backend, reinterpret_cast<GDestroyNotify>(wpe_view_backend_destroy), backend);
- }
auto* headlessBackend = new HeadlessViewBackend;
return webkit_web_view_backend_new(headlessBackend->backend(), [](gpointer userData) {
delete static_cast<HeadlessViewBackend*>(userData);
Modified: trunk/Tools/TestWebKitAPI/wpe/PlatformWebViewWPE.cpp (230561 => 230562)
--- trunk/Tools/TestWebKitAPI/wpe/PlatformWebViewWPE.cpp 2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/TestWebKitAPI/wpe/PlatformWebViewWPE.cpp 2018-04-12 08:19:35 UTC (rev 230562)
@@ -61,21 +61,13 @@
PlatformWebView::~PlatformWebView()
{
- if (m_backend)
- wpe_view_backend_destroy(m_backend);
-
delete m_window;
}
void PlatformWebView::initialize(WKPageConfigurationRef configuration)
{
- const char* useHeadlessViewBackend = g_getenv("WPE_USE_HEADLESS_VIEW_BACKEND");
- if (useHeadlessViewBackend && strcmp(useHeadlessViewBackend, "0"))
- m_window = new HeadlessViewBackend;
- else
- m_backend = wpe_view_backend_create();
-
- m_view = WKViewCreate(m_window ? m_window->backend() : m_backend, configuration);
+ m_window = new HeadlessViewBackend;
+ m_view = WKViewCreate(m_window->backend(), configuration);
}
WKPageRef PlatformWebView::page() const
Modified: trunk/Tools/wpe/HeadlessViewBackend/CMakeLists.txt (230561 => 230562)
--- trunk/Tools/wpe/HeadlessViewBackend/CMakeLists.txt 2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/wpe/HeadlessViewBackend/CMakeLists.txt 2018-04-12 08:19:35 UTC (rev 230562)
@@ -1,5 +1,5 @@
find_package(LibGBM REQUIRED)
-find_package(WPEBackend-mesa REQUIRED)
+find_package(WPEBackend-fdo REQUIRED)
set(WPEHeadlessViewBackend_SOURCES
${TOOLS_DIR}/wpe/HeadlessViewBackend/HeadlessViewBackend.cpp
@@ -9,7 +9,7 @@
${CAIRO_INCLUDE_DIRS}
${GLIB_INCLUDE_DIRS}
${LIBGBM_INCLUDE_DIRS}
- ${WPE_MESA_INCLUDE_DIRS}
+ ${WPEBACKEND_FDO_INCLUDE_DIRS}
)
set(WPEHeadlessViewBackend_LIBRARIES
@@ -16,7 +16,7 @@
${CAIRO_LIBRARIES}
${GLIB_LIBRARIES}
${LIBGBM_LIBRARIES}
- ${WPE_MESA_LIBRARIES}
+ ${WPEBACKEND_FDO_LIBRARIES}
)
add_library(WPEHeadlessViewBackend ${WPEHeadlessViewBackend_SOURCES})
Modified: trunk/Tools/wpe/HeadlessViewBackend/HeadlessViewBackend.cpp (230561 => 230562)
--- trunk/Tools/wpe/HeadlessViewBackend/HeadlessViewBackend.cpp 2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/wpe/HeadlessViewBackend/HeadlessViewBackend.cpp 2018-04-12 08:19:35 UTC (rev 230562)
@@ -28,6 +28,7 @@
#include <cassert>
#include <fcntl.h>
#include <unistd.h>
+#include <wpe-fdo/initialize-egl.h>
// Manually provide the EGL_CAST C++ definition in case eglplatform.h doesn't provide it.
#ifndef EGL_CAST
@@ -37,20 +38,11 @@
// Keep this in sync with wtf/glib/RunLoopSourcePriority.h.
static int kRunLoopSourcePriorityDispatcher = -70;
-// FIXME: Deploy good practices and clean up GBM resources at process exit.
static EGLDisplay getEGLDisplay()
{
static EGLDisplay s_display = EGL_NO_DISPLAY;
if (s_display == EGL_NO_DISPLAY) {
- int fd = open("/dev/dri/renderD128", O_RDWR | O_CLOEXEC | O_NOCTTY | O_NONBLOCK);
- if (fd < 0)
- return EGL_NO_DISPLAY;
-
- struct gbm_device* device = gbm_create_device(fd);
- if (!device)
- return EGL_NO_DISPLAY;
-
- EGLDisplay display = eglGetDisplay(device);
+ EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
if (display == EGL_NO_DISPLAY)
return EGL_NO_DISPLAY;
@@ -60,6 +52,7 @@
if (!eglBindAPI(EGL_OPENGL_ES_API))
return EGL_NO_DISPLAY;
+ wpe_fdo_initialize_for_egl_display(display);
s_display = display;
}
@@ -99,9 +92,10 @@
m_egl.createImage = reinterpret_cast<PFNEGLCREATEIMAGEKHRPROC>(eglGetProcAddress("eglCreateImageKHR"));
m_egl.destroyImage = reinterpret_cast<PFNEGLDESTROYIMAGEKHRPROC>(eglGetProcAddress("eglDestroyImageKHR"));
+ m_egl.queryBuffer = reinterpret_cast<PFNEGLQUERYWAYLANDBUFFERWL>(eglGetProcAddress("eglQueryWaylandBufferWL"));
m_egl.imageTargetTexture2DOES = reinterpret_cast<PFNGLEGLIMAGETARGETTEXTURE2DOESPROC>(eglGetProcAddress("glEGLImageTargetTexture2DOES"));
- m_exportable = wpe_mesa_view_backend_exportable_dma_buf_create(&s_exportableClient, this);
+ m_exportable = wpe_view_backend_exportable_fdo_create(&s_exportableClient, this, 800, 600);
m_updateSource = g_timeout_source_new(m_frameRate / 1000);
g_source_set_callback(m_updateSource,
@@ -116,8 +110,10 @@
HeadlessViewBackend::~HeadlessViewBackend()
{
- if (m_updateSource)
+ if (m_updateSource) {
g_source_destroy(m_updateSource);
+ g_source_unref(m_updateSource);
+ }
if (auto image = std::get<0>(m_pendingImage.second))
m_egl.destroyImage(m_egl.display, image);
@@ -124,21 +120,15 @@
if (auto image = std::get<0>(m_lockedImage.second))
m_egl.destroyImage(m_egl.display, image);
- for (auto it : m_exportMap) {
- int fd = it.second;
- if (fd >= 0)
- close(fd);
- }
-
if (m_egl.context)
eglDestroyContext(m_egl.display, m_egl.context);
- wpe_mesa_view_backend_exportable_dma_buf_destroy(m_exportable);
+ wpe_view_backend_exportable_fdo_destroy(m_exportable);
}
struct wpe_view_backend* HeadlessViewBackend::backend() const
{
- return wpe_mesa_view_backend_exportable_dma_buf_get_view_backend(m_exportable);
+ return wpe_view_backend_exportable_fdo_get_view_backend(m_exportable);
}
cairo_surface_t* HeadlessViewBackend::createSnapshot()
@@ -155,7 +145,8 @@
uint8_t* buffer = new uint8_t[4 * width * height];
bool successfulSnapshot = false;
- makeCurrent();
+ if (!eglMakeCurrent(m_egl.display, EGL_NO_SURFACE, EGL_NO_SURFACE, m_egl.context))
+ return nullptr;
GLuint imageTexture;
glGenTextures(1, &imageTexture);
@@ -203,57 +194,42 @@
return imageSurface;
}
-bool HeadlessViewBackend::makeCurrent()
-{
- return eglMakeCurrent(m_egl.display, EGL_NO_SURFACE, EGL_NO_SURFACE, m_egl.context);
-}
-
void HeadlessViewBackend::performUpdate()
{
if (!m_pendingImage.first)
return;
- wpe_mesa_view_backend_exportable_dma_buf_dispatch_frame_complete(m_exportable);
+ wpe_view_backend_exportable_fdo_dispatch_frame_complete(m_exportable);
if (m_lockedImage.first) {
- wpe_mesa_view_backend_exportable_dma_buf_dispatch_release_buffer(m_exportable, m_lockedImage.first);
+ wpe_view_backend_exportable_fdo_dispatch_release_buffer(m_exportable, m_lockedImage.first);
m_egl.destroyImage(m_egl.display, std::get<0>(m_lockedImage.second));
}
m_lockedImage = m_pendingImage;
- m_pendingImage = std::pair<uint32_t, std::tuple<EGLImageKHR, uint32_t, uint32_t>> { };
+ m_pendingImage = std::pair<struct wl_resource*, std::tuple<EGLImageKHR, uint32_t, uint32_t>> { };
}
-struct wpe_mesa_view_backend_exportable_dma_buf_client HeadlessViewBackend::s_exportableClient = {
- // export_dma_buf
- [](void* data, struct wpe_mesa_view_backend_exportable_dma_buf_data* imageData)
+struct wpe_view_backend_exportable_fdo_client HeadlessViewBackend::s_exportableClient = {
+ // export_buffer_resource
+ [](void* data, struct wl_resource* bufferResource)
{
auto& backend = *static_cast<HeadlessViewBackend*>(data);
+ if (backend.m_pendingImage.first)
+ std::abort();
- auto it = backend.m_exportMap.end();
- if (imageData->fd >= 0) {
- assert(backend.m_exportMap.find(imageData->handle) == backend.m_exportMap.end());
+ auto& egl = backend.m_egl;
- it = backend.m_exportMap.insert({ imageData->handle, imageData->fd }).first;
- } else {
- assert(backend.m_exportMap.find(imageData->handle) != backend.m_exportMap.end());
- it = backend.m_exportMap.find(imageData->handle);
- }
+ EGLint format = 0;
+ if (!egl.queryBuffer(egl.display, bufferResource, EGL_TEXTURE_FORMAT, &format) || format != EGL_TEXTURE_RGBA)
+ return;
- assert(it != backend.m_exportMap.end());
- int32_t fd = it->second;
+ EGLint width, height;
+ if (!egl.queryBuffer(egl.display, bufferResource, EGL_WIDTH, &width)
+ || !egl.queryBuffer(egl.display, bufferResource, EGL_HEIGHT, &height))
+ return;
- backend.makeCurrent();
-
- EGLint attributes[] = {
- EGL_WIDTH, static_cast<EGLint>(imageData->width),
- EGL_HEIGHT, static_cast<EGLint>(imageData->height),
- EGL_LINUX_DRM_FOURCC_EXT, static_cast<EGLint>(imageData->format),
- EGL_DMA_BUF_PLANE0_FD_EXT, fd,
- EGL_DMA_BUF_PLANE0_OFFSET_EXT, 0,
- EGL_DMA_BUF_PLANE0_PITCH_EXT, static_cast<EGLint>(imageData->stride),
- EGL_NONE,
- };
- EGLImageKHR image = backend.m_egl.createImage(backend.m_egl.display, EGL_NO_CONTEXT, EGL_LINUX_DMA_BUF_EXT, nullptr, attributes);
- backend.m_pendingImage = { imageData->handle, std::make_tuple(image, imageData->width, imageData->height) };
+ EGLint attributes[] = { EGL_WAYLAND_PLANE_WL, 0, EGL_NONE };
+ EGLImageKHR image = egl.createImage(egl.display, EGL_NO_CONTEXT, EGL_WAYLAND_BUFFER_WL, bufferResource, attributes);
+ backend.m_pendingImage = { bufferResource, std::make_tuple(image, width, height) };
},
};
Modified: trunk/Tools/wpe/HeadlessViewBackend/HeadlessViewBackend.h (230561 => 230562)
--- trunk/Tools/wpe/HeadlessViewBackend/HeadlessViewBackend.h 2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/wpe/HeadlessViewBackend/HeadlessViewBackend.h 2018-04-12 08:19:35 UTC (rev 230562)
@@ -32,8 +32,16 @@
#include <cairo.h>
#include <glib.h>
#include <unordered_map>
-#include <wpe-mesa/view-backend-exportable-dma-buf.h>
+#include <wpe-fdo/view-backend-exportable.h>
+#ifndef EGL_WL_bind_wayland_display
+#define EGL_WL_bind_wayland_display 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYWAYLANDBUFFERWL) (EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value);
+
+#define EGL_WAYLAND_BUFFER_WL 0x31D5 /* eglCreateImageKHR target */
+#define EGL_WAYLAND_PLANE_WL 0x31D6 /* eglCreateImageKHR target */
+#endif
+
class HeadlessViewBackend {
public:
HeadlessViewBackend();
@@ -44,26 +52,25 @@
cairo_surface_t* createSnapshot();
private:
- bool makeCurrent();
void performUpdate();
- static struct wpe_mesa_view_backend_exportable_dma_buf_client s_exportableClient;
+ static struct wpe_view_backend_exportable_fdo_client s_exportableClient;
struct {
EGLDisplay display;
EGLConfig config;
- EGLContext context;
+ EGLContext context { nullptr };
PFNEGLCREATEIMAGEKHRPROC createImage;
PFNEGLDESTROYIMAGEKHRPROC destroyImage;
+ PFNEGLQUERYWAYLANDBUFFERWL queryBuffer;
PFNGLEGLIMAGETARGETTEXTURE2DOESPROC imageTargetTexture2DOES;
} m_egl;
- struct wpe_mesa_view_backend_exportable_dma_buf* m_exportable;
+ struct wpe_view_backend_exportable_fdo* m_exportable;
- std::unordered_map<uint32_t, int32_t> m_exportMap;
- std::pair<uint32_t, std::tuple<EGLImageKHR, uint32_t, uint32_t>> m_pendingImage { };
- std::pair<uint32_t, std::tuple<EGLImageKHR, uint32_t, uint32_t>> m_lockedImage { };
+ std::pair<struct wl_resource*, std::tuple<EGLImageKHR, uint32_t, uint32_t>> m_pendingImage { };
+ std::pair<struct wl_resource*, std::tuple<EGLImageKHR, uint32_t, uint32_t>> m_lockedImage { };
GSource* m_updateSource;
gint64 m_frameRate { G_USEC_PER_SEC / 60 };
Modified: trunk/Tools/wpe/jhbuild.modules (230561 => 230562)
--- trunk/Tools/wpe/jhbuild.modules 2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/wpe/jhbuild.modules 2018-04-12 08:19:35 UTC (rev 230562)
@@ -19,8 +19,8 @@
<dep package="xkbcommon"/>
<dep package="webkit-gstreamer-testing-dependencies"/>
<dep package="woff2"/>
- <dep package="wpe"/>
- <dep package="wpe-mesa"/>
+ <dep package="wpebackend"/>
+ <dep package="wpebackend-fdo"/>
<dep package="libgpg-error"/>
<dep package="libgcrypt"/>
<dep package="libepoxy"/>
@@ -172,19 +172,19 @@
hash="sha1:7127993bfb69e13cdff25fb8b3c8f26ce6be5bfa"/>
</autotools>
- <cmake id="wpe">
+ <cmake id="wpebackend">
<branch repo="github.com" module="WebPlatformForEmbedded/WPEBackend.git"
tag="3013faaebab42e7ef7497b3850a2902978eb3d6f" />
</cmake>
- <cmake id="wpe-mesa">
+ <cmake id="wpebackend-fdo">
<dependencies>
- <dep package="wpe" />
- <dep package="glib" />
- <dep package="xkbcommon" />
+ <dep package="wpebackend"/>
+ <dep package="glib"/>
+ <dep package="xkbcommon"/>
</dependencies>
- <branch repo="github.com" module="WebPlatformForEmbedded/WPEBackend-mesa.git"
- tag="8e159832dc55164758f68fad02f52e6ad7c70642" />
+ <branch repo="github.com" module="Igalia/WPEBackend-fdo.git"
+ tag="064c60806422ff1bb32cef7fb1de68923aecba82"/>
</cmake>
<autotools id="libgpg-error" autogen-sh="configure">
@@ -213,7 +213,7 @@
</autotools>
<autotools id="dyz" supports-non-srcdir-builds="no">
- <branch repo="github.com" module="Igalia/dyz" tag="203a1ebd1481e44aa8105e862c02f317e6653627"/>
+ <branch repo="github.com" module="Igalia/dyz" tag="74a368cc63a0ff9bba675182affa3a3fd13aad80"/>
</autotools>
<meson id="graphene">