mesa_glinterop.h revision bcf9e476532f12544d1831300dbb2caa1e7c0bdf
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>
546eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák#include <GL/glx.h>
556eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák#include <EGL/egl.h>
566eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
576eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák#ifdef __cplusplus
586eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšákextern "C" {
596eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák#endif
606eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
616eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák/** Returned error codes. */
626eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšákenum {
636eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_SUCCESS = 0,
646eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_OUT_OF_RESOURCES,
656eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_OUT_OF_HOST_MEMORY,
666eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_INVALID_OPERATION,
676eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_INVALID_VALUE,
686eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_INVALID_DISPLAY,
696eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_INVALID_CONTEXT,
706eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_INVALID_TARGET,
716eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_INVALID_OBJECT,
726eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_INVALID_MIP_LEVEL,
736eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_UNSUPPORTED
746eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák};
756eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
766eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák/** Access flags. */
776eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšákenum {
786eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_ACCESS_READ_WRITE = 0,
796eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_ACCESS_READ_ONLY,
806eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   MESA_GLINTEROP_ACCESS_WRITE_ONLY
816eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák};
826eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
836eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák#define MESA_GLINTEROP_DEVICE_INFO_VERSION 1
846eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
856eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák/**
866eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * Device information returned by Mesa.
876eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák */
886eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšáktypedef struct _mesa_glinterop_device_info {
896eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* The caller should set this to: MESA_GLINTEROP_DEVICE_INFO_VERSION */
906eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t struct_version;
916eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
926eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* PCI location */
936eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t pci_segment_group;
946eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t pci_bus;
956eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t pci_device;
966eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t pci_function;
976eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
986eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* Device identification */
996eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t vendor_id;
1006eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t device_id;
1016eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1026eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* The interop version determines what behavior the caller should expect
1036eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * out of all functions.
1046eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    *
1056eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * Interop version 1:
1066eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - mesa_glinterop_export_in is not read beyond "out_driver_data"
1076eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - mesa_glinterop_export_out is not written beyond "out_driver_data_written"
1086eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - mesa_glinterop_device_info is not written beyond "interop_version"
1096eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    */
1106eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t interop_version;
1116eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* Structure version 1 ends here. */
1126eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák} mesa_glinterop_device_info;
1136eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1146eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák#define MESA_GLINTEROP_EXPORT_IN_VERSION 1
1156eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1166eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák/**
1176eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * Input parameters to Mesa interop export functions.
1186eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák */
1196eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšáktypedef struct _mesa_glinterop_export_in {
1206eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* The caller should set this to: MESA_GLINTEROP_EXPORT_IN_VERSION */
1216eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t struct_version;
1226eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1236eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* One of the following:
1246eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_BUFFER
1256eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_1D
1266eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_2D
1276eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_3D
1286eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_RECTANGLE
1296eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_1D_ARRAY
1306eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_2D_ARRAY
1316eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_CUBE_MAP_ARRAY
1326eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_CUBE_MAP
1336eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_CUBE_MAP_POSITIVE_X
1346eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_CUBE_MAP_NEGATIVE_X
1356eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_CUBE_MAP_POSITIVE_Y
1366eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
1376eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_CUBE_MAP_POSITIVE_Z
1386eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
1396eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_2D_MULTISAMPLE
1406eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_2D_MULTISAMPLE_ARRAY
1416eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_TEXTURE_EXTERNAL_OES
1426eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_RENDERBUFFER
1436eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * - GL_ARRAY_BUFFER
1446eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    */
1452e726144f9158b8acd4487d9a1beceaa1be85614Emil Velikov   unsigned target;
1466eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1476eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* If target is GL_ARRAY_BUFFER, it's a buffer object.
1486eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * If target is GL_RENDERBUFFER, it's a renderbuffer object.
1496eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * If target is GL_TEXTURE_*, it's a texture object.
1506eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    */
1512e726144f9158b8acd4487d9a1beceaa1be85614Emil Velikov   unsigned obj;
1526eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1536eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* Mipmap level. Ignored for non-texture objects. */
1542e726144f9158b8acd4487d9a1beceaa1be85614Emil Velikov   unsigned miplevel;
1556eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1566eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* One of MESA_GLINTEROP_ACCESS_* flags. This describes how the exported
1576eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * object is going to be used.
1586eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    */
1596eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t access;
1606eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1616eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* Size of memory pointed to by out_driver_data. */
1626eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t out_driver_data_size;
1636eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1646eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* If the caller wants to query driver-specific data about the OpenGL
1656eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * object, this should point to the memory where that data will be stored.
1666eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * This is expected to be a temporary staging memory. The pointer is not
1676eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * allowed to be saved for later use by Mesa.
1686eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    */
1696eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   void *out_driver_data;
1706eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* Structure version 1 ends here. */
1716eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák} mesa_glinterop_export_in;
1726eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1736eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák#define MESA_GLINTEROP_EXPORT_OUT_VERSION 1
1746eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1756eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák/**
1766eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * Outputs of Mesa interop export functions.
1776eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák */
1786eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšáktypedef struct _mesa_glinterop_export_out {
1796eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* The caller should set this to: MESA_GLINTEROP_EXPORT_OUT_VERSION */
1806eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t struct_version;
1816eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1826eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* The DMABUF handle. It must be closed by the caller using the POSIX
1836eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * close() function when it's not needed anymore. Mesa is not responsible
1846eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * for closing the handle.
1856eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    *
1866eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * Not closing the handle by the caller will lead to a resource leak,
1876eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * will prevent releasing the GPU buffer, and may prevent creating new
1886eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * DMABUF handles within the process.
1896eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    */
1906eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   int dmabuf_fd;
1916eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1926eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* The mutable OpenGL internal format specified by glTextureView or
1936eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * glTexBuffer. If the object is not one of those, the original internal
1946eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * format specified by glTexStorage, glTexImage, or glRenderbufferStorage
1956eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * will be returned.
1966eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    */
1972e726144f9158b8acd4487d9a1beceaa1be85614Emil Velikov   unsigned internal_format;
1986eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
1996eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* Buffer offset and size for GL_ARRAY_BUFFER and GL_TEXTURE_BUFFER.
2006eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * This allows interop with suballocations (a buffer allocated within
2016eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * a larger buffer).
2026eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    *
2036eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * Parameters specified by glTexBufferRange for GL_TEXTURE_BUFFER are
2046eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * applied to these and can shrink the range further.
2056eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    */
206bcf9e476532f12544d1831300dbb2caa1e7c0bdfEmil Velikov   ptrdiff_t buf_offset;
207bcf9e476532f12544d1831300dbb2caa1e7c0bdfEmil Velikov   ptrdiff_t buf_size;
2086eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2096eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* Parameters specified by glTextureView. If the object is not a texture
2106eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    * view, default parameters covering the whole texture will be returned.
2116eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák    */
2122e726144f9158b8acd4487d9a1beceaa1be85614Emil Velikov   unsigned view_minlevel;
2132e726144f9158b8acd4487d9a1beceaa1be85614Emil Velikov   unsigned view_numlevels;
2142e726144f9158b8acd4487d9a1beceaa1be85614Emil Velikov   unsigned view_minlayer;
2152e726144f9158b8acd4487d9a1beceaa1be85614Emil Velikov   unsigned view_numlayers;
2166eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2176eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* The number of bytes written to out_driver_data. */
2186eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   uint32_t out_driver_data_written;
2196eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák   /* Structure version 1 ends here. */
2206eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák} mesa_glinterop_export_out;
2216eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2226eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2236eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák/**
2246eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * Query device information.
2256eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák *
2266eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * \param dpy        GLX display
2276eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * \param context    GLX context
2286eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * \param out        where to return the information
2296eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák *
2306eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * \return MESA_GLINTEROP_SUCCESS or MESA_GLINTEROP_* != 0 on error
2316eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák */
2326eeb729490a7880f8dc17de855d205a7cce5f28cMarek OlšákGLAPI int GLAPIENTRY
2336eeb729490a7880f8dc17de855d205a7cce5f28cMarek OlšákMesaGLInteropGLXQueryDeviceInfo(Display *dpy, GLXContext context,
2346eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák                                mesa_glinterop_device_info *out);
2356eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2366eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2376eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák/**
2386eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * Same as MesaGLInteropGLXQueryDeviceInfo except that it accepts EGLDisplay
2396eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * and EGLContext.
2406eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák */
2416eeb729490a7880f8dc17de855d205a7cce5f28cMarek OlšákGLAPI int GLAPIENTRY
2426eeb729490a7880f8dc17de855d205a7cce5f28cMarek OlšákMesaGLInteropEGLQueryDeviceInfo(EGLDisplay dpy, EGLContext context,
2436eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák                                mesa_glinterop_device_info *out);
2446eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2456eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2466eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák/**
2476eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * Create and return a DMABUF handle corresponding to the given OpenGL
2486eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * object, and return other parameters about the OpenGL object.
2496eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák *
2506eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * \param dpy        GLX display
2516eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * \param context    GLX context
2526eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * \param in         input parameters
2536eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * \param out        return values
2546eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák *
2556eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * \return MESA_GLINTEROP_SUCCESS or MESA_GLINTEROP_* != 0 on error
2566eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák */
2576eeb729490a7880f8dc17de855d205a7cce5f28cMarek OlšákGLAPI int GLAPIENTRY
2586eeb729490a7880f8dc17de855d205a7cce5f28cMarek OlšákMesaGLInteropGLXExportObject(Display *dpy, GLXContext context,
2596eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák                             const mesa_glinterop_export_in *in,
2606eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák                             mesa_glinterop_export_out *out);
2616eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2626eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2636eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák/**
2646eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * Same as MesaGLInteropGLXExportObject except that it accepts
2656eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák * EGLDisplay and EGLContext.
2666eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák */
2676eeb729490a7880f8dc17de855d205a7cce5f28cMarek OlšákGLAPI int GLAPIENTRY
2686eeb729490a7880f8dc17de855d205a7cce5f28cMarek OlšákMesaGLInteropEGLExportObject(EGLDisplay dpy, EGLContext context,
2696eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák                             const mesa_glinterop_export_in *in,
2706eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák                             mesa_glinterop_export_out *out);
2716eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2720d31bfd71aa44aa34f3cfa8711c4070c3fb1e26aEmil Velikov
2736eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšáktypedef int (APIENTRYP PFNMESAGLINTEROPGLXQUERYDEVICEINFOPROC)(Display *dpy, GLXContext context,
2746eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák                                                               mesa_glinterop_device_info *out);
2756eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšáktypedef int (APIENTRYP PFNMESAGLINTEROPEGLQUERYDEVICEINFOPROC)(EGLDisplay dpy, EGLContext context,
2766eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák                                                               mesa_glinterop_device_info *out);
2776eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšáktypedef int (APIENTRYP PFNMESAGLINTEROPGLXEXPORTOBJECTPROC)(Display *dpy, GLXContext context,
2786eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák                                                            const mesa_glinterop_export_in *in,
2796eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák                                                            mesa_glinterop_export_out *out);
2806eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšáktypedef int (APIENTRYP PFNMESAGLINTEROPEGLEXPORTOBJECTPROC)(EGLDisplay dpy, EGLContext context,
2816eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák                                                            const mesa_glinterop_export_in *in,
2826eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák                                                            mesa_glinterop_export_out *out);
2836eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2846eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák#ifdef __cplusplus
2856eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák}
2866eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák#endif
2876eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák
2886eeb729490a7880f8dc17de855d205a7cce5f28cMarek Olšák#endif /* MESA_GLINTEROP_H */
289