mesa_glinterop.h revision c85b34ffd04f9a7a16fe30173474e857d0f42d5f
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