Mesa (master): turnip: add x11 wsi

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Nov 18 22:18:28 UTC 2019


Module: Mesa
Branch: master
Commit: 3cd44839faa605590790a22d07123ec6d797c4ca
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=3cd44839faa605590790a22d07123ec6d797c4ca

Author: Jonathan Marek <jonathan at marek.ca>
Date:   Wed Nov 13 17:02:43 2019 -0500

turnip: add x11 wsi

Copied from radv

Signed-off-by: Jonathan Marek <jonathan at marek.ca>
Reviewed-by: Eric Anholt <eric at anholt.net>

---

 src/freedreno/vulkan/meson.build  |  14 ++++++
 src/freedreno/vulkan/tu_wsi_x11.c | 100 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 114 insertions(+)

diff --git a/src/freedreno/vulkan/meson.build b/src/freedreno/vulkan/meson.build
index e57a24c00c9..e2803341476 100644
--- a/src/freedreno/vulkan/meson.build
+++ b/src/freedreno/vulkan/meson.build
@@ -81,6 +81,15 @@ libtu_files = files(
 tu_deps = []
 tu_flags = []
 
+if with_platform_x11
+  tu_deps += dep_xcb_dri3
+  tu_flags += [
+    '-DVK_USE_PLATFORM_XCB_KHR',
+    '-DVK_USE_PLATFORM_XLIB_KHR',
+  ]
+  libtu_files += files('tu_wsi_x11.c')
+endif
+
 if with_platform_wayland
   tu_deps += dep_wayland_client
   tu_flags += '-DVK_USE_PLATFORM_WAYLAND_KHR'
@@ -92,6 +101,11 @@ if with_platform_drm
   libtu_files += files('tu_wsi_display.c')
 endif
 
+if with_xlib_lease
+  tu_deps += [dep_xcb_xrandr, dep_xlib_xrandr]
+  tu_flags += '-DVK_USE_PLATFORM_XLIB_XRANDR_EXT'
+endif
+
 libvulkan_freedreno = shared_library(
   'vulkan_freedreno',
   [libtu_files, tu_entrypoints, tu_extensions_c, tu_format_table_c, freedreno_xml_header_files],
diff --git a/src/freedreno/vulkan/tu_wsi_x11.c b/src/freedreno/vulkan/tu_wsi_x11.c
new file mode 100644
index 00000000000..180e504a043
--- /dev/null
+++ b/src/freedreno/vulkan/tu_wsi_x11.c
@@ -0,0 +1,100 @@
+/*
+ * Copyright © 2016 Red Hat.
+ * Copyright © 2016 Bas Nieuwenhuizen
+ *
+ * based mostly on anv driver which is:
+ * Copyright © 2015 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#include <X11/Xlib-xcb.h>
+#include <X11/xshmfence.h>
+#include <xcb/xcb.h>
+#include <xcb/dri3.h>
+#include <xcb/present.h>
+
+#include "wsi_common_x11.h"
+#include "tu_private.h"
+
+VkBool32 tu_GetPhysicalDeviceXcbPresentationSupportKHR(
+   VkPhysicalDevice                            physicalDevice,
+   uint32_t                                    queueFamilyIndex,
+   xcb_connection_t*                           connection,
+   xcb_visualid_t                              visual_id)
+{
+   TU_FROM_HANDLE(tu_physical_device, device, physicalDevice);
+
+   return wsi_get_physical_device_xcb_presentation_support(
+             &device->wsi_device,
+             queueFamilyIndex,
+             connection, visual_id);
+}
+
+VkBool32 tu_GetPhysicalDeviceXlibPresentationSupportKHR(
+   VkPhysicalDevice                            physicalDevice,
+   uint32_t                                    queueFamilyIndex,
+   Display*                                    dpy,
+   VisualID                                    visualID)
+{
+   TU_FROM_HANDLE(tu_physical_device, device, physicalDevice);
+
+   return wsi_get_physical_device_xcb_presentation_support(
+             &device->wsi_device,
+             queueFamilyIndex,
+             XGetXCBConnection(dpy), visualID);
+}
+
+VkResult tu_CreateXcbSurfaceKHR(
+   VkInstance                                  _instance,
+   const VkXcbSurfaceCreateInfoKHR*            pCreateInfo,
+   const VkAllocationCallbacks*                pAllocator,
+   VkSurfaceKHR*                               pSurface)
+{
+   TU_FROM_HANDLE(tu_instance, instance, _instance);
+   const VkAllocationCallbacks *alloc;
+   assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR);
+
+   if (pAllocator)
+      alloc = pAllocator;
+   else
+      alloc = &instance->alloc;
+
+   return wsi_create_xcb_surface(alloc, pCreateInfo, pSurface);
+}
+
+VkResult tu_CreateXlibSurfaceKHR(
+   VkInstance                                  _instance,
+   const VkXlibSurfaceCreateInfoKHR*           pCreateInfo,
+   const VkAllocationCallbacks*                pAllocator,
+   VkSurfaceKHR*                               pSurface)
+{
+   TU_FROM_HANDLE(tu_instance, instance, _instance);
+   const VkAllocationCallbacks *alloc;
+
+   assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR);
+
+   if (pAllocator)
+      alloc = pAllocator;
+   else
+      alloc = &instance->alloc;
+
+   return wsi_create_xlib_surface(alloc, pCreateInfo, pSurface);
+}




More information about the mesa-commit mailing list