16eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák/*
26eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * Mesa 3-D graphics library
36eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák *
46eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * Copyright 2016 Advanced Micro Devices, Inc.
56eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák *
66eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * Permission is hereby granted, free of charge, to any person obtaining a
76eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * copy of this software and associated documentation files (the "Software"),
86eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * to deal in the Software without restriction, including without limitation
96eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * the rights to use, copy, modify, merge, publish, distribute, sublicense,
106eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * and/or sell copies of the Software, and to permit persons to whom the
116eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * Software is furnished to do so, subject to the following conditions:
126eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák *
136eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * The above copyright notice and this permission notice shall be included
146eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * in all copies or substantial portions of the Software.
156eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák *
166eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
176eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
186eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
196eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
206eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
216eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
226eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * OTHER DEALINGS IN THE SOFTWARE.
236eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák */
246eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
256eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák/* Mesa OpenGL inter-driver interoperability interface designed for but not
266eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * limited to OpenCL.
276eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák *
286eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * This is a driver-agnostic, backward-compatible interface. The structures
296eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * are only allowed to grow. They can never shrink and their members can
306eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * never be removed, renamed, or redefined.
316eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák *
326eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * The interface doesn't return a lot of static texture parameters like
336eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * width, height, etc. It mainly returns mutable buffer and texture view
346eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * parameters that can't be part of the texture allocation (because they are
356eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * mutable). If drivers want to return more data or want to return static
366eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * allocation parameters, they can do it in one of these two ways:
376eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * - attaching the data to the DMABUF handle in a driver-specific way
386eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * - passing the data via "out_driver_data" in the "in" structure.
396eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák *
406eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * Mesa is expected to do a lot of error checking on behalf of OpenCL, such
416eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * as checking the target, miplevel, and texture completeness.
426eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák *
436eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * OpenCL, on the other hand, needs to check if the display+context combo
446eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * is compatible with the OpenCL driver by querying the device information.
456eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * It also needs to check if the texture internal format and channel ordering
466eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * (returned in a driver-specific way) is supported by OpenCL, among other
476eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * things.
486eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák */
496eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
506eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák#ifndef MESA_GLINTEROP_H
516eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák#define MESA_GLINTEROP_H
526eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
53bcf9e476532f12544d1831300dbb2caa1e7c0bdfEmil Velikov#include <stddef.h>
54a3eb8702fb4de03ca132a66e7e8df1a0b8f85e9aEmil Velikov#include <stdint.h>
556eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
566eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák#ifdef __cplusplus
576eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšákextern "C" {
586eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák#endif
596eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
60c85b34ffd04f9a7a16fe30173474e857d0f42d5fEmil Velikov/* Forward declarations to avoid inclusion of GL/glx.h */
61c85b34ffd04f9a7a16fe30173474e857d0f42d5fEmil Velikovstruct _XDisplay;
62c85b34ffd04f9a7a16fe30173474e857d0f42d5fEmil Velikovstruct __GLXcontextRec;
63c85b34ffd04f9a7a16fe30173474e857d0f42d5fEmil Velikov
64a3eb8702fb4de03ca132a66e7e8df1a0b8f85e9aEmil Velikov/* Forward declarations to avoid inclusion of EGL/egl.h */
65a3eb8702fb4de03ca132a66e7e8df1a0b8f85e9aEmil Velikovtypedef void *EGLDisplay;
66a3eb8702fb4de03ca132a66e7e8df1a0b8f85e9aEmil Velikovtypedef void *EGLContext;
67a3eb8702fb4de03ca132a66e7e8df1a0b8f85e9aEmil Velikov
686eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák/** Returned error codes. */
696eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšákenum {
706eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_SUCCESS = 0,
716eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_OUT_OF_RESOURCES,
726eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_OUT_OF_HOST_MEMORY,
736eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_INVALID_OPERATION,
74923bdbf48c4113326773e98c786e4405b2e1838bEmil Velikov   MESA_GLINTEROP_INVALID_VERSION,
756eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_INVALID_DISPLAY,
766eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_INVALID_CONTEXT,
776eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_INVALID_TARGET,
786eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_INVALID_OBJECT,
796eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_INVALID_MIP_LEVEL,
806eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_UNSUPPORTED
816eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák};
826eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
836eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák/** Access flags. */
846eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšákenum {
856eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_ACCESS_READ_WRITE = 0,
866eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_ACCESS_READ_ONLY,
876eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_ACCESS_WRITE_ONLY
886eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák};
896eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
906eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák#define MESA_GLINTEROP_DEVICE_INFO_VERSION 1
916eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
926eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák/**
936eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * Device information returned by Mesa.
946eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák */
9513faddb6b8e30ff0e81e62fb863304a57c712aaeEmil Velikovstruct mesa_glinterop_device_info {
96cb0708c8438390509d0814cda45e7576b7c0555cEmil Velikov   /* The caller should set this to the version of the struct they support */
97e384d75b120ce60954c545e8c6edbe98fd01bea7Emil Velikov   /* The callee will overwrite it if it supports a lower version.
98e384d75b120ce60954c545e8c6edbe98fd01bea7Emil Velikov    *
99e384d75b120ce60954c545e8c6edbe98fd01bea7Emil Velikov    * The caller should check the value and access up-to the version supported
10060a27ad122128145d28be37e9c0b0bc86a8e5181Giuseppe Bilotta    * by the callee.
101e384d75b120ce60954c545e8c6edbe98fd01bea7Emil Velikov    */
102cb0708c8438390509d0814cda45e7576b7c0555cEmil Velikov   /* NOTE: Do not use the MESA_GLINTEROP_DEVICE_INFO_VERSION macro */
103c196de23aece3cea7b30da6d7356b614ee254daeEmil Velikov   uint32_t version;
1046eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1056eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* PCI location */
1066eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t pci_segment_group;
1076eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t pci_bus;
1086eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t pci_device;
1096eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t pci_function;
1106eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1116eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* Device identification */
1126eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t vendor_id;
1136eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t device_id;
1146eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1156eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* Structure version 1 ends here. */
11613faddb6b8e30ff0e81e62fb863304a57c712aaeEmil Velikov};
1176eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1186eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák#define MESA_GLINTEROP_EXPORT_IN_VERSION 1
1196eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1206eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák/**
1216eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * Input parameters to Mesa interop export functions.
1226eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák */
12313faddb6b8e30ff0e81e62fb863304a57c712aaeEmil Velikovstruct mesa_glinterop_export_in {
124cb0708c8438390509d0814cda45e7576b7c0555cEmil Velikov   /* The caller should set this to the version of the struct they support */
125e384d75b120ce60954c545e8c6edbe98fd01bea7Emil Velikov   /* The callee will overwrite it if it supports a lower version.
126e384d75b120ce60954c545e8c6edbe98fd01bea7Emil Velikov    *
127e384d75b120ce60954c545e8c6edbe98fd01bea7Emil Velikov    * The caller should check the value and access up-to the version supported
12860a27ad122128145d28be37e9c0b0bc86a8e5181Giuseppe Bilotta    * by the callee.
129e384d75b120ce60954c545e8c6edbe98fd01bea7Emil Velikov    */
130cb0708c8438390509d0814cda45e7576b7c0555cEmil Velikov   /* NOTE: Do not use the MESA_GLINTEROP_EXPORT_IN_VERSION macro */
131c196de23aece3cea7b30da6d7356b614ee254daeEmil Velikov   uint32_t version;
1326eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1336eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* One of the following:
1346eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_BUFFER
1356eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_1D
1366eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_2D
1376eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_3D
1386eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_RECTANGLE
1396eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_1D_ARRAY
1406eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_2D_ARRAY
1416eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_CUBE_MAP_ARRAY
1426eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_CUBE_MAP
1436eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_CUBE_MAP_POSITIVE_X
1446eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_CUBE_MAP_NEGATIVE_X
1456eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_CUBE_MAP_POSITIVE_Y
1466eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
1476eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_CUBE_MAP_POSITIVE_Z
1486eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
1496eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_2D_MULTISAMPLE
1506eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_2D_MULTISAMPLE_ARRAY
1516eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_EXTERNAL_OES
1526eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_RENDERBUFFER
1536eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_ARRAY_BUFFER
1546eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    */
1552e726144f9158b8acd4487d9a1beceaa1be85614Emil Velikov   unsigned target;
1566eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1576eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* If target is GL_ARRAY_BUFFER, it's a buffer object.
1586eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * If target is GL_RENDERBUFFER, it's a renderbuffer object.
1596eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * If target is GL_TEXTURE_*, it's a texture object.
1606eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    */
1612e726144f9158b8acd4487d9a1beceaa1be85614Emil Velikov   unsigned obj;
1626eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1636eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* Mipmap level. Ignored for non-texture objects. */
1642e726144f9158b8acd4487d9a1beceaa1be85614Emil Velikov   unsigned miplevel;
1656eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1666eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* One of MESA_GLINTEROP_ACCESS_* flags. This describes how the exported
1676eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * object is going to be used.
1686eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    */
1696eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t access;
1706eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1716eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* Size of memory pointed to by out_driver_data. */
1726eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t out_driver_data_size;
1736eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1746eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* If the caller wants to query driver-specific data about the OpenGL
1756eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * object, this should point to the memory where that data will be stored.
1766eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * This is expected to be a temporary staging memory. The pointer is not
1776eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * allowed to be saved for later use by Mesa.
1786eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    */
1796eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   void *out_driver_data;
1806eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* Structure version 1 ends here. */
18113faddb6b8e30ff0e81e62fb863304a57c712aaeEmil Velikov};
1826eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1836eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák#define MESA_GLINTEROP_EXPORT_OUT_VERSION 1
1846eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1856eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák/**
1866eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * Outputs of Mesa interop export functions.
1876eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák */
18813faddb6b8e30ff0e81e62fb863304a57c712aaeEmil Velikovstruct mesa_glinterop_export_out {
189cb0708c8438390509d0814cda45e7576b7c0555cEmil Velikov   /* The caller should set this to the version of the struct they support */
190e384d75b120ce60954c545e8c6edbe98fd01bea7Emil Velikov   /* The callee will overwrite it if it supports a lower version.
191e384d75b120ce60954c545e8c6edbe98fd01bea7Emil Velikov    *
192e384d75b120ce60954c545e8c6edbe98fd01bea7Emil Velikov    * The caller should check the value and access up-to the version supported
19360a27ad122128145d28be37e9c0b0bc86a8e5181Giuseppe Bilotta    * by the callee.
194e384d75b120ce60954c545e8c6edbe98fd01bea7Emil Velikov    */
195cb0708c8438390509d0814cda45e7576b7c0555cEmil Velikov   /* NOTE: Do not use the MESA_GLINTEROP_EXPORT_OUT_VERSION macro */
196c196de23aece3cea7b30da6d7356b614ee254daeEmil Velikov   uint32_t version;
1976eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1986eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* The DMABUF handle. It must be closed by the caller using the POSIX
1996eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * close() function when it's not needed anymore. Mesa is not responsible
2006eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * for closing the handle.
2016eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    *
2026eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * Not closing the handle by the caller will lead to a resource leak,
2036eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * will prevent releasing the GPU buffer, and may prevent creating new
2046eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * DMABUF handles within the process.
2056eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    */
2066eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   int dmabuf_fd;
2076eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2086eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* The mutable OpenGL internal format specified by glTextureView or
2096eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * glTexBuffer. If the object is not one of those, the original internal
2106eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * format specified by glTexStorage, glTexImage, or glRenderbufferStorage
2116eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * will be returned.
2126eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    */
2132e726144f9158b8acd4487d9a1beceaa1be85614Emil Velikov   unsigned internal_format;
2146eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2156eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* Buffer offset and size for GL_ARRAY_BUFFER and GL_TEXTURE_BUFFER.
2166eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * This allows interop with suballocations (a buffer allocated within
2176eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * a larger buffer).
2186eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    *
2196eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * Parameters specified by glTexBufferRange for GL_TEXTURE_BUFFER are
2206eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * applied to these and can shrink the range further.
2216eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    */
222bcf9e476532f12544d1831300dbb2caa1e7c0bdfEmil Velikov   ptrdiff_t buf_offset;
223bcf9e476532f12544d1831300dbb2caa1e7c0bdfEmil Velikov   ptrdiff_t buf_size;
2246eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2256eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* Parameters specified by glTextureView. If the object is not a texture
2266eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * view, default parameters covering the whole texture will be returned.
2276eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    */
2282e726144f9158b8acd4487d9a1beceaa1be85614Emil Velikov   unsigned view_minlevel;
2292e726144f9158b8acd4487d9a1beceaa1be85614Emil Velikov   unsigned view_numlevels;
2302e726144f9158b8acd4487d9a1beceaa1be85614Emil Velikov   unsigned view_minlayer;
2312e726144f9158b8acd4487d9a1beceaa1be85614Emil Velikov   unsigned view_numlayers;
2326eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2336eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* The number of bytes written to out_driver_data. */
2346eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t out_driver_data_written;
2356eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* Structure version 1 ends here. */
23613faddb6b8e30ff0e81e62fb863304a57c712aaeEmil Velikov};
2376eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2386eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2396eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák/**
2406eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * Query device information.
2416eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák *
2426eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * \param dpy        GLX display
2436eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * \param context    GLX context
2446eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * \param out        where to return the information
2456eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák *
2466eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * \return MESA_GLINTEROP_SUCCESS or MESA_GLINTEROP_* != 0 on error
2476eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák */
248b5f9820d905a275bc01bbffa9b4927ec11286f8dEmil Velikovint
249c85b34ffd04f9a7a16fe30173474e857d0f42d5fEmil VelikovMesaGLInteropGLXQueryDeviceInfo(struct _XDisplay *dpy, struct __GLXcontextRec *context,
25013faddb6b8e30ff0e81e62fb863304a57c712aaeEmil Velikov                                struct mesa_glinterop_device_info *out);
2516eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2526eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2536eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák/**
2546eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * Same as MesaGLInteropGLXQueryDeviceInfo except that it accepts EGLDisplay
2556eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * and EGLContext.
2566eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák */
257b5f9820d905a275bc01bbffa9b4927ec11286f8dEmil Velikovint
2586eeb729490a7880f8dc17de855d205a7cce5f28cMarek OlšákMesaGLInteropEGLQueryDeviceInfo(EGLDisplay dpy, EGLContext context,
25913faddb6b8e30ff0e81e62fb863304a57c712aaeEmil Velikov                                struct mesa_glinterop_device_info *out);
2606eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2616eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2626eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák/**
2636eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * Create and return a DMABUF handle corresponding to the given OpenGL
2646eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * object, and return other parameters about the OpenGL object.
2656eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák *
2666eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * \param dpy        GLX display
2676eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * \param context    GLX context
2686eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * \param in         input parameters
2696eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * \param out        return values
2706eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák *
2716eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * \return MESA_GLINTEROP_SUCCESS or MESA_GLINTEROP_* != 0 on error
2726eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák */
273b5f9820d905a275bc01bbffa9b4927ec11286f8dEmil Velikovint
274c85b34ffd04f9a7a16fe30173474e857d0f42d5fEmil VelikovMesaGLInteropGLXExportObject(struct _XDisplay *dpy, struct __GLXcontextRec *context,
27513faddb6b8e30ff0e81e62fb863304a57c712aaeEmil Velikov                             struct mesa_glinterop_export_in *in,
27613faddb6b8e30ff0e81e62fb863304a57c712aaeEmil Velikov                             struct mesa_glinterop_export_out *out);
2776eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2786eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2796eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák/**
2806eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * Same as MesaGLInteropGLXExportObject except that it accepts
2816eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * EGLDisplay and EGLContext.
2826eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák */
283b5f9820d905a275bc01bbffa9b4927ec11286f8dEmil Velikovint
2846eeb729490a7880f8dc17de855d205a7cce5f28cMarek OlšákMesaGLInteropEGLExportObject(EGLDisplay dpy, EGLContext context,
28513faddb6b8e30ff0e81e62fb863304a57c712aaeEmil Velikov                             struct mesa_glinterop_export_in *in,
28613faddb6b8e30ff0e81e62fb863304a57c712aaeEmil Velikov                             struct mesa_glinterop_export_out *out);
2876eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2880d31bfd71aa44aa34f3cfa8711c4070c3fb1e26aEmil Velikov
289c85b34ffd04f9a7a16fe30173474e857d0f42d5fEmil Velikovtypedef int (PFNMESAGLINTEROPGLXQUERYDEVICEINFOPROC)(struct _XDisplay *dpy, struct __GLXcontextRec *context,
29013faddb6b8e30ff0e81e62fb863304a57c712aaeEmil Velikov                                                     struct mesa_glinterop_device_info *out);
291b5f9820d905a275bc01bbffa9b4927ec11286f8dEmil Velikovtypedef int (PFNMESAGLINTEROPEGLQUERYDEVICEINFOPROC)(EGLDisplay dpy, EGLContext context,
29213faddb6b8e30ff0e81e62fb863304a57c712aaeEmil Velikov                                                     struct mesa_glinterop_device_info *out);
293c85b34ffd04f9a7a16fe30173474e857d0f42d5fEmil Velikovtypedef int (PFNMESAGLINTEROPGLXEXPORTOBJECTPROC)(struct _XDisplay *dpy, struct __GLXcontextRec *context,
29413faddb6b8e30ff0e81e62fb863304a57c712aaeEmil Velikov                                                  struct mesa_glinterop_export_in *in,
29513faddb6b8e30ff0e81e62fb863304a57c712aaeEmil Velikov                                                  struct mesa_glinterop_export_out *out);
296b5f9820d905a275bc01bbffa9b4927ec11286f8dEmil Velikovtypedef int (PFNMESAGLINTEROPEGLEXPORTOBJECTPROC)(EGLDisplay dpy, EGLContext context,
29713faddb6b8e30ff0e81e62fb863304a57c712aaeEmil Velikov                                                  struct mesa_glinterop_export_in *in,
29813faddb6b8e30ff0e81e62fb863304a57c712aaeEmil Velikov                                                  struct mesa_glinterop_export_out *out);
2996eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
3006eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák#ifdef __cplusplus
3016eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák}
3026eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák#endif
3036eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
3046eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák#endif /* MESA_GLINTEROP_H */
305