[vlc-commits] vulkan: add wayland platform

Alexandre Janniaux git at videolan.org
Sat Apr 11 09:13:27 CEST 2020


vlc | branch: master | Alexandre Janniaux <ajanni at videolabs.io> | Mon Apr  6 16:46:30 2020 +0200| [63c9e51025023912cadfc5f31b8b2786c7fe0142] | committer: Alexandre Janniaux

vulkan: add wayland platform

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=63c9e51025023912cadfc5f31b8b2786c7fe0142
---

 modules/video_output/vulkan/platform_wayland.c | 57 ++++++++++++++++++++++++++
 modules/video_output/wayland/Makefile.am       | 11 +++++
 2 files changed, 68 insertions(+)

diff --git a/modules/video_output/vulkan/platform_wayland.c b/modules/video_output/vulkan/platform_wayland.c
new file mode 100644
index 0000000000..2e96c00dde
--- /dev/null
+++ b/modules/video_output/vulkan/platform_wayland.c
@@ -0,0 +1,57 @@
+/**
+ * @file platform_wayland.c
+ * @brief Vulkan platform-specific code for Wayland
+ */
+/*****************************************************************************
+ * Copyright © 2020 VideoLabs
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#include "platform.h"
+
+int vlc_vk_InitPlatform(vlc_vk_t *vk)
+{
+    if (vk->window->type != VOUT_WINDOW_TYPE_WAYLAND)
+        return VLC_EGENERIC;
+
+    return VLC_SUCCESS;
+}
+
+void vlc_vk_ClosePlatform(vlc_vk_t *vk)
+{
+    VLC_UNUSED(vk);
+}
+
+const char * const vlc_vk_PlatformExt = VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME;
+
+int vlc_vk_CreateSurface(vlc_vk_t *vk)
+{
+    VkInstance vkinst = vk->instance->instance;
+
+    VkWaylandSurfaceCreateInfoKHR surface_info = {
+        .sType = VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR,
+        .display = vk->window->display.wl,
+        .surface = vk->window->handle.wl,
+    };
+
+    VkResult res = vkCreateWaylandSurfaceKHR(vkinst, &surface_info, NULL, &vk->surface);
+    if (res != VK_SUCCESS) {
+        msg_Err(vk, "Failed creating Wayland surface");
+        return VLC_EGENERIC;
+    }
+
+    return VLC_SUCCESS;
+}
diff --git a/modules/video_output/wayland/Makefile.am b/modules/video_output/wayland/Makefile.am
index 65dc2ad299..0bca46ea0f 100644
--- a/modules/video_output/wayland/Makefile.am
+++ b/modules/video_output/wayland/Makefile.am
@@ -73,6 +73,14 @@ libegl_wl_plugin_la_CPPFLAGS = $(AM_CPPFLAGS) -DUSE_PLATFORM_WAYLAND=1
 libegl_wl_plugin_la_CFLAGS = $(AM_CFLAGS) $(EGL_CFLAGS) $(WAYLAND_EGL_CFLAGS)
 libegl_wl_plugin_la_LIBADD = $(EGL_LIBS) $(WAYLAND_EGL_LIBS)
 
+libvk_wl_plugin_la_SOURCES = $(VULKAN_COMMONSOURCES) \
+	video_output/vulkan/surface.c \
+	video_output/vulkan/platform_wayland.c
+libvk_wl_plugin_la_CFLAGS = $(AM_CFLAGS) \
+	$(WAYLAND_CFLAGS) $(VULKAN_COMMONCFLAGS) \
+	-DVK_USE_PLATFORM_WAYLAND_KHR -DPLATFORM_NAME=Wayland
+libvk_wl_plugin_la_LIBADD = $(VULKAN_COMMONLIBS) $(WAYLAND_LIBS)
+
 if HAVE_WAYLAND
 BUILT_SOURCES += $(nodist_libwl_shm_plugin_la_SOURCES)
 vout_LTLIBRARIES += libwl_shm_plugin.la
@@ -82,4 +90,7 @@ vout_LTLIBRARIES += libxdg_shell_plugin.la
 if HAVE_EGL
 vout_LTLIBRARIES += libegl_wl_plugin.la
 endif
+if HAVE_VULKAN
+vout_LTLIBRARIES += libvk_wl_plugin.la
+endif
 endif



More information about the vlc-commits mailing list