turnip: add x11 wsi
authorJonathan Marek <jonathan@marek.ca>
Wed, 13 Nov 2019 22:02:43 +0000 (17:02 -0500)
committerJonathan Marek <jonathan@marek.ca>
Mon, 18 Nov 2019 22:18:05 +0000 (22:18 +0000)
Copied from radv

Signed-off-by: Jonathan Marek <jonathan@marek.ca>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/freedreno/vulkan/meson.build
src/freedreno/vulkan/tu_wsi_x11.c [new file with mode: 0644]

index e57a24c00c9ae4d012819cd42cff8048a837ebf0..e280334147621ef165930dfcfde0f8607143dbfe 100644 (file)
@@ -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 (file)
index 0000000..180e504
--- /dev/null
@@ -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);
+}