xref: /aosp_15_r20/external/mesa3d/include/kopper_interface.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright 2020 Red Hat, Inc.
3*61046927SAndroid Build Coastguard Worker  *
4*61046927SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
5*61046927SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
6*61046927SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
7*61046927SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*61046927SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
9*61046927SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
10*61046927SAndroid Build Coastguard Worker  *
11*61046927SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice (including the next
12*61046927SAndroid Build Coastguard Worker  * paragraph) shall be included in all copies or substantial portions of the
13*61046927SAndroid Build Coastguard Worker  * Software.
14*61046927SAndroid Build Coastguard Worker  *
15*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*61046927SAndroid Build Coastguard Worker  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*61046927SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18*61046927SAndroid Build Coastguard Worker  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*61046927SAndroid Build Coastguard Worker  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20*61046927SAndroid Build Coastguard Worker  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21*61046927SAndroid Build Coastguard Worker  * DEALINGS IN THE SOFTWARE.
22*61046927SAndroid Build Coastguard Worker  */
23*61046927SAndroid Build Coastguard Worker 
24*61046927SAndroid Build Coastguard Worker /*
25*61046927SAndroid Build Coastguard Worker  * In principle this could all go in dri_interface.h, but:
26*61046927SAndroid Build Coastguard Worker  * - I want type safety in here, but I don't want to require vulkan.h from
27*61046927SAndroid Build Coastguard Worker  *   dri_interface.h
28*61046927SAndroid Build Coastguard Worker  * - I don't especially want this to be an interface outside of Mesa itself
29*61046927SAndroid Build Coastguard Worker  * - Ideally dri_interface.h wouldn't even be a thing anymore
30*61046927SAndroid Build Coastguard Worker  *
31*61046927SAndroid Build Coastguard Worker  * So instead let's just keep this as a Mesa-internal detail.
32*61046927SAndroid Build Coastguard Worker  */
33*61046927SAndroid Build Coastguard Worker 
34*61046927SAndroid Build Coastguard Worker #ifndef KOPPER_INTERFACE_H
35*61046927SAndroid Build Coastguard Worker #define KOPPER_INTERFACE_H
36*61046927SAndroid Build Coastguard Worker 
37*61046927SAndroid Build Coastguard Worker #include "mesa_interface.h"
38*61046927SAndroid Build Coastguard Worker #include <vulkan/vulkan_core.h>
39*61046927SAndroid Build Coastguard Worker 
40*61046927SAndroid Build Coastguard Worker typedef struct __DRIkopperExtensionRec          __DRIkopperExtension;
41*61046927SAndroid Build Coastguard Worker typedef struct __DRIkopperLoaderExtensionRec    __DRIkopperLoaderExtension;
42*61046927SAndroid Build Coastguard Worker typedef struct __DRIkopperDrawableInfoRec    __DRIkopperDrawableInfo;
43*61046927SAndroid Build Coastguard Worker 
44*61046927SAndroid Build Coastguard Worker /**
45*61046927SAndroid Build Coastguard Worker  * This extension defines the core GL-atop-VK functionality. This is used by the
46*61046927SAndroid Build Coastguard Worker  * zink driver to implement GL (or other APIs) natively atop Vulkan, without
47*61046927SAndroid Build Coastguard Worker  * relying on a particular window system or DRI protocol.
48*61046927SAndroid Build Coastguard Worker  */
49*61046927SAndroid Build Coastguard Worker #define __DRI_KOPPER "DRI_Kopper"
50*61046927SAndroid Build Coastguard Worker #define __DRI_KOPPER_VERSION 2
51*61046927SAndroid Build Coastguard Worker 
52*61046927SAndroid Build Coastguard Worker struct __DRIkopperDrawableInfoRec {
53*61046927SAndroid Build Coastguard Worker    bool multiplanes_available;
54*61046927SAndroid Build Coastguard Worker    int is_pixmap;
55*61046927SAndroid Build Coastguard Worker };
56*61046927SAndroid Build Coastguard Worker 
57*61046927SAndroid Build Coastguard Worker struct __DRIkopperExtensionRec {
58*61046927SAndroid Build Coastguard Worker     __DRIextension base;
59*61046927SAndroid Build Coastguard Worker 
60*61046927SAndroid Build Coastguard Worker     /* This is called by a kopper-aware loader in preference to the one
61*61046927SAndroid Build Coastguard Worker      * in __DRI_DRISW. The additional fourth argument sets whether the winsys
62*61046927SAndroid Build Coastguard Worker      * drawable is a pixmap. This matters because swapchains correspond to
63*61046927SAndroid Build Coastguard Worker      * on-screen surfaces (eg X11 window) and trying to create a swapchain for
64*61046927SAndroid Build Coastguard Worker      * a pixmap is undefined.
65*61046927SAndroid Build Coastguard Worker      */
66*61046927SAndroid Build Coastguard Worker     __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen,
67*61046927SAndroid Build Coastguard Worker                                         const __DRIconfig *config,
68*61046927SAndroid Build Coastguard Worker                                         void *loaderPrivate,
69*61046927SAndroid Build Coastguard Worker                                         __DRIkopperDrawableInfo *info);
70*61046927SAndroid Build Coastguard Worker     /* flags is a set of __DRI2_FLUSH_* flags */
71*61046927SAndroid Build Coastguard Worker     int64_t (*swapBuffers)(__DRIdrawable *draw, uint32_t flush_flags);
72*61046927SAndroid Build Coastguard Worker     void (*setSwapInterval)(__DRIdrawable *drawable, int interval);
73*61046927SAndroid Build Coastguard Worker     int (*queryBufferAge)(__DRIdrawable *drawable);
74*61046927SAndroid Build Coastguard Worker     int64_t (*swapBuffersWithDamage)(__DRIdrawable *draw, uint32_t flush_flags, int nrects, const int *rects);
75*61046927SAndroid Build Coastguard Worker };
76*61046927SAndroid Build Coastguard Worker 
77*61046927SAndroid Build Coastguard Worker /**
78*61046927SAndroid Build Coastguard Worker  * Kopper loader extension.
79*61046927SAndroid Build Coastguard Worker  */
80*61046927SAndroid Build Coastguard Worker 
81*61046927SAndroid Build Coastguard Worker /**
82*61046927SAndroid Build Coastguard Worker  * struct for storage the union of all platform depdendent
83*61046927SAndroid Build Coastguard Worker  * Vk*SurfaceCreateInfo* type, all platform Vk*SurfaceCreateInfo* contains
84*61046927SAndroid Build Coastguard Worker  * uint32_t flags and at most two extra pointer besides bos header.
85*61046927SAndroid Build Coastguard Worker  * For example:
86*61046927SAndroid Build Coastguard Worker  * VkWin32SurfaceCreateInfoKHR contains flags, hinstance and hwnd besides bos header
87*61046927SAndroid Build Coastguard Worker  */
88*61046927SAndroid Build Coastguard Worker 
89*61046927SAndroid Build Coastguard Worker struct kopper_vk_surface_create_storage {
90*61046927SAndroid Build Coastguard Worker    /* First two fields are copied from VkBaseOutStructure for easily access shared properties */
91*61046927SAndroid Build Coastguard Worker    VkStructureType sType;
92*61046927SAndroid Build Coastguard Worker    struct VkBaseOutStructure *pNext;
93*61046927SAndroid Build Coastguard Worker    intptr_t padding[3];
94*61046927SAndroid Build Coastguard Worker };
95*61046927SAndroid Build Coastguard Worker 
96*61046927SAndroid Build Coastguard Worker struct kopper_loader_info {
97*61046927SAndroid Build Coastguard Worker    struct kopper_vk_surface_create_storage bos;
98*61046927SAndroid Build Coastguard Worker    int has_alpha;
99*61046927SAndroid Build Coastguard Worker    int initial_swap_interval;
100*61046927SAndroid Build Coastguard Worker    bool present_opaque;
101*61046927SAndroid Build Coastguard Worker };
102*61046927SAndroid Build Coastguard Worker 
103*61046927SAndroid Build Coastguard Worker #define __DRI_KOPPER_LOADER "DRI_KopperLoader"
104*61046927SAndroid Build Coastguard Worker #define __DRI_KOPPER_LOADER_VERSION 0
105*61046927SAndroid Build Coastguard Worker struct __DRIkopperLoaderExtensionRec {
106*61046927SAndroid Build Coastguard Worker     __DRIextension base;
107*61046927SAndroid Build Coastguard Worker 
108*61046927SAndroid Build Coastguard Worker     /* Asks the loader to fill in VkWhateverSurfaceCreateInfo etc. */
109*61046927SAndroid Build Coastguard Worker     void (*SetSurfaceCreateInfo)(void *draw, struct kopper_loader_info *out);
110*61046927SAndroid Build Coastguard Worker     /* Asks the loader to fill in the drawable's width and height */
111*61046927SAndroid Build Coastguard Worker     void (*GetDrawableInfo)(__DRIdrawable *draw, int *w, int *h,
112*61046927SAndroid Build Coastguard Worker                             void *closure);
113*61046927SAndroid Build Coastguard Worker };
114*61046927SAndroid Build Coastguard Worker #endif /* KOPPER_INTERFACE_H */
115