xref: /aosp_15_r20/external/mesa3d/include/GL/mesa_glinterop.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Mesa 3-D graphics library
3*61046927SAndroid Build Coastguard Worker  *
4*61046927SAndroid Build Coastguard Worker  * Copyright 2016 Advanced Micro Devices, Inc.
5*61046927SAndroid Build Coastguard Worker  *
6*61046927SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
7*61046927SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
8*61046927SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
9*61046927SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10*61046927SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
11*61046927SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
12*61046927SAndroid Build Coastguard Worker  *
13*61046927SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice shall be included
14*61046927SAndroid Build Coastguard Worker  * in all copies or substantial portions of the Software.
15*61046927SAndroid Build Coastguard Worker  *
16*61046927SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17*61046927SAndroid Build Coastguard Worker  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18*61046927SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19*61046927SAndroid Build Coastguard Worker  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20*61046927SAndroid Build Coastguard Worker  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21*61046927SAndroid Build Coastguard Worker  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22*61046927SAndroid Build Coastguard Worker  * OTHER DEALINGS IN THE SOFTWARE.
23*61046927SAndroid Build Coastguard Worker  */
24*61046927SAndroid Build Coastguard Worker 
25*61046927SAndroid Build Coastguard Worker /* Mesa OpenGL inter-driver interoperability interface designed for but not
26*61046927SAndroid Build Coastguard Worker  * limited to OpenCL.
27*61046927SAndroid Build Coastguard Worker  *
28*61046927SAndroid Build Coastguard Worker  * This is a driver-agnostic, backward-compatible interface. The structures
29*61046927SAndroid Build Coastguard Worker  * are only allowed to grow. They can never shrink and their members can
30*61046927SAndroid Build Coastguard Worker  * never be removed, renamed, or redefined.
31*61046927SAndroid Build Coastguard Worker  *
32*61046927SAndroid Build Coastguard Worker  * The interface doesn't return a lot of static texture parameters like
33*61046927SAndroid Build Coastguard Worker  * width, height, etc. It mainly returns mutable buffer and texture view
34*61046927SAndroid Build Coastguard Worker  * parameters that can't be part of the texture allocation (because they are
35*61046927SAndroid Build Coastguard Worker  * mutable). If drivers want to return more data or want to return static
36*61046927SAndroid Build Coastguard Worker  * allocation parameters, they can do it in one of these two ways:
37*61046927SAndroid Build Coastguard Worker  * - attaching the data to the DMABUF handle in a driver-specific way
38*61046927SAndroid Build Coastguard Worker  * - passing the data via "out_driver_data" in the "in" structure.
39*61046927SAndroid Build Coastguard Worker  *
40*61046927SAndroid Build Coastguard Worker  * Mesa is expected to do a lot of error checking on behalf of OpenCL, such
41*61046927SAndroid Build Coastguard Worker  * as checking the target, miplevel, and texture completeness.
42*61046927SAndroid Build Coastguard Worker  *
43*61046927SAndroid Build Coastguard Worker  * OpenCL, on the other hand, needs to check if the display+context combo
44*61046927SAndroid Build Coastguard Worker  * is compatible with the OpenCL driver by querying the device information.
45*61046927SAndroid Build Coastguard Worker  * It also needs to check if the texture internal format and channel ordering
46*61046927SAndroid Build Coastguard Worker  * (returned in a driver-specific way) is supported by OpenCL, among other
47*61046927SAndroid Build Coastguard Worker  * things.
48*61046927SAndroid Build Coastguard Worker  */
49*61046927SAndroid Build Coastguard Worker 
50*61046927SAndroid Build Coastguard Worker #ifndef MESA_GLINTEROP_H
51*61046927SAndroid Build Coastguard Worker #define MESA_GLINTEROP_H
52*61046927SAndroid Build Coastguard Worker 
53*61046927SAndroid Build Coastguard Worker #include <stddef.h>
54*61046927SAndroid Build Coastguard Worker #include <stdint.h>
55*61046927SAndroid Build Coastguard Worker 
56*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
57*61046927SAndroid Build Coastguard Worker extern "C" {
58*61046927SAndroid Build Coastguard Worker #endif
59*61046927SAndroid Build Coastguard Worker 
60*61046927SAndroid Build Coastguard Worker /* Forward declarations to avoid inclusion of GL/glx.h */
61*61046927SAndroid Build Coastguard Worker #ifndef GLX_H
62*61046927SAndroid Build Coastguard Worker struct _XDisplay;
63*61046927SAndroid Build Coastguard Worker struct __GLXcontextRec;
64*61046927SAndroid Build Coastguard Worker #endif
65*61046927SAndroid Build Coastguard Worker 
66*61046927SAndroid Build Coastguard Worker /* Forward declarations to avoid inclusion of EGL/egl.h */
67*61046927SAndroid Build Coastguard Worker #ifndef __egl_h_
68*61046927SAndroid Build Coastguard Worker typedef void *EGLDisplay;
69*61046927SAndroid Build Coastguard Worker typedef void *EGLContext;
70*61046927SAndroid Build Coastguard Worker #endif
71*61046927SAndroid Build Coastguard Worker 
72*61046927SAndroid Build Coastguard Worker #ifndef _WINDEF_
73*61046927SAndroid Build Coastguard Worker struct HDC__;
74*61046927SAndroid Build Coastguard Worker typedef struct HDC__ *HDC;
75*61046927SAndroid Build Coastguard Worker struct HGLRC__;
76*61046927SAndroid Build Coastguard Worker typedef struct HGLRC__ *HGLRC;
77*61046927SAndroid Build Coastguard Worker typedef void *HANDLE;
78*61046927SAndroid Build Coastguard Worker #endif
79*61046927SAndroid Build Coastguard Worker 
80*61046927SAndroid Build Coastguard Worker typedef struct __GLsync *GLsync;
81*61046927SAndroid Build Coastguard Worker 
82*61046927SAndroid Build Coastguard Worker /** Returned error codes. */
83*61046927SAndroid Build Coastguard Worker enum {
84*61046927SAndroid Build Coastguard Worker    MESA_GLINTEROP_SUCCESS = 0,
85*61046927SAndroid Build Coastguard Worker    MESA_GLINTEROP_OUT_OF_RESOURCES,
86*61046927SAndroid Build Coastguard Worker    MESA_GLINTEROP_OUT_OF_HOST_MEMORY,
87*61046927SAndroid Build Coastguard Worker    MESA_GLINTEROP_INVALID_OPERATION,
88*61046927SAndroid Build Coastguard Worker    MESA_GLINTEROP_INVALID_VERSION,
89*61046927SAndroid Build Coastguard Worker    MESA_GLINTEROP_INVALID_DISPLAY,
90*61046927SAndroid Build Coastguard Worker    MESA_GLINTEROP_INVALID_CONTEXT,
91*61046927SAndroid Build Coastguard Worker    MESA_GLINTEROP_INVALID_TARGET,
92*61046927SAndroid Build Coastguard Worker    MESA_GLINTEROP_INVALID_OBJECT,
93*61046927SAndroid Build Coastguard Worker    MESA_GLINTEROP_INVALID_MIP_LEVEL,
94*61046927SAndroid Build Coastguard Worker    MESA_GLINTEROP_UNSUPPORTED
95*61046927SAndroid Build Coastguard Worker };
96*61046927SAndroid Build Coastguard Worker 
97*61046927SAndroid Build Coastguard Worker /** Access flags. */
98*61046927SAndroid Build Coastguard Worker enum {
99*61046927SAndroid Build Coastguard Worker    MESA_GLINTEROP_ACCESS_READ_WRITE = 0,
100*61046927SAndroid Build Coastguard Worker    MESA_GLINTEROP_ACCESS_READ_ONLY,
101*61046927SAndroid Build Coastguard Worker    MESA_GLINTEROP_ACCESS_WRITE_ONLY
102*61046927SAndroid Build Coastguard Worker };
103*61046927SAndroid Build Coastguard Worker 
104*61046927SAndroid Build Coastguard Worker #define MESA_GLINTEROP_DEVICE_INFO_VERSION 4
105*61046927SAndroid Build Coastguard Worker 
106*61046927SAndroid Build Coastguard Worker #define UUID_SIZE 16
107*61046927SAndroid Build Coastguard Worker 
108*61046927SAndroid Build Coastguard Worker /**
109*61046927SAndroid Build Coastguard Worker  * Device information returned by Mesa.
110*61046927SAndroid Build Coastguard Worker  */
111*61046927SAndroid Build Coastguard Worker struct mesa_glinterop_device_info {
112*61046927SAndroid Build Coastguard Worker    /* The caller should set this to the version of the struct they support */
113*61046927SAndroid Build Coastguard Worker    /* The callee will overwrite it if it supports a lower version.
114*61046927SAndroid Build Coastguard Worker     *
115*61046927SAndroid Build Coastguard Worker     * The caller should check the value and access up-to the version supported
116*61046927SAndroid Build Coastguard Worker     * by the callee.
117*61046927SAndroid Build Coastguard Worker     */
118*61046927SAndroid Build Coastguard Worker    /* NOTE: Do not use the MESA_GLINTEROP_DEVICE_INFO_VERSION macro */
119*61046927SAndroid Build Coastguard Worker    uint32_t version;
120*61046927SAndroid Build Coastguard Worker 
121*61046927SAndroid Build Coastguard Worker    /* PCI location */
122*61046927SAndroid Build Coastguard Worker    uint32_t pci_segment_group;
123*61046927SAndroid Build Coastguard Worker    uint32_t pci_bus;
124*61046927SAndroid Build Coastguard Worker    uint32_t pci_device;
125*61046927SAndroid Build Coastguard Worker    uint32_t pci_function;
126*61046927SAndroid Build Coastguard Worker 
127*61046927SAndroid Build Coastguard Worker    /* Device identification */
128*61046927SAndroid Build Coastguard Worker    uint32_t vendor_id;
129*61046927SAndroid Build Coastguard Worker    uint32_t device_id;
130*61046927SAndroid Build Coastguard Worker 
131*61046927SAndroid Build Coastguard Worker    /* Structure version 1 ends here. */
132*61046927SAndroid Build Coastguard Worker 
133*61046927SAndroid Build Coastguard Worker    /* Size of memory pointed to by out_driver_data. */
134*61046927SAndroid Build Coastguard Worker    uint32_t driver_data_size;
135*61046927SAndroid Build Coastguard Worker 
136*61046927SAndroid Build Coastguard Worker    /* If the caller wants to query driver-specific data about the OpenGL
137*61046927SAndroid Build Coastguard Worker    * object, this should point to the memory where that data will be stored.
138*61046927SAndroid Build Coastguard Worker    * This is expected to be a temporary staging memory. The pointer is not
139*61046927SAndroid Build Coastguard Worker    * allowed to be saved for later use by Mesa.
140*61046927SAndroid Build Coastguard Worker    */
141*61046927SAndroid Build Coastguard Worker    void *driver_data;
142*61046927SAndroid Build Coastguard Worker 
143*61046927SAndroid Build Coastguard Worker    /* Structure version 2 ends here. */
144*61046927SAndroid Build Coastguard Worker 
145*61046927SAndroid Build Coastguard Worker    char device_uuid[UUID_SIZE];
146*61046927SAndroid Build Coastguard Worker 
147*61046927SAndroid Build Coastguard Worker    /* Structure version 3 ends here. */
148*61046927SAndroid Build Coastguard Worker };
149*61046927SAndroid Build Coastguard Worker 
150*61046927SAndroid Build Coastguard Worker #define MESA_GLINTEROP_EXPORT_IN_VERSION 2
151*61046927SAndroid Build Coastguard Worker 
152*61046927SAndroid Build Coastguard Worker /**
153*61046927SAndroid Build Coastguard Worker  * Input parameters to Mesa interop export functions.
154*61046927SAndroid Build Coastguard Worker  */
155*61046927SAndroid Build Coastguard Worker struct mesa_glinterop_export_in {
156*61046927SAndroid Build Coastguard Worker    /* The caller should set this to the version of the struct they support */
157*61046927SAndroid Build Coastguard Worker    /* The callee will overwrite it if it supports a lower version.
158*61046927SAndroid Build Coastguard Worker     *
159*61046927SAndroid Build Coastguard Worker     * The caller should check the value and access up-to the version supported
160*61046927SAndroid Build Coastguard Worker     * by the callee.
161*61046927SAndroid Build Coastguard Worker     */
162*61046927SAndroid Build Coastguard Worker    /* NOTE: Do not use the MESA_GLINTEROP_EXPORT_IN_VERSION macro */
163*61046927SAndroid Build Coastguard Worker    uint32_t version;
164*61046927SAndroid Build Coastguard Worker 
165*61046927SAndroid Build Coastguard Worker    /* One of the following:
166*61046927SAndroid Build Coastguard Worker     * - GL_TEXTURE_BUFFER
167*61046927SAndroid Build Coastguard Worker     * - GL_TEXTURE_1D
168*61046927SAndroid Build Coastguard Worker     * - GL_TEXTURE_2D
169*61046927SAndroid Build Coastguard Worker     * - GL_TEXTURE_3D
170*61046927SAndroid Build Coastguard Worker     * - GL_TEXTURE_RECTANGLE
171*61046927SAndroid Build Coastguard Worker     * - GL_TEXTURE_1D_ARRAY
172*61046927SAndroid Build Coastguard Worker     * - GL_TEXTURE_2D_ARRAY
173*61046927SAndroid Build Coastguard Worker     * - GL_TEXTURE_CUBE_MAP_ARRAY
174*61046927SAndroid Build Coastguard Worker     * - GL_TEXTURE_CUBE_MAP
175*61046927SAndroid Build Coastguard Worker     * - GL_TEXTURE_CUBE_MAP_POSITIVE_X
176*61046927SAndroid Build Coastguard Worker     * - GL_TEXTURE_CUBE_MAP_NEGATIVE_X
177*61046927SAndroid Build Coastguard Worker     * - GL_TEXTURE_CUBE_MAP_POSITIVE_Y
178*61046927SAndroid Build Coastguard Worker     * - GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
179*61046927SAndroid Build Coastguard Worker     * - GL_TEXTURE_CUBE_MAP_POSITIVE_Z
180*61046927SAndroid Build Coastguard Worker     * - GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
181*61046927SAndroid Build Coastguard Worker     * - GL_TEXTURE_2D_MULTISAMPLE
182*61046927SAndroid Build Coastguard Worker     * - GL_TEXTURE_2D_MULTISAMPLE_ARRAY
183*61046927SAndroid Build Coastguard Worker     * - GL_TEXTURE_EXTERNAL_OES
184*61046927SAndroid Build Coastguard Worker     * - GL_RENDERBUFFER
185*61046927SAndroid Build Coastguard Worker     * - GL_ARRAY_BUFFER
186*61046927SAndroid Build Coastguard Worker     */
187*61046927SAndroid Build Coastguard Worker    unsigned target;
188*61046927SAndroid Build Coastguard Worker 
189*61046927SAndroid Build Coastguard Worker    /* If target is GL_ARRAY_BUFFER, it's a buffer object.
190*61046927SAndroid Build Coastguard Worker     * If target is GL_RENDERBUFFER, it's a renderbuffer object.
191*61046927SAndroid Build Coastguard Worker     * If target is GL_TEXTURE_*, it's a texture object.
192*61046927SAndroid Build Coastguard Worker     */
193*61046927SAndroid Build Coastguard Worker    unsigned obj;
194*61046927SAndroid Build Coastguard Worker 
195*61046927SAndroid Build Coastguard Worker    /* Mipmap level. Ignored for non-texture objects. */
196*61046927SAndroid Build Coastguard Worker    unsigned miplevel;
197*61046927SAndroid Build Coastguard Worker 
198*61046927SAndroid Build Coastguard Worker    /* One of MESA_GLINTEROP_ACCESS_* flags. This describes how the exported
199*61046927SAndroid Build Coastguard Worker     * object is going to be used.
200*61046927SAndroid Build Coastguard Worker     */
201*61046927SAndroid Build Coastguard Worker    uint32_t access;
202*61046927SAndroid Build Coastguard Worker 
203*61046927SAndroid Build Coastguard Worker    /* Size of memory pointed to by out_driver_data. */
204*61046927SAndroid Build Coastguard Worker    uint32_t out_driver_data_size;
205*61046927SAndroid Build Coastguard Worker 
206*61046927SAndroid Build Coastguard Worker    /* If the caller wants to query driver-specific data about the OpenGL
207*61046927SAndroid Build Coastguard Worker     * object, this should point to the memory where that data will be stored.
208*61046927SAndroid Build Coastguard Worker     * This is expected to be a temporary staging memory. The pointer is not
209*61046927SAndroid Build Coastguard Worker     * allowed to be saved for later use by Mesa.
210*61046927SAndroid Build Coastguard Worker     */
211*61046927SAndroid Build Coastguard Worker    void *out_driver_data;
212*61046927SAndroid Build Coastguard Worker    /* Structure version 1 ends here. */
213*61046927SAndroid Build Coastguard Worker 
214*61046927SAndroid Build Coastguard Worker    /* Structure version 2 starts here. */
215*61046927SAndroid Build Coastguard Worker    /* NOTE: Version 2 doesn't add any fields to input but redefines the
216*61046927SAndroid Build Coastguard Worker     *       argument to flush call to `struct mesa_glinterop_flush_out *`
217*61046927SAndroid Build Coastguard Worker     *       instead of `GLsync *`  */
218*61046927SAndroid Build Coastguard Worker    /* Structure version 2 ends here. */
219*61046927SAndroid Build Coastguard Worker };
220*61046927SAndroid Build Coastguard Worker 
221*61046927SAndroid Build Coastguard Worker #define MESA_GLINTEROP_EXPORT_OUT_VERSION 2
222*61046927SAndroid Build Coastguard Worker 
223*61046927SAndroid Build Coastguard Worker /**
224*61046927SAndroid Build Coastguard Worker  * Outputs of Mesa interop export functions.
225*61046927SAndroid Build Coastguard Worker  */
226*61046927SAndroid Build Coastguard Worker struct mesa_glinterop_export_out {
227*61046927SAndroid Build Coastguard Worker    /* The caller should set this to the version of the struct they support */
228*61046927SAndroid Build Coastguard Worker    /* The callee will overwrite it if it supports a lower version.
229*61046927SAndroid Build Coastguard Worker     *
230*61046927SAndroid Build Coastguard Worker     * The caller should check the value and access up-to the version supported
231*61046927SAndroid Build Coastguard Worker     * by the callee.
232*61046927SAndroid Build Coastguard Worker     */
233*61046927SAndroid Build Coastguard Worker    /* NOTE: Do not use the MESA_GLINTEROP_EXPORT_OUT_VERSION macro */
234*61046927SAndroid Build Coastguard Worker    uint32_t version;
235*61046927SAndroid Build Coastguard Worker 
236*61046927SAndroid Build Coastguard Worker #ifndef _WIN32
237*61046927SAndroid Build Coastguard Worker    /* The DMABUF handle. It must be closed by the caller using the POSIX
238*61046927SAndroid Build Coastguard Worker     * close() function when it's not needed anymore. Mesa is not responsible
239*61046927SAndroid Build Coastguard Worker     * for closing the handle.
240*61046927SAndroid Build Coastguard Worker     *
241*61046927SAndroid Build Coastguard Worker     * Not closing the handle by the caller will lead to a resource leak,
242*61046927SAndroid Build Coastguard Worker     * will prevent releasing the GPU buffer, and may prevent creating new
243*61046927SAndroid Build Coastguard Worker     * DMABUF handles within the process.
244*61046927SAndroid Build Coastguard Worker     */
245*61046927SAndroid Build Coastguard Worker    int dmabuf_fd;
246*61046927SAndroid Build Coastguard Worker #else
247*61046927SAndroid Build Coastguard Worker    /* Same concept as a DMABUF, but for Windows/WDDM. It must be closed by
248*61046927SAndroid Build Coastguard Worker     * the caller using CloseHandle() when it's not needed anymore.
249*61046927SAndroid Build Coastguard Worker     */
250*61046927SAndroid Build Coastguard Worker    HANDLE win32_handle;
251*61046927SAndroid Build Coastguard Worker #endif
252*61046927SAndroid Build Coastguard Worker 
253*61046927SAndroid Build Coastguard Worker    /* The mutable OpenGL internal format specified by glTextureView or
254*61046927SAndroid Build Coastguard Worker     * glTexBuffer. If the object is not one of those, the original internal
255*61046927SAndroid Build Coastguard Worker     * format specified by glTexStorage, glTexImage, or glRenderbufferStorage
256*61046927SAndroid Build Coastguard Worker     * will be returned.
257*61046927SAndroid Build Coastguard Worker     */
258*61046927SAndroid Build Coastguard Worker    unsigned internal_format;
259*61046927SAndroid Build Coastguard Worker 
260*61046927SAndroid Build Coastguard Worker    /* Buffer offset and size for GL_ARRAY_BUFFER and GL_TEXTURE_BUFFER.
261*61046927SAndroid Build Coastguard Worker     * This allows interop with suballocations (a buffer allocated within
262*61046927SAndroid Build Coastguard Worker     * a larger buffer).
263*61046927SAndroid Build Coastguard Worker     *
264*61046927SAndroid Build Coastguard Worker     * Parameters specified by glTexBufferRange for GL_TEXTURE_BUFFER are
265*61046927SAndroid Build Coastguard Worker     * applied to these and can shrink the range further.
266*61046927SAndroid Build Coastguard Worker     */
267*61046927SAndroid Build Coastguard Worker    ptrdiff_t buf_offset;
268*61046927SAndroid Build Coastguard Worker    ptrdiff_t buf_size;
269*61046927SAndroid Build Coastguard Worker 
270*61046927SAndroid Build Coastguard Worker    /* Parameters specified by glTextureView. If the object is not a texture
271*61046927SAndroid Build Coastguard Worker     * view, default parameters covering the whole texture will be returned.
272*61046927SAndroid Build Coastguard Worker     */
273*61046927SAndroid Build Coastguard Worker    unsigned view_minlevel;
274*61046927SAndroid Build Coastguard Worker    unsigned view_numlevels;
275*61046927SAndroid Build Coastguard Worker    unsigned view_minlayer;
276*61046927SAndroid Build Coastguard Worker    unsigned view_numlayers;
277*61046927SAndroid Build Coastguard Worker 
278*61046927SAndroid Build Coastguard Worker    /* The number of bytes written to out_driver_data. */
279*61046927SAndroid Build Coastguard Worker    uint32_t out_driver_data_written;
280*61046927SAndroid Build Coastguard Worker    /* Structure version 1 ends here. */
281*61046927SAndroid Build Coastguard Worker 
282*61046927SAndroid Build Coastguard Worker    /* Structure version 2 starts here. */
283*61046927SAndroid Build Coastguard Worker    /* Texture sizes. If the object is not a texture, default parameters will
284*61046927SAndroid Build Coastguard Worker     * be returned.
285*61046927SAndroid Build Coastguard Worker     */
286*61046927SAndroid Build Coastguard Worker    uint32_t width;
287*61046927SAndroid Build Coastguard Worker    uint32_t height;
288*61046927SAndroid Build Coastguard Worker    uint32_t depth;
289*61046927SAndroid Build Coastguard Worker    uint32_t stride;
290*61046927SAndroid Build Coastguard Worker    /* the modifier to use when reimporting the fd */
291*61046927SAndroid Build Coastguard Worker    uint64_t modifier;
292*61046927SAndroid Build Coastguard Worker    /* Structure version 2 ends here. */
293*61046927SAndroid Build Coastguard Worker };
294*61046927SAndroid Build Coastguard Worker 
295*61046927SAndroid Build Coastguard Worker #define MESA_GLINTEROP_FLUSH_OUT_VERSION 1
296*61046927SAndroid Build Coastguard Worker 
297*61046927SAndroid Build Coastguard Worker /**
298*61046927SAndroid Build Coastguard Worker  * Outputs of Mesa interop flush functions.
299*61046927SAndroid Build Coastguard Worker  */
300*61046927SAndroid Build Coastguard Worker struct mesa_glinterop_flush_out {
301*61046927SAndroid Build Coastguard Worker    /* The caller should set this to the version of the struct they support */
302*61046927SAndroid Build Coastguard Worker    /* The callee will overwrite it if it supports a lower version.
303*61046927SAndroid Build Coastguard Worker     *
304*61046927SAndroid Build Coastguard Worker     * The caller should check the value and access up-to the version supported
305*61046927SAndroid Build Coastguard Worker     * by the callee.
306*61046927SAndroid Build Coastguard Worker     */
307*61046927SAndroid Build Coastguard Worker    /* NOTE: Do not use the MESA_GLINTEROP_EXPORT_OUT_VERSION macro */
308*61046927SAndroid Build Coastguard Worker    uint32_t version;
309*61046927SAndroid Build Coastguard Worker 
310*61046927SAndroid Build Coastguard Worker    /* GLsync to map to CL event, caller set it non-NULL to be filled */
311*61046927SAndroid Build Coastguard Worker    GLsync *sync;
312*61046927SAndroid Build Coastguard Worker 
313*61046927SAndroid Build Coastguard Worker    /* fence_fd to use in CL, caller set it to non-NULL to be filled */
314*61046927SAndroid Build Coastguard Worker    int *fence_fd;
315*61046927SAndroid Build Coastguard Worker };
316*61046927SAndroid Build Coastguard Worker 
317*61046927SAndroid Build Coastguard Worker 
318*61046927SAndroid Build Coastguard Worker /**
319*61046927SAndroid Build Coastguard Worker  * Query device information.
320*61046927SAndroid Build Coastguard Worker  *
321*61046927SAndroid Build Coastguard Worker  * \param dpy        GLX display
322*61046927SAndroid Build Coastguard Worker  * \param context    GLX context
323*61046927SAndroid Build Coastguard Worker  * \param out        where to return the information
324*61046927SAndroid Build Coastguard Worker  *
325*61046927SAndroid Build Coastguard Worker  * \return MESA_GLINTEROP_SUCCESS or MESA_GLINTEROP_* != 0 on error
326*61046927SAndroid Build Coastguard Worker  */
327*61046927SAndroid Build Coastguard Worker int
328*61046927SAndroid Build Coastguard Worker MesaGLInteropGLXQueryDeviceInfo(struct _XDisplay *dpy, struct __GLXcontextRec *context,
329*61046927SAndroid Build Coastguard Worker                                 struct mesa_glinterop_device_info *out);
330*61046927SAndroid Build Coastguard Worker 
331*61046927SAndroid Build Coastguard Worker 
332*61046927SAndroid Build Coastguard Worker /**
333*61046927SAndroid Build Coastguard Worker  * Same as MesaGLInteropGLXQueryDeviceInfo except that it accepts EGLDisplay
334*61046927SAndroid Build Coastguard Worker  * and EGLContext.
335*61046927SAndroid Build Coastguard Worker  */
336*61046927SAndroid Build Coastguard Worker int
337*61046927SAndroid Build Coastguard Worker MesaGLInteropEGLQueryDeviceInfo(EGLDisplay dpy, EGLContext context,
338*61046927SAndroid Build Coastguard Worker                                 struct mesa_glinterop_device_info *out);
339*61046927SAndroid Build Coastguard Worker 
340*61046927SAndroid Build Coastguard Worker 
341*61046927SAndroid Build Coastguard Worker /**
342*61046927SAndroid Build Coastguard Worker * Same as MesaGLInteropGLXQueryDeviceInfo except that it accepts HDC
343*61046927SAndroid Build Coastguard Worker * and HGLRC.
344*61046927SAndroid Build Coastguard Worker */
345*61046927SAndroid Build Coastguard Worker int
346*61046927SAndroid Build Coastguard Worker wglMesaGLInteropQueryDeviceInfo(HDC dpy, HGLRC context,
347*61046927SAndroid Build Coastguard Worker                                 struct mesa_glinterop_device_info *out);
348*61046927SAndroid Build Coastguard Worker 
349*61046927SAndroid Build Coastguard Worker /**
350*61046927SAndroid Build Coastguard Worker  * Create and return a DMABUF handle corresponding to the given OpenGL
351*61046927SAndroid Build Coastguard Worker  * object, and return other parameters about the OpenGL object.
352*61046927SAndroid Build Coastguard Worker  *
353*61046927SAndroid Build Coastguard Worker  * \param dpy        GLX display
354*61046927SAndroid Build Coastguard Worker  * \param context    GLX context
355*61046927SAndroid Build Coastguard Worker  * \param in         input parameters
356*61046927SAndroid Build Coastguard Worker  * \param out        return values
357*61046927SAndroid Build Coastguard Worker  *
358*61046927SAndroid Build Coastguard Worker  * \return MESA_GLINTEROP_SUCCESS or MESA_GLINTEROP_* != 0 on error
359*61046927SAndroid Build Coastguard Worker  */
360*61046927SAndroid Build Coastguard Worker int
361*61046927SAndroid Build Coastguard Worker MesaGLInteropGLXExportObject(struct _XDisplay *dpy, struct __GLXcontextRec *context,
362*61046927SAndroid Build Coastguard Worker                              struct mesa_glinterop_export_in *in,
363*61046927SAndroid Build Coastguard Worker                              struct mesa_glinterop_export_out *out);
364*61046927SAndroid Build Coastguard Worker 
365*61046927SAndroid Build Coastguard Worker 
366*61046927SAndroid Build Coastguard Worker /**
367*61046927SAndroid Build Coastguard Worker  * Same as MesaGLInteropGLXExportObject except that it accepts
368*61046927SAndroid Build Coastguard Worker  * EGLDisplay and EGLContext.
369*61046927SAndroid Build Coastguard Worker  */
370*61046927SAndroid Build Coastguard Worker int
371*61046927SAndroid Build Coastguard Worker MesaGLInteropEGLExportObject(EGLDisplay dpy, EGLContext context,
372*61046927SAndroid Build Coastguard Worker                              struct mesa_glinterop_export_in *in,
373*61046927SAndroid Build Coastguard Worker                              struct mesa_glinterop_export_out *out);
374*61046927SAndroid Build Coastguard Worker 
375*61046927SAndroid Build Coastguard Worker 
376*61046927SAndroid Build Coastguard Worker /**
377*61046927SAndroid Build Coastguard Worker * Same as MesaGLInteropGLXExportObject except that it accepts
378*61046927SAndroid Build Coastguard Worker * HDC and HGLRC.
379*61046927SAndroid Build Coastguard Worker */
380*61046927SAndroid Build Coastguard Worker int
381*61046927SAndroid Build Coastguard Worker wglMesaGLInteropExportObject(HDC dpy, HGLRC context,
382*61046927SAndroid Build Coastguard Worker                              struct mesa_glinterop_export_in *in,
383*61046927SAndroid Build Coastguard Worker                              struct mesa_glinterop_export_out *out);
384*61046927SAndroid Build Coastguard Worker 
385*61046927SAndroid Build Coastguard Worker 
386*61046927SAndroid Build Coastguard Worker /**
387*61046927SAndroid Build Coastguard Worker  * Prepare OpenGL resources for being accessed by OpenCL.
388*61046927SAndroid Build Coastguard Worker  *
389*61046927SAndroid Build Coastguard Worker  * \param dpy        GLX display
390*61046927SAndroid Build Coastguard Worker  * \param context    GLX context
391*61046927SAndroid Build Coastguard Worker  * \param count      number of resources
392*61046927SAndroid Build Coastguard Worker  * \param resources  resources to flush
393*61046927SAndroid Build Coastguard Worker  * \param out        return values
394*61046927SAndroid Build Coastguard Worker  *
395*61046927SAndroid Build Coastguard Worker  * \return MESA_GLINTEROP_SUCCESS or MESA_GLINTEROP_* != 0 on error
396*61046927SAndroid Build Coastguard Worker  */
397*61046927SAndroid Build Coastguard Worker int
398*61046927SAndroid Build Coastguard Worker MesaGLInteropGLXFlushObjects(struct _XDisplay *dpy, struct __GLXcontextRec *context,
399*61046927SAndroid Build Coastguard Worker                              unsigned count, struct mesa_glinterop_export_in *resources,
400*61046927SAndroid Build Coastguard Worker                              struct mesa_glinterop_flush_out *out);
401*61046927SAndroid Build Coastguard Worker 
402*61046927SAndroid Build Coastguard Worker /**
403*61046927SAndroid Build Coastguard Worker * Same as MesaGLInteropGLXFlushObjects except that it accepts
404*61046927SAndroid Build Coastguard Worker * EGLDisplay and EGLContext.
405*61046927SAndroid Build Coastguard Worker */
406*61046927SAndroid Build Coastguard Worker int
407*61046927SAndroid Build Coastguard Worker MesaGLInteropEGLFlushObjects(EGLDisplay dpy, EGLContext context,
408*61046927SAndroid Build Coastguard Worker                              unsigned count, struct mesa_glinterop_export_in *resources,
409*61046927SAndroid Build Coastguard Worker                              struct mesa_glinterop_flush_out *out);
410*61046927SAndroid Build Coastguard Worker 
411*61046927SAndroid Build Coastguard Worker /**
412*61046927SAndroid Build Coastguard Worker * Same as MesaGLInteropGLXFlushObjects except that it accepts
413*61046927SAndroid Build Coastguard Worker * HDC and HGLRC.
414*61046927SAndroid Build Coastguard Worker */
415*61046927SAndroid Build Coastguard Worker int
416*61046927SAndroid Build Coastguard Worker wglMesaGLInteropFlushObjects(HDC dpy, HGLRC context,
417*61046927SAndroid Build Coastguard Worker                              unsigned count, struct mesa_glinterop_export_in *resources,
418*61046927SAndroid Build Coastguard Worker                              struct mesa_glinterop_flush_out *out);
419*61046927SAndroid Build Coastguard Worker 
420*61046927SAndroid Build Coastguard Worker 
421*61046927SAndroid Build Coastguard Worker typedef int (*PFNMESAGLINTEROPGLXQUERYDEVICEINFOPROC)(struct _XDisplay *dpy, struct __GLXcontextRec *context,
422*61046927SAndroid Build Coastguard Worker                                                       struct mesa_glinterop_device_info *out);
423*61046927SAndroid Build Coastguard Worker typedef int (*PFNMESAGLINTEROPEGLQUERYDEVICEINFOPROC)(EGLDisplay dpy, EGLContext context,
424*61046927SAndroid Build Coastguard Worker                                                       struct mesa_glinterop_device_info *out);
425*61046927SAndroid Build Coastguard Worker typedef int (*PFNWGLMESAGLINTEROPQUERYDEVICEINFOPROC)(HDC dpy, HGLRC context,
426*61046927SAndroid Build Coastguard Worker                                                       struct mesa_glinterop_device_info *out);
427*61046927SAndroid Build Coastguard Worker typedef int (*PFNMESAGLINTEROPGLXEXPORTOBJECTPROC)(struct _XDisplay *dpy, struct __GLXcontextRec *context,
428*61046927SAndroid Build Coastguard Worker                                                    struct mesa_glinterop_export_in *in,
429*61046927SAndroid Build Coastguard Worker                                                    struct mesa_glinterop_export_out *out);
430*61046927SAndroid Build Coastguard Worker typedef int (*PFNMESAGLINTEROPEGLEXPORTOBJECTPROC)(EGLDisplay dpy, EGLContext context,
431*61046927SAndroid Build Coastguard Worker                                                    struct mesa_glinterop_export_in *in,
432*61046927SAndroid Build Coastguard Worker                                                    struct mesa_glinterop_export_out *out);
433*61046927SAndroid Build Coastguard Worker typedef int (*PFNWGLMESAGLINTEROPEXPORTOBJECTPROC)(HDC dpy, HGLRC context,
434*61046927SAndroid Build Coastguard Worker                                                    struct mesa_glinterop_export_in *in,
435*61046927SAndroid Build Coastguard Worker                                                    struct mesa_glinterop_export_out *out);
436*61046927SAndroid Build Coastguard Worker typedef int (*PFNMESAGLINTEROPGLXFLUSHOBJECTSPROC)(struct _XDisplay *dpy, struct __GLXcontextRec *context,
437*61046927SAndroid Build Coastguard Worker                                                    unsigned count, struct mesa_glinterop_export_in *resources,
438*61046927SAndroid Build Coastguard Worker                                                    struct mesa_glinterop_flush_out *out);
439*61046927SAndroid Build Coastguard Worker typedef int (*PFNMESAGLINTEROPEGLFLUSHOBJECTSPROC)(EGLDisplay dpy, EGLContext context,
440*61046927SAndroid Build Coastguard Worker                                                    unsigned count, struct mesa_glinterop_export_in *resources,
441*61046927SAndroid Build Coastguard Worker                                                    struct mesa_glinterop_flush_out *out);
442*61046927SAndroid Build Coastguard Worker typedef int (*PFNWGLMESAGLINTEROPFLUSHOBJECTSPROC)(HDC dpy, HGLRC context,
443*61046927SAndroid Build Coastguard Worker                                                    unsigned count, struct mesa_glinterop_export_in *resources,
444*61046927SAndroid Build Coastguard Worker                                                    struct mesa_glinterop_flush_out *out);
445*61046927SAndroid Build Coastguard Worker 
446*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
447*61046927SAndroid Build Coastguard Worker }
448*61046927SAndroid Build Coastguard Worker #endif
449*61046927SAndroid Build Coastguard Worker 
450*61046927SAndroid Build Coastguard Worker #endif /* MESA_GLINTEROP_H */
451