1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. 3*61046927SAndroid Build Coastguard Worker * Copyright 2007-2008 Red Hat, Inc. 4*61046927SAndroid Build Coastguard Worker * (C) Copyright IBM Corporation 2004 5*61046927SAndroid Build Coastguard Worker * All Rights Reserved. 6*61046927SAndroid Build Coastguard Worker * 7*61046927SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a 8*61046927SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"), 9*61046927SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation 10*61046927SAndroid Build Coastguard Worker * on the rights to use, copy, modify, merge, publish, distribute, sub 11*61046927SAndroid Build Coastguard Worker * license, and/or sell copies of the Software, and to permit persons to whom 12*61046927SAndroid Build Coastguard Worker * the Software is furnished to do so, subject to the following conditions: 13*61046927SAndroid Build Coastguard Worker * 14*61046927SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the next 15*61046927SAndroid Build Coastguard Worker * paragraph) shall be included in all copies or substantial portions of the 16*61046927SAndroid Build Coastguard Worker * Software. 17*61046927SAndroid Build Coastguard Worker * 18*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19*61046927SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20*61046927SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 21*61046927SAndroid Build Coastguard Worker * THE COPYRIGHT HOLDERS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 22*61046927SAndroid Build Coastguard Worker * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 23*61046927SAndroid Build Coastguard Worker * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 24*61046927SAndroid Build Coastguard Worker * USE OR OTHER DEALINGS IN THE SOFTWARE. 25*61046927SAndroid Build Coastguard Worker */ 26*61046927SAndroid Build Coastguard Worker 27*61046927SAndroid Build Coastguard Worker /** 28*61046927SAndroid Build Coastguard Worker * \file dri_interface.h 29*61046927SAndroid Build Coastguard Worker * 30*61046927SAndroid Build Coastguard Worker * This file contains all the types and functions that define the interface 31*61046927SAndroid Build Coastguard Worker * between a DRI driver and driver loader. Currently, the most common driver 32*61046927SAndroid Build Coastguard Worker * loader is the XFree86 libGL.so. However, other loaders do exist, and in 33*61046927SAndroid Build Coastguard Worker * the future the server-side libglx.a will also be a loader. 34*61046927SAndroid Build Coastguard Worker * 35*61046927SAndroid Build Coastguard Worker * \author Kevin E. Martin <[email protected]> 36*61046927SAndroid Build Coastguard Worker * \author Ian Romanick <[email protected]> 37*61046927SAndroid Build Coastguard Worker * \author Kristian Høgsberg <[email protected]> 38*61046927SAndroid Build Coastguard Worker */ 39*61046927SAndroid Build Coastguard Worker 40*61046927SAndroid Build Coastguard Worker #ifndef DRI_INTERFACE_H 41*61046927SAndroid Build Coastguard Worker #define DRI_INTERFACE_H 42*61046927SAndroid Build Coastguard Worker 43*61046927SAndroid Build Coastguard Worker #include <stdbool.h> 44*61046927SAndroid Build Coastguard Worker #include <stdint.h> 45*61046927SAndroid Build Coastguard Worker 46*61046927SAndroid Build Coastguard Worker /** 47*61046927SAndroid Build Coastguard Worker * \name DRI interface structures 48*61046927SAndroid Build Coastguard Worker * 49*61046927SAndroid Build Coastguard Worker * The following structures define the interface between the GLX client 50*61046927SAndroid Build Coastguard Worker * side library and the DRI (direct rendering infrastructure). 51*61046927SAndroid Build Coastguard Worker */ 52*61046927SAndroid Build Coastguard Worker /*@{*/ 53*61046927SAndroid Build Coastguard Worker typedef struct __DRIdisplayRec __DRIdisplay; 54*61046927SAndroid Build Coastguard Worker typedef struct __DRIscreenRec __DRIscreen; 55*61046927SAndroid Build Coastguard Worker typedef struct __DRIcontextRec __DRIcontext; 56*61046927SAndroid Build Coastguard Worker typedef struct __DRIdrawableRec __DRIdrawable; 57*61046927SAndroid Build Coastguard Worker typedef struct __DRIconfigRec __DRIconfig; 58*61046927SAndroid Build Coastguard Worker typedef struct __DRIframebufferRec __DRIframebuffer; 59*61046927SAndroid Build Coastguard Worker typedef struct __DRIversionRec __DRIversion; 60*61046927SAndroid Build Coastguard Worker 61*61046927SAndroid Build Coastguard Worker typedef struct __DRIcoreExtensionRec __DRIcoreExtension; 62*61046927SAndroid Build Coastguard Worker typedef struct __DRIextensionRec __DRIextension; 63*61046927SAndroid Build Coastguard Worker typedef struct __DRIcopySubBufferExtensionRec __DRIcopySubBufferExtension; 64*61046927SAndroid Build Coastguard Worker typedef struct __DRIswapControlExtensionRec __DRIswapControlExtension; 65*61046927SAndroid Build Coastguard Worker typedef struct __DRIframeTrackingExtensionRec __DRIframeTrackingExtension; 66*61046927SAndroid Build Coastguard Worker typedef struct __DRImediaStreamCounterExtensionRec __DRImediaStreamCounterExtension; 67*61046927SAndroid Build Coastguard Worker typedef struct __DRItexOffsetExtensionRec __DRItexOffsetExtension; 68*61046927SAndroid Build Coastguard Worker typedef struct __DRItexBufferExtensionRec __DRItexBufferExtension; 69*61046927SAndroid Build Coastguard Worker typedef struct __DRIlegacyExtensionRec __DRIlegacyExtension; /* DRI1, structures of which have been deleted from the tree */ 70*61046927SAndroid Build Coastguard Worker typedef struct __DRIswrastExtensionRec __DRIswrastExtension; 71*61046927SAndroid Build Coastguard Worker typedef struct __DRIbufferRec __DRIbuffer; 72*61046927SAndroid Build Coastguard Worker typedef struct __DRIdri2ExtensionRec __DRIdri2Extension; 73*61046927SAndroid Build Coastguard Worker typedef struct __DRIdri2LoaderExtensionRec __DRIdri2LoaderExtension; 74*61046927SAndroid Build Coastguard Worker typedef struct __DRI2flushExtensionRec __DRI2flushExtension; 75*61046927SAndroid Build Coastguard Worker typedef struct __DRI2throttleExtensionRec __DRI2throttleExtension; 76*61046927SAndroid Build Coastguard Worker typedef struct __DRI2fenceExtensionRec __DRI2fenceExtension; 77*61046927SAndroid Build Coastguard Worker typedef struct __DRI2interopExtensionRec __DRI2interopExtension; 78*61046927SAndroid Build Coastguard Worker typedef struct __DRI2blobExtensionRec __DRI2blobExtension; 79*61046927SAndroid Build Coastguard Worker typedef struct __DRI2bufferDamageExtensionRec __DRI2bufferDamageExtension; 80*61046927SAndroid Build Coastguard Worker 81*61046927SAndroid Build Coastguard Worker typedef struct __DRIimageLoaderExtensionRec __DRIimageLoaderExtension; 82*61046927SAndroid Build Coastguard Worker typedef struct __DRIimageDriverExtensionRec __DRIimageDriverExtension; 83*61046927SAndroid Build Coastguard Worker 84*61046927SAndroid Build Coastguard Worker /*@}*/ 85*61046927SAndroid Build Coastguard Worker 86*61046927SAndroid Build Coastguard Worker 87*61046927SAndroid Build Coastguard Worker /** 88*61046927SAndroid Build Coastguard Worker * Extension struct. Drivers 'inherit' from this struct by embedding 89*61046927SAndroid Build Coastguard Worker * it as the first element in the extension struct. 90*61046927SAndroid Build Coastguard Worker * 91*61046927SAndroid Build Coastguard Worker * We never break API in for a DRI extension. If we need to change 92*61046927SAndroid Build Coastguard Worker * the way things work in a non-backwards compatible manner, we 93*61046927SAndroid Build Coastguard Worker * introduce a new extension. During a transition period, we can 94*61046927SAndroid Build Coastguard Worker * leave both the old and the new extension in the driver, which 95*61046927SAndroid Build Coastguard Worker * allows us to move to the new interface without having to update the 96*61046927SAndroid Build Coastguard Worker * loader(s) in lock step. 97*61046927SAndroid Build Coastguard Worker * 98*61046927SAndroid Build Coastguard Worker * However, we can add entry points to an extension over time as long 99*61046927SAndroid Build Coastguard Worker * as we don't break the old ones. As we add entry points to an 100*61046927SAndroid Build Coastguard Worker * extension, we increase the version number. The corresponding 101*61046927SAndroid Build Coastguard Worker * #define can be used to guard code that accesses the new entry 102*61046927SAndroid Build Coastguard Worker * points at compile time and the version field in the extension 103*61046927SAndroid Build Coastguard Worker * struct can be used at run-time to determine how to use the 104*61046927SAndroid Build Coastguard Worker * extension. 105*61046927SAndroid Build Coastguard Worker */ 106*61046927SAndroid Build Coastguard Worker struct __DRIextensionRec { 107*61046927SAndroid Build Coastguard Worker const char *name; 108*61046927SAndroid Build Coastguard Worker int version; 109*61046927SAndroid Build Coastguard Worker }; 110*61046927SAndroid Build Coastguard Worker 111*61046927SAndroid Build Coastguard Worker /** 112*61046927SAndroid Build Coastguard Worker * The first set of extension are the screen extensions, returned by 113*61046927SAndroid Build Coastguard Worker * __DRIcore::getExtensions(). This entry point will return a list of 114*61046927SAndroid Build Coastguard Worker * extensions and the loader can use the ones it knows about by 115*61046927SAndroid Build Coastguard Worker * casting them to more specific extensions and advertising any GLX 116*61046927SAndroid Build Coastguard Worker * extensions the DRI extensions enables. 117*61046927SAndroid Build Coastguard Worker */ 118*61046927SAndroid Build Coastguard Worker 119*61046927SAndroid Build Coastguard Worker /** 120*61046927SAndroid Build Coastguard Worker * Used by drivers to indicate support for setting the read drawable. 121*61046927SAndroid Build Coastguard Worker */ 122*61046927SAndroid Build Coastguard Worker #define __DRI_READ_DRAWABLE "DRI_ReadDrawable" 123*61046927SAndroid Build Coastguard Worker #define __DRI_READ_DRAWABLE_VERSION 1 124*61046927SAndroid Build Coastguard Worker 125*61046927SAndroid Build Coastguard Worker /** 126*61046927SAndroid Build Coastguard Worker * Used by drivers that implement the GLX_MESA_copy_sub_buffer extension. 127*61046927SAndroid Build Coastguard Worker * 128*61046927SAndroid Build Coastguard Worker * Used by the X server in swrast mode. 129*61046927SAndroid Build Coastguard Worker */ 130*61046927SAndroid Build Coastguard Worker #define __DRI_COPY_SUB_BUFFER "DRI_CopySubBuffer" 131*61046927SAndroid Build Coastguard Worker #define __DRI_COPY_SUB_BUFFER_VERSION 1 132*61046927SAndroid Build Coastguard Worker struct __DRIcopySubBufferExtensionRec { 133*61046927SAndroid Build Coastguard Worker __DRIextension base; 134*61046927SAndroid Build Coastguard Worker void (*copySubBuffer)(__DRIdrawable *drawable, int x, int y, int w, int h); 135*61046927SAndroid Build Coastguard Worker }; 136*61046927SAndroid Build Coastguard Worker 137*61046927SAndroid Build Coastguard Worker /** 138*61046927SAndroid Build Coastguard Worker * Used by drivers that implement the GLX_SGI_swap_control or 139*61046927SAndroid Build Coastguard Worker * GLX_MESA_swap_control extension. 140*61046927SAndroid Build Coastguard Worker * 141*61046927SAndroid Build Coastguard Worker * Used by the X server. 142*61046927SAndroid Build Coastguard Worker */ 143*61046927SAndroid Build Coastguard Worker #define __DRI_SWAP_CONTROL "DRI_SwapControl" 144*61046927SAndroid Build Coastguard Worker #define __DRI_SWAP_CONTROL_VERSION 1 145*61046927SAndroid Build Coastguard Worker struct __DRIswapControlExtensionRec { 146*61046927SAndroid Build Coastguard Worker __DRIextension base; 147*61046927SAndroid Build Coastguard Worker void (*setSwapInterval)(__DRIdrawable *drawable, unsigned int inteval); 148*61046927SAndroid Build Coastguard Worker unsigned int (*getSwapInterval)(__DRIdrawable *drawable); 149*61046927SAndroid Build Coastguard Worker }; 150*61046927SAndroid Build Coastguard Worker 151*61046927SAndroid Build Coastguard Worker /** 152*61046927SAndroid Build Coastguard Worker * Used by drivers that implement the GLX_SGI_video_sync extension. 153*61046927SAndroid Build Coastguard Worker * 154*61046927SAndroid Build Coastguard Worker * Not used by the X server. 155*61046927SAndroid Build Coastguard Worker */ 156*61046927SAndroid Build Coastguard Worker #define __DRI_MEDIA_STREAM_COUNTER "DRI_MediaStreamCounter" 157*61046927SAndroid Build Coastguard Worker #define __DRI_MEDIA_STREAM_COUNTER_VERSION 1 158*61046927SAndroid Build Coastguard Worker struct __DRImediaStreamCounterExtensionRec { 159*61046927SAndroid Build Coastguard Worker __DRIextension base; 160*61046927SAndroid Build Coastguard Worker 161*61046927SAndroid Build Coastguard Worker /** 162*61046927SAndroid Build Coastguard Worker * Wait for the MSC to equal target_msc, or, if that has already passed, 163*61046927SAndroid Build Coastguard Worker * the next time (MSC % divisor) is equal to remainder. If divisor is 164*61046927SAndroid Build Coastguard Worker * zero, the function will return as soon as MSC is greater than or equal 165*61046927SAndroid Build Coastguard Worker * to target_msc. 166*61046927SAndroid Build Coastguard Worker */ 167*61046927SAndroid Build Coastguard Worker int (*waitForMSC)(__DRIdrawable *drawable, 168*61046927SAndroid Build Coastguard Worker int64_t target_msc, int64_t divisor, int64_t remainder, 169*61046927SAndroid Build Coastguard Worker int64_t * msc, int64_t * sbc); 170*61046927SAndroid Build Coastguard Worker 171*61046927SAndroid Build Coastguard Worker /** 172*61046927SAndroid Build Coastguard Worker * Get the number of vertical refreshes since some point in time before 173*61046927SAndroid Build Coastguard Worker * this function was first called (i.e., system start up). 174*61046927SAndroid Build Coastguard Worker */ 175*61046927SAndroid Build Coastguard Worker int (*getDrawableMSC)(__DRIscreen *screen, __DRIdrawable *drawable, 176*61046927SAndroid Build Coastguard Worker int64_t *msc); 177*61046927SAndroid Build Coastguard Worker }; 178*61046927SAndroid Build Coastguard Worker 179*61046927SAndroid Build Coastguard Worker /* Valid values for format in the setTexBuffer2 function below. These 180*61046927SAndroid Build Coastguard Worker * values match the GLX tokens for compatibility reasons, but we 181*61046927SAndroid Build Coastguard Worker * define them here since the DRI interface can't depend on GLX. */ 182*61046927SAndroid Build Coastguard Worker #define __DRI_TEXTURE_FORMAT_NONE 0x20D8 183*61046927SAndroid Build Coastguard Worker #define __DRI_TEXTURE_FORMAT_RGB 0x20D9 184*61046927SAndroid Build Coastguard Worker #define __DRI_TEXTURE_FORMAT_RGBA 0x20DA 185*61046927SAndroid Build Coastguard Worker 186*61046927SAndroid Build Coastguard Worker #define __DRI_TEX_BUFFER "DRI_TexBuffer" 187*61046927SAndroid Build Coastguard Worker #define __DRI_TEX_BUFFER_VERSION 3 188*61046927SAndroid Build Coastguard Worker struct __DRItexBufferExtensionRec { 189*61046927SAndroid Build Coastguard Worker __DRIextension base; 190*61046927SAndroid Build Coastguard Worker 191*61046927SAndroid Build Coastguard Worker /** 192*61046927SAndroid Build Coastguard Worker * Method to override base texture image with the contents of a 193*61046927SAndroid Build Coastguard Worker * __DRIdrawable. 194*61046927SAndroid Build Coastguard Worker * 195*61046927SAndroid Build Coastguard Worker * For GLX_EXT_texture_from_pixmap with AIGLX. Deprecated in favor of 196*61046927SAndroid Build Coastguard Worker * setTexBuffer2 in version 2 of this interface. Not used by post-2011 X. 197*61046927SAndroid Build Coastguard Worker */ 198*61046927SAndroid Build Coastguard Worker void (*setTexBuffer)(__DRIcontext *pDRICtx, 199*61046927SAndroid Build Coastguard Worker int target, 200*61046927SAndroid Build Coastguard Worker __DRIdrawable *pDraw); 201*61046927SAndroid Build Coastguard Worker 202*61046927SAndroid Build Coastguard Worker /** 203*61046927SAndroid Build Coastguard Worker * Method to override base texture image with the contents of a 204*61046927SAndroid Build Coastguard Worker * __DRIdrawable, including the required texture format attribute. 205*61046927SAndroid Build Coastguard Worker * 206*61046927SAndroid Build Coastguard Worker * For GLX_EXT_texture_from_pixmap with AIGLX. Used by the X server since 207*61046927SAndroid Build Coastguard Worker * 2011. 208*61046927SAndroid Build Coastguard Worker * 209*61046927SAndroid Build Coastguard Worker * \since 2 210*61046927SAndroid Build Coastguard Worker */ 211*61046927SAndroid Build Coastguard Worker void (*setTexBuffer2)(__DRIcontext *pDRICtx, 212*61046927SAndroid Build Coastguard Worker int target, 213*61046927SAndroid Build Coastguard Worker int format, 214*61046927SAndroid Build Coastguard Worker __DRIdrawable *pDraw); 215*61046927SAndroid Build Coastguard Worker /** 216*61046927SAndroid Build Coastguard Worker * Called from glXReleaseTexImageEXT(). 217*61046927SAndroid Build Coastguard Worker * 218*61046927SAndroid Build Coastguard Worker * This was used by i965 in 24952160fde9 ("i965: Use finish_external instead 219*61046927SAndroid Build Coastguard Worker * of make_shareable in setTexBuffer2") to note when the user mis-used the 220*61046927SAndroid Build Coastguard Worker * interface in a way that would produce rendering bugs, and try to recover 221*61046927SAndroid Build Coastguard Worker * from them. This has only ever been used from inside the Mesa tree and 222*61046927SAndroid Build Coastguard Worker * was never used by the X server. 223*61046927SAndroid Build Coastguard Worker * 224*61046927SAndroid Build Coastguard Worker * \since 3 225*61046927SAndroid Build Coastguard Worker */ 226*61046927SAndroid Build Coastguard Worker void (*releaseTexBuffer)(__DRIcontext *pDRICtx, 227*61046927SAndroid Build Coastguard Worker int target, 228*61046927SAndroid Build Coastguard Worker __DRIdrawable *pDraw); 229*61046927SAndroid Build Coastguard Worker }; 230*61046927SAndroid Build Coastguard Worker 231*61046927SAndroid Build Coastguard Worker /** 232*61046927SAndroid Build Coastguard Worker * Used by drivers that implement DRI2. Version 3 is used by the X server. 233*61046927SAndroid Build Coastguard Worker */ 234*61046927SAndroid Build Coastguard Worker #define __DRI2_FLUSH "DRI2_Flush" 235*61046927SAndroid Build Coastguard Worker #define __DRI2_FLUSH_VERSION 4 236*61046927SAndroid Build Coastguard Worker 237*61046927SAndroid Build Coastguard Worker #define __DRI2_FLUSH_DRAWABLE (1 << 0) /* the drawable should be flushed. */ 238*61046927SAndroid Build Coastguard Worker #define __DRI2_FLUSH_CONTEXT (1 << 1) /* glFlush should be called */ 239*61046927SAndroid Build Coastguard Worker #define __DRI2_FLUSH_INVALIDATE_ANCILLARY (1 << 2) 240*61046927SAndroid Build Coastguard Worker 241*61046927SAndroid Build Coastguard Worker enum __DRI2throttleReason { 242*61046927SAndroid Build Coastguard Worker __DRI2_THROTTLE_SWAPBUFFER, 243*61046927SAndroid Build Coastguard Worker __DRI2_THROTTLE_COPYSUBBUFFER, 244*61046927SAndroid Build Coastguard Worker __DRI2_THROTTLE_FLUSHFRONT, 245*61046927SAndroid Build Coastguard Worker __DRI2_NOTHROTTLE_SWAPBUFFER, 246*61046927SAndroid Build Coastguard Worker }; 247*61046927SAndroid Build Coastguard Worker 248*61046927SAndroid Build Coastguard Worker struct __DRI2flushExtensionRec { 249*61046927SAndroid Build Coastguard Worker __DRIextension base; 250*61046927SAndroid Build Coastguard Worker void (*flush)(__DRIdrawable *drawable); 251*61046927SAndroid Build Coastguard Worker 252*61046927SAndroid Build Coastguard Worker /** 253*61046927SAndroid Build Coastguard Worker * Ask the driver to call getBuffers/getBuffersWithFormat before 254*61046927SAndroid Build Coastguard Worker * it starts rendering again. 255*61046927SAndroid Build Coastguard Worker * 256*61046927SAndroid Build Coastguard Worker * \param drawable the drawable to invalidate 257*61046927SAndroid Build Coastguard Worker * 258*61046927SAndroid Build Coastguard Worker * \since 3 259*61046927SAndroid Build Coastguard Worker */ 260*61046927SAndroid Build Coastguard Worker void (*invalidate)(__DRIdrawable *drawable); 261*61046927SAndroid Build Coastguard Worker 262*61046927SAndroid Build Coastguard Worker /** 263*61046927SAndroid Build Coastguard Worker * This function reduces the number of flushes in the driver by combining 264*61046927SAndroid Build Coastguard Worker * several operations into one call. 265*61046927SAndroid Build Coastguard Worker * 266*61046927SAndroid Build Coastguard Worker * It can: 267*61046927SAndroid Build Coastguard Worker * - throttle 268*61046927SAndroid Build Coastguard Worker * - flush a drawable 269*61046927SAndroid Build Coastguard Worker * - flush a context 270*61046927SAndroid Build Coastguard Worker * 271*61046927SAndroid Build Coastguard Worker * \param context the context 272*61046927SAndroid Build Coastguard Worker * \param drawable the drawable to flush 273*61046927SAndroid Build Coastguard Worker * \param flags a combination of _DRI2_FLUSH_xxx flags 274*61046927SAndroid Build Coastguard Worker * \param throttle_reason the reason for throttling, 0 = no throttling 275*61046927SAndroid Build Coastguard Worker * 276*61046927SAndroid Build Coastguard Worker * \since 4 277*61046927SAndroid Build Coastguard Worker */ 278*61046927SAndroid Build Coastguard Worker void (*flush_with_flags)(__DRIcontext *ctx, 279*61046927SAndroid Build Coastguard Worker __DRIdrawable *drawable, 280*61046927SAndroid Build Coastguard Worker unsigned flags, 281*61046927SAndroid Build Coastguard Worker enum __DRI2throttleReason throttle_reason); 282*61046927SAndroid Build Coastguard Worker }; 283*61046927SAndroid Build Coastguard Worker 284*61046927SAndroid Build Coastguard Worker 285*61046927SAndroid Build Coastguard Worker /** 286*61046927SAndroid Build Coastguard Worker * Extension that the driver uses to request 287*61046927SAndroid Build Coastguard Worker * throttle callbacks. 288*61046927SAndroid Build Coastguard Worker * 289*61046927SAndroid Build Coastguard Worker * Not used by the X server. 290*61046927SAndroid Build Coastguard Worker */ 291*61046927SAndroid Build Coastguard Worker 292*61046927SAndroid Build Coastguard Worker #define __DRI2_THROTTLE "DRI2_Throttle" 293*61046927SAndroid Build Coastguard Worker #define __DRI2_THROTTLE_VERSION 1 294*61046927SAndroid Build Coastguard Worker 295*61046927SAndroid Build Coastguard Worker struct __DRI2throttleExtensionRec { 296*61046927SAndroid Build Coastguard Worker __DRIextension base; 297*61046927SAndroid Build Coastguard Worker void (*throttle)(__DRIcontext *ctx, 298*61046927SAndroid Build Coastguard Worker __DRIdrawable *drawable, 299*61046927SAndroid Build Coastguard Worker enum __DRI2throttleReason reason); 300*61046927SAndroid Build Coastguard Worker }; 301*61046927SAndroid Build Coastguard Worker 302*61046927SAndroid Build Coastguard Worker /** 303*61046927SAndroid Build Coastguard Worker * Extension for EGL_ANDROID_blob_cache 304*61046927SAndroid Build Coastguard Worker * * 305*61046927SAndroid Build Coastguard Worker * Not used by the X server. 306*61046927SAndroid Build Coastguard Worker */ 307*61046927SAndroid Build Coastguard Worker 308*61046927SAndroid Build Coastguard Worker #define __DRI2_BLOB "DRI2_Blob" 309*61046927SAndroid Build Coastguard Worker #define __DRI2_BLOB_VERSION 1 310*61046927SAndroid Build Coastguard Worker 311*61046927SAndroid Build Coastguard Worker typedef void 312*61046927SAndroid Build Coastguard Worker (*__DRIblobCacheSet) (const void *key, signed long keySize, 313*61046927SAndroid Build Coastguard Worker const void *value, signed long valueSize); 314*61046927SAndroid Build Coastguard Worker 315*61046927SAndroid Build Coastguard Worker typedef signed long 316*61046927SAndroid Build Coastguard Worker (*__DRIblobCacheGet) (const void *key, signed long keySize, 317*61046927SAndroid Build Coastguard Worker void *value, signed long valueSize); 318*61046927SAndroid Build Coastguard Worker 319*61046927SAndroid Build Coastguard Worker struct __DRI2blobExtensionRec { 320*61046927SAndroid Build Coastguard Worker __DRIextension base; 321*61046927SAndroid Build Coastguard Worker 322*61046927SAndroid Build Coastguard Worker /** 323*61046927SAndroid Build Coastguard Worker * Set cache functions for setting and getting cache entries. 324*61046927SAndroid Build Coastguard Worker */ 325*61046927SAndroid Build Coastguard Worker void (*set_cache_funcs) (__DRIscreen *screen, 326*61046927SAndroid Build Coastguard Worker __DRIblobCacheSet set, __DRIblobCacheGet get); 327*61046927SAndroid Build Coastguard Worker }; 328*61046927SAndroid Build Coastguard Worker 329*61046927SAndroid Build Coastguard Worker /** 330*61046927SAndroid Build Coastguard Worker * Extension for fences / synchronization objects. 331*61046927SAndroid Build Coastguard Worker * * 332*61046927SAndroid Build Coastguard Worker * Not used by the X server. 333*61046927SAndroid Build Coastguard Worker */ 334*61046927SAndroid Build Coastguard Worker 335*61046927SAndroid Build Coastguard Worker #define __DRI2_FENCE "DRI2_Fence" 336*61046927SAndroid Build Coastguard Worker #define __DRI2_FENCE_VERSION 2 337*61046927SAndroid Build Coastguard Worker 338*61046927SAndroid Build Coastguard Worker #define __DRI2_FENCE_TIMEOUT_INFINITE 0xffffffffffffffffull 339*61046927SAndroid Build Coastguard Worker 340*61046927SAndroid Build Coastguard Worker #define __DRI2_FENCE_FLAG_FLUSH_COMMANDS (1 << 0) 341*61046927SAndroid Build Coastguard Worker 342*61046927SAndroid Build Coastguard Worker /** 343*61046927SAndroid Build Coastguard Worker * \name Capabilities that might be returned by __DRI2fenceExtensionRec::get_capabilities 344*61046927SAndroid Build Coastguard Worker */ 345*61046927SAndroid Build Coastguard Worker /*@{*/ 346*61046927SAndroid Build Coastguard Worker #define __DRI_FENCE_CAP_NATIVE_FD 1 347*61046927SAndroid Build Coastguard Worker /*@}*/ 348*61046927SAndroid Build Coastguard Worker 349*61046927SAndroid Build Coastguard Worker struct __DRI2fenceExtensionRec { 350*61046927SAndroid Build Coastguard Worker __DRIextension base; 351*61046927SAndroid Build Coastguard Worker 352*61046927SAndroid Build Coastguard Worker /** 353*61046927SAndroid Build Coastguard Worker * Create and insert a fence into the command stream of the context. 354*61046927SAndroid Build Coastguard Worker */ 355*61046927SAndroid Build Coastguard Worker void *(*create_fence)(__DRIcontext *ctx); 356*61046927SAndroid Build Coastguard Worker 357*61046927SAndroid Build Coastguard Worker /** 358*61046927SAndroid Build Coastguard Worker * Get a fence associated with the OpenCL event object. 359*61046927SAndroid Build Coastguard Worker * This can be NULL, meaning that OpenCL interoperability is not supported. 360*61046927SAndroid Build Coastguard Worker */ 361*61046927SAndroid Build Coastguard Worker void *(*get_fence_from_cl_event)(__DRIscreen *screen, intptr_t cl_event); 362*61046927SAndroid Build Coastguard Worker 363*61046927SAndroid Build Coastguard Worker /** 364*61046927SAndroid Build Coastguard Worker * Destroy a fence. 365*61046927SAndroid Build Coastguard Worker */ 366*61046927SAndroid Build Coastguard Worker void (*destroy_fence)(__DRIscreen *screen, void *fence); 367*61046927SAndroid Build Coastguard Worker 368*61046927SAndroid Build Coastguard Worker /** 369*61046927SAndroid Build Coastguard Worker * This function waits and doesn't return until the fence is signalled 370*61046927SAndroid Build Coastguard Worker * or the timeout expires. It returns true if the fence has been signaled. 371*61046927SAndroid Build Coastguard Worker * 372*61046927SAndroid Build Coastguard Worker * \param ctx the context where commands are flushed 373*61046927SAndroid Build Coastguard Worker * \param fence the fence 374*61046927SAndroid Build Coastguard Worker * \param flags a combination of __DRI2_FENCE_FLAG_xxx flags 375*61046927SAndroid Build Coastguard Worker * \param timeout the timeout in ns or __DRI2_FENCE_TIMEOUT_INFINITE 376*61046927SAndroid Build Coastguard Worker */ 377*61046927SAndroid Build Coastguard Worker unsigned char (*client_wait_sync)(__DRIcontext *ctx, void *fence, 378*61046927SAndroid Build Coastguard Worker unsigned flags, uint64_t timeout); 379*61046927SAndroid Build Coastguard Worker 380*61046927SAndroid Build Coastguard Worker /** 381*61046927SAndroid Build Coastguard Worker * This function enqueues a wait command into the command stream of 382*61046927SAndroid Build Coastguard Worker * the context and then returns. When the execution reaches the wait 383*61046927SAndroid Build Coastguard Worker * command, no further execution will be done in the context until 384*61046927SAndroid Build Coastguard Worker * the fence is signaled. This is a no-op if the device doesn't support 385*61046927SAndroid Build Coastguard Worker * parallel execution of contexts. 386*61046927SAndroid Build Coastguard Worker * 387*61046927SAndroid Build Coastguard Worker * \param ctx the context where the waiting is done 388*61046927SAndroid Build Coastguard Worker * \param fence the fence 389*61046927SAndroid Build Coastguard Worker * \param flags a combination of __DRI2_FENCE_FLAG_xxx flags that make 390*61046927SAndroid Build Coastguard Worker * sense with this function (right now there are none) 391*61046927SAndroid Build Coastguard Worker */ 392*61046927SAndroid Build Coastguard Worker void (*server_wait_sync)(__DRIcontext *ctx, void *fence, unsigned flags); 393*61046927SAndroid Build Coastguard Worker 394*61046927SAndroid Build Coastguard Worker /** 395*61046927SAndroid Build Coastguard Worker * Query for general capabilities of the driver that concern fences. 396*61046927SAndroid Build Coastguard Worker * Returns a bitmask of __DRI_FENCE_CAP_x 397*61046927SAndroid Build Coastguard Worker * 398*61046927SAndroid Build Coastguard Worker * \since 2 399*61046927SAndroid Build Coastguard Worker */ 400*61046927SAndroid Build Coastguard Worker unsigned (*get_capabilities)(__DRIscreen *screen); 401*61046927SAndroid Build Coastguard Worker 402*61046927SAndroid Build Coastguard Worker /** 403*61046927SAndroid Build Coastguard Worker * Create an fd (file descriptor) associated fence. If the fence fd 404*61046927SAndroid Build Coastguard Worker * is -1, this behaves similarly to create_fence() except that when 405*61046927SAndroid Build Coastguard Worker * rendering is flushed the driver creates a fence fd. Otherwise, 406*61046927SAndroid Build Coastguard Worker * the driver wraps an existing fence fd. 407*61046927SAndroid Build Coastguard Worker * 408*61046927SAndroid Build Coastguard Worker * This is used to implement the EGL_ANDROID_native_fence_sync extension. 409*61046927SAndroid Build Coastguard Worker * 410*61046927SAndroid Build Coastguard Worker * \since 2 411*61046927SAndroid Build Coastguard Worker * 412*61046927SAndroid Build Coastguard Worker * \param ctx the context associated with the fence 413*61046927SAndroid Build Coastguard Worker * \param fd the fence fd or -1 414*61046927SAndroid Build Coastguard Worker */ 415*61046927SAndroid Build Coastguard Worker void *(*create_fence_fd)(__DRIcontext *ctx, int fd); 416*61046927SAndroid Build Coastguard Worker 417*61046927SAndroid Build Coastguard Worker /** 418*61046927SAndroid Build Coastguard Worker * For fences created with create_fence_fd(), after rendering is flushed, 419*61046927SAndroid Build Coastguard Worker * this retrieves the native fence fd. Caller takes ownership of the 420*61046927SAndroid Build Coastguard Worker * fd and will close() it when it is no longer needed. 421*61046927SAndroid Build Coastguard Worker * 422*61046927SAndroid Build Coastguard Worker * \since 2 423*61046927SAndroid Build Coastguard Worker * 424*61046927SAndroid Build Coastguard Worker * \param screen the screen associated with the fence 425*61046927SAndroid Build Coastguard Worker * \param fence the fence 426*61046927SAndroid Build Coastguard Worker */ 427*61046927SAndroid Build Coastguard Worker int (*get_fence_fd)(__DRIscreen *screen, void *fence); 428*61046927SAndroid Build Coastguard Worker }; 429*61046927SAndroid Build Coastguard Worker 430*61046927SAndroid Build Coastguard Worker 431*61046927SAndroid Build Coastguard Worker /** 432*61046927SAndroid Build Coastguard Worker * Extension for API interop. 433*61046927SAndroid Build Coastguard Worker * See GL/mesa_glinterop.h. 434*61046927SAndroid Build Coastguard Worker * * 435*61046927SAndroid Build Coastguard Worker * Not used by the X server. 436*61046927SAndroid Build Coastguard Worker */ 437*61046927SAndroid Build Coastguard Worker 438*61046927SAndroid Build Coastguard Worker #define __DRI2_INTEROP "DRI2_Interop" 439*61046927SAndroid Build Coastguard Worker #define __DRI2_INTEROP_VERSION 2 440*61046927SAndroid Build Coastguard Worker 441*61046927SAndroid Build Coastguard Worker struct mesa_glinterop_device_info; 442*61046927SAndroid Build Coastguard Worker struct mesa_glinterop_export_in; 443*61046927SAndroid Build Coastguard Worker struct mesa_glinterop_export_out; 444*61046927SAndroid Build Coastguard Worker struct mesa_glinterop_flush_out; 445*61046927SAndroid Build Coastguard Worker typedef struct __GLsync *GLsync; 446*61046927SAndroid Build Coastguard Worker 447*61046927SAndroid Build Coastguard Worker struct __DRI2interopExtensionRec { 448*61046927SAndroid Build Coastguard Worker __DRIextension base; 449*61046927SAndroid Build Coastguard Worker 450*61046927SAndroid Build Coastguard Worker /** Same as MesaGLInterop*QueryDeviceInfo. */ 451*61046927SAndroid Build Coastguard Worker int (*query_device_info)(__DRIcontext *ctx, 452*61046927SAndroid Build Coastguard Worker struct mesa_glinterop_device_info *out); 453*61046927SAndroid Build Coastguard Worker 454*61046927SAndroid Build Coastguard Worker /** Same as MesaGLInterop*ExportObject. */ 455*61046927SAndroid Build Coastguard Worker int (*export_object)(__DRIcontext *ctx, 456*61046927SAndroid Build Coastguard Worker struct mesa_glinterop_export_in *in, 457*61046927SAndroid Build Coastguard Worker struct mesa_glinterop_export_out *out); 458*61046927SAndroid Build Coastguard Worker 459*61046927SAndroid Build Coastguard Worker /** 460*61046927SAndroid Build Coastguard Worker * Same as MesaGLInterop*FlushObjects. 461*61046927SAndroid Build Coastguard Worker * 462*61046927SAndroid Build Coastguard Worker * \since 2 463*61046927SAndroid Build Coastguard Worker */ 464*61046927SAndroid Build Coastguard Worker int (*flush_objects)(__DRIcontext *ctx, 465*61046927SAndroid Build Coastguard Worker unsigned count, struct mesa_glinterop_export_in *objects, 466*61046927SAndroid Build Coastguard Worker struct mesa_glinterop_flush_out *out); 467*61046927SAndroid Build Coastguard Worker }; 468*61046927SAndroid Build Coastguard Worker 469*61046927SAndroid Build Coastguard Worker 470*61046927SAndroid Build Coastguard Worker /** 471*61046927SAndroid Build Coastguard Worker * Extension for limiting window system back buffer rendering to user-defined 472*61046927SAndroid Build Coastguard Worker * scissor region. 473*61046927SAndroid Build Coastguard Worker * 474*61046927SAndroid Build Coastguard Worker * Not used by the X server. 475*61046927SAndroid Build Coastguard Worker */ 476*61046927SAndroid Build Coastguard Worker 477*61046927SAndroid Build Coastguard Worker #define __DRI2_BUFFER_DAMAGE "DRI2_BufferDamage" 478*61046927SAndroid Build Coastguard Worker #define __DRI2_BUFFER_DAMAGE_VERSION 1 479*61046927SAndroid Build Coastguard Worker 480*61046927SAndroid Build Coastguard Worker struct __DRI2bufferDamageExtensionRec { 481*61046927SAndroid Build Coastguard Worker __DRIextension base; 482*61046927SAndroid Build Coastguard Worker 483*61046927SAndroid Build Coastguard Worker /** 484*61046927SAndroid Build Coastguard Worker * Provides an array of rectangles representing an overriding scissor region 485*61046927SAndroid Build Coastguard Worker * for rendering operations performed to the specified drawable. These 486*61046927SAndroid Build Coastguard Worker * rectangles do not replace client API scissor regions or draw 487*61046927SAndroid Build Coastguard Worker * co-ordinates, but instead inform the driver of the overall bounds of all 488*61046927SAndroid Build Coastguard Worker * operations which will be issued before the next flush. 489*61046927SAndroid Build Coastguard Worker * 490*61046927SAndroid Build Coastguard Worker * Any rendering operations writing pixels outside this region to the 491*61046927SAndroid Build Coastguard Worker * drawable will have an undefined effect on the entire drawable. 492*61046927SAndroid Build Coastguard Worker * 493*61046927SAndroid Build Coastguard Worker * This entrypoint may only be called after the drawable has either been 494*61046927SAndroid Build Coastguard Worker * newly created or flushed, and before any rendering operations which write 495*61046927SAndroid Build Coastguard Worker * pixels to the drawable. Calling this entrypoint at any other time will 496*61046927SAndroid Build Coastguard Worker * have an undefined effect on the entire drawable. 497*61046927SAndroid Build Coastguard Worker * 498*61046927SAndroid Build Coastguard Worker * Calling this entrypoint with @nrects 0 and @rects NULL will reset the 499*61046927SAndroid Build Coastguard Worker * region to the buffer's full size. This entrypoint may be called once to 500*61046927SAndroid Build Coastguard Worker * reset the region, followed by a second call with a populated region, 501*61046927SAndroid Build Coastguard Worker * before a rendering call is made. 502*61046927SAndroid Build Coastguard Worker * 503*61046927SAndroid Build Coastguard Worker * Used to implement EGL_KHR_partial_update. 504*61046927SAndroid Build Coastguard Worker * 505*61046927SAndroid Build Coastguard Worker * \param drawable affected drawable 506*61046927SAndroid Build Coastguard Worker * \param nrects number of rectangles provided 507*61046927SAndroid Build Coastguard Worker * \param rects the array of rectangles, lower-left origin 508*61046927SAndroid Build Coastguard Worker */ 509*61046927SAndroid Build Coastguard Worker void (*set_damage_region)(__DRIdrawable *drawable, unsigned int nrects, 510*61046927SAndroid Build Coastguard Worker int *rects); 511*61046927SAndroid Build Coastguard Worker }; 512*61046927SAndroid Build Coastguard Worker 513*61046927SAndroid Build Coastguard Worker /*@}*/ 514*61046927SAndroid Build Coastguard Worker 515*61046927SAndroid Build Coastguard Worker /** 516*61046927SAndroid Build Coastguard Worker * The following extensions describe loader features that the DRI 517*61046927SAndroid Build Coastguard Worker * driver can make use of. Some of these are mandatory, such as the 518*61046927SAndroid Build Coastguard Worker * getDrawableInfo extension for DRI and the DRI Loader extensions for 519*61046927SAndroid Build Coastguard Worker * DRI2, while others are optional, and if present allow the driver to 520*61046927SAndroid Build Coastguard Worker * expose certain features. The loader pass in a NULL terminated 521*61046927SAndroid Build Coastguard Worker * array of these extensions to the driver in the createNewScreen 522*61046927SAndroid Build Coastguard Worker * constructor. 523*61046927SAndroid Build Coastguard Worker */ 524*61046927SAndroid Build Coastguard Worker 525*61046927SAndroid Build Coastguard Worker typedef struct __DRIgetDrawableInfoExtensionRec __DRIgetDrawableInfoExtension; 526*61046927SAndroid Build Coastguard Worker typedef struct __DRIsystemTimeExtensionRec __DRIsystemTimeExtension; 527*61046927SAndroid Build Coastguard Worker typedef struct __DRIdamageExtensionRec __DRIdamageExtension; 528*61046927SAndroid Build Coastguard Worker typedef struct __DRIloaderExtensionRec __DRIloaderExtension; 529*61046927SAndroid Build Coastguard Worker typedef struct __DRIswrastLoaderExtensionRec __DRIswrastLoaderExtension; 530*61046927SAndroid Build Coastguard Worker 531*61046927SAndroid Build Coastguard Worker /** 532*61046927SAndroid Build Coastguard Worker * Callback to get system time for media stream counter extensions. 533*61046927SAndroid Build Coastguard Worker * 534*61046927SAndroid Build Coastguard Worker * Not used by the X server. 535*61046927SAndroid Build Coastguard Worker */ 536*61046927SAndroid Build Coastguard Worker #define __DRI_SYSTEM_TIME "DRI_SystemTime" 537*61046927SAndroid Build Coastguard Worker #define __DRI_SYSTEM_TIME_VERSION 1 538*61046927SAndroid Build Coastguard Worker struct __DRIsystemTimeExtensionRec { 539*61046927SAndroid Build Coastguard Worker __DRIextension base; 540*61046927SAndroid Build Coastguard Worker 541*61046927SAndroid Build Coastguard Worker /** 542*61046927SAndroid Build Coastguard Worker * Get the 64-bit unadjusted system time (UST). 543*61046927SAndroid Build Coastguard Worker */ 544*61046927SAndroid Build Coastguard Worker int (*getUST)(int64_t * ust); 545*61046927SAndroid Build Coastguard Worker 546*61046927SAndroid Build Coastguard Worker /** 547*61046927SAndroid Build Coastguard Worker * Get the media stream counter (MSC) rate. 548*61046927SAndroid Build Coastguard Worker * 549*61046927SAndroid Build Coastguard Worker * Matching the definition in GLX_OML_sync_control, this function returns 550*61046927SAndroid Build Coastguard Worker * the rate of the "media stream counter". In practical terms, this is 551*61046927SAndroid Build Coastguard Worker * the frame refresh rate of the display. 552*61046927SAndroid Build Coastguard Worker */ 553*61046927SAndroid Build Coastguard Worker unsigned char (*getMSCRate)(__DRIdrawable *draw, 554*61046927SAndroid Build Coastguard Worker int32_t * numerator, int32_t * denominator, 555*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 556*61046927SAndroid Build Coastguard Worker }; 557*61046927SAndroid Build Coastguard Worker 558*61046927SAndroid Build Coastguard Worker #define __DRI_SWRAST_IMAGE_OP_DRAW 1 559*61046927SAndroid Build Coastguard Worker #define __DRI_SWRAST_IMAGE_OP_CLEAR 2 560*61046927SAndroid Build Coastguard Worker #define __DRI_SWRAST_IMAGE_OP_SWAP 3 561*61046927SAndroid Build Coastguard Worker 562*61046927SAndroid Build Coastguard Worker /** 563*61046927SAndroid Build Coastguard Worker * SWRast Loader extension. 564*61046927SAndroid Build Coastguard Worker * 565*61046927SAndroid Build Coastguard Worker * Version 1 is advertised by the X server. 566*61046927SAndroid Build Coastguard Worker */ 567*61046927SAndroid Build Coastguard Worker #define __DRI_SWRAST_LOADER "DRI_SWRastLoader" 568*61046927SAndroid Build Coastguard Worker #define __DRI_SWRAST_LOADER_VERSION 6 569*61046927SAndroid Build Coastguard Worker struct __DRIswrastLoaderExtensionRec { 570*61046927SAndroid Build Coastguard Worker __DRIextension base; 571*61046927SAndroid Build Coastguard Worker 572*61046927SAndroid Build Coastguard Worker /* 573*61046927SAndroid Build Coastguard Worker * Drawable position and size 574*61046927SAndroid Build Coastguard Worker */ 575*61046927SAndroid Build Coastguard Worker void (*getDrawableInfo)(__DRIdrawable *drawable, 576*61046927SAndroid Build Coastguard Worker int *x, int *y, int *width, int *height, 577*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 578*61046927SAndroid Build Coastguard Worker 579*61046927SAndroid Build Coastguard Worker /** 580*61046927SAndroid Build Coastguard Worker * Put image to drawable 581*61046927SAndroid Build Coastguard Worker */ 582*61046927SAndroid Build Coastguard Worker void (*putImage)(__DRIdrawable *drawable, int op, 583*61046927SAndroid Build Coastguard Worker int x, int y, int width, int height, 584*61046927SAndroid Build Coastguard Worker char *data, void *loaderPrivate); 585*61046927SAndroid Build Coastguard Worker 586*61046927SAndroid Build Coastguard Worker /** 587*61046927SAndroid Build Coastguard Worker * Get image from readable 588*61046927SAndroid Build Coastguard Worker */ 589*61046927SAndroid Build Coastguard Worker void (*getImage)(__DRIdrawable *readable, 590*61046927SAndroid Build Coastguard Worker int x, int y, int width, int height, 591*61046927SAndroid Build Coastguard Worker char *data, void *loaderPrivate); 592*61046927SAndroid Build Coastguard Worker 593*61046927SAndroid Build Coastguard Worker /** 594*61046927SAndroid Build Coastguard Worker * Put image to drawable 595*61046927SAndroid Build Coastguard Worker * 596*61046927SAndroid Build Coastguard Worker * \since 2 597*61046927SAndroid Build Coastguard Worker */ 598*61046927SAndroid Build Coastguard Worker void (*putImage2)(__DRIdrawable *drawable, int op, 599*61046927SAndroid Build Coastguard Worker int x, int y, int width, int height, int stride, 600*61046927SAndroid Build Coastguard Worker char *data, void *loaderPrivate); 601*61046927SAndroid Build Coastguard Worker 602*61046927SAndroid Build Coastguard Worker /** 603*61046927SAndroid Build Coastguard Worker * Put image to drawable 604*61046927SAndroid Build Coastguard Worker * 605*61046927SAndroid Build Coastguard Worker * \since 3 606*61046927SAndroid Build Coastguard Worker */ 607*61046927SAndroid Build Coastguard Worker void (*getImage2)(__DRIdrawable *readable, 608*61046927SAndroid Build Coastguard Worker int x, int y, int width, int height, int stride, 609*61046927SAndroid Build Coastguard Worker char *data, void *loaderPrivate); 610*61046927SAndroid Build Coastguard Worker 611*61046927SAndroid Build Coastguard Worker /** 612*61046927SAndroid Build Coastguard Worker * Put shm image to drawable 613*61046927SAndroid Build Coastguard Worker * 614*61046927SAndroid Build Coastguard Worker * \since 4 615*61046927SAndroid Build Coastguard Worker */ 616*61046927SAndroid Build Coastguard Worker void (*putImageShm)(__DRIdrawable *drawable, int op, 617*61046927SAndroid Build Coastguard Worker int x, int y, int width, int height, int stride, 618*61046927SAndroid Build Coastguard Worker int shmid, char *shmaddr, unsigned offset, 619*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 620*61046927SAndroid Build Coastguard Worker /** 621*61046927SAndroid Build Coastguard Worker * Get shm image from readable 622*61046927SAndroid Build Coastguard Worker * 623*61046927SAndroid Build Coastguard Worker * \since 4 624*61046927SAndroid Build Coastguard Worker */ 625*61046927SAndroid Build Coastguard Worker void (*getImageShm)(__DRIdrawable *readable, 626*61046927SAndroid Build Coastguard Worker int x, int y, int width, int height, 627*61046927SAndroid Build Coastguard Worker int shmid, void *loaderPrivate); 628*61046927SAndroid Build Coastguard Worker 629*61046927SAndroid Build Coastguard Worker /** 630*61046927SAndroid Build Coastguard Worker * Put shm image to drawable (v2) 631*61046927SAndroid Build Coastguard Worker * 632*61046927SAndroid Build Coastguard Worker * The original version fixes srcx/y to 0, and expected 633*61046927SAndroid Build Coastguard Worker * the offset to be adjusted. This version allows src x,y 634*61046927SAndroid Build Coastguard Worker * to not be included in the offset. This is needed to 635*61046927SAndroid Build Coastguard Worker * avoid certain overflow checks in the X server, that 636*61046927SAndroid Build Coastguard Worker * result in lost rendering. 637*61046927SAndroid Build Coastguard Worker * 638*61046927SAndroid Build Coastguard Worker * \since 5 639*61046927SAndroid Build Coastguard Worker */ 640*61046927SAndroid Build Coastguard Worker void (*putImageShm2)(__DRIdrawable *drawable, int op, 641*61046927SAndroid Build Coastguard Worker int x, int y, 642*61046927SAndroid Build Coastguard Worker int width, int height, int stride, 643*61046927SAndroid Build Coastguard Worker int shmid, char *shmaddr, unsigned offset, 644*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 645*61046927SAndroid Build Coastguard Worker 646*61046927SAndroid Build Coastguard Worker /** 647*61046927SAndroid Build Coastguard Worker * get shm image to drawable (v2) 648*61046927SAndroid Build Coastguard Worker * 649*61046927SAndroid Build Coastguard Worker * There are some cases where GLX can't use SHM, but DRI 650*61046927SAndroid Build Coastguard Worker * still tries, we need to get a return type for when to 651*61046927SAndroid Build Coastguard Worker * fallback to the non-shm path. 652*61046927SAndroid Build Coastguard Worker * 653*61046927SAndroid Build Coastguard Worker * \since 6 654*61046927SAndroid Build Coastguard Worker */ 655*61046927SAndroid Build Coastguard Worker unsigned char (*getImageShm2)(__DRIdrawable *readable, 656*61046927SAndroid Build Coastguard Worker int x, int y, int width, int height, 657*61046927SAndroid Build Coastguard Worker int shmid, void *loaderPrivate); 658*61046927SAndroid Build Coastguard Worker }; 659*61046927SAndroid Build Coastguard Worker 660*61046927SAndroid Build Coastguard Worker /** 661*61046927SAndroid Build Coastguard Worker * Invalidate loader extension. The presence of this extension 662*61046927SAndroid Build Coastguard Worker * indicates to the DRI driver that the loader will call invalidate in 663*61046927SAndroid Build Coastguard Worker * the __DRI2_FLUSH extension, whenever the needs to query for new 664*61046927SAndroid Build Coastguard Worker * buffers. This means that the DRI driver can drop the polling in 665*61046927SAndroid Build Coastguard Worker * glViewport(). 666*61046927SAndroid Build Coastguard Worker * 667*61046927SAndroid Build Coastguard Worker * The extension doesn't provide any functionality, it's only use to 668*61046927SAndroid Build Coastguard Worker * indicate to the driver that it can use the new semantics. A DRI 669*61046927SAndroid Build Coastguard Worker * driver can use this to switch between the different semantics or 670*61046927SAndroid Build Coastguard Worker * just refuse to initialize if this extension isn't present. 671*61046927SAndroid Build Coastguard Worker * 672*61046927SAndroid Build Coastguard Worker * Advertised by the X server. 673*61046927SAndroid Build Coastguard Worker */ 674*61046927SAndroid Build Coastguard Worker #define __DRI_USE_INVALIDATE "DRI_UseInvalidate" 675*61046927SAndroid Build Coastguard Worker #define __DRI_USE_INVALIDATE_VERSION 1 676*61046927SAndroid Build Coastguard Worker 677*61046927SAndroid Build Coastguard Worker typedef struct __DRIuseInvalidateExtensionRec __DRIuseInvalidateExtension; 678*61046927SAndroid Build Coastguard Worker struct __DRIuseInvalidateExtensionRec { 679*61046927SAndroid Build Coastguard Worker __DRIextension base; 680*61046927SAndroid Build Coastguard Worker }; 681*61046927SAndroid Build Coastguard Worker 682*61046927SAndroid Build Coastguard Worker /** 683*61046927SAndroid Build Coastguard Worker * Dead, do not use; kept only to allow old Xserver to compile since 684*61046927SAndroid Build Coastguard Worker * this file is a public API. 685*61046927SAndroid Build Coastguard Worker */ 686*61046927SAndroid Build Coastguard Worker #define __DRI_DRIVER_EXTENSIONS "__driDriverExtensions" 687*61046927SAndroid Build Coastguard Worker 688*61046927SAndroid Build Coastguard Worker /** 689*61046927SAndroid Build Coastguard Worker * This symbol replaces the __DRI_DRIVER_EXTENSIONS symbol, and will be 690*61046927SAndroid Build Coastguard Worker * suffixed by "_drivername", allowing multiple drivers to be built into one 691*61046927SAndroid Build Coastguard Worker * library, and also giving the driver the chance to return a variable driver 692*61046927SAndroid Build Coastguard Worker * extensions struct depending on the driver name being loaded or any other 693*61046927SAndroid Build Coastguard Worker * system state. 694*61046927SAndroid Build Coastguard Worker * 695*61046927SAndroid Build Coastguard Worker * The function prototype is: 696*61046927SAndroid Build Coastguard Worker * 697*61046927SAndroid Build Coastguard Worker * const __DRIextension **__driDriverGetExtensions_drivername(void); 698*61046927SAndroid Build Coastguard Worker */ 699*61046927SAndroid Build Coastguard Worker #define __DRI_DRIVER_GET_EXTENSIONS "__driDriverGetExtensions" 700*61046927SAndroid Build Coastguard Worker 701*61046927SAndroid Build Coastguard Worker /** 702*61046927SAndroid Build Coastguard Worker * Tokens for __DRIconfig attribs. A number of attributes defined by 703*61046927SAndroid Build Coastguard Worker * GLX or EGL standards are not in the table, as they must be provided 704*61046927SAndroid Build Coastguard Worker * by the loader. For example, FBConfig ID or visual ID, drawable type. 705*61046927SAndroid Build Coastguard Worker */ 706*61046927SAndroid Build Coastguard Worker 707*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_BUFFER_SIZE 1 708*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_LEVEL 2 709*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_RED_SIZE 3 710*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_GREEN_SIZE 4 711*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_BLUE_SIZE 5 712*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_LUMINANCE_SIZE 6 713*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_ALPHA_SIZE 7 714*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_ALPHA_MASK_SIZE 8 715*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_DEPTH_SIZE 9 716*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_STENCIL_SIZE 10 717*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_ACCUM_RED_SIZE 11 718*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_ACCUM_GREEN_SIZE 12 719*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_ACCUM_BLUE_SIZE 13 720*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_ACCUM_ALPHA_SIZE 14 721*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_SAMPLE_BUFFERS 15 722*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_SAMPLES 16 723*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_RENDER_TYPE 17 724*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_CONFIG_CAVEAT 18 725*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_CONFORMANT 19 726*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_DOUBLE_BUFFER 20 727*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_STEREO 21 728*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_AUX_BUFFERS 22 729*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_TRANSPARENT_TYPE 23 730*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_TRANSPARENT_INDEX_VALUE 24 731*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_TRANSPARENT_RED_VALUE 25 732*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_TRANSPARENT_GREEN_VALUE 26 733*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_TRANSPARENT_BLUE_VALUE 27 734*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_TRANSPARENT_ALPHA_VALUE 28 735*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_FLOAT_MODE 29 736*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_RED_MASK 30 737*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_GREEN_MASK 31 738*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_BLUE_MASK 32 739*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_ALPHA_MASK 33 740*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_MAX_PBUFFER_WIDTH 34 741*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_MAX_PBUFFER_HEIGHT 35 742*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_MAX_PBUFFER_PIXELS 36 743*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_OPTIMAL_PBUFFER_WIDTH 37 744*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_OPTIMAL_PBUFFER_HEIGHT 38 745*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_VISUAL_SELECT_GROUP 39 746*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_SWAP_METHOD 40 // Parsed by the X server when our visuals return it as an attrib. 747*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_MAX_SWAP_INTERVAL 41 748*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_MIN_SWAP_INTERVAL 42 749*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_BIND_TO_TEXTURE_RGB 43 750*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_BIND_TO_TEXTURE_RGBA 44 751*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_BIND_TO_MIPMAP_TEXTURE 45 752*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_BIND_TO_TEXTURE_TARGETS 46 753*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_YINVERTED 47 754*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_FRAMEBUFFER_SRGB_CAPABLE 48 755*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_MUTABLE_RENDER_BUFFER 49 /* EGL_MUTABLE_RENDER_BUFFER_BIT_KHR */ 756*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_RED_SHIFT 50 757*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_GREEN_SHIFT 51 758*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_BLUE_SHIFT 52 759*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_ALPHA_SHIFT 53 760*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_MAX 54 761*61046927SAndroid Build Coastguard Worker 762*61046927SAndroid Build Coastguard Worker /* __DRI_ATTRIB_RENDER_TYPE */ 763*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_RGBA_BIT 0x01 764*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_COLOR_INDEX_BIT 0x02 765*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_LUMINANCE_BIT 0x04 766*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_FLOAT_BIT 0x08 767*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_UNSIGNED_FLOAT_BIT 0x10 768*61046927SAndroid Build Coastguard Worker 769*61046927SAndroid Build Coastguard Worker /* __DRI_ATTRIB_CONFIG_CAVEAT */ 770*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_SLOW_BIT 0x01 771*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_NON_CONFORMANT_CONFIG 0x02 772*61046927SAndroid Build Coastguard Worker 773*61046927SAndroid Build Coastguard Worker /* __DRI_ATTRIB_TRANSPARENT_TYPE */ 774*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_TRANSPARENT_RGB 0x00 775*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_TRANSPARENT_INDEX 0x01 776*61046927SAndroid Build Coastguard Worker 777*61046927SAndroid Build Coastguard Worker /* __DRI_ATTRIB_BIND_TO_TEXTURE_TARGETS */ 778*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_TEXTURE_1D_BIT 0x01 779*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_TEXTURE_2D_BIT 0x02 780*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_TEXTURE_RECTANGLE_BIT 0x04 781*61046927SAndroid Build Coastguard Worker 782*61046927SAndroid Build Coastguard Worker /* __DRI_ATTRIB_SWAP_METHOD */ 783*61046927SAndroid Build Coastguard Worker /* Note that with the exception of __DRI_ATTRIB_SWAP_NONE, we need to define 784*61046927SAndroid Build Coastguard Worker * the same tokens as GLX. This is because old and current X servers will 785*61046927SAndroid Build Coastguard Worker * transmit the driconf value grabbed from the AIGLX driver untranslated as 786*61046927SAndroid Build Coastguard Worker * the GLX fbconfig value. These defines are kept for X Server suorce compatibility, 787*61046927SAndroid Build Coastguard Worker * since Mesa no longer exposes GLX_OML_swap_method. 788*61046927SAndroid Build Coastguard Worker */ 789*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_SWAP_NONE 0x0000 790*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_SWAP_EXCHANGE 0x8061 791*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_SWAP_COPY 0x8062 792*61046927SAndroid Build Coastguard Worker #define __DRI_ATTRIB_SWAP_UNDEFINED 0x8063 793*61046927SAndroid Build Coastguard Worker 794*61046927SAndroid Build Coastguard Worker /** 795*61046927SAndroid Build Coastguard Worker * This extension defines the core DRI functionality. It was introduced when 796*61046927SAndroid Build Coastguard Worker * DRI2 and AIGLX were added. 797*61046927SAndroid Build Coastguard Worker * 798*61046927SAndroid Build Coastguard Worker * Version >= 2 indicates that getConfigAttrib with __DRI_ATTRIB_SWAP_METHOD 799*61046927SAndroid Build Coastguard Worker * returns a reliable value. The X server requires v1 and uses v2. 800*61046927SAndroid Build Coastguard Worker */ 801*61046927SAndroid Build Coastguard Worker #define __DRI_CORE "DRI_Core" 802*61046927SAndroid Build Coastguard Worker #define __DRI_CORE_VERSION 3 803*61046927SAndroid Build Coastguard Worker 804*61046927SAndroid Build Coastguard Worker struct __DRIcoreExtensionRec { 805*61046927SAndroid Build Coastguard Worker __DRIextension base; 806*61046927SAndroid Build Coastguard Worker 807*61046927SAndroid Build Coastguard Worker /* Not used by the X server. */ 808*61046927SAndroid Build Coastguard Worker __DRIscreen *(*createNewScreen)(int screen, int fd, 809*61046927SAndroid Build Coastguard Worker unsigned int sarea_handle, 810*61046927SAndroid Build Coastguard Worker const __DRIextension **extensions, 811*61046927SAndroid Build Coastguard Worker const __DRIconfig ***driverConfigs, 812*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 813*61046927SAndroid Build Coastguard Worker 814*61046927SAndroid Build Coastguard Worker void (*destroyScreen)(__DRIscreen *screen); 815*61046927SAndroid Build Coastguard Worker 816*61046927SAndroid Build Coastguard Worker const __DRIextension **(*getExtensions)(__DRIscreen *screen); 817*61046927SAndroid Build Coastguard Worker 818*61046927SAndroid Build Coastguard Worker /* Not used by the X server. */ 819*61046927SAndroid Build Coastguard Worker int (*getConfigAttrib)(const __DRIconfig *config, 820*61046927SAndroid Build Coastguard Worker unsigned int attrib, 821*61046927SAndroid Build Coastguard Worker unsigned int *value); 822*61046927SAndroid Build Coastguard Worker 823*61046927SAndroid Build Coastguard Worker /* Not used by the X server. */ 824*61046927SAndroid Build Coastguard Worker int (*indexConfigAttrib)(const __DRIconfig *config, int index, 825*61046927SAndroid Build Coastguard Worker unsigned int *attrib, unsigned int *value); 826*61046927SAndroid Build Coastguard Worker 827*61046927SAndroid Build Coastguard Worker /* Not used by the X server. */ 828*61046927SAndroid Build Coastguard Worker __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen, 829*61046927SAndroid Build Coastguard Worker const __DRIconfig *config, 830*61046927SAndroid Build Coastguard Worker unsigned int drawable_id, 831*61046927SAndroid Build Coastguard Worker unsigned int head, 832*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 833*61046927SAndroid Build Coastguard Worker 834*61046927SAndroid Build Coastguard Worker /* Used by the X server */ 835*61046927SAndroid Build Coastguard Worker void (*destroyDrawable)(__DRIdrawable *drawable); 836*61046927SAndroid Build Coastguard Worker 837*61046927SAndroid Build Coastguard Worker /* Used by the X server in swrast mode. */ 838*61046927SAndroid Build Coastguard Worker void (*swapBuffers)(__DRIdrawable *drawable); 839*61046927SAndroid Build Coastguard Worker 840*61046927SAndroid Build Coastguard Worker /* Used by the X server in swrast mode. */ 841*61046927SAndroid Build Coastguard Worker __DRIcontext *(*createNewContext)(__DRIscreen *screen, 842*61046927SAndroid Build Coastguard Worker const __DRIconfig *config, 843*61046927SAndroid Build Coastguard Worker __DRIcontext *shared, 844*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 845*61046927SAndroid Build Coastguard Worker 846*61046927SAndroid Build Coastguard Worker /* Used by the X server. */ 847*61046927SAndroid Build Coastguard Worker int (*copyContext)(__DRIcontext *dest, 848*61046927SAndroid Build Coastguard Worker __DRIcontext *src, 849*61046927SAndroid Build Coastguard Worker unsigned long mask); 850*61046927SAndroid Build Coastguard Worker 851*61046927SAndroid Build Coastguard Worker /* Used by the X server. */ 852*61046927SAndroid Build Coastguard Worker void (*destroyContext)(__DRIcontext *context); 853*61046927SAndroid Build Coastguard Worker 854*61046927SAndroid Build Coastguard Worker /* Used by the X server. */ 855*61046927SAndroid Build Coastguard Worker int (*bindContext)(__DRIcontext *ctx, 856*61046927SAndroid Build Coastguard Worker __DRIdrawable *pdraw, 857*61046927SAndroid Build Coastguard Worker __DRIdrawable *pread); 858*61046927SAndroid Build Coastguard Worker 859*61046927SAndroid Build Coastguard Worker /* Used by the X server. */ 860*61046927SAndroid Build Coastguard Worker int (*unbindContext)(__DRIcontext *ctx); 861*61046927SAndroid Build Coastguard Worker 862*61046927SAndroid Build Coastguard Worker void (*swapBuffersWithDamage)(__DRIdrawable *drawable, int nrects, const int *rects); 863*61046927SAndroid Build Coastguard Worker }; 864*61046927SAndroid Build Coastguard Worker 865*61046927SAndroid Build Coastguard Worker /** 866*61046927SAndroid Build Coastguard Worker * Stored version of some component (i.e., server-side DRI module, kernel-side 867*61046927SAndroid Build Coastguard Worker * DRM, etc.). 868*61046927SAndroid Build Coastguard Worker * 869*61046927SAndroid Build Coastguard Worker * \todo 870*61046927SAndroid Build Coastguard Worker * There are several data structures that explicitly store a major version, 871*61046927SAndroid Build Coastguard Worker * minor version, and patch level. These structures should be modified to 872*61046927SAndroid Build Coastguard Worker * have a \c __DRIversionRec instead. 873*61046927SAndroid Build Coastguard Worker * 874*61046927SAndroid Build Coastguard Worker * Not used by the X server since DRI1 was deleted. 875*61046927SAndroid Build Coastguard Worker */ 876*61046927SAndroid Build Coastguard Worker struct __DRIversionRec { 877*61046927SAndroid Build Coastguard Worker int major; /**< Major version number. */ 878*61046927SAndroid Build Coastguard Worker int minor; /**< Minor version number. */ 879*61046927SAndroid Build Coastguard Worker int patch; /**< Patch-level. */ 880*61046927SAndroid Build Coastguard Worker }; 881*61046927SAndroid Build Coastguard Worker 882*61046927SAndroid Build Coastguard Worker /** 883*61046927SAndroid Build Coastguard Worker * Framebuffer information record. Used by libGL to communicate information 884*61046927SAndroid Build Coastguard Worker * about the framebuffer to the driver's \c __driCreateNewScreen function. 885*61046927SAndroid Build Coastguard Worker * 886*61046927SAndroid Build Coastguard Worker * In XFree86, most of this information is derrived from data returned by 887*61046927SAndroid Build Coastguard Worker * calling \c XF86DRIGetDeviceInfo. 888*61046927SAndroid Build Coastguard Worker * 889*61046927SAndroid Build Coastguard Worker * \sa XF86DRIGetDeviceInfo __DRIdisplayRec::createNewScreen 890*61046927SAndroid Build Coastguard Worker * __driUtilCreateNewScreen CallCreateNewScreen 891*61046927SAndroid Build Coastguard Worker * 892*61046927SAndroid Build Coastguard Worker * \bug This structure could be better named. 893*61046927SAndroid Build Coastguard Worker * 894*61046927SAndroid Build Coastguard Worker * Not used by the X server since DRI1 was deleted. 895*61046927SAndroid Build Coastguard Worker */ 896*61046927SAndroid Build Coastguard Worker struct __DRIframebufferRec { 897*61046927SAndroid Build Coastguard Worker unsigned char *base; /**< Framebuffer base address in the CPU's 898*61046927SAndroid Build Coastguard Worker * address space. This value is calculated by 899*61046927SAndroid Build Coastguard Worker * calling \c drmMap on the framebuffer handle 900*61046927SAndroid Build Coastguard Worker * returned by \c XF86DRIGetDeviceInfo (or a 901*61046927SAndroid Build Coastguard Worker * similar function). 902*61046927SAndroid Build Coastguard Worker */ 903*61046927SAndroid Build Coastguard Worker int size; /**< Framebuffer size, in bytes. */ 904*61046927SAndroid Build Coastguard Worker int stride; /**< Number of bytes from one line to the next. */ 905*61046927SAndroid Build Coastguard Worker int width; /**< Pixel width of the framebuffer. */ 906*61046927SAndroid Build Coastguard Worker int height; /**< Pixel height of the framebuffer. */ 907*61046927SAndroid Build Coastguard Worker int dev_priv_size; /**< Size of the driver's dev-priv structure. */ 908*61046927SAndroid Build Coastguard Worker void *dev_priv; /**< Pointer to the driver's dev-priv structure. */ 909*61046927SAndroid Build Coastguard Worker }; 910*61046927SAndroid Build Coastguard Worker 911*61046927SAndroid Build Coastguard Worker 912*61046927SAndroid Build Coastguard Worker /** 913*61046927SAndroid Build Coastguard Worker * This extension provides alternative screen, drawable and context constructors 914*61046927SAndroid Build Coastguard Worker * for swrast DRI functionality. This is used in conjunction with the core 915*61046927SAndroid Build Coastguard Worker * extension. Version 1 is required by the X server, and version 3 is used. 916*61046927SAndroid Build Coastguard Worker */ 917*61046927SAndroid Build Coastguard Worker #define __DRI_SWRAST "DRI_SWRast" 918*61046927SAndroid Build Coastguard Worker #define __DRI_SWRAST_VERSION 6 919*61046927SAndroid Build Coastguard Worker 920*61046927SAndroid Build Coastguard Worker struct __DRIswrastExtensionRec { 921*61046927SAndroid Build Coastguard Worker __DRIextension base; 922*61046927SAndroid Build Coastguard Worker 923*61046927SAndroid Build Coastguard Worker __DRIscreen *(*createNewScreen)(int screen, 924*61046927SAndroid Build Coastguard Worker const __DRIextension **extensions, 925*61046927SAndroid Build Coastguard Worker const __DRIconfig ***driver_configs, 926*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 927*61046927SAndroid Build Coastguard Worker 928*61046927SAndroid Build Coastguard Worker __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen, 929*61046927SAndroid Build Coastguard Worker const __DRIconfig *config, 930*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 931*61046927SAndroid Build Coastguard Worker 932*61046927SAndroid Build Coastguard Worker /* Since version 2 */ 933*61046927SAndroid Build Coastguard Worker __DRIcontext *(*createNewContextForAPI)(__DRIscreen *screen, 934*61046927SAndroid Build Coastguard Worker int api, 935*61046927SAndroid Build Coastguard Worker const __DRIconfig *config, 936*61046927SAndroid Build Coastguard Worker __DRIcontext *shared, 937*61046927SAndroid Build Coastguard Worker void *data); 938*61046927SAndroid Build Coastguard Worker 939*61046927SAndroid Build Coastguard Worker /** 940*61046927SAndroid Build Coastguard Worker * Create a context for a particular API with a set of attributes 941*61046927SAndroid Build Coastguard Worker * 942*61046927SAndroid Build Coastguard Worker * \since version 3 943*61046927SAndroid Build Coastguard Worker * 944*61046927SAndroid Build Coastguard Worker * \sa __DRIdri2ExtensionRec::createContextAttribs 945*61046927SAndroid Build Coastguard Worker */ 946*61046927SAndroid Build Coastguard Worker __DRIcontext *(*createContextAttribs)(__DRIscreen *screen, 947*61046927SAndroid Build Coastguard Worker int api, 948*61046927SAndroid Build Coastguard Worker const __DRIconfig *config, 949*61046927SAndroid Build Coastguard Worker __DRIcontext *shared, 950*61046927SAndroid Build Coastguard Worker unsigned num_attribs, 951*61046927SAndroid Build Coastguard Worker const uint32_t *attribs, 952*61046927SAndroid Build Coastguard Worker unsigned *error, 953*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 954*61046927SAndroid Build Coastguard Worker 955*61046927SAndroid Build Coastguard Worker /** 956*61046927SAndroid Build Coastguard Worker * createNewScreen() with the driver extensions passed in. 957*61046927SAndroid Build Coastguard Worker * 958*61046927SAndroid Build Coastguard Worker * \since version 4 959*61046927SAndroid Build Coastguard Worker */ 960*61046927SAndroid Build Coastguard Worker __DRIscreen *(*createNewScreen2)(int screen, 961*61046927SAndroid Build Coastguard Worker const __DRIextension **loader_extensions, 962*61046927SAndroid Build Coastguard Worker const __DRIextension **driver_extensions, 963*61046927SAndroid Build Coastguard Worker const __DRIconfig ***driver_configs, 964*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 965*61046927SAndroid Build Coastguard Worker /** 966*61046927SAndroid Build Coastguard Worker * \since version 5 967*61046927SAndroid Build Coastguard Worker */ 968*61046927SAndroid Build Coastguard Worker int (*queryBufferAge)(__DRIdrawable *drawable); 969*61046927SAndroid Build Coastguard Worker 970*61046927SAndroid Build Coastguard Worker /** 971*61046927SAndroid Build Coastguard Worker * createNewScreen() with the driver extensions passed in and driver_name_is_inferred load flag. 972*61046927SAndroid Build Coastguard Worker * 973*61046927SAndroid Build Coastguard Worker * \since version 6 974*61046927SAndroid Build Coastguard Worker */ 975*61046927SAndroid Build Coastguard Worker __DRIscreen *(*createNewScreen3)(int screen, 976*61046927SAndroid Build Coastguard Worker const __DRIextension **loader_extensions, 977*61046927SAndroid Build Coastguard Worker const __DRIextension **driver_extensions, 978*61046927SAndroid Build Coastguard Worker const __DRIconfig ***driver_configs, 979*61046927SAndroid Build Coastguard Worker bool driver_name_is_inferred, 980*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 981*61046927SAndroid Build Coastguard Worker 982*61046927SAndroid Build Coastguard Worker }; 983*61046927SAndroid Build Coastguard Worker 984*61046927SAndroid Build Coastguard Worker /** Common DRI function definitions, shared among DRI2 and Image extensions 985*61046927SAndroid Build Coastguard Worker */ 986*61046927SAndroid Build Coastguard Worker 987*61046927SAndroid Build Coastguard Worker typedef __DRIscreen * 988*61046927SAndroid Build Coastguard Worker (*__DRIcreateNewScreen2Func)(int screen, int fd, 989*61046927SAndroid Build Coastguard Worker const __DRIextension **extensions, 990*61046927SAndroid Build Coastguard Worker const __DRIextension **driver_extensions, 991*61046927SAndroid Build Coastguard Worker const __DRIconfig ***driver_configs, 992*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 993*61046927SAndroid Build Coastguard Worker typedef __DRIscreen * 994*61046927SAndroid Build Coastguard Worker (*__DRIcreateNewScreen3Func)(int screen, int fd, 995*61046927SAndroid Build Coastguard Worker const __DRIextension **extensions, 996*61046927SAndroid Build Coastguard Worker const __DRIextension **driver_extensions, 997*61046927SAndroid Build Coastguard Worker const __DRIconfig ***driver_configs, 998*61046927SAndroid Build Coastguard Worker bool driver_name_is_inferred, 999*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 1000*61046927SAndroid Build Coastguard Worker 1001*61046927SAndroid Build Coastguard Worker typedef __DRIdrawable * 1002*61046927SAndroid Build Coastguard Worker (*__DRIcreateNewDrawableFunc)(__DRIscreen *screen, 1003*61046927SAndroid Build Coastguard Worker const __DRIconfig *config, 1004*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 1005*61046927SAndroid Build Coastguard Worker 1006*61046927SAndroid Build Coastguard Worker typedef __DRIcontext * 1007*61046927SAndroid Build Coastguard Worker (*__DRIcreateContextAttribsFunc)(__DRIscreen *screen, 1008*61046927SAndroid Build Coastguard Worker int api, 1009*61046927SAndroid Build Coastguard Worker const __DRIconfig *config, 1010*61046927SAndroid Build Coastguard Worker __DRIcontext *shared, 1011*61046927SAndroid Build Coastguard Worker unsigned num_attribs, 1012*61046927SAndroid Build Coastguard Worker const uint32_t *attribs, 1013*61046927SAndroid Build Coastguard Worker unsigned *error, 1014*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 1015*61046927SAndroid Build Coastguard Worker 1016*61046927SAndroid Build Coastguard Worker typedef unsigned int 1017*61046927SAndroid Build Coastguard Worker (*__DRIgetAPIMaskFunc)(__DRIscreen *screen); 1018*61046927SAndroid Build Coastguard Worker 1019*61046927SAndroid Build Coastguard Worker /** 1020*61046927SAndroid Build Coastguard Worker * DRI2 Loader extension. 1021*61046927SAndroid Build Coastguard Worker */ 1022*61046927SAndroid Build Coastguard Worker #define __DRI_BUFFER_FRONT_LEFT 0 1023*61046927SAndroid Build Coastguard Worker #define __DRI_BUFFER_BACK_LEFT 1 1024*61046927SAndroid Build Coastguard Worker #define __DRI_BUFFER_FRONT_RIGHT 2 1025*61046927SAndroid Build Coastguard Worker #define __DRI_BUFFER_BACK_RIGHT 3 1026*61046927SAndroid Build Coastguard Worker #define __DRI_BUFFER_DEPTH 4 1027*61046927SAndroid Build Coastguard Worker #define __DRI_BUFFER_STENCIL 5 1028*61046927SAndroid Build Coastguard Worker #define __DRI_BUFFER_ACCUM 6 1029*61046927SAndroid Build Coastguard Worker #define __DRI_BUFFER_FAKE_FRONT_LEFT 7 1030*61046927SAndroid Build Coastguard Worker #define __DRI_BUFFER_FAKE_FRONT_RIGHT 8 1031*61046927SAndroid Build Coastguard Worker #define __DRI_BUFFER_DEPTH_STENCIL 9 /**< Only available with DRI2 1.1 */ 1032*61046927SAndroid Build Coastguard Worker #define __DRI_BUFFER_HIZ 10 1033*61046927SAndroid Build Coastguard Worker 1034*61046927SAndroid Build Coastguard Worker /* Inofficial and for internal use. Increase when adding a new buffer token. */ 1035*61046927SAndroid Build Coastguard Worker #define __DRI_BUFFER_COUNT 11 1036*61046927SAndroid Build Coastguard Worker 1037*61046927SAndroid Build Coastguard Worker /* Used by the X server. */ 1038*61046927SAndroid Build Coastguard Worker struct __DRIbufferRec { 1039*61046927SAndroid Build Coastguard Worker unsigned int attachment; 1040*61046927SAndroid Build Coastguard Worker unsigned int name; 1041*61046927SAndroid Build Coastguard Worker unsigned int pitch; 1042*61046927SAndroid Build Coastguard Worker unsigned int cpp; 1043*61046927SAndroid Build Coastguard Worker unsigned int flags; 1044*61046927SAndroid Build Coastguard Worker }; 1045*61046927SAndroid Build Coastguard Worker 1046*61046927SAndroid Build Coastguard Worker /* The X server implements up to version 3 of the DRI2 loader. */ 1047*61046927SAndroid Build Coastguard Worker #define __DRI_DRI2_LOADER "DRI_DRI2Loader" 1048*61046927SAndroid Build Coastguard Worker #define __DRI_DRI2_LOADER_VERSION 5 1049*61046927SAndroid Build Coastguard Worker 1050*61046927SAndroid Build Coastguard Worker enum dri_loader_cap { 1051*61046927SAndroid Build Coastguard Worker /* Whether the loader handles RGBA channel ordering correctly. If not, 1052*61046927SAndroid Build Coastguard Worker * only BGRA ordering can be exposed. 1053*61046927SAndroid Build Coastguard Worker */ 1054*61046927SAndroid Build Coastguard Worker DRI_LOADER_CAP_RGBA_ORDERING, 1055*61046927SAndroid Build Coastguard Worker DRI_LOADER_CAP_FP16, 1056*61046927SAndroid Build Coastguard Worker }; 1057*61046927SAndroid Build Coastguard Worker 1058*61046927SAndroid Build Coastguard Worker struct __DRIdri2LoaderExtensionRec { 1059*61046927SAndroid Build Coastguard Worker __DRIextension base; 1060*61046927SAndroid Build Coastguard Worker 1061*61046927SAndroid Build Coastguard Worker __DRIbuffer *(*getBuffers)(__DRIdrawable *driDrawable, 1062*61046927SAndroid Build Coastguard Worker int *width, int *height, 1063*61046927SAndroid Build Coastguard Worker unsigned int *attachments, int count, 1064*61046927SAndroid Build Coastguard Worker int *out_count, void *loaderPrivate); 1065*61046927SAndroid Build Coastguard Worker 1066*61046927SAndroid Build Coastguard Worker /** 1067*61046927SAndroid Build Coastguard Worker * Flush pending front-buffer rendering 1068*61046927SAndroid Build Coastguard Worker * 1069*61046927SAndroid Build Coastguard Worker * Any rendering that has been performed to the 1070*61046927SAndroid Build Coastguard Worker * \c __DRI_BUFFER_FAKE_FRONT_LEFT will be flushed to the 1071*61046927SAndroid Build Coastguard Worker * \c __DRI_BUFFER_FRONT_LEFT. 1072*61046927SAndroid Build Coastguard Worker * 1073*61046927SAndroid Build Coastguard Worker * \param driDrawable Drawable whose front-buffer is to be flushed 1074*61046927SAndroid Build Coastguard Worker * \param loaderPrivate Loader's private data that was previously passed 1075*61046927SAndroid Build Coastguard Worker * into __DRIdri2ExtensionRec::createNewDrawable 1076*61046927SAndroid Build Coastguard Worker * 1077*61046927SAndroid Build Coastguard Worker * \since 2 1078*61046927SAndroid Build Coastguard Worker */ 1079*61046927SAndroid Build Coastguard Worker void (*flushFrontBuffer)(__DRIdrawable *driDrawable, void *loaderPrivate); 1080*61046927SAndroid Build Coastguard Worker 1081*61046927SAndroid Build Coastguard Worker 1082*61046927SAndroid Build Coastguard Worker /** 1083*61046927SAndroid Build Coastguard Worker * Get list of buffers from the server 1084*61046927SAndroid Build Coastguard Worker * 1085*61046927SAndroid Build Coastguard Worker * Gets a list of buffer for the specified set of attachments. Unlike 1086*61046927SAndroid Build Coastguard Worker * \c ::getBuffers, this function takes a list of attachments paired with 1087*61046927SAndroid Build Coastguard Worker * opaque \c unsigned \c int value describing the format of the buffer. 1088*61046927SAndroid Build Coastguard Worker * It is the responsibility of the caller to know what the service that 1089*61046927SAndroid Build Coastguard Worker * allocates the buffers will expect to receive for the format. 1090*61046927SAndroid Build Coastguard Worker * 1091*61046927SAndroid Build Coastguard Worker * \param driDrawable Drawable whose buffers are being queried. 1092*61046927SAndroid Build Coastguard Worker * \param width Output where the width of the buffers is stored. 1093*61046927SAndroid Build Coastguard Worker * \param height Output where the height of the buffers is stored. 1094*61046927SAndroid Build Coastguard Worker * \param attachments List of pairs of attachment ID and opaque format 1095*61046927SAndroid Build Coastguard Worker * requested for the drawable. 1096*61046927SAndroid Build Coastguard Worker * \param count Number of attachment / format pairs stored in 1097*61046927SAndroid Build Coastguard Worker * \c attachments. 1098*61046927SAndroid Build Coastguard Worker * \param loaderPrivate Loader's private data that was previously passed 1099*61046927SAndroid Build Coastguard Worker * into __DRIdri2ExtensionRec::createNewDrawable. 1100*61046927SAndroid Build Coastguard Worker * 1101*61046927SAndroid Build Coastguard Worker * \since 3 1102*61046927SAndroid Build Coastguard Worker */ 1103*61046927SAndroid Build Coastguard Worker __DRIbuffer *(*getBuffersWithFormat)(__DRIdrawable *driDrawable, 1104*61046927SAndroid Build Coastguard Worker int *width, int *height, 1105*61046927SAndroid Build Coastguard Worker unsigned int *attachments, int count, 1106*61046927SAndroid Build Coastguard Worker int *out_count, void *loaderPrivate); 1107*61046927SAndroid Build Coastguard Worker 1108*61046927SAndroid Build Coastguard Worker /** 1109*61046927SAndroid Build Coastguard Worker * Return a loader capability value. If the loader doesn't know the enum, 1110*61046927SAndroid Build Coastguard Worker * it will return 0. 1111*61046927SAndroid Build Coastguard Worker * 1112*61046927SAndroid Build Coastguard Worker * \param loaderPrivate The last parameter of createNewScreen or 1113*61046927SAndroid Build Coastguard Worker * createNewScreen2. 1114*61046927SAndroid Build Coastguard Worker * \param cap See the enum. 1115*61046927SAndroid Build Coastguard Worker * 1116*61046927SAndroid Build Coastguard Worker * \since 4 1117*61046927SAndroid Build Coastguard Worker */ 1118*61046927SAndroid Build Coastguard Worker unsigned (*getCapability)(void *loaderPrivate, enum dri_loader_cap cap); 1119*61046927SAndroid Build Coastguard Worker 1120*61046927SAndroid Build Coastguard Worker /** 1121*61046927SAndroid Build Coastguard Worker * Clean up any loader state associated with an image. 1122*61046927SAndroid Build Coastguard Worker * 1123*61046927SAndroid Build Coastguard Worker * \param loaderPrivate Loader's private data that was previously passed 1124*61046927SAndroid Build Coastguard Worker * into a __DRIimageExtensionRec::createImage function 1125*61046927SAndroid Build Coastguard Worker * \since 5 1126*61046927SAndroid Build Coastguard Worker */ 1127*61046927SAndroid Build Coastguard Worker void (*destroyLoaderImageState)(void *loaderPrivate); 1128*61046927SAndroid Build Coastguard Worker }; 1129*61046927SAndroid Build Coastguard Worker 1130*61046927SAndroid Build Coastguard Worker /** 1131*61046927SAndroid Build Coastguard Worker * This extension provides alternative screen, drawable and context 1132*61046927SAndroid Build Coastguard Worker * constructors for DRI2. The X server uses up to version 4. 1133*61046927SAndroid Build Coastguard Worker */ 1134*61046927SAndroid Build Coastguard Worker #define __DRI_DRI2 "DRI_DRI2" 1135*61046927SAndroid Build Coastguard Worker #define __DRI_DRI2_VERSION 5 1136*61046927SAndroid Build Coastguard Worker 1137*61046927SAndroid Build Coastguard Worker #define __DRI_API_OPENGL 0 /**< OpenGL compatibility profile */ 1138*61046927SAndroid Build Coastguard Worker #define __DRI_API_GLES 1 /**< OpenGL ES 1.x */ 1139*61046927SAndroid Build Coastguard Worker #define __DRI_API_GLES2 2 /**< OpenGL ES 2.x */ 1140*61046927SAndroid Build Coastguard Worker #define __DRI_API_OPENGL_CORE 3 /**< OpenGL 3.2+ core profile */ 1141*61046927SAndroid Build Coastguard Worker #define __DRI_API_GLES3 4 /**< OpenGL ES 3.x */ 1142*61046927SAndroid Build Coastguard Worker 1143*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_ATTRIB_MAJOR_VERSION 0 1144*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_ATTRIB_MINOR_VERSION 1 1145*61046927SAndroid Build Coastguard Worker 1146*61046927SAndroid Build Coastguard Worker /* These must alias the GLX/EGL values. */ 1147*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_ATTRIB_FLAGS 2 1148*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_FLAG_DEBUG 0x00000001 1149*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_FLAG_FORWARD_COMPATIBLE 0x00000002 1150*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS 0x00000004 1151*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_FLAG_NO_ERROR 0x00000008 /* Deprecated, do not use */ 1152*61046927SAndroid Build Coastguard Worker /* Not yet implemented but placed here to reserve the alias with GLX */ 1153*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_FLAG_RESET_ISOLATION 0x00000008 1154*61046927SAndroid Build Coastguard Worker 1155*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_ATTRIB_RESET_STRATEGY 3 1156*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_RESET_NO_NOTIFICATION 0 1157*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_RESET_LOSE_CONTEXT 1 1158*61046927SAndroid Build Coastguard Worker 1159*61046927SAndroid Build Coastguard Worker /** 1160*61046927SAndroid Build Coastguard Worker * \name Context priority levels. 1161*61046927SAndroid Build Coastguard Worker */ 1162*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_ATTRIB_PRIORITY 4 1163*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_PRIORITY_LOW 0 1164*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_PRIORITY_MEDIUM 1 1165*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_PRIORITY_HIGH 2 1166*61046927SAndroid Build Coastguard Worker 1167*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_ATTRIB_RELEASE_BEHAVIOR 5 1168*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_RELEASE_BEHAVIOR_NONE 0 1169*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_RELEASE_BEHAVIOR_FLUSH 1 1170*61046927SAndroid Build Coastguard Worker 1171*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_ATTRIB_NO_ERROR 6 1172*61046927SAndroid Build Coastguard Worker 1173*61046927SAndroid Build Coastguard Worker /** 1174*61046927SAndroid Build Coastguard Worker * \requires __DRI2_RENDER_HAS_PROTECTED_CONTEXT. 1175*61046927SAndroid Build Coastguard Worker * 1176*61046927SAndroid Build Coastguard Worker */ 1177*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_ATTRIB_PROTECTED 7 1178*61046927SAndroid Build Coastguard Worker 1179*61046927SAndroid Build Coastguard Worker 1180*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_NUM_ATTRIBS 8 1181*61046927SAndroid Build Coastguard Worker 1182*61046927SAndroid Build Coastguard Worker /** 1183*61046927SAndroid Build Coastguard Worker * \name Reasons that __DRIdri2Extension::createContextAttribs might fail 1184*61046927SAndroid Build Coastguard Worker */ 1185*61046927SAndroid Build Coastguard Worker /*@{*/ 1186*61046927SAndroid Build Coastguard Worker /** Success! */ 1187*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_ERROR_SUCCESS 0 1188*61046927SAndroid Build Coastguard Worker 1189*61046927SAndroid Build Coastguard Worker /** Memory allocation failure */ 1190*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_ERROR_NO_MEMORY 1 1191*61046927SAndroid Build Coastguard Worker 1192*61046927SAndroid Build Coastguard Worker /** Client requested an API (e.g., OpenGL ES 2.0) that the driver can't do. */ 1193*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_ERROR_BAD_API 2 1194*61046927SAndroid Build Coastguard Worker 1195*61046927SAndroid Build Coastguard Worker /** Client requested an API version that the driver can't do. */ 1196*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_ERROR_BAD_VERSION 3 1197*61046927SAndroid Build Coastguard Worker 1198*61046927SAndroid Build Coastguard Worker /** Client requested a flag or combination of flags the driver can't do. */ 1199*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_ERROR_BAD_FLAG 4 1200*61046927SAndroid Build Coastguard Worker 1201*61046927SAndroid Build Coastguard Worker /** Client requested an attribute the driver doesn't understand. */ 1202*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_ERROR_UNKNOWN_ATTRIBUTE 5 1203*61046927SAndroid Build Coastguard Worker 1204*61046927SAndroid Build Coastguard Worker /** Client requested a flag the driver doesn't understand. */ 1205*61046927SAndroid Build Coastguard Worker #define __DRI_CTX_ERROR_UNKNOWN_FLAG 6 1206*61046927SAndroid Build Coastguard Worker /*@}*/ 1207*61046927SAndroid Build Coastguard Worker 1208*61046927SAndroid Build Coastguard Worker struct __DRIdri2ExtensionRec { 1209*61046927SAndroid Build Coastguard Worker __DRIextension base; 1210*61046927SAndroid Build Coastguard Worker 1211*61046927SAndroid Build Coastguard Worker __DRIscreen *(*createNewScreen)(int screen, int fd, 1212*61046927SAndroid Build Coastguard Worker const __DRIextension **extensions, 1213*61046927SAndroid Build Coastguard Worker const __DRIconfig ***driver_configs, 1214*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 1215*61046927SAndroid Build Coastguard Worker 1216*61046927SAndroid Build Coastguard Worker __DRIcreateNewDrawableFunc createNewDrawable; 1217*61046927SAndroid Build Coastguard Worker __DRIcontext *(*createNewContext)(__DRIscreen *screen, 1218*61046927SAndroid Build Coastguard Worker const __DRIconfig *config, 1219*61046927SAndroid Build Coastguard Worker __DRIcontext *shared, 1220*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 1221*61046927SAndroid Build Coastguard Worker 1222*61046927SAndroid Build Coastguard Worker /* Since version 2 */ 1223*61046927SAndroid Build Coastguard Worker __DRIgetAPIMaskFunc getAPIMask; 1224*61046927SAndroid Build Coastguard Worker 1225*61046927SAndroid Build Coastguard Worker __DRIcontext *(*createNewContextForAPI)(__DRIscreen *screen, 1226*61046927SAndroid Build Coastguard Worker int api, 1227*61046927SAndroid Build Coastguard Worker const __DRIconfig *config, 1228*61046927SAndroid Build Coastguard Worker __DRIcontext *shared, 1229*61046927SAndroid Build Coastguard Worker void *data); 1230*61046927SAndroid Build Coastguard Worker 1231*61046927SAndroid Build Coastguard Worker __DRIbuffer *(*allocateBuffer)(__DRIscreen *screen, 1232*61046927SAndroid Build Coastguard Worker unsigned int attachment, 1233*61046927SAndroid Build Coastguard Worker unsigned int format, 1234*61046927SAndroid Build Coastguard Worker int width, 1235*61046927SAndroid Build Coastguard Worker int height); 1236*61046927SAndroid Build Coastguard Worker void (*releaseBuffer)(__DRIscreen *screen, 1237*61046927SAndroid Build Coastguard Worker __DRIbuffer *buffer); 1238*61046927SAndroid Build Coastguard Worker 1239*61046927SAndroid Build Coastguard Worker /** 1240*61046927SAndroid Build Coastguard Worker * Create a context for a particular API with a set of attributes 1241*61046927SAndroid Build Coastguard Worker * 1242*61046927SAndroid Build Coastguard Worker * \since version 3 1243*61046927SAndroid Build Coastguard Worker * 1244*61046927SAndroid Build Coastguard Worker * \sa __DRIswrastExtensionRec::createContextAttribs 1245*61046927SAndroid Build Coastguard Worker */ 1246*61046927SAndroid Build Coastguard Worker __DRIcreateContextAttribsFunc createContextAttribs; 1247*61046927SAndroid Build Coastguard Worker 1248*61046927SAndroid Build Coastguard Worker /** 1249*61046927SAndroid Build Coastguard Worker * createNewScreen with the driver's extension list passed in. 1250*61046927SAndroid Build Coastguard Worker * 1251*61046927SAndroid Build Coastguard Worker * \since version 4 1252*61046927SAndroid Build Coastguard Worker */ 1253*61046927SAndroid Build Coastguard Worker __DRIcreateNewScreen2Func createNewScreen2; 1254*61046927SAndroid Build Coastguard Worker 1255*61046927SAndroid Build Coastguard Worker /** 1256*61046927SAndroid Build Coastguard Worker * createNewScreen with the driver's extension list passed in and driver_name_is_inferred load flag. 1257*61046927SAndroid Build Coastguard Worker * 1258*61046927SAndroid Build Coastguard Worker * \since version 5 1259*61046927SAndroid Build Coastguard Worker */ 1260*61046927SAndroid Build Coastguard Worker __DRIcreateNewScreen3Func createNewScreen3; 1261*61046927SAndroid Build Coastguard Worker }; 1262*61046927SAndroid Build Coastguard Worker 1263*61046927SAndroid Build Coastguard Worker 1264*61046927SAndroid Build Coastguard Worker /** 1265*61046927SAndroid Build Coastguard Worker * This extension provides functionality to enable various EGLImage 1266*61046927SAndroid Build Coastguard Worker * extensions. 1267*61046927SAndroid Build Coastguard Worker */ 1268*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE "DRI_IMAGE" 1269*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_VERSION 22 1270*61046927SAndroid Build Coastguard Worker 1271*61046927SAndroid Build Coastguard Worker /* __DRI_IMAGE_FORMAT_* tokens are no longer exported */ 1272*61046927SAndroid Build Coastguard Worker 1273*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_USE_SHARE 0x0001 1274*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_USE_SCANOUT 0x0002 1275*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_USE_CURSOR 0x0004 /* Deprecated */ 1276*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_USE_LINEAR 0x0008 1277*61046927SAndroid Build Coastguard Worker /* The buffer will only be read by an external process after SwapBuffers, 1278*61046927SAndroid Build Coastguard Worker * in contrary to gbm buffers, front buffers and fake front buffers, which 1279*61046927SAndroid Build Coastguard Worker * could be read after a flush." 1280*61046927SAndroid Build Coastguard Worker */ 1281*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_USE_BACKBUFFER 0x0010 1282*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_USE_PROTECTED 0x0020 1283*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_USE_PRIME_BUFFER 0x0040 1284*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_USE_FRONT_RENDERING 0x0080 1285*61046927SAndroid Build Coastguard Worker 1286*61046927SAndroid Build Coastguard Worker 1287*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_TRANSFER_READ 0x1 1288*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_TRANSFER_WRITE 0x2 1289*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_TRANSFER_READ_WRITE \ 1290*61046927SAndroid Build Coastguard Worker (__DRI_IMAGE_TRANSFER_READ | __DRI_IMAGE_TRANSFER_WRITE) 1291*61046927SAndroid Build Coastguard Worker 1292*61046927SAndroid Build Coastguard Worker /** 1293*61046927SAndroid Build Coastguard Worker * Extra fourcc formats used internally to Mesa with createImageFromNames. 1294*61046927SAndroid Build Coastguard Worker * The externally-available fourccs are defined by drm_fourcc.h (DRM_FORMAT_*) 1295*61046927SAndroid Build Coastguard Worker * and WL_DRM_FORMAT_* from wayland_drm.h. 1296*61046927SAndroid Build Coastguard Worker * 1297*61046927SAndroid Build Coastguard Worker * \since 5 1298*61046927SAndroid Build Coastguard Worker */ 1299*61046927SAndroid Build Coastguard Worker 1300*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FOURCC_SARGB8888 0x83324258 1301*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FOURCC_SABGR8888 0x84324258 1302*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FOURCC_SXRGB8888 0x85324258 1303*61046927SAndroid Build Coastguard Worker 1304*61046927SAndroid Build Coastguard Worker /** 1305*61046927SAndroid Build Coastguard Worker * Queryable on images created by createImageFromNames. 1306*61046927SAndroid Build Coastguard Worker * 1307*61046927SAndroid Build Coastguard Worker * RGB and RGBA might be usable directly as images, but it's still 1308*61046927SAndroid Build Coastguard Worker * recommended to call fromPlanar with plane == 0. 1309*61046927SAndroid Build Coastguard Worker * 1310*61046927SAndroid Build Coastguard Worker * Y_U_V, Y_UV,Y_XUXV and Y_UXVX all requires call to fromPlanar to create 1311*61046927SAndroid Build Coastguard Worker * usable sub-images, sampling from images return raw YUV data and 1312*61046927SAndroid Build Coastguard Worker * color conversion needs to be done in the shader. 1313*61046927SAndroid Build Coastguard Worker * 1314*61046927SAndroid Build Coastguard Worker * \since 5 1315*61046927SAndroid Build Coastguard Worker */ 1316*61046927SAndroid Build Coastguard Worker 1317*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_COMPONENTS_RGB 0x3001 1318*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_COMPONENTS_RGBA 0x3002 1319*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_COMPONENTS_Y_U_V 0x3003 1320*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_COMPONENTS_Y_UV 0x3004 1321*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_COMPONENTS_Y_XUXV 0x3005 1322*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_COMPONENTS_Y_UXVX 0x3008 1323*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_COMPONENTS_AYUV 0x3009 1324*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_COMPONENTS_XYUV 0x300A 1325*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_COMPONENTS_R 0x3006 1326*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_COMPONENTS_RG 0x3007 1327*61046927SAndroid Build Coastguard Worker 1328*61046927SAndroid Build Coastguard Worker 1329*61046927SAndroid Build Coastguard Worker /** 1330*61046927SAndroid Build Coastguard Worker * queryImage attributes 1331*61046927SAndroid Build Coastguard Worker */ 1332*61046927SAndroid Build Coastguard Worker 1333*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_ATTRIB_STRIDE 0x2000 1334*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_ATTRIB_HANDLE 0x2001 1335*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_ATTRIB_NAME 0x2002 1336*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_ATTRIB_FORMAT 0x2003 /* available in versions 3+ */ 1337*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_ATTRIB_WIDTH 0x2004 /* available in versions 4+ */ 1338*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_ATTRIB_HEIGHT 0x2005 1339*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_ATTRIB_COMPONENTS 0x2006 /* available in versions 5+ */ 1340*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_ATTRIB_FD 0x2007 /* available in versions 1341*61046927SAndroid Build Coastguard Worker * 7+. Each query will return a 1342*61046927SAndroid Build Coastguard Worker * new fd. */ 1343*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_ATTRIB_FOURCC 0x2008 /* available in versions 11 */ 1344*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_ATTRIB_NUM_PLANES 0x2009 /* available in versions 11 */ 1345*61046927SAndroid Build Coastguard Worker 1346*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_ATTRIB_OFFSET 0x200A /* available in versions 13 */ 1347*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_ATTRIB_MODIFIER_LOWER 0x200B /* available in versions 14 */ 1348*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_ATTRIB_MODIFIER_UPPER 0x200C /* available in versions 14 */ 1349*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_ATTRIB_COMPRESSION_RATE 0x200D /* available in versions 22 */ 1350*61046927SAndroid Build Coastguard Worker 1351*61046927SAndroid Build Coastguard Worker enum __DRIYUVColorSpace { 1352*61046927SAndroid Build Coastguard Worker __DRI_YUV_COLOR_SPACE_UNDEFINED = 0, 1353*61046927SAndroid Build Coastguard Worker __DRI_YUV_COLOR_SPACE_ITU_REC601 = 0x327F, 1354*61046927SAndroid Build Coastguard Worker __DRI_YUV_COLOR_SPACE_ITU_REC709 = 0x3280, 1355*61046927SAndroid Build Coastguard Worker __DRI_YUV_COLOR_SPACE_ITU_REC2020 = 0x3281 1356*61046927SAndroid Build Coastguard Worker }; 1357*61046927SAndroid Build Coastguard Worker 1358*61046927SAndroid Build Coastguard Worker enum __DRISampleRange { 1359*61046927SAndroid Build Coastguard Worker __DRI_YUV_RANGE_UNDEFINED = 0, 1360*61046927SAndroid Build Coastguard Worker __DRI_YUV_FULL_RANGE = 0x3282, 1361*61046927SAndroid Build Coastguard Worker __DRI_YUV_NARROW_RANGE = 0x3283 1362*61046927SAndroid Build Coastguard Worker }; 1363*61046927SAndroid Build Coastguard Worker 1364*61046927SAndroid Build Coastguard Worker enum __DRIChromaSiting { 1365*61046927SAndroid Build Coastguard Worker __DRI_YUV_CHROMA_SITING_UNDEFINED = 0, 1366*61046927SAndroid Build Coastguard Worker __DRI_YUV_CHROMA_SITING_0 = 0x3284, 1367*61046927SAndroid Build Coastguard Worker __DRI_YUV_CHROMA_SITING_0_5 = 0x3285 1368*61046927SAndroid Build Coastguard Worker }; 1369*61046927SAndroid Build Coastguard Worker 1370*61046927SAndroid Build Coastguard Worker enum __DRIFixedRateCompression { 1371*61046927SAndroid Build Coastguard Worker __DRI_FIXED_RATE_COMPRESSION_NONE = 0x34B1, 1372*61046927SAndroid Build Coastguard Worker __DRI_FIXED_RATE_COMPRESSION_DEFAULT = 0x34B2, 1373*61046927SAndroid Build Coastguard Worker 1374*61046927SAndroid Build Coastguard Worker __DRI_FIXED_RATE_COMPRESSION_1BPC = 0x34B4, 1375*61046927SAndroid Build Coastguard Worker __DRI_FIXED_RATE_COMPRESSION_2BPC = 0x34B5, 1376*61046927SAndroid Build Coastguard Worker __DRI_FIXED_RATE_COMPRESSION_3BPC = 0x34B6, 1377*61046927SAndroid Build Coastguard Worker __DRI_FIXED_RATE_COMPRESSION_4BPC = 0x34B7, 1378*61046927SAndroid Build Coastguard Worker __DRI_FIXED_RATE_COMPRESSION_5BPC = 0x34B8, 1379*61046927SAndroid Build Coastguard Worker __DRI_FIXED_RATE_COMPRESSION_6BPC = 0x34B9, 1380*61046927SAndroid Build Coastguard Worker __DRI_FIXED_RATE_COMPRESSION_7BPC = 0x34BA, 1381*61046927SAndroid Build Coastguard Worker __DRI_FIXED_RATE_COMPRESSION_8BPC = 0x34BB, 1382*61046927SAndroid Build Coastguard Worker __DRI_FIXED_RATE_COMPRESSION_9BPC = 0x34BC, 1383*61046927SAndroid Build Coastguard Worker __DRI_FIXED_RATE_COMPRESSION_10BPC = 0x34BD, 1384*61046927SAndroid Build Coastguard Worker __DRI_FIXED_RATE_COMPRESSION_11BPC = 0x34BE, 1385*61046927SAndroid Build Coastguard Worker __DRI_FIXED_RATE_COMPRESSION_12BPC = 0x34BF, 1386*61046927SAndroid Build Coastguard Worker }; 1387*61046927SAndroid Build Coastguard Worker 1388*61046927SAndroid Build Coastguard Worker /** 1389*61046927SAndroid Build Coastguard Worker * \name Reasons that __DRIimageExtensionRec::createImageFromTexture or 1390*61046927SAndroid Build Coastguard Worker * __DRIimageExtensionRec::createImageFromDmaBufs might fail 1391*61046927SAndroid Build Coastguard Worker */ 1392*61046927SAndroid Build Coastguard Worker /*@{*/ 1393*61046927SAndroid Build Coastguard Worker /** Success! */ 1394*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_ERROR_SUCCESS 0 1395*61046927SAndroid Build Coastguard Worker 1396*61046927SAndroid Build Coastguard Worker /** Memory allocation failure */ 1397*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_ERROR_BAD_ALLOC 1 1398*61046927SAndroid Build Coastguard Worker 1399*61046927SAndroid Build Coastguard Worker /** Client requested an invalid attribute */ 1400*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_ERROR_BAD_MATCH 2 1401*61046927SAndroid Build Coastguard Worker 1402*61046927SAndroid Build Coastguard Worker /** Client requested an invalid texture object */ 1403*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_ERROR_BAD_PARAMETER 3 1404*61046927SAndroid Build Coastguard Worker 1405*61046927SAndroid Build Coastguard Worker /** Client requested an invalid pitch and/or offset */ 1406*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_ERROR_BAD_ACCESS 4 1407*61046927SAndroid Build Coastguard Worker /*@}*/ 1408*61046927SAndroid Build Coastguard Worker 1409*61046927SAndroid Build Coastguard Worker /** 1410*61046927SAndroid Build Coastguard Worker * \name Capabilities that might be returned by __DRIimageExtensionRec::getCapabilities 1411*61046927SAndroid Build Coastguard Worker */ 1412*61046927SAndroid Build Coastguard Worker /*@{*/ 1413*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_CAP_GLOBAL_NAMES 1 1414*61046927SAndroid Build Coastguard Worker /*@}*/ 1415*61046927SAndroid Build Coastguard Worker 1416*61046927SAndroid Build Coastguard Worker /** 1417*61046927SAndroid Build Coastguard Worker * blitImage flags 1418*61046927SAndroid Build Coastguard Worker */ 1419*61046927SAndroid Build Coastguard Worker 1420*61046927SAndroid Build Coastguard Worker #define __BLIT_FLAG_FLUSH 0x0001 1421*61046927SAndroid Build Coastguard Worker #define __BLIT_FLAG_FINISH 0x0002 1422*61046927SAndroid Build Coastguard Worker 1423*61046927SAndroid Build Coastguard Worker /** 1424*61046927SAndroid Build Coastguard Worker * Flags for createImageFromDmaBufs3 and createImageFromFds2 1425*61046927SAndroid Build Coastguard Worker */ 1426*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_PROTECTED_CONTENT_FLAG 0x00000001 1427*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_PRIME_LINEAR_BUFFER 0x00000002 1428*61046927SAndroid Build Coastguard Worker 1429*61046927SAndroid Build Coastguard Worker /** 1430*61046927SAndroid Build Coastguard Worker * queryDmaBufFormatModifierAttribs attributes 1431*61046927SAndroid Build Coastguard Worker */ 1432*61046927SAndroid Build Coastguard Worker 1433*61046927SAndroid Build Coastguard Worker /* Available in version 16 */ 1434*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_FORMAT_MODIFIER_ATTRIB_PLANE_COUNT 0x0001 1435*61046927SAndroid Build Coastguard Worker 1436*61046927SAndroid Build Coastguard Worker typedef struct __DRIimageRec __DRIimage; 1437*61046927SAndroid Build Coastguard Worker typedef struct __DRIimageExtensionRec __DRIimageExtension; 1438*61046927SAndroid Build Coastguard Worker struct __DRIimageExtensionRec { 1439*61046927SAndroid Build Coastguard Worker __DRIextension base; 1440*61046927SAndroid Build Coastguard Worker 1441*61046927SAndroid Build Coastguard Worker __DRIimage *(*createImageFromName)(__DRIscreen *screen, 1442*61046927SAndroid Build Coastguard Worker int width, int height, int format, 1443*61046927SAndroid Build Coastguard Worker int name, int pitch, 1444*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 1445*61046927SAndroid Build Coastguard Worker 1446*61046927SAndroid Build Coastguard Worker /* Deprecated since version 17; see createImageFromRenderbuffer2 */ 1447*61046927SAndroid Build Coastguard Worker __DRIimage *(*createImageFromRenderbuffer)(__DRIcontext *context, 1448*61046927SAndroid Build Coastguard Worker int renderbuffer, 1449*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 1450*61046927SAndroid Build Coastguard Worker 1451*61046927SAndroid Build Coastguard Worker void (*destroyImage)(__DRIimage *image); 1452*61046927SAndroid Build Coastguard Worker 1453*61046927SAndroid Build Coastguard Worker __DRIimage *(*createImage)(__DRIscreen *screen, 1454*61046927SAndroid Build Coastguard Worker int width, int height, int format, 1455*61046927SAndroid Build Coastguard Worker unsigned int use, 1456*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 1457*61046927SAndroid Build Coastguard Worker 1458*61046927SAndroid Build Coastguard Worker unsigned char (*queryImage)(__DRIimage *image, int attrib, int *value); 1459*61046927SAndroid Build Coastguard Worker 1460*61046927SAndroid Build Coastguard Worker /** 1461*61046927SAndroid Build Coastguard Worker * The new __DRIimage will share the content with the old one, see dup(2). 1462*61046927SAndroid Build Coastguard Worker */ 1463*61046927SAndroid Build Coastguard Worker __DRIimage *(*dupImage)(__DRIimage *image, void *loaderPrivate); 1464*61046927SAndroid Build Coastguard Worker 1465*61046927SAndroid Build Coastguard Worker /** 1466*61046927SAndroid Build Coastguard Worker * Validate that a __DRIimage can be used a certain way. 1467*61046927SAndroid Build Coastguard Worker * 1468*61046927SAndroid Build Coastguard Worker * \since 2 1469*61046927SAndroid Build Coastguard Worker */ 1470*61046927SAndroid Build Coastguard Worker unsigned char (*validateUsage)(__DRIimage *image, unsigned int use); 1471*61046927SAndroid Build Coastguard Worker 1472*61046927SAndroid Build Coastguard Worker /** 1473*61046927SAndroid Build Coastguard Worker * Unlike createImageFromName __DRI_IMAGE_FORMAT is not used but instead 1474*61046927SAndroid Build Coastguard Worker * DRM_FORMAT_*, and strides are in bytes not pixels. Stride is 1475*61046927SAndroid Build Coastguard Worker * also per block and not per pixel (for non-RGB, see gallium blocks). 1476*61046927SAndroid Build Coastguard Worker * 1477*61046927SAndroid Build Coastguard Worker * \since 5 1478*61046927SAndroid Build Coastguard Worker */ 1479*61046927SAndroid Build Coastguard Worker __DRIimage *(*createImageFromNames)(__DRIscreen *screen, 1480*61046927SAndroid Build Coastguard Worker int width, int height, int fourcc, 1481*61046927SAndroid Build Coastguard Worker int *names, int num_names, 1482*61046927SAndroid Build Coastguard Worker int *strides, int *offsets, 1483*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 1484*61046927SAndroid Build Coastguard Worker 1485*61046927SAndroid Build Coastguard Worker /** 1486*61046927SAndroid Build Coastguard Worker * Create an image out of a sub-region of a parent image. This 1487*61046927SAndroid Build Coastguard Worker * entry point lets us create individual __DRIimages for different 1488*61046927SAndroid Build Coastguard Worker * planes in a planar buffer (typically yuv), for example. While a 1489*61046927SAndroid Build Coastguard Worker * sub-image shares the underlying buffer object with the parent 1490*61046927SAndroid Build Coastguard Worker * image and other sibling sub-images, the life times of parent and 1491*61046927SAndroid Build Coastguard Worker * sub-images are not dependent. Destroying the parent or a 1492*61046927SAndroid Build Coastguard Worker * sub-image doesn't affect other images. The underlying buffer 1493*61046927SAndroid Build Coastguard Worker * object is free when no __DRIimage remains that references it. 1494*61046927SAndroid Build Coastguard Worker * 1495*61046927SAndroid Build Coastguard Worker * Sub-images may overlap, but rendering to overlapping sub-images 1496*61046927SAndroid Build Coastguard Worker * is undefined. 1497*61046927SAndroid Build Coastguard Worker * 1498*61046927SAndroid Build Coastguard Worker * \since 5 1499*61046927SAndroid Build Coastguard Worker */ 1500*61046927SAndroid Build Coastguard Worker __DRIimage *(*fromPlanar)(__DRIimage *image, int plane, 1501*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 1502*61046927SAndroid Build Coastguard Worker 1503*61046927SAndroid Build Coastguard Worker /** 1504*61046927SAndroid Build Coastguard Worker * Create image from texture. 1505*61046927SAndroid Build Coastguard Worker * 1506*61046927SAndroid Build Coastguard Worker * \since 6 1507*61046927SAndroid Build Coastguard Worker */ 1508*61046927SAndroid Build Coastguard Worker __DRIimage *(*createImageFromTexture)(__DRIcontext *context, 1509*61046927SAndroid Build Coastguard Worker int target, 1510*61046927SAndroid Build Coastguard Worker unsigned texture, 1511*61046927SAndroid Build Coastguard Worker int depth, 1512*61046927SAndroid Build Coastguard Worker int level, 1513*61046927SAndroid Build Coastguard Worker unsigned *error, 1514*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 1515*61046927SAndroid Build Coastguard Worker /** 1516*61046927SAndroid Build Coastguard Worker * Like createImageFromNames, but takes a prime fd instead. 1517*61046927SAndroid Build Coastguard Worker * 1518*61046927SAndroid Build Coastguard Worker * \since 7 1519*61046927SAndroid Build Coastguard Worker */ 1520*61046927SAndroid Build Coastguard Worker __DRIimage *(*createImageFromFds)(__DRIscreen *screen, 1521*61046927SAndroid Build Coastguard Worker int width, int height, int fourcc, 1522*61046927SAndroid Build Coastguard Worker int *fds, int num_fds, 1523*61046927SAndroid Build Coastguard Worker int *strides, int *offsets, 1524*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 1525*61046927SAndroid Build Coastguard Worker 1526*61046927SAndroid Build Coastguard Worker /** 1527*61046927SAndroid Build Coastguard Worker * Like createImageFromFds, but takes additional attributes. 1528*61046927SAndroid Build Coastguard Worker * 1529*61046927SAndroid Build Coastguard Worker * For EGL_EXT_image_dma_buf_import. 1530*61046927SAndroid Build Coastguard Worker * 1531*61046927SAndroid Build Coastguard Worker * \since 8 1532*61046927SAndroid Build Coastguard Worker */ 1533*61046927SAndroid Build Coastguard Worker __DRIimage *(*createImageFromDmaBufs)(__DRIscreen *screen, 1534*61046927SAndroid Build Coastguard Worker int width, int height, int fourcc, 1535*61046927SAndroid Build Coastguard Worker int *fds, int num_fds, 1536*61046927SAndroid Build Coastguard Worker int *strides, int *offsets, 1537*61046927SAndroid Build Coastguard Worker enum __DRIYUVColorSpace color_space, 1538*61046927SAndroid Build Coastguard Worker enum __DRISampleRange sample_range, 1539*61046927SAndroid Build Coastguard Worker enum __DRIChromaSiting horiz_siting, 1540*61046927SAndroid Build Coastguard Worker enum __DRIChromaSiting vert_siting, 1541*61046927SAndroid Build Coastguard Worker unsigned *error, 1542*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 1543*61046927SAndroid Build Coastguard Worker 1544*61046927SAndroid Build Coastguard Worker /** 1545*61046927SAndroid Build Coastguard Worker * Blit a part of a __DRIimage to another and flushes 1546*61046927SAndroid Build Coastguard Worker * 1547*61046927SAndroid Build Coastguard Worker * flush_flag: 1548*61046927SAndroid Build Coastguard Worker * 0: no flush 1549*61046927SAndroid Build Coastguard Worker * __BLIT_FLAG_FLUSH: flush after the blit operation 1550*61046927SAndroid Build Coastguard Worker * __BLIT_FLAG_FINISH: flush and wait the blit finished 1551*61046927SAndroid Build Coastguard Worker * 1552*61046927SAndroid Build Coastguard Worker * \since 9 1553*61046927SAndroid Build Coastguard Worker */ 1554*61046927SAndroid Build Coastguard Worker void (*blitImage)(__DRIcontext *context, __DRIimage *dst, __DRIimage *src, 1555*61046927SAndroid Build Coastguard Worker int dstx0, int dsty0, int dstwidth, int dstheight, 1556*61046927SAndroid Build Coastguard Worker int srcx0, int srcy0, int srcwidth, int srcheight, 1557*61046927SAndroid Build Coastguard Worker int flush_flag); 1558*61046927SAndroid Build Coastguard Worker 1559*61046927SAndroid Build Coastguard Worker /** 1560*61046927SAndroid Build Coastguard Worker * Query for general capabilities of the driver that concern 1561*61046927SAndroid Build Coastguard Worker * buffer sharing and image importing. 1562*61046927SAndroid Build Coastguard Worker * 1563*61046927SAndroid Build Coastguard Worker * \since 10 1564*61046927SAndroid Build Coastguard Worker */ 1565*61046927SAndroid Build Coastguard Worker int (*getCapabilities)(__DRIscreen *screen); 1566*61046927SAndroid Build Coastguard Worker 1567*61046927SAndroid Build Coastguard Worker /** 1568*61046927SAndroid Build Coastguard Worker * Returns a map of the specified region of a __DRIimage for the specified usage. 1569*61046927SAndroid Build Coastguard Worker * 1570*61046927SAndroid Build Coastguard Worker * flags may include __DRI_IMAGE_TRANSFER_READ, which will populate the 1571*61046927SAndroid Build Coastguard Worker * mapping with the current buffer content. If __DRI_IMAGE_TRANSFER_READ 1572*61046927SAndroid Build Coastguard Worker * is not included in the flags, the buffer content at map time is 1573*61046927SAndroid Build Coastguard Worker * undefined. Users wanting to modify the mapping must include 1574*61046927SAndroid Build Coastguard Worker * __DRI_IMAGE_TRANSFER_WRITE; if __DRI_IMAGE_TRANSFER_WRITE is not 1575*61046927SAndroid Build Coastguard Worker * included, behaviour when writing the mapping is undefined. 1576*61046927SAndroid Build Coastguard Worker * 1577*61046927SAndroid Build Coastguard Worker * Returns the byte stride in *stride, and an opaque pointer to data 1578*61046927SAndroid Build Coastguard Worker * tracking the mapping in **data, which must be passed to unmapImage(). 1579*61046927SAndroid Build Coastguard Worker * 1580*61046927SAndroid Build Coastguard Worker * \since 12 1581*61046927SAndroid Build Coastguard Worker */ 1582*61046927SAndroid Build Coastguard Worker void *(*mapImage)(__DRIcontext *context, __DRIimage *image, 1583*61046927SAndroid Build Coastguard Worker int x0, int y0, int width, int height, 1584*61046927SAndroid Build Coastguard Worker unsigned int flags, int *stride, void **data); 1585*61046927SAndroid Build Coastguard Worker 1586*61046927SAndroid Build Coastguard Worker /** 1587*61046927SAndroid Build Coastguard Worker * Unmap a previously mapped __DRIimage 1588*61046927SAndroid Build Coastguard Worker * 1589*61046927SAndroid Build Coastguard Worker * \since 12 1590*61046927SAndroid Build Coastguard Worker */ 1591*61046927SAndroid Build Coastguard Worker void (*unmapImage)(__DRIcontext *context, __DRIimage *image, void *data); 1592*61046927SAndroid Build Coastguard Worker 1593*61046927SAndroid Build Coastguard Worker 1594*61046927SAndroid Build Coastguard Worker /** 1595*61046927SAndroid Build Coastguard Worker * Creates an image with implementation's favorite modifiers. 1596*61046927SAndroid Build Coastguard Worker * 1597*61046927SAndroid Build Coastguard Worker * This acts like createImage except there is a list of modifiers passed in 1598*61046927SAndroid Build Coastguard Worker * which the implementation may selectively use to create the DRIimage. The 1599*61046927SAndroid Build Coastguard Worker * result should be the implementation selects one modifier (perhaps it would 1600*61046927SAndroid Build Coastguard Worker * hold on to a few and later pick). 1601*61046927SAndroid Build Coastguard Worker * 1602*61046927SAndroid Build Coastguard Worker * The created image should be destroyed with destroyImage(). 1603*61046927SAndroid Build Coastguard Worker * 1604*61046927SAndroid Build Coastguard Worker * Returns the new DRIimage. The chosen modifier can be obtained later on 1605*61046927SAndroid Build Coastguard Worker * and passed back to things like the kernel's AddFB2 interface. 1606*61046927SAndroid Build Coastguard Worker * 1607*61046927SAndroid Build Coastguard Worker * \sa __DRIimageRec::createImage 1608*61046927SAndroid Build Coastguard Worker * 1609*61046927SAndroid Build Coastguard Worker * \since 14 1610*61046927SAndroid Build Coastguard Worker */ 1611*61046927SAndroid Build Coastguard Worker __DRIimage *(*createImageWithModifiers)(__DRIscreen *screen, 1612*61046927SAndroid Build Coastguard Worker int width, int height, int format, 1613*61046927SAndroid Build Coastguard Worker const uint64_t *modifiers, 1614*61046927SAndroid Build Coastguard Worker const unsigned int modifier_count, 1615*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 1616*61046927SAndroid Build Coastguard Worker 1617*61046927SAndroid Build Coastguard Worker /* 1618*61046927SAndroid Build Coastguard Worker * Like createImageFromDmaBufs, but takes also format modifiers. 1619*61046927SAndroid Build Coastguard Worker * 1620*61046927SAndroid Build Coastguard Worker * For EGL_EXT_image_dma_buf_import_modifiers. 1621*61046927SAndroid Build Coastguard Worker * 1622*61046927SAndroid Build Coastguard Worker * \since 15 1623*61046927SAndroid Build Coastguard Worker */ 1624*61046927SAndroid Build Coastguard Worker __DRIimage *(*createImageFromDmaBufs2)(__DRIscreen *screen, 1625*61046927SAndroid Build Coastguard Worker int width, int height, int fourcc, 1626*61046927SAndroid Build Coastguard Worker uint64_t modifier, 1627*61046927SAndroid Build Coastguard Worker int *fds, int num_fds, 1628*61046927SAndroid Build Coastguard Worker int *strides, int *offsets, 1629*61046927SAndroid Build Coastguard Worker enum __DRIYUVColorSpace color_space, 1630*61046927SAndroid Build Coastguard Worker enum __DRISampleRange sample_range, 1631*61046927SAndroid Build Coastguard Worker enum __DRIChromaSiting horiz_siting, 1632*61046927SAndroid Build Coastguard Worker enum __DRIChromaSiting vert_siting, 1633*61046927SAndroid Build Coastguard Worker unsigned *error, 1634*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 1635*61046927SAndroid Build Coastguard Worker 1636*61046927SAndroid Build Coastguard Worker /* 1637*61046927SAndroid Build Coastguard Worker * dmabuf format query to support EGL_EXT_image_dma_buf_import_modifiers. 1638*61046927SAndroid Build Coastguard Worker * 1639*61046927SAndroid Build Coastguard Worker * \param max Maximum number of formats that can be accomodated into 1640*61046927SAndroid Build Coastguard Worker * \param formats. If zero, no formats are returned - 1641*61046927SAndroid Build Coastguard Worker * instead, the driver returns the total number of 1642*61046927SAndroid Build Coastguard Worker * supported dmabuf formats in \param count. 1643*61046927SAndroid Build Coastguard Worker * \param formats Buffer to fill formats into. 1644*61046927SAndroid Build Coastguard Worker * \param count Count of formats returned, or, total number of 1645*61046927SAndroid Build Coastguard Worker * supported formats in case \param max is zero. 1646*61046927SAndroid Build Coastguard Worker * 1647*61046927SAndroid Build Coastguard Worker * Returns true on success. 1648*61046927SAndroid Build Coastguard Worker * 1649*61046927SAndroid Build Coastguard Worker * \since 15 1650*61046927SAndroid Build Coastguard Worker */ 1651*61046927SAndroid Build Coastguard Worker bool (*queryDmaBufFormats)(__DRIscreen *screen, int max, int *formats, 1652*61046927SAndroid Build Coastguard Worker int *count); 1653*61046927SAndroid Build Coastguard Worker 1654*61046927SAndroid Build Coastguard Worker /* 1655*61046927SAndroid Build Coastguard Worker * dmabuf format modifier query for a given format to support 1656*61046927SAndroid Build Coastguard Worker * EGL_EXT_image_dma_buf_import_modifiers. 1657*61046927SAndroid Build Coastguard Worker * 1658*61046927SAndroid Build Coastguard Worker * \param fourcc The format to query modifiers for. If this format 1659*61046927SAndroid Build Coastguard Worker * is not supported by the driver, return false. 1660*61046927SAndroid Build Coastguard Worker * \param max Maximum number of modifiers that can be accomodated in 1661*61046927SAndroid Build Coastguard Worker * \param modifiers. If zero, no modifiers are returned - 1662*61046927SAndroid Build Coastguard Worker * instead, the driver returns the total number of 1663*61046927SAndroid Build Coastguard Worker * modifiers for \param format in \param count. 1664*61046927SAndroid Build Coastguard Worker * \param modifiers Buffer to fill modifiers into. 1665*61046927SAndroid Build Coastguard Worker * \param count Count of the modifiers returned, or, total number of 1666*61046927SAndroid Build Coastguard Worker * supported modifiers for \param fourcc in case 1667*61046927SAndroid Build Coastguard Worker * \param max is zero. 1668*61046927SAndroid Build Coastguard Worker * 1669*61046927SAndroid Build Coastguard Worker * Returns true upon success. 1670*61046927SAndroid Build Coastguard Worker * 1671*61046927SAndroid Build Coastguard Worker * \since 15 1672*61046927SAndroid Build Coastguard Worker */ 1673*61046927SAndroid Build Coastguard Worker bool (*queryDmaBufModifiers)(__DRIscreen *screen, int fourcc, int max, 1674*61046927SAndroid Build Coastguard Worker uint64_t *modifiers, 1675*61046927SAndroid Build Coastguard Worker unsigned int *external_only, int *count); 1676*61046927SAndroid Build Coastguard Worker 1677*61046927SAndroid Build Coastguard Worker /** 1678*61046927SAndroid Build Coastguard Worker * dmabuf format modifier attribute query for a given format and modifier. 1679*61046927SAndroid Build Coastguard Worker * 1680*61046927SAndroid Build Coastguard Worker * \param fourcc The format to query. If this format is not supported by 1681*61046927SAndroid Build Coastguard Worker * the driver, return false. 1682*61046927SAndroid Build Coastguard Worker * \param modifier The modifier to query. If this format+modifier is not 1683*61046927SAndroid Build Coastguard Worker * supported by the driver, return false. 1684*61046927SAndroid Build Coastguard Worker * \param attrib The __DRI_IMAGE_FORMAT_MODIFIER_ATTRIB to query. 1685*61046927SAndroid Build Coastguard Worker * \param value A pointer to where to store the result of the query. 1686*61046927SAndroid Build Coastguard Worker * 1687*61046927SAndroid Build Coastguard Worker * Returns true upon success. 1688*61046927SAndroid Build Coastguard Worker * 1689*61046927SAndroid Build Coastguard Worker * \since 16 1690*61046927SAndroid Build Coastguard Worker */ 1691*61046927SAndroid Build Coastguard Worker bool (*queryDmaBufFormatModifierAttribs)(__DRIscreen *screen, 1692*61046927SAndroid Build Coastguard Worker uint32_t fourcc, uint64_t modifier, 1693*61046927SAndroid Build Coastguard Worker int attrib, uint64_t *value); 1694*61046927SAndroid Build Coastguard Worker 1695*61046927SAndroid Build Coastguard Worker /** 1696*61046927SAndroid Build Coastguard Worker * Create a DRI image from the given renderbuffer. 1697*61046927SAndroid Build Coastguard Worker * 1698*61046927SAndroid Build Coastguard Worker * \param context the current DRI context 1699*61046927SAndroid Build Coastguard Worker * \param renderbuffer the GL name of the renderbuffer 1700*61046927SAndroid Build Coastguard Worker * \param loaderPrivate for callbacks into the loader related to the image 1701*61046927SAndroid Build Coastguard Worker * \param error will be set to one of __DRI_IMAGE_ERROR_xxx 1702*61046927SAndroid Build Coastguard Worker * \return the newly created image on success, or NULL otherwise 1703*61046927SAndroid Build Coastguard Worker * 1704*61046927SAndroid Build Coastguard Worker * \since 17 1705*61046927SAndroid Build Coastguard Worker */ 1706*61046927SAndroid Build Coastguard Worker __DRIimage *(*createImageFromRenderbuffer2)(__DRIcontext *context, 1707*61046927SAndroid Build Coastguard Worker int renderbuffer, 1708*61046927SAndroid Build Coastguard Worker void *loaderPrivate, 1709*61046927SAndroid Build Coastguard Worker unsigned *error); 1710*61046927SAndroid Build Coastguard Worker 1711*61046927SAndroid Build Coastguard Worker /* 1712*61046927SAndroid Build Coastguard Worker * Like createImageFromDmaBufs2, but with an added flags parameter. 1713*61046927SAndroid Build Coastguard Worker * 1714*61046927SAndroid Build Coastguard Worker * See __DRI_IMAGE_*_FLAG for valid definitions of flags. 1715*61046927SAndroid Build Coastguard Worker * 1716*61046927SAndroid Build Coastguard Worker * \since 18 1717*61046927SAndroid Build Coastguard Worker */ 1718*61046927SAndroid Build Coastguard Worker __DRIimage *(*createImageFromDmaBufs3)(__DRIscreen *screen, 1719*61046927SAndroid Build Coastguard Worker int width, int height, int fourcc, 1720*61046927SAndroid Build Coastguard Worker uint64_t modifier, 1721*61046927SAndroid Build Coastguard Worker int *fds, int num_fds, 1722*61046927SAndroid Build Coastguard Worker int *strides, int *offsets, 1723*61046927SAndroid Build Coastguard Worker enum __DRIYUVColorSpace color_space, 1724*61046927SAndroid Build Coastguard Worker enum __DRISampleRange sample_range, 1725*61046927SAndroid Build Coastguard Worker enum __DRIChromaSiting horiz_siting, 1726*61046927SAndroid Build Coastguard Worker enum __DRIChromaSiting vert_siting, 1727*61046927SAndroid Build Coastguard Worker uint32_t flags, 1728*61046927SAndroid Build Coastguard Worker unsigned *error, 1729*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 1730*61046927SAndroid Build Coastguard Worker 1731*61046927SAndroid Build Coastguard Worker /** 1732*61046927SAndroid Build Coastguard Worker * Creates an image with implementation's favorite modifiers and the 1733*61046927SAndroid Build Coastguard Worker * provided usage flags. 1734*61046927SAndroid Build Coastguard Worker * 1735*61046927SAndroid Build Coastguard Worker * This acts like createImageWithModifiers except usage is also specified. 1736*61046927SAndroid Build Coastguard Worker * 1737*61046927SAndroid Build Coastguard Worker * The created image should be destroyed with destroyImage(). 1738*61046927SAndroid Build Coastguard Worker * 1739*61046927SAndroid Build Coastguard Worker * Returns the new DRIimage. The chosen modifier can be obtained later on 1740*61046927SAndroid Build Coastguard Worker * and passed back to things like the kernel's AddFB2 interface. 1741*61046927SAndroid Build Coastguard Worker * 1742*61046927SAndroid Build Coastguard Worker * \sa __DRIimageRec::createImage 1743*61046927SAndroid Build Coastguard Worker * 1744*61046927SAndroid Build Coastguard Worker * \since 19 1745*61046927SAndroid Build Coastguard Worker */ 1746*61046927SAndroid Build Coastguard Worker __DRIimage *(*createImageWithModifiers2)(__DRIscreen *screen, 1747*61046927SAndroid Build Coastguard Worker int width, int height, int format, 1748*61046927SAndroid Build Coastguard Worker const uint64_t *modifiers, 1749*61046927SAndroid Build Coastguard Worker const unsigned int modifier_count, 1750*61046927SAndroid Build Coastguard Worker unsigned int use, 1751*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 1752*61046927SAndroid Build Coastguard Worker 1753*61046927SAndroid Build Coastguard Worker /** 1754*61046927SAndroid Build Coastguard Worker * Like createImageFromFds, but with an added flag parameter. 1755*61046927SAndroid Build Coastguard Worker * 1756*61046927SAndroid Build Coastguard Worker * See __DRI_IMAGE_*_FLAG for valid definitions of flags. 1757*61046927SAndroid Build Coastguard Worker * 1758*61046927SAndroid Build Coastguard Worker * \since 20 1759*61046927SAndroid Build Coastguard Worker */ 1760*61046927SAndroid Build Coastguard Worker __DRIimage *(*createImageFromFds2)(__DRIscreen *screen, 1761*61046927SAndroid Build Coastguard Worker int width, int height, int fourcc, 1762*61046927SAndroid Build Coastguard Worker int *fds, int num_fds, 1763*61046927SAndroid Build Coastguard Worker uint32_t flags, 1764*61046927SAndroid Build Coastguard Worker int *strides, int *offsets, 1765*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 1766*61046927SAndroid Build Coastguard Worker 1767*61046927SAndroid Build Coastguard Worker /** 1768*61046927SAndroid Build Coastguard Worker * Set an in-fence-fd on the image. If a fence-fd is already set 1769*61046927SAndroid Build Coastguard Worker * (but not yet consumed), the existing and new fence will be merged 1770*61046927SAndroid Build Coastguard Worker * 1771*61046927SAndroid Build Coastguard Worker * This does *not* take ownership of the fd. The fd does not need 1772*61046927SAndroid Build Coastguard Worker * to be kept alive once the call has returned. 1773*61046927SAndroid Build Coastguard Worker * 1774*61046927SAndroid Build Coastguard Worker * \since 21 1775*61046927SAndroid Build Coastguard Worker */ 1776*61046927SAndroid Build Coastguard Worker void (*setInFenceFd)(__DRIimage *image, int fd); 1777*61046927SAndroid Build Coastguard Worker 1778*61046927SAndroid Build Coastguard Worker /* 1779*61046927SAndroid Build Coastguard Worker * Query supported compression rates for a given format for 1780*61046927SAndroid Build Coastguard Worker * EGL_EXT_surface_compression. 1781*61046927SAndroid Build Coastguard Worker * 1782*61046927SAndroid Build Coastguard Worker * \param config Config for which to query the supported compression 1783*61046927SAndroid Build Coastguard Worker * rates. 1784*61046927SAndroid Build Coastguard Worker * \param max Maximum number of rates that can be accomodated into 1785*61046927SAndroid Build Coastguard Worker * \param rates. If zero, no rates are returned - 1786*61046927SAndroid Build Coastguard Worker * instead, the driver returns the total number of 1787*61046927SAndroid Build Coastguard Worker * supported compression rates in \param count. 1788*61046927SAndroid Build Coastguard Worker * \param rates Buffer to fill rates into. 1789*61046927SAndroid Build Coastguard Worker * \param count Count of rates returned, or, total number of 1790*61046927SAndroid Build Coastguard Worker * supported rates in case \param max is zero. 1791*61046927SAndroid Build Coastguard Worker * 1792*61046927SAndroid Build Coastguard Worker * Returns true on success. 1793*61046927SAndroid Build Coastguard Worker * 1794*61046927SAndroid Build Coastguard Worker * \since 22 1795*61046927SAndroid Build Coastguard Worker */ 1796*61046927SAndroid Build Coastguard Worker bool (*queryCompressionRates)(__DRIscreen *screen, const __DRIconfig *config, 1797*61046927SAndroid Build Coastguard Worker int max, enum __DRIFixedRateCompression *rates, 1798*61046927SAndroid Build Coastguard Worker int *count); 1799*61046927SAndroid Build Coastguard Worker 1800*61046927SAndroid Build Coastguard Worker /* 1801*61046927SAndroid Build Coastguard Worker * Query list of modifiers that are associated with given fixed-rate 1802*61046927SAndroid Build Coastguard Worker * compression bitrate. 1803*61046927SAndroid Build Coastguard Worker * 1804*61046927SAndroid Build Coastguard Worker * \param format The format to query 1805*61046927SAndroid Build Coastguard Worker * \param rate Compression rate to query for 1806*61046927SAndroid Build Coastguard Worker * \param max Maximum number of modifiers that can be accomodated in 1807*61046927SAndroid Build Coastguard Worker * \param modifiers. If zero, no modifiers are returned - 1808*61046927SAndroid Build Coastguard Worker * instead, the driver returns the total number of 1809*61046927SAndroid Build Coastguard Worker * modifiers for \param format in \param count. 1810*61046927SAndroid Build Coastguard Worker * \param modifiers Buffer to fill modifiers into. 1811*61046927SAndroid Build Coastguard Worker * \param count Count of the modifiers returned, or, total number of 1812*61046927SAndroid Build Coastguard Worker * supported modifiers for \param fourcc in case 1813*61046927SAndroid Build Coastguard Worker * \param max is zero. 1814*61046927SAndroid Build Coastguard Worker * 1815*61046927SAndroid Build Coastguard Worker * Returns true on success. 1816*61046927SAndroid Build Coastguard Worker * 1817*61046927SAndroid Build Coastguard Worker * \since 22 1818*61046927SAndroid Build Coastguard Worker */ 1819*61046927SAndroid Build Coastguard Worker bool (*queryCompressionModifiers)(__DRIscreen *screen, uint32_t format, 1820*61046927SAndroid Build Coastguard Worker enum __DRIFixedRateCompression rate, 1821*61046927SAndroid Build Coastguard Worker int max, uint64_t *modifiers, int *count); 1822*61046927SAndroid Build Coastguard Worker }; 1823*61046927SAndroid Build Coastguard Worker 1824*61046927SAndroid Build Coastguard Worker 1825*61046927SAndroid Build Coastguard Worker /** 1826*61046927SAndroid Build Coastguard Worker * This extension must be implemented by the loader and passed to the 1827*61046927SAndroid Build Coastguard Worker * driver at screen creation time. The EGLImage entry points in the 1828*61046927SAndroid Build Coastguard Worker * various client APIs take opaque EGLImage handles and use this 1829*61046927SAndroid Build Coastguard Worker * extension to map them to a __DRIimage. At version 1, this 1830*61046927SAndroid Build Coastguard Worker * extensions allows mapping EGLImage pointers to __DRIimage pointers, 1831*61046927SAndroid Build Coastguard Worker * but future versions could support other EGLImage-like, opaque types 1832*61046927SAndroid Build Coastguard Worker * with new lookup functions. 1833*61046927SAndroid Build Coastguard Worker */ 1834*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_LOOKUP "DRI_IMAGE_LOOKUP" 1835*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_LOOKUP_VERSION 2 1836*61046927SAndroid Build Coastguard Worker 1837*61046927SAndroid Build Coastguard Worker typedef struct __DRIimageLookupExtensionRec __DRIimageLookupExtension; 1838*61046927SAndroid Build Coastguard Worker struct __DRIimageLookupExtensionRec { 1839*61046927SAndroid Build Coastguard Worker __DRIextension base; 1840*61046927SAndroid Build Coastguard Worker 1841*61046927SAndroid Build Coastguard Worker /** 1842*61046927SAndroid Build Coastguard Worker * Lookup EGLImage without validated. Equivalent to call 1843*61046927SAndroid Build Coastguard Worker * validateEGLImage() then lookupEGLImageValidated(). 1844*61046927SAndroid Build Coastguard Worker * 1845*61046927SAndroid Build Coastguard Worker * \since 1 1846*61046927SAndroid Build Coastguard Worker */ 1847*61046927SAndroid Build Coastguard Worker __DRIimage *(*lookupEGLImage)(__DRIscreen *screen, void *image, 1848*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 1849*61046927SAndroid Build Coastguard Worker 1850*61046927SAndroid Build Coastguard Worker /** 1851*61046927SAndroid Build Coastguard Worker * Check if EGLImage is associated with the EGL display before lookup with 1852*61046927SAndroid Build Coastguard Worker * lookupEGLImageValidated(). It will hold EGLDisplay.Mutex, so is separated 1853*61046927SAndroid Build Coastguard Worker * out from lookupEGLImage() to avoid deadlock. 1854*61046927SAndroid Build Coastguard Worker * 1855*61046927SAndroid Build Coastguard Worker * \since 2 1856*61046927SAndroid Build Coastguard Worker */ 1857*61046927SAndroid Build Coastguard Worker unsigned char (*validateEGLImage)(void *image, void *loaderPrivate); 1858*61046927SAndroid Build Coastguard Worker 1859*61046927SAndroid Build Coastguard Worker /** 1860*61046927SAndroid Build Coastguard Worker * Lookup EGLImage after validateEGLImage(). No lock in this function. 1861*61046927SAndroid Build Coastguard Worker * 1862*61046927SAndroid Build Coastguard Worker * \since 2 1863*61046927SAndroid Build Coastguard Worker */ 1864*61046927SAndroid Build Coastguard Worker __DRIimage *(*lookupEGLImageValidated)(void *image, void *loaderPrivate); 1865*61046927SAndroid Build Coastguard Worker }; 1866*61046927SAndroid Build Coastguard Worker 1867*61046927SAndroid Build Coastguard Worker /** 1868*61046927SAndroid Build Coastguard Worker * This extension allows for common DRI2 options 1869*61046927SAndroid Build Coastguard Worker */ 1870*61046927SAndroid Build Coastguard Worker #define __DRI2_CONFIG_QUERY "DRI_CONFIG_QUERY" 1871*61046927SAndroid Build Coastguard Worker #define __DRI2_CONFIG_QUERY_VERSION 2 1872*61046927SAndroid Build Coastguard Worker 1873*61046927SAndroid Build Coastguard Worker typedef struct __DRI2configQueryExtensionRec __DRI2configQueryExtension; 1874*61046927SAndroid Build Coastguard Worker struct __DRI2configQueryExtensionRec { 1875*61046927SAndroid Build Coastguard Worker __DRIextension base; 1876*61046927SAndroid Build Coastguard Worker 1877*61046927SAndroid Build Coastguard Worker int (*configQueryb)(__DRIscreen *screen, const char *var, unsigned char *val); 1878*61046927SAndroid Build Coastguard Worker int (*configQueryi)(__DRIscreen *screen, const char *var, int *val); 1879*61046927SAndroid Build Coastguard Worker int (*configQueryf)(__DRIscreen *screen, const char *var, float *val); 1880*61046927SAndroid Build Coastguard Worker int (*configQuerys)(__DRIscreen *screen, const char *var, char **val); 1881*61046927SAndroid Build Coastguard Worker }; 1882*61046927SAndroid Build Coastguard Worker 1883*61046927SAndroid Build Coastguard Worker /** 1884*61046927SAndroid Build Coastguard Worker * Robust context driver extension. 1885*61046927SAndroid Build Coastguard Worker * 1886*61046927SAndroid Build Coastguard Worker * Existence of this extension means the driver can accept the 1887*61046927SAndroid Build Coastguard Worker * \c __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS flag and the 1888*61046927SAndroid Build Coastguard Worker * \c __DRI_CTX_ATTRIB_RESET_STRATEGY attribute in 1889*61046927SAndroid Build Coastguard Worker * \c __DRIdri2ExtensionRec::createContextAttribs. 1890*61046927SAndroid Build Coastguard Worker * 1891*61046927SAndroid Build Coastguard Worker * Used by the X server. 1892*61046927SAndroid Build Coastguard Worker */ 1893*61046927SAndroid Build Coastguard Worker #define __DRI2_ROBUSTNESS "DRI_Robustness" 1894*61046927SAndroid Build Coastguard Worker #define __DRI2_ROBUSTNESS_VERSION 1 1895*61046927SAndroid Build Coastguard Worker 1896*61046927SAndroid Build Coastguard Worker typedef struct __DRIrobustnessExtensionRec __DRIrobustnessExtension; 1897*61046927SAndroid Build Coastguard Worker struct __DRIrobustnessExtensionRec { 1898*61046927SAndroid Build Coastguard Worker __DRIextension base; 1899*61046927SAndroid Build Coastguard Worker }; 1900*61046927SAndroid Build Coastguard Worker 1901*61046927SAndroid Build Coastguard Worker /** 1902*61046927SAndroid Build Coastguard Worker * No-error context driver extension (deprecated). 1903*61046927SAndroid Build Coastguard Worker * 1904*61046927SAndroid Build Coastguard Worker * Existence of this extension means the driver can accept the 1905*61046927SAndroid Build Coastguard Worker * __DRI_CTX_FLAG_NO_ERROR flag. 1906*61046927SAndroid Build Coastguard Worker * 1907*61046927SAndroid Build Coastguard Worker * This extension is deprecated, and modern Mesa knows that it's always 1908*61046927SAndroid Build Coastguard Worker * supported. 1909*61046927SAndroid Build Coastguard Worker * 1910*61046927SAndroid Build Coastguard Worker * Not used by the X server. 1911*61046927SAndroid Build Coastguard Worker */ 1912*61046927SAndroid Build Coastguard Worker #define __DRI2_NO_ERROR "DRI_NoError" 1913*61046927SAndroid Build Coastguard Worker #define __DRI2_NO_ERROR_VERSION 1 1914*61046927SAndroid Build Coastguard Worker 1915*61046927SAndroid Build Coastguard Worker typedef struct __DRInoErrorExtensionRec { 1916*61046927SAndroid Build Coastguard Worker __DRIextension base; 1917*61046927SAndroid Build Coastguard Worker } __DRInoErrorExtension; 1918*61046927SAndroid Build Coastguard Worker 1919*61046927SAndroid Build Coastguard Worker /* 1920*61046927SAndroid Build Coastguard Worker * Flush control driver extension. 1921*61046927SAndroid Build Coastguard Worker * 1922*61046927SAndroid Build Coastguard Worker * Existence of this extension means the driver can accept the 1923*61046927SAndroid Build Coastguard Worker * \c __DRI_CTX_ATTRIB_RELEASE_BEHAVIOR attribute in 1924*61046927SAndroid Build Coastguard Worker * \c __DRIdri2ExtensionRec::createContextAttribs. 1925*61046927SAndroid Build Coastguard Worker * 1926*61046927SAndroid Build Coastguard Worker * Used by the X server. 1927*61046927SAndroid Build Coastguard Worker */ 1928*61046927SAndroid Build Coastguard Worker #define __DRI2_FLUSH_CONTROL "DRI_FlushControl" 1929*61046927SAndroid Build Coastguard Worker #define __DRI2_FLUSH_CONTROL_VERSION 1 1930*61046927SAndroid Build Coastguard Worker 1931*61046927SAndroid Build Coastguard Worker typedef struct __DRI2flushControlExtensionRec __DRI2flushControlExtension; 1932*61046927SAndroid Build Coastguard Worker struct __DRI2flushControlExtensionRec { 1933*61046927SAndroid Build Coastguard Worker __DRIextension base; 1934*61046927SAndroid Build Coastguard Worker }; 1935*61046927SAndroid Build Coastguard Worker 1936*61046927SAndroid Build Coastguard Worker /** 1937*61046927SAndroid Build Coastguard Worker * DRI config options extension. 1938*61046927SAndroid Build Coastguard Worker * 1939*61046927SAndroid Build Coastguard Worker * This extension provides the XML string containing driver options for use by 1940*61046927SAndroid Build Coastguard Worker * the loader in supporting the driconf application. 1941*61046927SAndroid Build Coastguard Worker * 1942*61046927SAndroid Build Coastguard Worker * v2: 1943*61046927SAndroid Build Coastguard Worker * - Add the getXml getter function which allows the driver more flexibility in 1944*61046927SAndroid Build Coastguard Worker * how the XML is provided. 1945*61046927SAndroid Build Coastguard Worker * - Deprecate the direct xml pointer. It is only provided as a fallback for 1946*61046927SAndroid Build Coastguard Worker * older versions of libGL and must not be used by clients that are aware of 1947*61046927SAndroid Build Coastguard Worker * the newer version. Future driver versions may set it to NULL. 1948*61046927SAndroid Build Coastguard Worker */ 1949*61046927SAndroid Build Coastguard Worker #define __DRI_CONFIG_OPTIONS "DRI_ConfigOptions" 1950*61046927SAndroid Build Coastguard Worker #define __DRI_CONFIG_OPTIONS_VERSION 2 1951*61046927SAndroid Build Coastguard Worker 1952*61046927SAndroid Build Coastguard Worker typedef struct __DRIconfigOptionsExtensionRec { 1953*61046927SAndroid Build Coastguard Worker __DRIextension base; 1954*61046927SAndroid Build Coastguard Worker const char *xml; /**< deprecated since v2, use getXml instead */ 1955*61046927SAndroid Build Coastguard Worker 1956*61046927SAndroid Build Coastguard Worker /** 1957*61046927SAndroid Build Coastguard Worker * Get an XML string that describes available driver options for use by a 1958*61046927SAndroid Build Coastguard Worker * config application. 1959*61046927SAndroid Build Coastguard Worker * 1960*61046927SAndroid Build Coastguard Worker * The returned string must be heap-allocated. The caller is responsible for 1961*61046927SAndroid Build Coastguard Worker * freeing it. 1962*61046927SAndroid Build Coastguard Worker */ 1963*61046927SAndroid Build Coastguard Worker char *(*getXml)(const char *driver_name); 1964*61046927SAndroid Build Coastguard Worker } __DRIconfigOptionsExtension; 1965*61046927SAndroid Build Coastguard Worker 1966*61046927SAndroid Build Coastguard Worker /** 1967*61046927SAndroid Build Coastguard Worker * Query renderer driver extension 1968*61046927SAndroid Build Coastguard Worker * 1969*61046927SAndroid Build Coastguard Worker * This allows the window system layer (either EGL or GLX) to query aspects of 1970*61046927SAndroid Build Coastguard Worker * hardware and driver support without creating a context. 1971*61046927SAndroid Build Coastguard Worker */ 1972*61046927SAndroid Build Coastguard Worker #define __DRI2_RENDERER_QUERY "DRI_RENDERER_QUERY" 1973*61046927SAndroid Build Coastguard Worker #define __DRI2_RENDERER_QUERY_VERSION 1 1974*61046927SAndroid Build Coastguard Worker 1975*61046927SAndroid Build Coastguard Worker #define __DRI2_RENDERER_VENDOR_ID 0x0000 1976*61046927SAndroid Build Coastguard Worker #define __DRI2_RENDERER_DEVICE_ID 0x0001 1977*61046927SAndroid Build Coastguard Worker #define __DRI2_RENDERER_VERSION 0x0002 1978*61046927SAndroid Build Coastguard Worker #define __DRI2_RENDERER_ACCELERATED 0x0003 1979*61046927SAndroid Build Coastguard Worker #define __DRI2_RENDERER_VIDEO_MEMORY 0x0004 1980*61046927SAndroid Build Coastguard Worker #define __DRI2_RENDERER_UNIFIED_MEMORY_ARCHITECTURE 0x0005 1981*61046927SAndroid Build Coastguard Worker #define __DRI2_RENDERER_PREFERRED_PROFILE 0x0006 1982*61046927SAndroid Build Coastguard Worker #define __DRI2_RENDERER_OPENGL_CORE_PROFILE_VERSION 0x0007 1983*61046927SAndroid Build Coastguard Worker #define __DRI2_RENDERER_OPENGL_COMPATIBILITY_PROFILE_VERSION 0x0008 1984*61046927SAndroid Build Coastguard Worker #define __DRI2_RENDERER_OPENGL_ES_PROFILE_VERSION 0x0009 1985*61046927SAndroid Build Coastguard Worker #define __DRI2_RENDERER_OPENGL_ES2_PROFILE_VERSION 0x000a 1986*61046927SAndroid Build Coastguard Worker 1987*61046927SAndroid Build Coastguard Worker #define __DRI2_RENDERER_PREFER_BACK_BUFFER_REUSE 0x000f 1988*61046927SAndroid Build Coastguard Worker 1989*61046927SAndroid Build Coastguard Worker typedef struct __DRI2rendererQueryExtensionRec __DRI2rendererQueryExtension; 1990*61046927SAndroid Build Coastguard Worker struct __DRI2rendererQueryExtensionRec { 1991*61046927SAndroid Build Coastguard Worker __DRIextension base; 1992*61046927SAndroid Build Coastguard Worker 1993*61046927SAndroid Build Coastguard Worker int (*queryInteger)(__DRIscreen *screen, int attribute, unsigned int *val); 1994*61046927SAndroid Build Coastguard Worker int (*queryString)(__DRIscreen *screen, int attribute, const char **val); 1995*61046927SAndroid Build Coastguard Worker }; 1996*61046927SAndroid Build Coastguard Worker 1997*61046927SAndroid Build Coastguard Worker /** 1998*61046927SAndroid Build Coastguard Worker * Image Loader extension. Drivers use this to allocate color buffers 1999*61046927SAndroid Build Coastguard Worker */ 2000*61046927SAndroid Build Coastguard Worker 2001*61046927SAndroid Build Coastguard Worker /** 2002*61046927SAndroid Build Coastguard Worker * See __DRIimageLoaderExtensionRec::getBuffers::buffer_mask. 2003*61046927SAndroid Build Coastguard Worker */ 2004*61046927SAndroid Build Coastguard Worker enum __DRIimageBufferMask { 2005*61046927SAndroid Build Coastguard Worker __DRI_IMAGE_BUFFER_BACK = (1 << 0), 2006*61046927SAndroid Build Coastguard Worker __DRI_IMAGE_BUFFER_FRONT = (1 << 1), 2007*61046927SAndroid Build Coastguard Worker 2008*61046927SAndroid Build Coastguard Worker /** 2009*61046927SAndroid Build Coastguard Worker * A buffer shared between application and compositor. The buffer may be 2010*61046927SAndroid Build Coastguard Worker * simultaneously accessed by each. 2011*61046927SAndroid Build Coastguard Worker * 2012*61046927SAndroid Build Coastguard Worker * A shared buffer is equivalent to an EGLSurface whose EGLConfig contains 2013*61046927SAndroid Build Coastguard Worker * EGL_MUTABLE_RENDER_BUFFER_BIT_KHR and whose active EGL_RENDER_BUFFER (as 2014*61046927SAndroid Build Coastguard Worker * opposed to any pending, requested change to EGL_RENDER_BUFFER) is 2015*61046927SAndroid Build Coastguard Worker * EGL_SINGLE_BUFFER. 2016*61046927SAndroid Build Coastguard Worker * 2017*61046927SAndroid Build Coastguard Worker * If buffer_mask contains __DRI_IMAGE_BUFFER_SHARED, then must contains no 2018*61046927SAndroid Build Coastguard Worker * other bits. As a corollary, a __DRIdrawable that has a "shared" buffer 2019*61046927SAndroid Build Coastguard Worker * has no front nor back buffer. 2020*61046927SAndroid Build Coastguard Worker * 2021*61046927SAndroid Build Coastguard Worker * The loader returns __DRI_IMAGE_BUFFER_SHARED in buffer_mask if and only 2022*61046927SAndroid Build Coastguard Worker * if: 2023*61046927SAndroid Build Coastguard Worker * - The loader supports __DRI_MUTABLE_RENDER_BUFFER_LOADER. 2024*61046927SAndroid Build Coastguard Worker * - The driver supports __DRI_MUTABLE_RENDER_BUFFER_DRIVER. 2025*61046927SAndroid Build Coastguard Worker * - The EGLConfig of the drawable EGLSurface contains 2026*61046927SAndroid Build Coastguard Worker * EGL_MUTABLE_RENDER_BUFFER_BIT_KHR. 2027*61046927SAndroid Build Coastguard Worker * - The EGLContext's EGL_RENDER_BUFFER is EGL_SINGLE_BUFFER. 2028*61046927SAndroid Build Coastguard Worker * Equivalently, the EGLSurface's active EGL_RENDER_BUFFER (as 2029*61046927SAndroid Build Coastguard Worker * opposed to any pending, requested change to EGL_RENDER_BUFFER) is 2030*61046927SAndroid Build Coastguard Worker * EGL_SINGLE_BUFFER. (See the EGL 1.5 and 2031*61046927SAndroid Build Coastguard Worker * EGL_KHR_mutable_render_buffer spec for details about "pending" vs 2032*61046927SAndroid Build Coastguard Worker * "active" EGL_RENDER_BUFFER state). 2033*61046927SAndroid Build Coastguard Worker * 2034*61046927SAndroid Build Coastguard Worker * A shared buffer is similar to a front buffer in that all rendering to the 2035*61046927SAndroid Build Coastguard Worker * buffer should appear promptly on the screen. It is different from 2036*61046927SAndroid Build Coastguard Worker * a front buffer in that its behavior is independent from the 2037*61046927SAndroid Build Coastguard Worker * GL_DRAW_BUFFER state. Specifically, if GL_DRAW_FRAMEBUFFER is 0 and the 2038*61046927SAndroid Build Coastguard Worker * __DRIdrawable's buffer_mask is __DRI_IMAGE_BUFFER_SHARED, then all 2039*61046927SAndroid Build Coastguard Worker * rendering should appear promptly on the screen if GL_DRAW_BUFFER is not 2040*61046927SAndroid Build Coastguard Worker * GL_NONE. 2041*61046927SAndroid Build Coastguard Worker * 2042*61046927SAndroid Build Coastguard Worker * The difference between a shared buffer and a front buffer is motivated 2043*61046927SAndroid Build Coastguard Worker * by the constraints of Android and OpenGL ES. OpenGL ES does not support 2044*61046927SAndroid Build Coastguard Worker * front-buffer rendering. Android's SurfaceFlinger protocol provides the 2045*61046927SAndroid Build Coastguard Worker * EGL driver only a back buffer and no front buffer. The shared buffer 2046*61046927SAndroid Build Coastguard Worker * mode introduced by EGL_KHR_mutable_render_buffer is a backdoor though 2047*61046927SAndroid Build Coastguard Worker * EGL that allows Android OpenGL ES applications to render to what is 2048*61046927SAndroid Build Coastguard Worker * effectively the front buffer, a backdoor that required no change to the 2049*61046927SAndroid Build Coastguard Worker * OpenGL ES API and little change to the SurfaceFlinger API. 2050*61046927SAndroid Build Coastguard Worker */ 2051*61046927SAndroid Build Coastguard Worker __DRI_IMAGE_BUFFER_SHARED = (1 << 2), 2052*61046927SAndroid Build Coastguard Worker }; 2053*61046927SAndroid Build Coastguard Worker 2054*61046927SAndroid Build Coastguard Worker struct __DRIimageList { 2055*61046927SAndroid Build Coastguard Worker uint32_t image_mask; 2056*61046927SAndroid Build Coastguard Worker __DRIimage *back; 2057*61046927SAndroid Build Coastguard Worker __DRIimage *front; 2058*61046927SAndroid Build Coastguard Worker }; 2059*61046927SAndroid Build Coastguard Worker 2060*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_LOADER "DRI_IMAGE_LOADER" 2061*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_LOADER_VERSION 4 2062*61046927SAndroid Build Coastguard Worker 2063*61046927SAndroid Build Coastguard Worker struct __DRIimageLoaderExtensionRec { 2064*61046927SAndroid Build Coastguard Worker __DRIextension base; 2065*61046927SAndroid Build Coastguard Worker 2066*61046927SAndroid Build Coastguard Worker /** 2067*61046927SAndroid Build Coastguard Worker * Allocate color buffers. 2068*61046927SAndroid Build Coastguard Worker * 2069*61046927SAndroid Build Coastguard Worker * \param driDrawable 2070*61046927SAndroid Build Coastguard Worker * \param width Width of allocated buffers 2071*61046927SAndroid Build Coastguard Worker * \param height Height of allocated buffers 2072*61046927SAndroid Build Coastguard Worker * \param format one of __DRI_IMAGE_FORMAT_* 2073*61046927SAndroid Build Coastguard Worker * \param stamp Address of variable to be updated when 2074*61046927SAndroid Build Coastguard Worker * getBuffers must be called again 2075*61046927SAndroid Build Coastguard Worker * \param loaderPrivate The loaderPrivate for driDrawable 2076*61046927SAndroid Build Coastguard Worker * \param buffer_mask Set of buffers to allocate. A bitmask of 2077*61046927SAndroid Build Coastguard Worker * __DRIimageBufferMask. 2078*61046927SAndroid Build Coastguard Worker * \param buffers Returned buffers 2079*61046927SAndroid Build Coastguard Worker */ 2080*61046927SAndroid Build Coastguard Worker int (*getBuffers)(__DRIdrawable *driDrawable, 2081*61046927SAndroid Build Coastguard Worker unsigned int format, 2082*61046927SAndroid Build Coastguard Worker uint32_t *stamp, 2083*61046927SAndroid Build Coastguard Worker void *loaderPrivate, 2084*61046927SAndroid Build Coastguard Worker uint32_t buffer_mask, 2085*61046927SAndroid Build Coastguard Worker struct __DRIimageList *buffers); 2086*61046927SAndroid Build Coastguard Worker 2087*61046927SAndroid Build Coastguard Worker /** 2088*61046927SAndroid Build Coastguard Worker * Flush pending front-buffer rendering 2089*61046927SAndroid Build Coastguard Worker * 2090*61046927SAndroid Build Coastguard Worker * Any rendering that has been performed to the 2091*61046927SAndroid Build Coastguard Worker * fake front will be flushed to the front 2092*61046927SAndroid Build Coastguard Worker * 2093*61046927SAndroid Build Coastguard Worker * \param driDrawable Drawable whose front-buffer is to be flushed 2094*61046927SAndroid Build Coastguard Worker * \param loaderPrivate Loader's private data that was previously passed 2095*61046927SAndroid Build Coastguard Worker * into __DRIdri2ExtensionRec::createNewDrawable 2096*61046927SAndroid Build Coastguard Worker */ 2097*61046927SAndroid Build Coastguard Worker void (*flushFrontBuffer)(__DRIdrawable *driDrawable, void *loaderPrivate); 2098*61046927SAndroid Build Coastguard Worker 2099*61046927SAndroid Build Coastguard Worker /** 2100*61046927SAndroid Build Coastguard Worker * Return a loader capability value. If the loader doesn't know the enum, 2101*61046927SAndroid Build Coastguard Worker * it will return 0. 2102*61046927SAndroid Build Coastguard Worker * 2103*61046927SAndroid Build Coastguard Worker * \since 2 2104*61046927SAndroid Build Coastguard Worker */ 2105*61046927SAndroid Build Coastguard Worker unsigned (*getCapability)(void *loaderPrivate, enum dri_loader_cap cap); 2106*61046927SAndroid Build Coastguard Worker 2107*61046927SAndroid Build Coastguard Worker /** 2108*61046927SAndroid Build Coastguard Worker * Flush swap buffers 2109*61046927SAndroid Build Coastguard Worker * 2110*61046927SAndroid Build Coastguard Worker * Make sure any outstanding swap buffers have been submitted to the 2111*61046927SAndroid Build Coastguard Worker * device. 2112*61046927SAndroid Build Coastguard Worker * 2113*61046927SAndroid Build Coastguard Worker * \param driDrawable Drawable whose swaps need to be flushed 2114*61046927SAndroid Build Coastguard Worker * \param loaderPrivate Loader's private data that was previously passed 2115*61046927SAndroid Build Coastguard Worker * into __DRIdri2ExtensionRec::createNewDrawable 2116*61046927SAndroid Build Coastguard Worker * 2117*61046927SAndroid Build Coastguard Worker * \since 3 2118*61046927SAndroid Build Coastguard Worker */ 2119*61046927SAndroid Build Coastguard Worker void (*flushSwapBuffers)(__DRIdrawable *driDrawable, void *loaderPrivate); 2120*61046927SAndroid Build Coastguard Worker 2121*61046927SAndroid Build Coastguard Worker /** 2122*61046927SAndroid Build Coastguard Worker * Clean up any loader state associated with an image. 2123*61046927SAndroid Build Coastguard Worker * 2124*61046927SAndroid Build Coastguard Worker * \param loaderPrivate Loader's private data that was previously passed 2125*61046927SAndroid Build Coastguard Worker * into a __DRIimageExtensionRec::createImage function 2126*61046927SAndroid Build Coastguard Worker * \since 4 2127*61046927SAndroid Build Coastguard Worker */ 2128*61046927SAndroid Build Coastguard Worker void (*destroyLoaderImageState)(void *loaderPrivate); 2129*61046927SAndroid Build Coastguard Worker }; 2130*61046927SAndroid Build Coastguard Worker 2131*61046927SAndroid Build Coastguard Worker /** 2132*61046927SAndroid Build Coastguard Worker * Main DRI3 interface extension. 2133*61046927SAndroid Build Coastguard Worker * 2134*61046927SAndroid Build Coastguard Worker * Not used by the X server. 2135*61046927SAndroid Build Coastguard Worker */ 2136*61046927SAndroid Build Coastguard Worker 2137*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_DRIVER "DRI_IMAGE_DRIVER" 2138*61046927SAndroid Build Coastguard Worker #define __DRI_IMAGE_DRIVER_VERSION 2 2139*61046927SAndroid Build Coastguard Worker 2140*61046927SAndroid Build Coastguard Worker struct __DRIimageDriverExtensionRec { 2141*61046927SAndroid Build Coastguard Worker __DRIextension base; 2142*61046927SAndroid Build Coastguard Worker 2143*61046927SAndroid Build Coastguard Worker /* Common DRI functions, shared with DRI2 */ 2144*61046927SAndroid Build Coastguard Worker __DRIcreateNewScreen2Func createNewScreen2; 2145*61046927SAndroid Build Coastguard Worker __DRIcreateNewDrawableFunc createNewDrawable; 2146*61046927SAndroid Build Coastguard Worker __DRIcreateContextAttribsFunc createContextAttribs; 2147*61046927SAndroid Build Coastguard Worker __DRIgetAPIMaskFunc getAPIMask; 2148*61046927SAndroid Build Coastguard Worker __DRIcreateNewScreen3Func createNewScreen3; 2149*61046927SAndroid Build Coastguard Worker }; 2150*61046927SAndroid Build Coastguard Worker 2151*61046927SAndroid Build Coastguard Worker /** 2152*61046927SAndroid Build Coastguard Worker * Background callable loader extension. 2153*61046927SAndroid Build Coastguard Worker * 2154*61046927SAndroid Build Coastguard Worker * Loaders expose this extension to indicate to drivers that they are capable 2155*61046927SAndroid Build Coastguard Worker * of handling callbacks from the driver's background drawing threads. 2156*61046927SAndroid Build Coastguard Worker */ 2157*61046927SAndroid Build Coastguard Worker #define __DRI_BACKGROUND_CALLABLE "DRI_BackgroundCallable" 2158*61046927SAndroid Build Coastguard Worker #define __DRI_BACKGROUND_CALLABLE_VERSION 1 2159*61046927SAndroid Build Coastguard Worker 2160*61046927SAndroid Build Coastguard Worker typedef struct __DRIbackgroundCallableExtensionRec __DRIbackgroundCallableExtension; 2161*61046927SAndroid Build Coastguard Worker struct __DRIbackgroundCallableExtensionRec { 2162*61046927SAndroid Build Coastguard Worker __DRIextension base; 2163*61046927SAndroid Build Coastguard Worker 2164*61046927SAndroid Build Coastguard Worker /** 2165*61046927SAndroid Build Coastguard Worker * Indicate that this thread is being used by the driver as a background 2166*61046927SAndroid Build Coastguard Worker * drawing thread which may make callbacks to the loader. 2167*61046927SAndroid Build Coastguard Worker * 2168*61046927SAndroid Build Coastguard Worker * \param loaderPrivate is the value that was passed to to the driver when 2169*61046927SAndroid Build Coastguard Worker * the context was created. This can be used by the loader to identify 2170*61046927SAndroid Build Coastguard Worker * which context any callbacks are associated with. 2171*61046927SAndroid Build Coastguard Worker * 2172*61046927SAndroid Build Coastguard Worker * If this function is called more than once from any given thread, each 2173*61046927SAndroid Build Coastguard Worker * subsequent call overrides the loaderPrivate data that was passed in the 2174*61046927SAndroid Build Coastguard Worker * previous call. The driver can take advantage of this to re-use a 2175*61046927SAndroid Build Coastguard Worker * background thread to perform drawing on behalf of multiple contexts. 2176*61046927SAndroid Build Coastguard Worker * 2177*61046927SAndroid Build Coastguard Worker * It is permissible for the driver to call this function from a 2178*61046927SAndroid Build Coastguard Worker * non-background thread (i.e. a thread that has already been bound to a 2179*61046927SAndroid Build Coastguard Worker * context using __DRIcoreExtensionRec::bindContext()); when this happens, 2180*61046927SAndroid Build Coastguard Worker * the \c loaderPrivate pointer must be equal to the pointer that was 2181*61046927SAndroid Build Coastguard Worker * passed to the driver when the currently bound context was created. 2182*61046927SAndroid Build Coastguard Worker * 2183*61046927SAndroid Build Coastguard Worker * This call should execute quickly enough that the driver can call it with 2184*61046927SAndroid Build Coastguard Worker * impunity whenever a background thread starts performing drawing 2185*61046927SAndroid Build Coastguard Worker * operations (e.g. it should just set a thread-local variable). 2186*61046927SAndroid Build Coastguard Worker */ 2187*61046927SAndroid Build Coastguard Worker void (*setBackgroundContext)(void *loaderPrivate); 2188*61046927SAndroid Build Coastguard Worker 2189*61046927SAndroid Build Coastguard Worker /** 2190*61046927SAndroid Build Coastguard Worker * Indicate that it is multithread safe to use glthread. For GLX/EGL 2191*61046927SAndroid Build Coastguard Worker * platforms using Xlib, that involves calling XInitThreads, before 2192*61046927SAndroid Build Coastguard Worker * opening an X display. 2193*61046927SAndroid Build Coastguard Worker * 2194*61046927SAndroid Build Coastguard Worker * Note: only supported if extension version is at least 2. 2195*61046927SAndroid Build Coastguard Worker * 2196*61046927SAndroid Build Coastguard Worker * \param loaderPrivate is the value that was passed to to the driver when 2197*61046927SAndroid Build Coastguard Worker * the context was created. This can be used by the loader to identify 2198*61046927SAndroid Build Coastguard Worker * which context any callbacks are associated with. 2199*61046927SAndroid Build Coastguard Worker */ 2200*61046927SAndroid Build Coastguard Worker unsigned char (*isThreadSafe)(void *loaderPrivate); 2201*61046927SAndroid Build Coastguard Worker }; 2202*61046927SAndroid Build Coastguard Worker 2203*61046927SAndroid Build Coastguard Worker /** 2204*61046927SAndroid Build Coastguard Worker * The driver portion of EGL_KHR_mutable_render_buffer. 2205*61046927SAndroid Build Coastguard Worker * 2206*61046927SAndroid Build Coastguard Worker * If the driver creates a __DRIconfig with 2207*61046927SAndroid Build Coastguard Worker * __DRI_ATTRIB_MUTABLE_RENDER_BUFFER, then it must support this extension. 2208*61046927SAndroid Build Coastguard Worker * 2209*61046927SAndroid Build Coastguard Worker * To support this extension: 2210*61046927SAndroid Build Coastguard Worker * 2211*61046927SAndroid Build Coastguard Worker * - The driver should create at least one __DRIconfig with 2212*61046927SAndroid Build Coastguard Worker * __DRI_ATTRIB_MUTABLE_RENDER_BUFFER. This is strongly recommended but 2213*61046927SAndroid Build Coastguard Worker * not required. 2214*61046927SAndroid Build Coastguard Worker * 2215*61046927SAndroid Build Coastguard Worker * - The driver must be able to handle __DRI_IMAGE_BUFFER_SHARED if 2216*61046927SAndroid Build Coastguard Worker * returned by __DRIimageLoaderExtension:getBuffers(). 2217*61046927SAndroid Build Coastguard Worker * 2218*61046927SAndroid Build Coastguard Worker * - When rendering to __DRI_IMAGE_BUFFER_SHARED, it must call 2219*61046927SAndroid Build Coastguard Worker * __DRImutableRenderBufferLoaderExtension::displaySharedBuffer() in 2220*61046927SAndroid Build Coastguard Worker * response to glFlush and glFinish. (This requirement is not documented 2221*61046927SAndroid Build Coastguard Worker * in EGL_KHR_mutable_render_buffer, but is a de-facto requirement in the 2222*61046927SAndroid Build Coastguard Worker * Android ecosystem. Android applications expect that glFlush will 2223*61046927SAndroid Build Coastguard Worker * immediately display the buffer when in shared buffer mode, and Android 2224*61046927SAndroid Build Coastguard Worker * drivers comply with this expectation). It :may: call 2225*61046927SAndroid Build Coastguard Worker * displaySharedBuffer() more often than required. 2226*61046927SAndroid Build Coastguard Worker * 2227*61046927SAndroid Build Coastguard Worker * - When rendering to __DRI_IMAGE_BUFFER_SHARED, it must ensure that the 2228*61046927SAndroid Build Coastguard Worker * buffer is always in a format compatible for display because the 2229*61046927SAndroid Build Coastguard Worker * display engine (usually SurfaceFlinger or hwcomposer) may display the 2230*61046927SAndroid Build Coastguard Worker * image at any time, even concurrently with 3D rendering. For example, 2231*61046927SAndroid Build Coastguard Worker * display hardware and the GL hardware may be able to access the buffer 2232*61046927SAndroid Build Coastguard Worker * simultaneously. In particular, if the buffer is compressed then take 2233*61046927SAndroid Build Coastguard Worker * care that SurfaceFlinger and hwcomposer can consume the compression 2234*61046927SAndroid Build Coastguard Worker * format. 2235*61046927SAndroid Build Coastguard Worker * 2236*61046927SAndroid Build Coastguard Worker * Not used by the X server. 2237*61046927SAndroid Build Coastguard Worker * 2238*61046927SAndroid Build Coastguard Worker * \see __DRI_IMAGE_BUFFER_SHARED 2239*61046927SAndroid Build Coastguard Worker * \see __DRI_ATTRIB_MUTABLE_RENDER_BUFFER 2240*61046927SAndroid Build Coastguard Worker * \see __DRI_MUTABLE_RENDER_BUFFER_LOADER 2241*61046927SAndroid Build Coastguard Worker */ 2242*61046927SAndroid Build Coastguard Worker #define __DRI_MUTABLE_RENDER_BUFFER_DRIVER "DRI_MutableRenderBufferDriver" 2243*61046927SAndroid Build Coastguard Worker #define __DRI_MUTABLE_RENDER_BUFFER_DRIVER_VERSION 1 2244*61046927SAndroid Build Coastguard Worker 2245*61046927SAndroid Build Coastguard Worker typedef struct __DRImutableRenderBufferDriverExtensionRec __DRImutableRenderBufferDriverExtension; 2246*61046927SAndroid Build Coastguard Worker struct __DRImutableRenderBufferDriverExtensionRec { 2247*61046927SAndroid Build Coastguard Worker __DRIextension base; 2248*61046927SAndroid Build Coastguard Worker }; 2249*61046927SAndroid Build Coastguard Worker 2250*61046927SAndroid Build Coastguard Worker /** 2251*61046927SAndroid Build Coastguard Worker * The loader portion of EGL_KHR_mutable_render_buffer. 2252*61046927SAndroid Build Coastguard Worker * 2253*61046927SAndroid Build Coastguard Worker * Requires loader extension DRI_IMAGE_LOADER, through which the loader sends 2254*61046927SAndroid Build Coastguard Worker * __DRI_IMAGE_BUFFER_SHARED to the driver. 2255*61046927SAndroid Build Coastguard Worker * 2256*61046927SAndroid Build Coastguard Worker * Not used by the X server. 2257*61046927SAndroid Build Coastguard Worker * 2258*61046927SAndroid Build Coastguard Worker * \see __DRI_MUTABLE_RENDER_BUFFER_DRIVER 2259*61046927SAndroid Build Coastguard Worker */ 2260*61046927SAndroid Build Coastguard Worker #define __DRI_MUTABLE_RENDER_BUFFER_LOADER "DRI_MutableRenderBufferLoader" 2261*61046927SAndroid Build Coastguard Worker #define __DRI_MUTABLE_RENDER_BUFFER_LOADER_VERSION 1 2262*61046927SAndroid Build Coastguard Worker 2263*61046927SAndroid Build Coastguard Worker typedef struct __DRImutableRenderBufferLoaderExtensionRec __DRImutableRenderBufferLoaderExtension; 2264*61046927SAndroid Build Coastguard Worker struct __DRImutableRenderBufferLoaderExtensionRec { 2265*61046927SAndroid Build Coastguard Worker __DRIextension base; 2266*61046927SAndroid Build Coastguard Worker 2267*61046927SAndroid Build Coastguard Worker /** 2268*61046927SAndroid Build Coastguard Worker * Inform the display engine (that is, SurfaceFlinger and/or hwcomposer) 2269*61046927SAndroid Build Coastguard Worker * that the __DRIdrawable has new content. 2270*61046927SAndroid Build Coastguard Worker * 2271*61046927SAndroid Build Coastguard Worker * The display engine may ignore this call, for example, if it continually 2272*61046927SAndroid Build Coastguard Worker * refreshes and displays the buffer on every frame, as in 2273*61046927SAndroid Build Coastguard Worker * EGL_ANDROID_front_buffer_auto_refresh. On the other extreme, the display 2274*61046927SAndroid Build Coastguard Worker * engine may refresh and display the buffer only in frames in which the 2275*61046927SAndroid Build Coastguard Worker * driver calls this. 2276*61046927SAndroid Build Coastguard Worker * 2277*61046927SAndroid Build Coastguard Worker * If the fence_fd is not -1, then the display engine will display the 2278*61046927SAndroid Build Coastguard Worker * buffer only after the fence signals. 2279*61046927SAndroid Build Coastguard Worker * 2280*61046927SAndroid Build Coastguard Worker * The drawable's current __DRIimageBufferMask, as returned by 2281*61046927SAndroid Build Coastguard Worker * __DRIimageLoaderExtension::getBuffers(), must be 2282*61046927SAndroid Build Coastguard Worker * __DRI_IMAGE_BUFFER_SHARED. 2283*61046927SAndroid Build Coastguard Worker */ 2284*61046927SAndroid Build Coastguard Worker void (*displaySharedBuffer)(__DRIdrawable *drawable, int fence_fd, 2285*61046927SAndroid Build Coastguard Worker void *loaderPrivate); 2286*61046927SAndroid Build Coastguard Worker }; 2287*61046927SAndroid Build Coastguard Worker 2288*61046927SAndroid Build Coastguard Worker #endif 2289