summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Marek <jonathan@marek.ca>2019-11-13 17:02:43 -0500
committerJonathan Marek <jonathan@marek.ca>2019-11-18 22:18:05 +0000
commit3cd44839faa605590790a22d07123ec6d797c4ca (patch)
tree8e801f7a23b1bfb78b363e9bfbe168630d28ffda
parentdf9f2adfa3290ab04fc887af8f7f51cddcaabc3b (diff)
turnip: add x11 wsi
Copied from radv Signed-off-by: Jonathan Marek <jonathan@marek.ca> Reviewed-by: Eric Anholt <eric@anholt.net>
-rw-r--r--src/freedreno/vulkan/meson.build14
-rw-r--r--src/freedreno/vulkan/tu_wsi_x11.c100
2 files changed, 114 insertions, 0 deletions
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);
+}