From 93aa5399f177a2f07ebdf56c9736c6e3948a5466 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Tue, 15 Mar 2022 15:32:30 -0400 Subject: [PATCH] kopper: Define the driver interface The loader extension provides upcalls to get surface state (native resource and size) into the driver. The driver extension is called by a kopper-aware loader in preference to __DRI_SWRAST's createNewDrawable. Reviewed-by: Mike Blumenkrantz Part-of: --- include/kopper_interface.h | 103 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 include/kopper_interface.h diff --git a/include/kopper_interface.h b/include/kopper_interface.h new file mode 100644 index 0000000..1590616 --- /dev/null +++ b/include/kopper_interface.h @@ -0,0 +1,103 @@ +/* + * Copyright 2020 Red Hat, Inc. + * + * 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. + */ + +/* + * In principle this could all go in dri_interface.h, but: + * - I want type safety in here, but I don't want to require vulkan.h from + * dri_interface.h + * - I don't especially want this to be an interface outside of Mesa itself + * - Ideally dri_interface.h wouldn't even be a thing anymore + * + * So instead let's just keep this as a Mesa-internal detail. + */ + +#ifndef KOPPER_INTERFACE_H +#define KOPPER_INTERFACE_H + +#include +#include +#ifdef VK_USE_PLATFORM_XCB_KHR +#include +#include +#endif +#ifdef VK_USE_PLATFORM_WAYLAND_KHR +#include +#endif + +typedef struct __DRIkopperExtensionRec __DRIkopperExtension; +typedef struct __DRIkopperLoaderExtensionRec __DRIkopperLoaderExtension; + +/** + * This extension defines the core GL-atop-VK functionality. This is used by the + * zink driver to implement GL (or other APIs) natively atop Vulkan, without + * relying on a particular window system or DRI protocol. + */ +#define __DRI_KOPPER "DRI_Kopper" +#define __DRI_KOPPER_VERSION 1 + +struct kopper_surface; + +struct __DRIkopperExtensionRec { + __DRIextension base; + + /* This is called by a kopper-aware loader in preference to the one + * in __DRI_DRISW. The additional fourth argument sets whether the winsys + * drawable is a pixmap. This matters because swapchains correspond to + * on-screen surfaces (eg X11 window) and trying to create a swapchain for + * a pixmap is undefined. + */ + __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen, + const __DRIconfig *config, + void *loaderPrivate, + int pixmap); +}; + +/** + * Kopper loader extension. + */ + +struct kopper_loader_info { + union { + VkBaseOutStructure bos; +#ifdef VK_USE_PLATFORM_XCB_KHR + VkXcbSurfaceCreateInfoKHR xcb; +#endif +#ifdef VK_USE_PLATFORM_WAYLAND_KHR + VkWaylandSurfaceCreateInfoKHR wl; +#endif + }; + int has_alpha; +}; + +#define __DRI_KOPPER_LOADER "DRI_KopperLoader" +#define __DRI_KOPPER_LOADER_VERSION 0 +struct __DRIkopperLoaderExtensionRec { + __DRIextension base; + + /* Asks the loader to fill in VkWhateverSurfaceCreateInfo etc. */ + void (*SetSurfaceCreateInfo)(void *draw, struct kopper_loader_info *out); + /* Asks the loader to fill in the drawable's width and height */ + void (*GetDrawableInfo)(__DRIdrawable *draw, int *w, int *h, + void *closure); +}; +#endif /* KOPPER_INTERFACE_H */ -- 2.7.4