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