dri_interface.h revision 4501a5d6e8d00fd0d87625352ed5ba1a8861f72e
1192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/* 2192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. 3e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * Copyright 2007-2008 Red Hat, Inc. 4192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * (C) Copyright IBM Corporation 2004 5192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * All Rights Reserved. 6192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 7192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a 8192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * copy of this software and associated documentation files (the "Software"), 9192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * to deal in the Software without restriction, including without limitation 10192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * on the rights to use, copy, modify, merge, publish, distribute, sub 11192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * license, and/or sell copies of the Software, and to permit persons to whom 12192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * the Software is furnished to do so, subject to the following conditions: 13192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 14192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * The above copyright notice and this permission notice (including the next 15192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * paragraph) shall be included in all copies or substantial portions of the 16192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Software. 17192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 18192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 21192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * THE COPYRIGHT HOLDERS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 22192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 23192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 24192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * USE OR OTHER DEALINGS IN THE SOFTWARE. 25192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 26192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 27192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 28192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \file dri_interface.h 29192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 30192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * This file contains all the types and functions that define the interface 31192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * between a DRI driver and driver loader. Currently, the most common driver 32192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * loader is the XFree86 libGL.so. However, other loaders do exist, and in 33192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * the future the server-side libglx.a will also be a loader. 34192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 35192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \author Kevin E. Martin <kevin@precisioninsight.com> 36192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \author Ian Romanick <idr@us.ibm.com> 37e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * \author Kristian Høgsberg <krh@redhat.com> 38192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 39192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 4074d563cdfbfb07cc666d60dc909e90ddb9949cbbKeith Whitwell#ifndef DRI_INTERFACE_H 4174d563cdfbfb07cc666d60dc909e90ddb9949cbbKeith Whitwell#define DRI_INTERFACE_H 4274d563cdfbfb07cc666d60dc909e90ddb9949cbbKeith Whitwell 438e7599892f5dd2f85a74eccf9ff7a80dd277122bJon Turney/* For archs with no drm.h */ 440b932284f2294a1dc02004d3b6ef6dfb633bc4bbGeorge Sapountzis#if defined(__APPLE__) || defined(__CYGWIN__) || defined(__GNU__) 450b932284f2294a1dc02004d3b6ef6dfb633bc4bbGeorge Sapountzis#ifndef __NOT_HAVE_DRM_H 460b932284f2294a1dc02004d3b6ef6dfb633bc4bbGeorge Sapountzis#define __NOT_HAVE_DRM_H 470b932284f2294a1dc02004d3b6ef6dfb633bc4bbGeorge Sapountzis#endif 480b932284f2294a1dc02004d3b6ef6dfb633bc4bbGeorge Sapountzis#endif 490b932284f2294a1dc02004d3b6ef6dfb633bc4bbGeorge Sapountzis 500b932284f2294a1dc02004d3b6ef6dfb633bc4bbGeorge Sapountzis#ifndef __NOT_HAVE_DRM_H 51fabe2b9ba38e95bd21a35b265bfc403fa3cb2883Ian Romanick#include <drm.h> 5201ac4540f04d47b64aeead8984c92e39b436b5f9Jeremy Huddleston#else 5301ac4540f04d47b64aeead8984c92e39b436b5f9Jeremy Huddlestontypedef unsigned int drm_context_t; 5401ac4540f04d47b64aeead8984c92e39b436b5f9Jeremy Huddlestontypedef unsigned int drm_drawable_t; 5501ac4540f04d47b64aeead8984c92e39b436b5f9Jeremy Huddlestontypedef struct drm_clip_rect drm_clip_rect_t; 5601ac4540f04d47b64aeead8984c92e39b436b5f9Jeremy Huddleston#endif 57192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 58192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 59192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \name DRI interface structures 60192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 61192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * The following structures define the interface between the GLX client 62192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * side library and the DRI (direct rendering infrastructure). 63192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 64192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/*@{*/ 654a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsbergtypedef struct __DRIdisplayRec __DRIdisplay; 664a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsbergtypedef struct __DRIscreenRec __DRIscreen; 674a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsbergtypedef struct __DRIcontextRec __DRIcontext; 684a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsbergtypedef struct __DRIdrawableRec __DRIdrawable; 69e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergtypedef struct __DRIconfigRec __DRIconfig; 704a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsbergtypedef struct __DRIframebufferRec __DRIframebuffer; 714a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsbergtypedef struct __DRIversionRec __DRIversion; 72f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg 73e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergtypedef struct __DRIcoreExtensionRec __DRIcoreExtension; 7478a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsbergtypedef struct __DRIextensionRec __DRIextension; 75ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsbergtypedef struct __DRIcopySubBufferExtensionRec __DRIcopySubBufferExtension; 76efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsbergtypedef struct __DRIswapControlExtensionRec __DRIswapControlExtension; 77a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsbergtypedef struct __DRIframeTrackingExtensionRec __DRIframeTrackingExtension; 78106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsbergtypedef struct __DRImediaStreamCounterExtensionRec __DRImediaStreamCounterExtension; 79f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsbergtypedef struct __DRItexOffsetExtensionRec __DRItexOffsetExtension; 806d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsbergtypedef struct __DRItexBufferExtensionRec __DRItexBufferExtension; 81e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergtypedef struct __DRIlegacyExtensionRec __DRIlegacyExtension; 82280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzistypedef struct __DRIswrastExtensionRec __DRIswrastExtension; 83f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsbergtypedef struct __DRIbufferRec __DRIbuffer; 84f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsbergtypedef struct __DRIdri2ExtensionRec __DRIdri2Extension; 85f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsbergtypedef struct __DRIdri2LoaderExtensionRec __DRIdri2LoaderExtension; 8665562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihanetypedef struct __DRI2flushExtensionRec __DRI2flushExtension; 87f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 88192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/*@}*/ 89192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 90192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 91192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 92f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg * Extension struct. Drivers 'inherit' from this struct by embedding 93e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * it as the first element in the extension struct. 94ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * 95ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * We never break API in for a DRI extension. If we need to change 96ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * the way things work in a non-backwards compatible manner, we 97ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * introduce a new extension. During a transition period, we can 98ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * leave both the old and the new extension in the driver, which 99ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * allows us to move to the new interface without having to update the 100ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * loader(s) in lock step. 101ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * 102ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * However, we can add entry points to an extension over time as long 103ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * as we don't break the old ones. As we add entry points to an 104ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * extension, we increase the version number. The corresponding 105ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * #define can be used to guard code that accesses the new entry 106ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * points at compile time and the version field in the extension 107ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * struct can be used at run-time to determine how to use the 108ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * extension. 109f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg */ 110f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsbergstruct __DRIextensionRec { 111f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg const char *name; 112ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg int version; 113f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg}; 114f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg 115ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg/** 116e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * The first set of extension are the screen extensions, returned by 117e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * __DRIcore::getExtensions(). This entry point will return a list of 118e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * extensions and the loader can use the ones it knows about by 119e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * casting them to more specific extensions and advertising any GLX 120e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * extensions the DRI extensions enables. 121e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg */ 122e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 123e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/** 124f968f67e6214416f04b8875ce59a94a02f464c81Kristian Høgsberg * Used by drivers to indicate support for setting the read drawable. 125f968f67e6214416f04b8875ce59a94a02f464c81Kristian Høgsberg */ 126f968f67e6214416f04b8875ce59a94a02f464c81Kristian Høgsberg#define __DRI_READ_DRAWABLE "DRI_ReadDrawable" 127ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg#define __DRI_READ_DRAWABLE_VERSION 1 128f968f67e6214416f04b8875ce59a94a02f464c81Kristian Høgsberg 129f968f67e6214416f04b8875ce59a94a02f464c81Kristian Høgsberg/** 130ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg * Used by drivers that implement the GLX_MESA_copy_sub_buffer extension. 131ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg */ 132ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg#define __DRI_COPY_SUB_BUFFER "DRI_CopySubBuffer" 133ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg#define __DRI_COPY_SUB_BUFFER_VERSION 1 134ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsbergstruct __DRIcopySubBufferExtensionRec { 135ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg __DRIextension base; 136ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg void (*copySubBuffer)(__DRIdrawable *drawable, int x, int y, int w, int h); 137ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg}; 138ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg 139efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg/** 140efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg * Used by drivers that implement the GLX_SGI_swap_control or 141efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg * GLX_MESA_swap_control extension. 142efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg */ 143efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg#define __DRI_SWAP_CONTROL "DRI_SwapControl" 144ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg#define __DRI_SWAP_CONTROL_VERSION 1 145efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsbergstruct __DRIswapControlExtensionRec { 146efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg __DRIextension base; 147efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg void (*setSwapInterval)(__DRIdrawable *drawable, unsigned int inteval); 148efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg unsigned int (*getSwapInterval)(__DRIdrawable *drawable); 149efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg}; 150f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg 151f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg/** 152a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * Used by drivers that implement the GLX_MESA_swap_frame_usage extension. 153a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg */ 154a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg#define __DRI_FRAME_TRACKING "DRI_FrameTracking" 155ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg#define __DRI_FRAME_TRACKING_VERSION 1 156a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsbergstruct __DRIframeTrackingExtensionRec { 157a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg __DRIextension base; 158a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg 159a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg /** 160a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * Enable or disable frame usage tracking. 161a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * 162a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * \since Internal API version 20030317. 163a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg */ 164a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg int (*frameTracking)(__DRIdrawable *drawable, GLboolean enable); 165a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg 166a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg /** 167a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * Retrieve frame usage information. 168a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * 169a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * \since Internal API version 20030317. 170a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg */ 171a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg int (*queryFrameTracking)(__DRIdrawable *drawable, 172a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg int64_t * sbc, int64_t * missedFrames, 173a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg float * lastMissedUsage, float * usage); 174a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg}; 175a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg 176106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg 177106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg/** 178106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * Used by drivers that implement the GLX_SGI_video_sync extension. 179106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg */ 180106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg#define __DRI_MEDIA_STREAM_COUNTER "DRI_MediaStreamCounter" 1816e8d21d72f35767e07081a8bee4323aaaf5e2aaeKristian Høgsberg#define __DRI_MEDIA_STREAM_COUNTER_VERSION 1 182106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsbergstruct __DRImediaStreamCounterExtensionRec { 183106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg __DRIextension base; 184106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg 185106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg /** 186106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * Wait for the MSC to equal target_msc, or, if that has already passed, 187106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * the next time (MSC % divisor) is equal to remainder. If divisor is 188106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * zero, the function will return as soon as MSC is greater than or equal 189106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * to target_msc. 190106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg */ 191106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg int (*waitForMSC)(__DRIdrawable *drawable, 192106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg int64_t target_msc, int64_t divisor, int64_t remainder, 193106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg int64_t * msc, int64_t * sbc); 19438fdb47d26055e19d50cd407266b56ed4317ae0aJesse Barnes 19538fdb47d26055e19d50cd407266b56ed4317ae0aJesse Barnes /** 19638fdb47d26055e19d50cd407266b56ed4317ae0aJesse Barnes * Get the number of vertical refreshes since some point in time before 19738fdb47d26055e19d50cd407266b56ed4317ae0aJesse Barnes * this function was first called (i.e., system start up). 19838fdb47d26055e19d50cd407266b56ed4317ae0aJesse Barnes */ 1996e8d21d72f35767e07081a8bee4323aaaf5e2aaeKristian Høgsberg int (*getDrawableMSC)(__DRIscreen *screen, __DRIdrawable *drawable, 20038fdb47d26055e19d50cd407266b56ed4317ae0aJesse Barnes int64_t *msc); 201106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg}; 202106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg 203106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg 204f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg#define __DRI_TEX_OFFSET "DRI_TexOffset" 205ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg#define __DRI_TEX_OFFSET_VERSION 1 206f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsbergstruct __DRItexOffsetExtensionRec { 207f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg __DRIextension base; 208f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg 209f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg /** 210f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg * Method to override base texture image with a driver specific 'offset'. 211f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg * The depth passed in allows e.g. to ignore the alpha channel of texture 212f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg * images where the non-alpha components don't occupy a whole texel. 213f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg * 214f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg * For GLX_EXT_texture_from_pixmap with AIGLX. 215f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg */ 216f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg void (*setTexOffset)(__DRIcontext *pDRICtx, GLint texname, 217f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg unsigned long long offset, GLint depth, GLuint pitch); 218f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg}; 219f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg 220f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg 221debf00e5fc3828f63e0f99d72c7fa6cd6ce012c5Kristian Høgsberg/* Valid values for format in the setTexBuffer2 function below. These 222debf00e5fc3828f63e0f99d72c7fa6cd6ce012c5Kristian Høgsberg * values match the GLX tokens for compatibility reasons, but we 223debf00e5fc3828f63e0f99d72c7fa6cd6ce012c5Kristian Høgsberg * define them here since the DRI interface can't depend on GLX. */ 224debf00e5fc3828f63e0f99d72c7fa6cd6ce012c5Kristian Høgsberg#define __DRI_TEXTURE_FORMAT_NONE 0x20D8 225debf00e5fc3828f63e0f99d72c7fa6cd6ce012c5Kristian Høgsberg#define __DRI_TEXTURE_FORMAT_RGB 0x20D9 226debf00e5fc3828f63e0f99d72c7fa6cd6ce012c5Kristian Høgsberg#define __DRI_TEXTURE_FORMAT_RGBA 0x20DA 227debf00e5fc3828f63e0f99d72c7fa6cd6ce012c5Kristian Høgsberg 2286d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg#define __DRI_TEX_BUFFER "DRI_TexBuffer" 22966175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt#define __DRI_TEX_BUFFER_VERSION 2 2306d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsbergstruct __DRItexBufferExtensionRec { 2316d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg __DRIextension base; 2326d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg 2336d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg /** 234dcbe215c015c8dc48440f578023c2b9d12b934e4Kristian Høgsberg * Method to override base texture image with the contents of a 235dcbe215c015c8dc48440f578023c2b9d12b934e4Kristian Høgsberg * __DRIdrawable. 2366d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg * 23766175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt * For GLX_EXT_texture_from_pixmap with AIGLX. Deprecated in favor of 23866175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt * setTexBuffer2 in version 2 of this interface 2396d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg */ 2406d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg void (*setTexBuffer)(__DRIcontext *pDRICtx, 241dcbe215c015c8dc48440f578023c2b9d12b934e4Kristian Høgsberg GLint target, 242dcbe215c015c8dc48440f578023c2b9d12b934e4Kristian Høgsberg __DRIdrawable *pDraw); 24366175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt 24466175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt /** 24566175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt * Method to override base texture image with the contents of a 24666175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt * __DRIdrawable, including the required texture format attribute. 24766175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt * 24866175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt * For GLX_EXT_texture_from_pixmap with AIGLX. 24966175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt */ 25066175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt void (*setTexBuffer2)(__DRIcontext *pDRICtx, 25166175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt GLint target, 25266175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt GLint format, 25366175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt __DRIdrawable *pDraw); 254e59fa4c46c8857f2e04447777dd197464c95b2cbJuan Zhao /** 255e59fa4c46c8857f2e04447777dd197464c95b2cbJuan Zhao * Method to release texture buffer in case some special platform 256e59fa4c46c8857f2e04447777dd197464c95b2cbJuan Zhao * need this. 257e59fa4c46c8857f2e04447777dd197464c95b2cbJuan Zhao * 258e59fa4c46c8857f2e04447777dd197464c95b2cbJuan Zhao * For GLX_EXT_texture_from_pixmap with AIGLX. 259e59fa4c46c8857f2e04447777dd197464c95b2cbJuan Zhao */ 260e59fa4c46c8857f2e04447777dd197464c95b2cbJuan Zhao void (*releaseTexBuffer)(__DRIcontext *pDRICtx, 261e59fa4c46c8857f2e04447777dd197464c95b2cbJuan Zhao GLint target, 262e59fa4c46c8857f2e04447777dd197464c95b2cbJuan Zhao __DRIdrawable *pDraw); 2636d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg}; 2646d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg 26565562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane/** 26665562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane * Used by drivers that implement DRI2 26765562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane */ 26865562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane#define __DRI2_FLUSH "DRI2_Flush" 26961d26bc82e7c4100acfb551cbb0ba9d84bbc4ba5Francisco Jerez#define __DRI2_FLUSH_VERSION 3 27065562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihanestruct __DRI2flushExtensionRec { 27165562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane __DRIextension base; 27265562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane void (*flush)(__DRIdrawable *drawable); 273a35f6bb207efe3c959bbd16a37f2049e5aceeea9Jesse Barnes 274a35f6bb207efe3c959bbd16a37f2049e5aceeea9Jesse Barnes /** 27561d26bc82e7c4100acfb551cbb0ba9d84bbc4ba5Francisco Jerez * Ask the driver to call getBuffers/getBuffersWithFormat before 27661d26bc82e7c4100acfb551cbb0ba9d84bbc4ba5Francisco Jerez * it starts rendering again. 277a35f6bb207efe3c959bbd16a37f2049e5aceeea9Jesse Barnes * 27861d26bc82e7c4100acfb551cbb0ba9d84bbc4ba5Francisco Jerez * \param drawable the drawable to invalidate 279a35f6bb207efe3c959bbd16a37f2049e5aceeea9Jesse Barnes * 28061d26bc82e7c4100acfb551cbb0ba9d84bbc4ba5Francisco Jerez * \since 3 281a35f6bb207efe3c959bbd16a37f2049e5aceeea9Jesse Barnes */ 28261d26bc82e7c4100acfb551cbb0ba9d84bbc4ba5Francisco Jerez void (*invalidate)(__DRIdrawable *drawable); 28365562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane}; 28465562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane 2856d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg 286a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg/** 287192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * XML document describing the configuration options supported by the 288192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * driver. 289192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 290192c988c7360d026a6f345b21acc2cdf41977915Brian Paulextern const char __driConfigOptions[]; 291192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 292192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/*@}*/ 293192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 2946cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg/** 2956cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * The following extensions describe loader features that the DRI 2966cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * driver can make use of. Some of these are mandatory, such as the 297e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * getDrawableInfo extension for DRI and the DRI Loader extensions for 2986cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * DRI2, while others are optional, and if present allow the driver to 2996cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * expose certain features. The loader pass in a NULL terminated 3006cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * array of these extensions to the driver in the createNewScreen 3016cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * constructor. 3026cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg */ 3035f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 3046cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsbergtypedef struct __DRIgetDrawableInfoExtensionRec __DRIgetDrawableInfoExtension; 3056cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsbergtypedef struct __DRIsystemTimeExtensionRec __DRIsystemTimeExtension; 3066cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsbergtypedef struct __DRIdamageExtensionRec __DRIdamageExtension; 307e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergtypedef struct __DRIloaderExtensionRec __DRIloaderExtension; 308280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzistypedef struct __DRIswrastLoaderExtensionRec __DRIswrastLoaderExtension; 3095f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 3105f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 3116cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg/** 3126cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * Callback to getDrawableInfo protocol 3136cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg */ 3146cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg#define __DRI_GET_DRAWABLE_INFO "DRI_GetDrawableInfo" 3156cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg#define __DRI_GET_DRAWABLE_INFO_VERSION 1 3166cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsbergstruct __DRIgetDrawableInfoExtensionRec { 3176cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg __DRIextension base; 3185f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 3195f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 3205f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * This function is used to get information about the position, size, and 3215f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * clip rects of a drawable. 3225f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 3234ff95e78e19e5902352ea3759d32d9f013255f42Kristian Høgsberg GLboolean (* getDrawableInfo) ( __DRIdrawable *drawable, 324aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg unsigned int * index, unsigned int * stamp, 3255f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int * x, int * y, int * width, int * height, 3265f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int * numClipRects, drm_clip_rect_t ** pClipRects, 3275f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int * backX, int * backY, 328e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int * numBackClipRects, drm_clip_rect_t ** pBackClipRects, 329e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 3306cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg}; 3315f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 3326cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg/** 3336cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * Callback to get system time for media stream counter extensions. 3346cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg */ 3356cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg#define __DRI_SYSTEM_TIME "DRI_SystemTime" 3366cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg#define __DRI_SYSTEM_TIME_VERSION 1 3376cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsbergstruct __DRIsystemTimeExtensionRec { 3386cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg __DRIextension base; 3395f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 3405f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 3415f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Get the 64-bit unadjusted system time (UST). 3425f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 3435f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int (*getUST)(int64_t * ust); 3445f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 3455f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 3465f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Get the media stream counter (MSC) rate. 3475f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * 3485f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Matching the definition in GLX_OML_sync_control, this function returns 3495f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * the rate of the "media stream counter". In practical terms, this is 3505f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * the frame refresh rate of the display. 3515f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 352aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg GLboolean (*getMSCRate)(__DRIdrawable *draw, 353e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int32_t * numerator, int32_t * denominator, 354e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 3556cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg}; 3566cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg 3576cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg/** 3586cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * Damage reporting 3596cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg */ 3606cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg#define __DRI_DAMAGE "DRI_Damage" 3616cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg#define __DRI_DAMAGE_VERSION 1 3626cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsbergstruct __DRIdamageExtensionRec { 3636cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg __DRIextension base; 364c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt 365c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt /** 366c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * Reports areas of the given drawable which have been modified by the 367c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * driver. 368c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * 369c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * \param drawable which the drawing was done to. 370c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * \param rects rectangles affected, with the drawable origin as the 371c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * origin. 372c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * \param x X offset of the drawable within the screen (used in the 373c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * front_buffer case) 374c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * \param y Y offset of the drawable within the screen. 375c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * \param front_buffer boolean flag for whether the drawing to the 376c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * drawable was actually done directly to the front buffer (instead 377c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * of backing storage, for example) 378e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * \param loaderPrivate the data passed in at createNewDrawable time 379c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt */ 380aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg void (*reportDamage)(__DRIdrawable *draw, 381c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt int x, int y, 382c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt drm_clip_rect_t *rects, int num_rects, 383e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg GLboolean front_buffer, 384e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 3856cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg}; 3866cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg 387280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis#define __DRI_SWRAST_IMAGE_OP_DRAW 1 388280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis#define __DRI_SWRAST_IMAGE_OP_CLEAR 2 389280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis#define __DRI_SWRAST_IMAGE_OP_SWAP 3 390280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 391280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis/** 392280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis * SWRast Loader extension. 393280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis */ 394280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis#define __DRI_SWRAST_LOADER "DRI_SWRastLoader" 395280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis#define __DRI_SWRAST_LOADER_VERSION 1 396280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzisstruct __DRIswrastLoaderExtensionRec { 397280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis __DRIextension base; 398280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 399280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis /* 400280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis * Drawable position and size 401280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis */ 402280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis void (*getDrawableInfo)(__DRIdrawable *drawable, 403280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis int *x, int *y, int *width, int *height, 404280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis void *loaderPrivate); 405280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 406280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis /** 407280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis * Put image to drawable 408280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis */ 409280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis void (*putImage)(__DRIdrawable *drawable, int op, 410f4e561ce127cf484d7c76c29b8cd026c9ad5cebcGeorge Sapountzis int x, int y, int width, int height, 411f4e561ce127cf484d7c76c29b8cd026c9ad5cebcGeorge Sapountzis char *data, void *loaderPrivate); 412280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 413280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis /** 414f4e561ce127cf484d7c76c29b8cd026c9ad5cebcGeorge Sapountzis * Get image from readable 415280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis */ 416f4e561ce127cf484d7c76c29b8cd026c9ad5cebcGeorge Sapountzis void (*getImage)(__DRIdrawable *readable, 417f4e561ce127cf484d7c76c29b8cd026c9ad5cebcGeorge Sapountzis int x, int y, int width, int height, 418f4e561ce127cf484d7c76c29b8cd026c9ad5cebcGeorge Sapountzis char *data, void *loaderPrivate); 419280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis}; 420280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 421e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/** 42297a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg * Invalidate loader extension. The presence of this extension 42397a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg * indicates to the DRI driver that the loader will call invalidate in 42497a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg * the __DRI2_FLUSH extension, whenever the needs to query for new 42597a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg * buffers. This means that the DRI driver can drop the polling in 42697a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg * glViewport(). 42797a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg * 42897a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg * The extension doesn't provide any functionality, it's only use to 42997a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg * indicate to the driver that it can use the new semantics. A DRI 43097a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg * driver can use this to switch between the different semantics or 43197a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg * just refuse to initialize if this extension isn't present. 43297a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg */ 43397a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg#define __DRI_USE_INVALIDATE "DRI_UseInvalidate" 43497a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg#define __DRI_USE_INVALIDATE_VERSION 1 43597a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg 43697a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsbergtypedef struct __DRIuseInvalidateExtensionRec __DRIuseInvalidateExtension; 43797a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsbergstruct __DRIuseInvalidateExtensionRec { 43897a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg __DRIextension base; 43997a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg}; 44097a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg 44197a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg/** 442e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * The remaining extensions describe driver extensions, immediately 443e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * available interfaces provided by the driver. To start using the 444e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * driver, dlsym() for the __DRI_DRIVER_EXTENSIONS symbol and look for 445e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * the extension you need in the array. 446e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg */ 447e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_DRIVER_EXTENSIONS "__driDriverExtensions" 448e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 449e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/** 450e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * Tokens for __DRIconfig attribs. A number of attributes defined by 451e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * GLX or EGL standards are not in the table, as they must be provided 452e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * by the loader. For example, FBConfig ID or visual ID, drawable type. 453e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg */ 454e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 455e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BUFFER_SIZE 1 456e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_LEVEL 2 457e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_RED_SIZE 3 458e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_GREEN_SIZE 4 459e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BLUE_SIZE 5 460e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_LUMINANCE_SIZE 6 461e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ALPHA_SIZE 7 462e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ALPHA_MASK_SIZE 8 463e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_DEPTH_SIZE 9 464e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_STENCIL_SIZE 10 465e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ACCUM_RED_SIZE 11 466e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ACCUM_GREEN_SIZE 12 467e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ACCUM_BLUE_SIZE 13 468e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ACCUM_ALPHA_SIZE 14 469e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_SAMPLE_BUFFERS 15 470e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_SAMPLES 16 471e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_RENDER_TYPE 17 472e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_CONFIG_CAVEAT 18 473e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_CONFORMANT 19 474e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_DOUBLE_BUFFER 20 475e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_STEREO 21 476e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_AUX_BUFFERS 22 477e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_TYPE 23 478e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_INDEX_VALUE 24 479e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_RED_VALUE 25 480e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_GREEN_VALUE 26 481e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_BLUE_VALUE 27 482e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_ALPHA_VALUE 28 483e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_FLOAT_MODE 29 484e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_RED_MASK 30 485e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_GREEN_MASK 31 486e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BLUE_MASK 32 487e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ALPHA_MASK 33 488e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_MAX_PBUFFER_WIDTH 34 489e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_MAX_PBUFFER_HEIGHT 35 490e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_MAX_PBUFFER_PIXELS 36 491e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_OPTIMAL_PBUFFER_WIDTH 37 492e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_OPTIMAL_PBUFFER_HEIGHT 38 493e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_VISUAL_SELECT_GROUP 39 494e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_SWAP_METHOD 40 495e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_MAX_SWAP_INTERVAL 41 496e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_MIN_SWAP_INTERVAL 42 497e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BIND_TO_TEXTURE_RGB 43 498e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BIND_TO_TEXTURE_RGBA 44 499e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BIND_TO_MIPMAP_TEXTURE 45 500e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BIND_TO_TEXTURE_TARGETS 46 501e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_YINVERTED 47 502476db2bd3d72440f54ff57c23da05dc1d624fee9Dave Airlie#define __DRI_ATTRIB_FRAMEBUFFER_SRGB_CAPABLE 48 503e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 504e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/* __DRI_ATTRIB_RENDER_TYPE */ 505e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_RGBA_BIT 0x01 506e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_COLOR_INDEX_BIT 0x02 507e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_LUMINANCE_BIT 0x04 508e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 509e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/* __DRI_ATTRIB_CONFIG_CAVEAT */ 510e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_SLOW_BIT 0x01 511e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_NON_CONFORMANT_CONFIG 0x02 512e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 513e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/* __DRI_ATTRIB_TRANSPARENT_TYPE */ 514e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_RGB 0x00 515e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_INDEX 0x01 516e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 517e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/* __DRI_ATTRIB_BIND_TO_TEXTURE_TARGETS */ 518e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TEXTURE_1D_BIT 0x01 519e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TEXTURE_2D_BIT 0x02 520e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TEXTURE_RECTANGLE_BIT 0x04 521e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 522e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/** 523e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * This extension defines the core DRI functionality. 524e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg */ 525e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_CORE "DRI_Core" 526e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_CORE_VERSION 1 527e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 528e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergstruct __DRIcoreExtensionRec { 529e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIextension base; 530e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 531e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIscreen *(*createNewScreen)(int screen, int fd, 532e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned int sarea_handle, 533e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIextension **extensions, 534e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIconfig ***driverConfigs, 535e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 536e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 537e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void (*destroyScreen)(__DRIscreen *screen); 538e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 539e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIextension **(*getExtensions)(__DRIscreen *screen); 540e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 541e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int (*getConfigAttrib)(const __DRIconfig *config, 542e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned int attrib, 543e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned int *value); 544e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 545e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int (*indexConfigAttrib)(const __DRIconfig *config, int index, 546e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned int *attrib, unsigned int *value); 547e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 548e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen, 549e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIconfig *config, 550e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned int drawable_id, 551e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned int head, 552e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 553e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 554e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void (*destroyDrawable)(__DRIdrawable *drawable); 555e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 556e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void (*swapBuffers)(__DRIdrawable *drawable); 557e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 558e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIcontext *(*createNewContext)(__DRIscreen *screen, 559e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIconfig *config, 560e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIcontext *shared, 561e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 562e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 563e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int (*copyContext)(__DRIcontext *dest, 564e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIcontext *src, 565e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned long mask); 566e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 567e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void (*destroyContext)(__DRIcontext *context); 568e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 569e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int (*bindContext)(__DRIcontext *ctx, 570e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIdrawable *pdraw, 571e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIdrawable *pread); 572e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 573e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int (*unbindContext)(__DRIcontext *ctx); 574e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg}; 575e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 576e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/** 577e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * Stored version of some component (i.e., server-side DRI module, kernel-side 578e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * DRM, etc.). 579e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * 580e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * \todo 581e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * There are several data structures that explicitly store a major version, 582e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * minor version, and patch level. These structures should be modified to 583e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * have a \c __DRIversionRec instead. 584e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg */ 585e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergstruct __DRIversionRec { 586e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int major; /**< Major version number. */ 587e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int minor; /**< Minor version number. */ 588e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int patch; /**< Patch-level. */ 5895f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick}; 5905f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 591192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 592192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Framebuffer information record. Used by libGL to communicate information 593192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * about the framebuffer to the driver's \c __driCreateNewScreen function. 594192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 595192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * In XFree86, most of this information is derrived from data returned by 596192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * calling \c XF86DRIGetDeviceInfo. 597192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 598192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \sa XF86DRIGetDeviceInfo __DRIdisplayRec::createNewScreen 599192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * __driUtilCreateNewScreen CallCreateNewScreen 600192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 601192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \bug This structure could be better named. 602192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 603192c988c7360d026a6f345b21acc2cdf41977915Brian Paulstruct __DRIframebufferRec { 604192c988c7360d026a6f345b21acc2cdf41977915Brian Paul unsigned char *base; /**< Framebuffer base address in the CPU's 605192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * address space. This value is calculated by 606192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * calling \c drmMap on the framebuffer handle 607192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * returned by \c XF86DRIGetDeviceInfo (or a 608192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * similar function). 609192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 610192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int size; /**< Framebuffer size, in bytes. */ 611192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int stride; /**< Number of bytes from one line to the next. */ 612192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int width; /**< Pixel width of the framebuffer. */ 613192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int height; /**< Pixel height of the framebuffer. */ 614192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int dev_priv_size; /**< Size of the driver's dev-priv structure. */ 615192c988c7360d026a6f345b21acc2cdf41977915Brian Paul void *dev_priv; /**< Pointer to the driver's dev-priv structure. */ 616192c988c7360d026a6f345b21acc2cdf41977915Brian Paul}; 617192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 618192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 619192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 620e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * This extension provides alternative screen, drawable and context 621e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * constructors for legacy DRI functionality. This is used in 622e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * conjunction with the core extension. 623192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 624e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_LEGACY "DRI_Legacy" 625e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_LEGACY_VERSION 1 626192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 627e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergstruct __DRIlegacyExtensionRec { 628e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIextension base; 629192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 630e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIscreen *(*createNewScreen)(int screen, 631e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIversion *ddx_version, 632e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIversion *dri_version, 633e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIversion *drm_version, 634e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIframebuffer *frame_buffer, 635e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *pSAREA, int fd, 636e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIextension **extensions, 637e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIconfig ***driver_configs, 638e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 639e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 640e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen, 641e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIconfig *config, 642e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg drm_drawable_t hwDrawable, 643e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int renderType, const int *attrs, 644e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 645e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 646e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIcontext *(*createNewContext)(__DRIscreen *screen, 647e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIconfig *config, 648e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int render_type, 649e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIcontext *shared, 650e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg drm_context_t hwContext, 651e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 652192c988c7360d026a6f345b21acc2cdf41977915Brian Paul}; 65374d563cdfbfb07cc666d60dc909e90ddb9949cbbKeith Whitwell 654280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis/** 655280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis * This extension provides alternative screen, drawable and context 656280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis * constructors for swrast DRI functionality. This is used in 657280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis * conjunction with the core extension. 658280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis */ 659280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis#define __DRI_SWRAST "DRI_SWRast" 660b43a147128a1144a5fe4afcda412ccaba0c0793bHaitao Feng#define __DRI_SWRAST_VERSION 2 661280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 662280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzisstruct __DRIswrastExtensionRec { 663280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis __DRIextension base; 664280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 665280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis __DRIscreen *(*createNewScreen)(int screen, 666280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis const __DRIextension **extensions, 667280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis const __DRIconfig ***driver_configs, 668280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis void *loaderPrivate); 669280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 670280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen, 671280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis const __DRIconfig *config, 672280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis void *loaderPrivate); 673b43a147128a1144a5fe4afcda412ccaba0c0793bHaitao Feng 674b43a147128a1144a5fe4afcda412ccaba0c0793bHaitao Feng /* Since version 2 */ 675b43a147128a1144a5fe4afcda412ccaba0c0793bHaitao Feng __DRIcontext *(*createNewContextForAPI)(__DRIscreen *screen, 676b43a147128a1144a5fe4afcda412ccaba0c0793bHaitao Feng int api, 677b43a147128a1144a5fe4afcda412ccaba0c0793bHaitao Feng const __DRIconfig *config, 678b43a147128a1144a5fe4afcda412ccaba0c0793bHaitao Feng __DRIcontext *shared, 679b43a147128a1144a5fe4afcda412ccaba0c0793bHaitao Feng void *data); 680280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis}; 681280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 682f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg/** 683f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg * DRI2 Loader extension. 684f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg */ 685f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_FRONT_LEFT 0 686f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_BACK_LEFT 1 687f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_FRONT_RIGHT 2 688f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_BACK_RIGHT 3 689f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_DEPTH 4 690f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_STENCIL 5 691f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_ACCUM 6 692396711b840683809565507e47a4311e5b7503ef2Alan Hourihane#define __DRI_BUFFER_FAKE_FRONT_LEFT 7 693396711b840683809565507e47a4311e5b7503ef2Alan Hourihane#define __DRI_BUFFER_FAKE_FRONT_RIGHT 8 694dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick#define __DRI_BUFFER_DEPTH_STENCIL 9 /**< Only available with DRI2 1.1 */ 6954501a5d6e8d00fd0d87625352ed5ba1a8861f72eChad Versace#define __DRI_BUFFER_HIZ 10 696f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 697f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsbergstruct __DRIbufferRec { 698f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg unsigned int attachment; 699f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg unsigned int name; 700f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg unsigned int pitch; 701f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg unsigned int cpp; 702f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg unsigned int flags; 703f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg}; 704f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 705f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_DRI2_LOADER "DRI_DRI2Loader" 706dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick#define __DRI_DRI2_LOADER_VERSION 3 707f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsbergstruct __DRIdri2LoaderExtensionRec { 708f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIextension base; 709f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 710f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIbuffer *(*getBuffers)(__DRIdrawable *driDrawable, 711f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg int *width, int *height, 712f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg unsigned int *attachments, int count, 713f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg int *out_count, void *loaderPrivate); 71482634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick 71582634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick /** 71682634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * Flush pending front-buffer rendering 71782634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * 71882634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * Any rendering that has been performed to the 71982634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * \c __DRI_BUFFER_FAKE_FRONT_LEFT will be flushed to the 72082634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * \c __DRI_BUFFER_FRONT_LEFT. 72182634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * 72282634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * \param driDrawable Drawable whose front-buffer is to be flushed 72382634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * \param loaderPrivate Loader's private data that was previously passed 72482634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * into __DRIdri2ExtensionRec::createNewDrawable 72582634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick */ 72682634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick void (*flushFrontBuffer)(__DRIdrawable *driDrawable, void *loaderPrivate); 727dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick 728dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick 729dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick /** 730dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * Get list of buffers from the server 731dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * 732dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * Gets a list of buffer for the specified set of attachments. Unlike 733dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \c ::getBuffers, this function takes a list of attachments paired with 734dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * opaque \c unsigned \c int value describing the format of the buffer. 735dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * It is the responsibility of the caller to know what the service that 736dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * allocates the buffers will expect to receive for the format. 737dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * 738dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \param driDrawable Drawable whose buffers are being queried. 739dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \param width Output where the width of the buffers is stored. 740dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \param height Output where the height of the buffers is stored. 741dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \param attachments List of pairs of attachment ID and opaque format 742dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * requested for the drawable. 743dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \param count Number of attachment / format pairs stored in 744dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \c attachments. 745dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \param loaderPrivate Loader's private data that was previously passed 746dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * into __DRIdri2ExtensionRec::createNewDrawable. 747dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick */ 748dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick __DRIbuffer *(*getBuffersWithFormat)(__DRIdrawable *driDrawable, 749dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick int *width, int *height, 750dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick unsigned int *attachments, int count, 751dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick int *out_count, void *loaderPrivate); 752f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg}; 753f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 754f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg/** 755f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg * This extension provides alternative screen, drawable and context 756f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg * constructors for DRI2. 757f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg */ 758f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_DRI2 "DRI_DRI2" 759a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg#define __DRI_DRI2_VERSION 2 760a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg 761a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg#define __DRI_API_OPENGL 0 762a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg#define __DRI_API_GLES 1 763a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg#define __DRI_API_GLES2 2 764f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 765f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsbergstruct __DRIdri2ExtensionRec { 766f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIextension base; 767f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 768f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIscreen *(*createNewScreen)(int screen, int fd, 769f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg const __DRIextension **extensions, 770f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg const __DRIconfig ***driver_configs, 771f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg void *loaderPrivate); 772f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 773f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen, 774f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg const __DRIconfig *config, 775f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg void *loaderPrivate); 776f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 777f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIcontext *(*createNewContext)(__DRIscreen *screen, 778f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg const __DRIconfig *config, 779f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIcontext *shared, 780f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg void *loaderPrivate); 781f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 782a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg /* Since version 2 */ 783a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg unsigned int (*getAPIMask)(__DRIscreen *screen); 784a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg 785a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg __DRIcontext *(*createNewContextForAPI)(__DRIscreen *screen, 786a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg int api, 787a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg const __DRIconfig *config, 788a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg __DRIcontext *shared, 789a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg void *data); 7901b8ef9416bf3a4d2d47fcf9935063af57da2975dBenjamin Franzke 7911b8ef9416bf3a4d2d47fcf9935063af57da2975dBenjamin Franzke __DRIbuffer *(*allocateBuffer)(__DRIscreen *screen, 7921b8ef9416bf3a4d2d47fcf9935063af57da2975dBenjamin Franzke unsigned int attachment, 7931b8ef9416bf3a4d2d47fcf9935063af57da2975dBenjamin Franzke unsigned int format, 7941b8ef9416bf3a4d2d47fcf9935063af57da2975dBenjamin Franzke int width, 7951b8ef9416bf3a4d2d47fcf9935063af57da2975dBenjamin Franzke int height); 7961b8ef9416bf3a4d2d47fcf9935063af57da2975dBenjamin Franzke void (*releaseBuffer)(__DRIscreen *screen, 7971b8ef9416bf3a4d2d47fcf9935063af57da2975dBenjamin Franzke __DRIbuffer *buffer); 798f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg}; 799f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 80079cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg 80179cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg/** 80279cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * This extension provides functionality to enable various EGLImage 80379cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * extensions. 80479cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg */ 80579cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg#define __DRI_IMAGE "DRI_IMAGE" 80679cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg#define __DRI_IMAGE_VERSION 1 80779cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg 80879cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg/** 80979cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * These formats correspond to the similarly named MESA_FORMAT_* 81079cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * tokens, except in the native endian of the CPU. For example, on 81179cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * little endian __DRI_IMAGE_FORMAT_XRGB8888 corresponds to 81279cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * MESA_FORMAT_XRGB8888, but MESA_FORMAT_XRGB8888_REV on big endian. 81379cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg */ 81479cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg#define __DRI_IMAGE_FORMAT_RGB565 0x1001 81579cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg#define __DRI_IMAGE_FORMAT_XRGB8888 0x1002 81679cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg#define __DRI_IMAGE_FORMAT_ARGB8888 0x1003 81779cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg 8185aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg#define __DRI_IMAGE_USE_SHARE 0x0001 8195aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg#define __DRI_IMAGE_USE_SCANOUT 0x0002 820e5169e9615e8391ea369415b356168717b8f7be0Kristian Høgsberg#define __DRI_IMAGE_USE_CURSOR 0x0004 8215aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg 8225aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg/** 8235aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg * queryImage attributes 8245aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg */ 8255aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg 8265aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg#define __DRI_IMAGE_ATTRIB_STRIDE 0x2000 8275aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg#define __DRI_IMAGE_ATTRIB_HANDLE 0x2001 8285aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg#define __DRI_IMAGE_ATTRIB_NAME 0x2002 8295aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg 83079cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsbergtypedef struct __DRIimageRec __DRIimage; 83179cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsbergtypedef struct __DRIimageExtensionRec __DRIimageExtension; 83279cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsbergstruct __DRIimageExtensionRec { 83379cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg __DRIextension base; 83479cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg 8359ec0b2a45e18c045fd3dbcdf846fad7faf97494cKristian Høgsberg __DRIimage *(*createImageFromName)(__DRIscreen *screen, 83679cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg int width, int height, int format, 83779cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg int name, int pitch, 83879cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg void *loaderPrivate); 83979cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg 84079cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg __DRIimage *(*createImageFromRenderbuffer)(__DRIcontext *context, 84179cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg int renderbuffer, 84279cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg void *loaderPrivate); 84379cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg 84479cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg void (*destroyImage)(__DRIimage *image); 8455aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg 8465aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg __DRIimage *(*createImage)(__DRIscreen *screen, 8475aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg int width, int height, int format, 8485aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg unsigned int use, 8495aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg void *loaderPrivate); 8505aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg 8515aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg GLboolean (*queryImage)(__DRIimage *image, int attrib, int *value); 85279cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg}; 85379cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg 8545aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg 85579cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg/** 85679cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * This extension must be implemented by the loader and passed to the 85779cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * driver at screen creation time. The EGLImage entry points in the 85879cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * various client APIs take opaque EGLImage handles and use this 85979cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * extension to map them to a __DRIimage. At version 1, this 86079cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * extensions allows mapping EGLImage pointers to __DRIimage pointers, 86179cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * but future versions could support other EGLImage-like, opaque types 86279cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * with new lookup functions. 86379cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg */ 86479cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg#define __DRI_IMAGE_LOOKUP "DRI_IMAGE_LOOKUP" 86579cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg#define __DRI_IMAGE_LOOKUP_VERSION 1 86679cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg 86779cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsbergtypedef struct __DRIimageLookupExtensionRec __DRIimageLookupExtension; 86879cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsbergstruct __DRIimageLookupExtensionRec { 86979cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg __DRIextension base; 87079cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg 87117eace581d25a626a7d75d9d1205d012cbb14a6eKristian Høgsberg __DRIimage *(*lookupEGLImage)(__DRIscreen *screen, void *image, 87279cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg void *loaderPrivate); 87379cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg}; 87479cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg 875234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes/** 876234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes * This extension allows for common DRI2 options 877234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes */ 878234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes#define __DRI2_CONFIG_QUERY "DRI_CONFIG_QUERY" 879234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes#define __DRI2_CONFIG_QUERY_VERSION 1 880234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes 881234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnestypedef struct __DRI2configQueryExtensionRec __DRI2configQueryExtension; 882234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnesstruct __DRI2configQueryExtensionRec { 883234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes __DRIextension base; 884234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes 885234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes int (*configQueryb)(__DRIscreen *screen, const char *var, GLboolean *val); 886234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes int (*configQueryi)(__DRIscreen *screen, const char *var, GLint *val); 887234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes int (*configQueryf)(__DRIscreen *screen, const char *var, GLfloat *val); 888234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes}; 88974d563cdfbfb07cc666d60dc909e90ddb9949cbbKeith Whitwell#endif 890