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; 87511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstromtypedef struct __DRI2throttleExtensionRec __DRI2throttleExtension; 88f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 89192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/*@}*/ 90192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 91192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 92192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 93f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg * Extension struct. Drivers 'inherit' from this struct by embedding 94e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * it as the first element in the extension struct. 95ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * 96ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * We never break API in for a DRI extension. If we need to change 97ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * the way things work in a non-backwards compatible manner, we 98ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * introduce a new extension. During a transition period, we can 99ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * leave both the old and the new extension in the driver, which 100ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * allows us to move to the new interface without having to update the 101ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * loader(s) in lock step. 102ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * 103ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * However, we can add entry points to an extension over time as long 104ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * as we don't break the old ones. As we add entry points to an 105ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * extension, we increase the version number. The corresponding 106ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * #define can be used to guard code that accesses the new entry 107ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * points at compile time and the version field in the extension 108ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * struct can be used at run-time to determine how to use the 109ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * extension. 110f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg */ 111f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsbergstruct __DRIextensionRec { 112f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg const char *name; 113ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg int version; 114f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg}; 115f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg 116ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg/** 117e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * The first set of extension are the screen extensions, returned by 118e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * __DRIcore::getExtensions(). This entry point will return a list of 119e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * extensions and the loader can use the ones it knows about by 120e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * casting them to more specific extensions and advertising any GLX 121e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * extensions the DRI extensions enables. 122e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg */ 123e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 124e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/** 125f968f67e6214416f04b8875ce59a94a02f464c81Kristian Høgsberg * Used by drivers to indicate support for setting the read drawable. 126f968f67e6214416f04b8875ce59a94a02f464c81Kristian Høgsberg */ 127f968f67e6214416f04b8875ce59a94a02f464c81Kristian Høgsberg#define __DRI_READ_DRAWABLE "DRI_ReadDrawable" 128ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg#define __DRI_READ_DRAWABLE_VERSION 1 129f968f67e6214416f04b8875ce59a94a02f464c81Kristian Høgsberg 130f968f67e6214416f04b8875ce59a94a02f464c81Kristian Høgsberg/** 131ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg * Used by drivers that implement the GLX_MESA_copy_sub_buffer extension. 132ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg */ 133ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg#define __DRI_COPY_SUB_BUFFER "DRI_CopySubBuffer" 134ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg#define __DRI_COPY_SUB_BUFFER_VERSION 1 135ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsbergstruct __DRIcopySubBufferExtensionRec { 136ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg __DRIextension base; 137ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg void (*copySubBuffer)(__DRIdrawable *drawable, int x, int y, int w, int h); 138ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg}; 139ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg 140efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg/** 141efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg * Used by drivers that implement the GLX_SGI_swap_control or 142efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg * GLX_MESA_swap_control extension. 143efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg */ 144efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg#define __DRI_SWAP_CONTROL "DRI_SwapControl" 145ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg#define __DRI_SWAP_CONTROL_VERSION 1 146efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsbergstruct __DRIswapControlExtensionRec { 147efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg __DRIextension base; 148efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg void (*setSwapInterval)(__DRIdrawable *drawable, unsigned int inteval); 149efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg unsigned int (*getSwapInterval)(__DRIdrawable *drawable); 150efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg}; 151f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg 152f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg/** 153a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * Used by drivers that implement the GLX_MESA_swap_frame_usage extension. 154a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg */ 155a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg#define __DRI_FRAME_TRACKING "DRI_FrameTracking" 156ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg#define __DRI_FRAME_TRACKING_VERSION 1 157a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsbergstruct __DRIframeTrackingExtensionRec { 158a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg __DRIextension base; 159a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg 160a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg /** 161a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * Enable or disable frame usage tracking. 162a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * 163a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * \since Internal API version 20030317. 164a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg */ 165a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg int (*frameTracking)(__DRIdrawable *drawable, GLboolean enable); 166a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg 167a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg /** 168a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * Retrieve frame usage information. 169a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * 170a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * \since Internal API version 20030317. 171a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg */ 172a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg int (*queryFrameTracking)(__DRIdrawable *drawable, 173a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg int64_t * sbc, int64_t * missedFrames, 174a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg float * lastMissedUsage, float * usage); 175a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg}; 176a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg 177106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg 178106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg/** 179106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * Used by drivers that implement the GLX_SGI_video_sync extension. 180106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg */ 181106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg#define __DRI_MEDIA_STREAM_COUNTER "DRI_MediaStreamCounter" 1826e8d21d72f35767e07081a8bee4323aaaf5e2aaeKristian Høgsberg#define __DRI_MEDIA_STREAM_COUNTER_VERSION 1 183106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsbergstruct __DRImediaStreamCounterExtensionRec { 184106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg __DRIextension base; 185106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg 186106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg /** 187106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * Wait for the MSC to equal target_msc, or, if that has already passed, 188106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * the next time (MSC % divisor) is equal to remainder. If divisor is 189106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * zero, the function will return as soon as MSC is greater than or equal 190106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * to target_msc. 191106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg */ 192106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg int (*waitForMSC)(__DRIdrawable *drawable, 193106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg int64_t target_msc, int64_t divisor, int64_t remainder, 194106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg int64_t * msc, int64_t * sbc); 19538fdb47d26055e19d50cd407266b56ed4317ae0aJesse Barnes 19638fdb47d26055e19d50cd407266b56ed4317ae0aJesse Barnes /** 19738fdb47d26055e19d50cd407266b56ed4317ae0aJesse Barnes * Get the number of vertical refreshes since some point in time before 19838fdb47d26055e19d50cd407266b56ed4317ae0aJesse Barnes * this function was first called (i.e., system start up). 19938fdb47d26055e19d50cd407266b56ed4317ae0aJesse Barnes */ 2006e8d21d72f35767e07081a8bee4323aaaf5e2aaeKristian Høgsberg int (*getDrawableMSC)(__DRIscreen *screen, __DRIdrawable *drawable, 20138fdb47d26055e19d50cd407266b56ed4317ae0aJesse Barnes int64_t *msc); 202106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg}; 203106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg 204106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg 205f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg#define __DRI_TEX_OFFSET "DRI_TexOffset" 206ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg#define __DRI_TEX_OFFSET_VERSION 1 207f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsbergstruct __DRItexOffsetExtensionRec { 208f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg __DRIextension base; 209f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg 210f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg /** 211f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg * Method to override base texture image with a driver specific 'offset'. 212f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg * The depth passed in allows e.g. to ignore the alpha channel of texture 213f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg * images where the non-alpha components don't occupy a whole texel. 214f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg * 215f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg * For GLX_EXT_texture_from_pixmap with AIGLX. 216f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg */ 217f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg void (*setTexOffset)(__DRIcontext *pDRICtx, GLint texname, 218f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg unsigned long long offset, GLint depth, GLuint pitch); 219f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg}; 220f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg 221f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg 222debf00e5fc3828f63e0f99d72c7fa6cd6ce012c5Kristian Høgsberg/* Valid values for format in the setTexBuffer2 function below. These 223debf00e5fc3828f63e0f99d72c7fa6cd6ce012c5Kristian Høgsberg * values match the GLX tokens for compatibility reasons, but we 224debf00e5fc3828f63e0f99d72c7fa6cd6ce012c5Kristian Høgsberg * define them here since the DRI interface can't depend on GLX. */ 225debf00e5fc3828f63e0f99d72c7fa6cd6ce012c5Kristian Høgsberg#define __DRI_TEXTURE_FORMAT_NONE 0x20D8 226debf00e5fc3828f63e0f99d72c7fa6cd6ce012c5Kristian Høgsberg#define __DRI_TEXTURE_FORMAT_RGB 0x20D9 227debf00e5fc3828f63e0f99d72c7fa6cd6ce012c5Kristian Høgsberg#define __DRI_TEXTURE_FORMAT_RGBA 0x20DA 228debf00e5fc3828f63e0f99d72c7fa6cd6ce012c5Kristian Høgsberg 2296d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg#define __DRI_TEX_BUFFER "DRI_TexBuffer" 23066175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt#define __DRI_TEX_BUFFER_VERSION 2 2316d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsbergstruct __DRItexBufferExtensionRec { 2326d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg __DRIextension base; 2336d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg 2346d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg /** 235dcbe215c015c8dc48440f578023c2b9d12b934e4Kristian Høgsberg * Method to override base texture image with the contents of a 236dcbe215c015c8dc48440f578023c2b9d12b934e4Kristian Høgsberg * __DRIdrawable. 2376d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg * 23866175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt * For GLX_EXT_texture_from_pixmap with AIGLX. Deprecated in favor of 23966175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt * setTexBuffer2 in version 2 of this interface 2406d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg */ 2416d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg void (*setTexBuffer)(__DRIcontext *pDRICtx, 242dcbe215c015c8dc48440f578023c2b9d12b934e4Kristian Høgsberg GLint target, 243dcbe215c015c8dc48440f578023c2b9d12b934e4Kristian Høgsberg __DRIdrawable *pDraw); 24466175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt 24566175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt /** 24666175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt * Method to override base texture image with the contents of a 24766175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt * __DRIdrawable, including the required texture format attribute. 24866175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt * 24966175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt * For GLX_EXT_texture_from_pixmap with AIGLX. 25066175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt */ 25166175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt void (*setTexBuffer2)(__DRIcontext *pDRICtx, 25266175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt GLint target, 25366175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt GLint format, 25466175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt __DRIdrawable *pDraw); 255e59fa4c46c8857f2e04447777dd197464c95b2cbJuan Zhao /** 256e59fa4c46c8857f2e04447777dd197464c95b2cbJuan Zhao * Method to release texture buffer in case some special platform 257e59fa4c46c8857f2e04447777dd197464c95b2cbJuan Zhao * need this. 258e59fa4c46c8857f2e04447777dd197464c95b2cbJuan Zhao * 259e59fa4c46c8857f2e04447777dd197464c95b2cbJuan Zhao * For GLX_EXT_texture_from_pixmap with AIGLX. 260e59fa4c46c8857f2e04447777dd197464c95b2cbJuan Zhao */ 261e59fa4c46c8857f2e04447777dd197464c95b2cbJuan Zhao void (*releaseTexBuffer)(__DRIcontext *pDRICtx, 262e59fa4c46c8857f2e04447777dd197464c95b2cbJuan Zhao GLint target, 263e59fa4c46c8857f2e04447777dd197464c95b2cbJuan Zhao __DRIdrawable *pDraw); 2646d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg}; 2656d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg 26665562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane/** 26765562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane * Used by drivers that implement DRI2 26865562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane */ 26965562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane#define __DRI2_FLUSH "DRI2_Flush" 27061d26bc82e7c4100acfb551cbb0ba9d84bbc4ba5Francisco Jerez#define __DRI2_FLUSH_VERSION 3 27165562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihanestruct __DRI2flushExtensionRec { 27265562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane __DRIextension base; 27365562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane void (*flush)(__DRIdrawable *drawable); 274a35f6bb207efe3c959bbd16a37f2049e5aceeea9Jesse Barnes 275a35f6bb207efe3c959bbd16a37f2049e5aceeea9Jesse Barnes /** 27661d26bc82e7c4100acfb551cbb0ba9d84bbc4ba5Francisco Jerez * Ask the driver to call getBuffers/getBuffersWithFormat before 27761d26bc82e7c4100acfb551cbb0ba9d84bbc4ba5Francisco Jerez * it starts rendering again. 278a35f6bb207efe3c959bbd16a37f2049e5aceeea9Jesse Barnes * 27961d26bc82e7c4100acfb551cbb0ba9d84bbc4ba5Francisco Jerez * \param drawable the drawable to invalidate 280a35f6bb207efe3c959bbd16a37f2049e5aceeea9Jesse Barnes * 28161d26bc82e7c4100acfb551cbb0ba9d84bbc4ba5Francisco Jerez * \since 3 282a35f6bb207efe3c959bbd16a37f2049e5aceeea9Jesse Barnes */ 28361d26bc82e7c4100acfb551cbb0ba9d84bbc4ba5Francisco Jerez void (*invalidate)(__DRIdrawable *drawable); 28465562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane}; 28565562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane 2866d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg 287a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg/** 288511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstrom * Extension that the driver uses to request 289511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstrom * throttle callbacks. 290511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstrom */ 291511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstrom 292511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstrom#define __DRI2_THROTTLE "DRI2_Throttle" 293511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstrom#define __DRI2_THROTTLE_VERSION 1 294511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstrom 295511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstromenum __DRI2throttleReason { 296511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstrom __DRI2_THROTTLE_SWAPBUFFER, 297511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstrom __DRI2_THROTTLE_COPYSUBBUFFER, 298511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstrom __DRI2_THROTTLE_FLUSHFRONT 299511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstrom}; 300511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstrom 301511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstromstruct __DRI2throttleExtensionRec { 302511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstrom __DRIextension base; 303511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstrom void (*throttle)(__DRIcontext *ctx, 304511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstrom __DRIdrawable *drawable, 305511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstrom enum __DRI2throttleReason reason); 306511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstrom}; 307511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstrom 308511dc295f82c61acefe026d0f4de43d4a31dbf90Thomas Hellstrom/** 309192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * XML document describing the configuration options supported by the 310192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * driver. 311192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 312192c988c7360d026a6f345b21acc2cdf41977915Brian Paulextern const char __driConfigOptions[]; 313192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 314192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/*@}*/ 315192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 3166cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg/** 3176cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * The following extensions describe loader features that the DRI 3186cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * driver can make use of. Some of these are mandatory, such as the 319e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * getDrawableInfo extension for DRI and the DRI Loader extensions for 3206cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * DRI2, while others are optional, and if present allow the driver to 3216cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * expose certain features. The loader pass in a NULL terminated 3226cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * array of these extensions to the driver in the createNewScreen 3236cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * constructor. 3246cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg */ 3255f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 3266cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsbergtypedef struct __DRIgetDrawableInfoExtensionRec __DRIgetDrawableInfoExtension; 3276cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsbergtypedef struct __DRIsystemTimeExtensionRec __DRIsystemTimeExtension; 3286cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsbergtypedef struct __DRIdamageExtensionRec __DRIdamageExtension; 329e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergtypedef struct __DRIloaderExtensionRec __DRIloaderExtension; 330280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzistypedef struct __DRIswrastLoaderExtensionRec __DRIswrastLoaderExtension; 3315f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 3325f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 3336cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg/** 3346cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * Callback to getDrawableInfo protocol 3356cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg */ 3366cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg#define __DRI_GET_DRAWABLE_INFO "DRI_GetDrawableInfo" 3376cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg#define __DRI_GET_DRAWABLE_INFO_VERSION 1 3386cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsbergstruct __DRIgetDrawableInfoExtensionRec { 3396cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg __DRIextension base; 3405f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 3415f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 3425f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * This function is used to get information about the position, size, and 3435f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * clip rects of a drawable. 3445f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 3454ff95e78e19e5902352ea3759d32d9f013255f42Kristian Høgsberg GLboolean (* getDrawableInfo) ( __DRIdrawable *drawable, 346aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg unsigned int * index, unsigned int * stamp, 3475f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int * x, int * y, int * width, int * height, 3485f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int * numClipRects, drm_clip_rect_t ** pClipRects, 3495f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int * backX, int * backY, 350e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int * numBackClipRects, drm_clip_rect_t ** pBackClipRects, 351e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 3526cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg}; 3535f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 3546cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg/** 3556cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * Callback to get system time for media stream counter extensions. 3566cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg */ 3576cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg#define __DRI_SYSTEM_TIME "DRI_SystemTime" 3586cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg#define __DRI_SYSTEM_TIME_VERSION 1 3596cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsbergstruct __DRIsystemTimeExtensionRec { 3606cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg __DRIextension base; 3615f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 3625f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 3635f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Get the 64-bit unadjusted system time (UST). 3645f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 3655f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int (*getUST)(int64_t * ust); 3665f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 3675f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 3685f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Get the media stream counter (MSC) rate. 3695f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * 3705f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Matching the definition in GLX_OML_sync_control, this function returns 3715f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * the rate of the "media stream counter". In practical terms, this is 3725f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * the frame refresh rate of the display. 3735f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 374aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg GLboolean (*getMSCRate)(__DRIdrawable *draw, 375e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int32_t * numerator, int32_t * denominator, 376e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 3776cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg}; 3786cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg 3796cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg/** 3806cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * Damage reporting 3816cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg */ 3826cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg#define __DRI_DAMAGE "DRI_Damage" 3836cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg#define __DRI_DAMAGE_VERSION 1 3846cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsbergstruct __DRIdamageExtensionRec { 3856cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg __DRIextension base; 386c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt 387c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt /** 388c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * Reports areas of the given drawable which have been modified by the 389c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * driver. 390c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * 391c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * \param drawable which the drawing was done to. 392c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * \param rects rectangles affected, with the drawable origin as the 393c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * origin. 394c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * \param x X offset of the drawable within the screen (used in the 395c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * front_buffer case) 396c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * \param y Y offset of the drawable within the screen. 397c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * \param front_buffer boolean flag for whether the drawing to the 398c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * drawable was actually done directly to the front buffer (instead 399c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * of backing storage, for example) 400e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * \param loaderPrivate the data passed in at createNewDrawable time 401c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt */ 402aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg void (*reportDamage)(__DRIdrawable *draw, 403c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt int x, int y, 404c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt drm_clip_rect_t *rects, int num_rects, 405e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg GLboolean front_buffer, 406e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 4076cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg}; 4086cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg 409280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis#define __DRI_SWRAST_IMAGE_OP_DRAW 1 410280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis#define __DRI_SWRAST_IMAGE_OP_CLEAR 2 411280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis#define __DRI_SWRAST_IMAGE_OP_SWAP 3 412280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 413280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis/** 414280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis * SWRast Loader extension. 415280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis */ 416280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis#define __DRI_SWRAST_LOADER "DRI_SWRastLoader" 417280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis#define __DRI_SWRAST_LOADER_VERSION 1 418280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzisstruct __DRIswrastLoaderExtensionRec { 419280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis __DRIextension base; 420280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 421280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis /* 422280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis * Drawable position and size 423280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis */ 424280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis void (*getDrawableInfo)(__DRIdrawable *drawable, 425280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis int *x, int *y, int *width, int *height, 426280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis void *loaderPrivate); 427280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 428280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis /** 429280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis * Put image to drawable 430280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis */ 431280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis void (*putImage)(__DRIdrawable *drawable, int op, 432f4e561ce127cf484d7c76c29b8cd026c9ad5cebcGeorge Sapountzis int x, int y, int width, int height, 433f4e561ce127cf484d7c76c29b8cd026c9ad5cebcGeorge Sapountzis char *data, void *loaderPrivate); 434280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 435280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis /** 436f4e561ce127cf484d7c76c29b8cd026c9ad5cebcGeorge Sapountzis * Get image from readable 437280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis */ 438f4e561ce127cf484d7c76c29b8cd026c9ad5cebcGeorge Sapountzis void (*getImage)(__DRIdrawable *readable, 439f4e561ce127cf484d7c76c29b8cd026c9ad5cebcGeorge Sapountzis int x, int y, int width, int height, 440f4e561ce127cf484d7c76c29b8cd026c9ad5cebcGeorge Sapountzis char *data, void *loaderPrivate); 441280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis}; 442280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 443e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/** 44497a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg * Invalidate loader extension. The presence of this extension 44597a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg * indicates to the DRI driver that the loader will call invalidate in 44697a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg * the __DRI2_FLUSH extension, whenever the needs to query for new 44797a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg * buffers. This means that the DRI driver can drop the polling in 44897a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg * glViewport(). 44997a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg * 45097a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg * The extension doesn't provide any functionality, it's only use to 45197a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg * indicate to the driver that it can use the new semantics. A DRI 45297a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg * driver can use this to switch between the different semantics or 45397a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg * just refuse to initialize if this extension isn't present. 45497a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg */ 45597a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg#define __DRI_USE_INVALIDATE "DRI_UseInvalidate" 45697a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg#define __DRI_USE_INVALIDATE_VERSION 1 45797a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg 45897a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsbergtypedef struct __DRIuseInvalidateExtensionRec __DRIuseInvalidateExtension; 45997a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsbergstruct __DRIuseInvalidateExtensionRec { 46097a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg __DRIextension base; 46197a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg}; 46297a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg 46397a6cbc6dd8e62653d7481c6f651f2a5fb10aa0eKristian Høgsberg/** 464e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * The remaining extensions describe driver extensions, immediately 465e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * available interfaces provided by the driver. To start using the 466e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * driver, dlsym() for the __DRI_DRIVER_EXTENSIONS symbol and look for 467e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * the extension you need in the array. 468e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg */ 469e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_DRIVER_EXTENSIONS "__driDriverExtensions" 470e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 471e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/** 472e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * Tokens for __DRIconfig attribs. A number of attributes defined by 473e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * GLX or EGL standards are not in the table, as they must be provided 474e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * by the loader. For example, FBConfig ID or visual ID, drawable type. 475e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg */ 476e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 477e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BUFFER_SIZE 1 478e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_LEVEL 2 479e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_RED_SIZE 3 480e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_GREEN_SIZE 4 481e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BLUE_SIZE 5 482e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_LUMINANCE_SIZE 6 483e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ALPHA_SIZE 7 484e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ALPHA_MASK_SIZE 8 485e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_DEPTH_SIZE 9 486e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_STENCIL_SIZE 10 487e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ACCUM_RED_SIZE 11 488e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ACCUM_GREEN_SIZE 12 489e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ACCUM_BLUE_SIZE 13 490e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ACCUM_ALPHA_SIZE 14 491e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_SAMPLE_BUFFERS 15 492e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_SAMPLES 16 493e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_RENDER_TYPE 17 494e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_CONFIG_CAVEAT 18 495e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_CONFORMANT 19 496e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_DOUBLE_BUFFER 20 497e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_STEREO 21 498e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_AUX_BUFFERS 22 499e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_TYPE 23 500e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_INDEX_VALUE 24 501e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_RED_VALUE 25 502e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_GREEN_VALUE 26 503e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_BLUE_VALUE 27 504e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_ALPHA_VALUE 28 505e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_FLOAT_MODE 29 506e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_RED_MASK 30 507e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_GREEN_MASK 31 508e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BLUE_MASK 32 509e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ALPHA_MASK 33 510e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_MAX_PBUFFER_WIDTH 34 511e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_MAX_PBUFFER_HEIGHT 35 512e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_MAX_PBUFFER_PIXELS 36 513e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_OPTIMAL_PBUFFER_WIDTH 37 514e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_OPTIMAL_PBUFFER_HEIGHT 38 515e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_VISUAL_SELECT_GROUP 39 516e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_SWAP_METHOD 40 517e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_MAX_SWAP_INTERVAL 41 518e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_MIN_SWAP_INTERVAL 42 519e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BIND_TO_TEXTURE_RGB 43 520e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BIND_TO_TEXTURE_RGBA 44 521e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BIND_TO_MIPMAP_TEXTURE 45 522e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BIND_TO_TEXTURE_TARGETS 46 523e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_YINVERTED 47 524476db2bd3d72440f54ff57c23da05dc1d624fee9Dave Airlie#define __DRI_ATTRIB_FRAMEBUFFER_SRGB_CAPABLE 48 525e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 526e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/* __DRI_ATTRIB_RENDER_TYPE */ 527e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_RGBA_BIT 0x01 528e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_COLOR_INDEX_BIT 0x02 529e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_LUMINANCE_BIT 0x04 530e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 531e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/* __DRI_ATTRIB_CONFIG_CAVEAT */ 532e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_SLOW_BIT 0x01 533e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_NON_CONFORMANT_CONFIG 0x02 534e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 535e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/* __DRI_ATTRIB_TRANSPARENT_TYPE */ 536e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_RGB 0x00 537e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_INDEX 0x01 538e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 539e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/* __DRI_ATTRIB_BIND_TO_TEXTURE_TARGETS */ 540e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TEXTURE_1D_BIT 0x01 541e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TEXTURE_2D_BIT 0x02 542e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TEXTURE_RECTANGLE_BIT 0x04 543e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 544e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/** 545e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * This extension defines the core DRI functionality. 546e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg */ 547e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_CORE "DRI_Core" 548e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_CORE_VERSION 1 549e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 550e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergstruct __DRIcoreExtensionRec { 551e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIextension base; 552e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 553e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIscreen *(*createNewScreen)(int screen, int fd, 554e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned int sarea_handle, 555e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIextension **extensions, 556e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIconfig ***driverConfigs, 557e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 558e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 559e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void (*destroyScreen)(__DRIscreen *screen); 560e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 561e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIextension **(*getExtensions)(__DRIscreen *screen); 562e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 563e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int (*getConfigAttrib)(const __DRIconfig *config, 564e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned int attrib, 565e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned int *value); 566e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 567e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int (*indexConfigAttrib)(const __DRIconfig *config, int index, 568e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned int *attrib, unsigned int *value); 569e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 570e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen, 571e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIconfig *config, 572e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned int drawable_id, 573e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned int head, 574e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 575e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 576e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void (*destroyDrawable)(__DRIdrawable *drawable); 577e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 578e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void (*swapBuffers)(__DRIdrawable *drawable); 579e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 580e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIcontext *(*createNewContext)(__DRIscreen *screen, 581e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIconfig *config, 582e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIcontext *shared, 583e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 584e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 585e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int (*copyContext)(__DRIcontext *dest, 586e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIcontext *src, 587e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned long mask); 588e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 589e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void (*destroyContext)(__DRIcontext *context); 590e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 591e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int (*bindContext)(__DRIcontext *ctx, 592e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIdrawable *pdraw, 593e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIdrawable *pread); 594e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 595e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int (*unbindContext)(__DRIcontext *ctx); 596e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg}; 597e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 598e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/** 599e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * Stored version of some component (i.e., server-side DRI module, kernel-side 600e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * DRM, etc.). 601e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * 602e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * \todo 603e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * There are several data structures that explicitly store a major version, 604e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * minor version, and patch level. These structures should be modified to 605e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * have a \c __DRIversionRec instead. 606e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg */ 607e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergstruct __DRIversionRec { 608e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int major; /**< Major version number. */ 609e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int minor; /**< Minor version number. */ 610e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int patch; /**< Patch-level. */ 6115f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick}; 6125f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 613192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 614192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Framebuffer information record. Used by libGL to communicate information 615192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * about the framebuffer to the driver's \c __driCreateNewScreen function. 616192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 617192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * In XFree86, most of this information is derrived from data returned by 618192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * calling \c XF86DRIGetDeviceInfo. 619192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 620192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \sa XF86DRIGetDeviceInfo __DRIdisplayRec::createNewScreen 621192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * __driUtilCreateNewScreen CallCreateNewScreen 622192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 623192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \bug This structure could be better named. 624192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 625192c988c7360d026a6f345b21acc2cdf41977915Brian Paulstruct __DRIframebufferRec { 626192c988c7360d026a6f345b21acc2cdf41977915Brian Paul unsigned char *base; /**< Framebuffer base address in the CPU's 627192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * address space. This value is calculated by 628192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * calling \c drmMap on the framebuffer handle 629192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * returned by \c XF86DRIGetDeviceInfo (or a 630192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * similar function). 631192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 632192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int size; /**< Framebuffer size, in bytes. */ 633192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int stride; /**< Number of bytes from one line to the next. */ 634192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int width; /**< Pixel width of the framebuffer. */ 635192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int height; /**< Pixel height of the framebuffer. */ 636192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int dev_priv_size; /**< Size of the driver's dev-priv structure. */ 637192c988c7360d026a6f345b21acc2cdf41977915Brian Paul void *dev_priv; /**< Pointer to the driver's dev-priv structure. */ 638192c988c7360d026a6f345b21acc2cdf41977915Brian Paul}; 639192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 640192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 641192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 642e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * This extension provides alternative screen, drawable and context 643e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * constructors for legacy DRI functionality. This is used in 644e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * conjunction with the core extension. 645192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 646e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_LEGACY "DRI_Legacy" 647e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_LEGACY_VERSION 1 648192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 649e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergstruct __DRIlegacyExtensionRec { 650e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIextension base; 651192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 652e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIscreen *(*createNewScreen)(int screen, 653e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIversion *ddx_version, 654e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIversion *dri_version, 655e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIversion *drm_version, 656e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIframebuffer *frame_buffer, 657e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *pSAREA, int fd, 658e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIextension **extensions, 659e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIconfig ***driver_configs, 660e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 661e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 662e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen, 663e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIconfig *config, 664e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg drm_drawable_t hwDrawable, 665e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int renderType, const int *attrs, 666e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 667e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 668e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIcontext *(*createNewContext)(__DRIscreen *screen, 669e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIconfig *config, 670e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int render_type, 671e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIcontext *shared, 672e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg drm_context_t hwContext, 673e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 674192c988c7360d026a6f345b21acc2cdf41977915Brian Paul}; 67574d563cdfbfb07cc666d60dc909e90ddb9949cbbKeith Whitwell 676280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis/** 677280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis * This extension provides alternative screen, drawable and context 678280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis * constructors for swrast DRI functionality. This is used in 679280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis * conjunction with the core extension. 680280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis */ 681280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis#define __DRI_SWRAST "DRI_SWRast" 682b5b2081d75105883c3e7452775c674716b665385Ian Romanick#define __DRI_SWRAST_VERSION 3 683280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 684280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzisstruct __DRIswrastExtensionRec { 685280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis __DRIextension base; 686280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 687280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis __DRIscreen *(*createNewScreen)(int screen, 688280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis const __DRIextension **extensions, 689280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis const __DRIconfig ***driver_configs, 690280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis void *loaderPrivate); 691280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 692280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen, 693280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis const __DRIconfig *config, 694280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis void *loaderPrivate); 695b43a147128a1144a5fe4afcda412ccaba0c0793bHaitao Feng 696b43a147128a1144a5fe4afcda412ccaba0c0793bHaitao Feng /* Since version 2 */ 697b43a147128a1144a5fe4afcda412ccaba0c0793bHaitao Feng __DRIcontext *(*createNewContextForAPI)(__DRIscreen *screen, 698b43a147128a1144a5fe4afcda412ccaba0c0793bHaitao Feng int api, 699b43a147128a1144a5fe4afcda412ccaba0c0793bHaitao Feng const __DRIconfig *config, 700b43a147128a1144a5fe4afcda412ccaba0c0793bHaitao Feng __DRIcontext *shared, 701b43a147128a1144a5fe4afcda412ccaba0c0793bHaitao Feng void *data); 702b5b2081d75105883c3e7452775c674716b665385Ian Romanick 703b5b2081d75105883c3e7452775c674716b665385Ian Romanick /** 704b5b2081d75105883c3e7452775c674716b665385Ian Romanick * Create a context for a particular API with a set of attributes 705b5b2081d75105883c3e7452775c674716b665385Ian Romanick * 706b5b2081d75105883c3e7452775c674716b665385Ian Romanick * \since version 3 707b5b2081d75105883c3e7452775c674716b665385Ian Romanick * 708b5b2081d75105883c3e7452775c674716b665385Ian Romanick * \sa __DRIdri2ExtensionRec::createContextAttribs 709b5b2081d75105883c3e7452775c674716b665385Ian Romanick */ 710b5b2081d75105883c3e7452775c674716b665385Ian Romanick __DRIcontext *(*createContextAttribs)(__DRIscreen *screen, 711b5b2081d75105883c3e7452775c674716b665385Ian Romanick int api, 712b5b2081d75105883c3e7452775c674716b665385Ian Romanick const __DRIconfig *config, 713b5b2081d75105883c3e7452775c674716b665385Ian Romanick __DRIcontext *shared, 714b5b2081d75105883c3e7452775c674716b665385Ian Romanick unsigned num_attribs, 715b5b2081d75105883c3e7452775c674716b665385Ian Romanick const uint32_t *attribs, 716b5b2081d75105883c3e7452775c674716b665385Ian Romanick unsigned *error, 717b5b2081d75105883c3e7452775c674716b665385Ian Romanick void *loaderPrivate); 718280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis}; 719280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 720f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg/** 721f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg * DRI2 Loader extension. 722f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg */ 723f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_FRONT_LEFT 0 724f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_BACK_LEFT 1 725f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_FRONT_RIGHT 2 726f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_BACK_RIGHT 3 727f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_DEPTH 4 728f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_STENCIL 5 729f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_ACCUM 6 730396711b840683809565507e47a4311e5b7503ef2Alan Hourihane#define __DRI_BUFFER_FAKE_FRONT_LEFT 7 731396711b840683809565507e47a4311e5b7503ef2Alan Hourihane#define __DRI_BUFFER_FAKE_FRONT_RIGHT 8 732dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick#define __DRI_BUFFER_DEPTH_STENCIL 9 /**< Only available with DRI2 1.1 */ 7334501a5d6e8d00fd0d87625352ed5ba1a8861f72eChad Versace#define __DRI_BUFFER_HIZ 10 734f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 7358c409403217cf8c13e1d2dd306ad5e86b566c5c9Benjamin Franzke/* Inofficial and for internal use. Increase when adding a new buffer token. */ 7368c409403217cf8c13e1d2dd306ad5e86b566c5c9Benjamin Franzke#define __DRI_BUFFER_COUNT 11 7378c409403217cf8c13e1d2dd306ad5e86b566c5c9Benjamin Franzke 738f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsbergstruct __DRIbufferRec { 739f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg unsigned int attachment; 740f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg unsigned int name; 741f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg unsigned int pitch; 742f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg unsigned int cpp; 743f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg unsigned int flags; 744f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg}; 745f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 746f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_DRI2_LOADER "DRI_DRI2Loader" 747dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick#define __DRI_DRI2_LOADER_VERSION 3 748f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsbergstruct __DRIdri2LoaderExtensionRec { 749f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIextension base; 750f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 751f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIbuffer *(*getBuffers)(__DRIdrawable *driDrawable, 752f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg int *width, int *height, 753f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg unsigned int *attachments, int count, 754f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg int *out_count, void *loaderPrivate); 75582634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick 75682634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick /** 75782634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * Flush pending front-buffer rendering 75882634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * 75982634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * Any rendering that has been performed to the 76082634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * \c __DRI_BUFFER_FAKE_FRONT_LEFT will be flushed to the 76182634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * \c __DRI_BUFFER_FRONT_LEFT. 76282634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * 76382634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * \param driDrawable Drawable whose front-buffer is to be flushed 76482634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * \param loaderPrivate Loader's private data that was previously passed 76582634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * into __DRIdri2ExtensionRec::createNewDrawable 76682634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick */ 76782634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick void (*flushFrontBuffer)(__DRIdrawable *driDrawable, void *loaderPrivate); 768dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick 769dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick 770dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick /** 771dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * Get list of buffers from the server 772dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * 773dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * Gets a list of buffer for the specified set of attachments. Unlike 774dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \c ::getBuffers, this function takes a list of attachments paired with 775dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * opaque \c unsigned \c int value describing the format of the buffer. 776dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * It is the responsibility of the caller to know what the service that 777dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * allocates the buffers will expect to receive for the format. 778dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * 779dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \param driDrawable Drawable whose buffers are being queried. 780dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \param width Output where the width of the buffers is stored. 781dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \param height Output where the height of the buffers is stored. 782dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \param attachments List of pairs of attachment ID and opaque format 783dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * requested for the drawable. 784dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \param count Number of attachment / format pairs stored in 785dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \c attachments. 786dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \param loaderPrivate Loader's private data that was previously passed 787dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * into __DRIdri2ExtensionRec::createNewDrawable. 788dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick */ 789dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick __DRIbuffer *(*getBuffersWithFormat)(__DRIdrawable *driDrawable, 790dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick int *width, int *height, 791dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick unsigned int *attachments, int count, 792dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick int *out_count, void *loaderPrivate); 793f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg}; 794f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 795f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg/** 796f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg * This extension provides alternative screen, drawable and context 797f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg * constructors for DRI2. 798f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg */ 799f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_DRI2 "DRI_DRI2" 8001ab545494a6750527cb8b945c286f23a6524826aIan Romanick#define __DRI_DRI2_VERSION 3 801a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg 8021ab545494a6750527cb8b945c286f23a6524826aIan Romanick#define __DRI_API_OPENGL 0 /**< OpenGL compatibility profile */ 803a2ce2eba26639327d6080fbf3dd64d4ff5ac3bcbIan Romanick#define __DRI_API_GLES 1 /**< OpenGL ES 1.x */ 804a2ce2eba26639327d6080fbf3dd64d4ff5ac3bcbIan Romanick#define __DRI_API_GLES2 2 /**< OpenGL ES 2.0 or 3.0 */ 8051ab545494a6750527cb8b945c286f23a6524826aIan Romanick#define __DRI_API_OPENGL_CORE 3 /**< OpenGL 3.2+ core profile */ 8061ab545494a6750527cb8b945c286f23a6524826aIan Romanick 8071ab545494a6750527cb8b945c286f23a6524826aIan Romanick#define __DRI_CTX_ATTRIB_MAJOR_VERSION 0 8081ab545494a6750527cb8b945c286f23a6524826aIan Romanick#define __DRI_CTX_ATTRIB_MINOR_VERSION 1 8091ab545494a6750527cb8b945c286f23a6524826aIan Romanick#define __DRI_CTX_ATTRIB_FLAGS 2 8101ab545494a6750527cb8b945c286f23a6524826aIan Romanick 811a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick/** 812a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick * \requires __DRI2_ROBUSTNESS. 813a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick */ 814a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick#define __DRI_CTX_ATTRIB_RESET_STRATEGY 3 815a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick 8161ab545494a6750527cb8b945c286f23a6524826aIan Romanick#define __DRI_CTX_FLAG_DEBUG 0x00000001 8171ab545494a6750527cb8b945c286f23a6524826aIan Romanick#define __DRI_CTX_FLAG_FORWARD_COMPATIBLE 0x00000002 8181ab545494a6750527cb8b945c286f23a6524826aIan Romanick 8191ab545494a6750527cb8b945c286f23a6524826aIan Romanick/** 820a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick * \requires __DRI2_ROBUSTNESS. 821a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick */ 822a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick#define __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS 0x00000004 823a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick 824a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick/** 825a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick * \name Context reset strategies. 826a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick */ 827a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick/*@{*/ 828a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick#define __DRI_CTX_RESET_NO_NOTIFICATION 0 829a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick#define __DRI_CTX_RESET_LOSE_CONTEXT 1 830a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick/*@}*/ 831a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick 832a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick/** 8331ab545494a6750527cb8b945c286f23a6524826aIan Romanick * \name Reasons that __DRIdri2Extension::createContextAttribs might fail 8341ab545494a6750527cb8b945c286f23a6524826aIan Romanick */ 8351ab545494a6750527cb8b945c286f23a6524826aIan Romanick/*@{*/ 8361ab545494a6750527cb8b945c286f23a6524826aIan Romanick/** Success! */ 8371ab545494a6750527cb8b945c286f23a6524826aIan Romanick#define __DRI_CTX_ERROR_SUCCESS 0 8381ab545494a6750527cb8b945c286f23a6524826aIan Romanick 8391ab545494a6750527cb8b945c286f23a6524826aIan Romanick/** Memory allocation failure */ 8401ab545494a6750527cb8b945c286f23a6524826aIan Romanick#define __DRI_CTX_ERROR_NO_MEMORY 1 8411ab545494a6750527cb8b945c286f23a6524826aIan Romanick 8421ab545494a6750527cb8b945c286f23a6524826aIan Romanick/** Client requested an API (e.g., OpenGL ES 2.0) that the driver can't do. */ 8431ab545494a6750527cb8b945c286f23a6524826aIan Romanick#define __DRI_CTX_ERROR_BAD_API 2 8441ab545494a6750527cb8b945c286f23a6524826aIan Romanick 8451ab545494a6750527cb8b945c286f23a6524826aIan Romanick/** Client requested an API version that the driver can't do. */ 8461ab545494a6750527cb8b945c286f23a6524826aIan Romanick#define __DRI_CTX_ERROR_BAD_VERSION 3 8471ab545494a6750527cb8b945c286f23a6524826aIan Romanick 8481ab545494a6750527cb8b945c286f23a6524826aIan Romanick/** Client requested a flag or combination of flags the driver can't do. */ 8491ab545494a6750527cb8b945c286f23a6524826aIan Romanick#define __DRI_CTX_ERROR_BAD_FLAG 4 8501ab545494a6750527cb8b945c286f23a6524826aIan Romanick 8511ab545494a6750527cb8b945c286f23a6524826aIan Romanick/** Client requested an attribute the driver doesn't understand. */ 8521ab545494a6750527cb8b945c286f23a6524826aIan Romanick#define __DRI_CTX_ERROR_UNKNOWN_ATTRIBUTE 5 8531ab545494a6750527cb8b945c286f23a6524826aIan Romanick 8541ab545494a6750527cb8b945c286f23a6524826aIan Romanick/** Client requested a flag the driver doesn't understand. */ 8551ab545494a6750527cb8b945c286f23a6524826aIan Romanick#define __DRI_CTX_ERROR_UNKNOWN_FLAG 6 8561ab545494a6750527cb8b945c286f23a6524826aIan Romanick/*@}*/ 857f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 858f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsbergstruct __DRIdri2ExtensionRec { 859f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIextension base; 860f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 861f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIscreen *(*createNewScreen)(int screen, int fd, 862f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg const __DRIextension **extensions, 863f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg const __DRIconfig ***driver_configs, 864f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg void *loaderPrivate); 865f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 866f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen, 867f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg const __DRIconfig *config, 868f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg void *loaderPrivate); 869f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 870f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIcontext *(*createNewContext)(__DRIscreen *screen, 871f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg const __DRIconfig *config, 872f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIcontext *shared, 873f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg void *loaderPrivate); 874f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 875a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg /* Since version 2 */ 876a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg unsigned int (*getAPIMask)(__DRIscreen *screen); 877a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg 878a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg __DRIcontext *(*createNewContextForAPI)(__DRIscreen *screen, 879a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg int api, 880a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg const __DRIconfig *config, 881a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg __DRIcontext *shared, 882a7a9a91d7b28e5b5faed509d00f0f951e3136b1bKristian Høgsberg void *data); 8831b8ef9416bf3a4d2d47fcf9935063af57da2975dBenjamin Franzke 8841b8ef9416bf3a4d2d47fcf9935063af57da2975dBenjamin Franzke __DRIbuffer *(*allocateBuffer)(__DRIscreen *screen, 8851b8ef9416bf3a4d2d47fcf9935063af57da2975dBenjamin Franzke unsigned int attachment, 8861b8ef9416bf3a4d2d47fcf9935063af57da2975dBenjamin Franzke unsigned int format, 8871b8ef9416bf3a4d2d47fcf9935063af57da2975dBenjamin Franzke int width, 8881b8ef9416bf3a4d2d47fcf9935063af57da2975dBenjamin Franzke int height); 8891b8ef9416bf3a4d2d47fcf9935063af57da2975dBenjamin Franzke void (*releaseBuffer)(__DRIscreen *screen, 8901b8ef9416bf3a4d2d47fcf9935063af57da2975dBenjamin Franzke __DRIbuffer *buffer); 8911ab545494a6750527cb8b945c286f23a6524826aIan Romanick 8921ab545494a6750527cb8b945c286f23a6524826aIan Romanick /** 8931ab545494a6750527cb8b945c286f23a6524826aIan Romanick * Create a context for a particular API with a set of attributes 8941ab545494a6750527cb8b945c286f23a6524826aIan Romanick * 8951ab545494a6750527cb8b945c286f23a6524826aIan Romanick * \since version 3 896b5b2081d75105883c3e7452775c674716b665385Ian Romanick * 897b5b2081d75105883c3e7452775c674716b665385Ian Romanick * \sa __DRIswrastExtensionRec::createContextAttribs 8981ab545494a6750527cb8b945c286f23a6524826aIan Romanick */ 8991ab545494a6750527cb8b945c286f23a6524826aIan Romanick __DRIcontext *(*createContextAttribs)(__DRIscreen *screen, 9001ab545494a6750527cb8b945c286f23a6524826aIan Romanick int api, 9011ab545494a6750527cb8b945c286f23a6524826aIan Romanick const __DRIconfig *config, 9021ab545494a6750527cb8b945c286f23a6524826aIan Romanick __DRIcontext *shared, 9031ab545494a6750527cb8b945c286f23a6524826aIan Romanick unsigned num_attribs, 9041ab545494a6750527cb8b945c286f23a6524826aIan Romanick const uint32_t *attribs, 9051ab545494a6750527cb8b945c286f23a6524826aIan Romanick unsigned *error, 9061ab545494a6750527cb8b945c286f23a6524826aIan Romanick void *loaderPrivate); 907f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg}; 908f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 90979cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg 91079cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg/** 91179cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * This extension provides functionality to enable various EGLImage 91279cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * extensions. 91379cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg */ 91479cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg#define __DRI_IMAGE "DRI_IMAGE" 91544f066b9ffb7749e872c9cc44ab4d6e2973c2372Kristian Høgsberg#define __DRI_IMAGE_VERSION 5 91679cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg 91779cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg/** 91879cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * These formats correspond to the similarly named MESA_FORMAT_* 91979cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * tokens, except in the native endian of the CPU. For example, on 92079cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * little endian __DRI_IMAGE_FORMAT_XRGB8888 corresponds to 92179cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * MESA_FORMAT_XRGB8888, but MESA_FORMAT_XRGB8888_REV on big endian. 922c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg * 923c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg * __DRI_IMAGE_FORMAT_NONE is for images that aren't directly usable 924c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg * by the driver (YUV planar formats) but serve as a base image for 925c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg * creating sub-images for the different planes within the image. 92600978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * 92700978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * R8, GR88 and NONE should not be used with createImageFormName or 92800978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * createImage, and are returned by query from sub images created with 92900978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * createImageFromNames (NONE, see above) and fromPlane (R8 & GR88). 93079cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg */ 93179cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg#define __DRI_IMAGE_FORMAT_RGB565 0x1001 93279cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg#define __DRI_IMAGE_FORMAT_XRGB8888 0x1002 93379cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg#define __DRI_IMAGE_FORMAT_ARGB8888 0x1003 934e3cf7b69f24c186310eb3be4c462cccea028e6f2Chia-I Wu#define __DRI_IMAGE_FORMAT_ABGR8888 0x1004 93581f95ce13d92f15df2941a831ddb5a415f0f816eSean V Kelley#define __DRI_IMAGE_FORMAT_XBGR8888 0x1005 936c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg#define __DRI_IMAGE_FORMAT_R8 0x1006 /* Since version 5 */ 937c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg#define __DRI_IMAGE_FORMAT_GR88 0x1007 938c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg#define __DRI_IMAGE_FORMAT_NONE 0x1008 93979cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg 9405aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg#define __DRI_IMAGE_USE_SHARE 0x0001 9415aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg#define __DRI_IMAGE_USE_SCANOUT 0x0002 9426bb71b8cbe6b17a5d59e369631502e642804406eJakob Bornecrantz#define __DRI_IMAGE_USE_CURSOR 0x0004 /* Depricated */ 9435aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg 94400978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz 94500978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz/** 94600978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * Four CC formats that matches with WL_DRM_FORMAT_* from wayland_drm.h 94700978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * and GBM_FORMAT_* from gbm.h, used with createImageFromNames. 94800978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * 94900978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * \since 5 95000978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz */ 95100978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz 95200978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz#define __DRI_IMAGE_FOURCC_RGB565 0x36314752 95300978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz#define __DRI_IMAGE_FOURCC_ARGB8888 0x34325241 95400978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz#define __DRI_IMAGE_FOURCC_XRGB8888 0x34325258 95500978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz#define __DRI_IMAGE_FOURCC_ABGR8888 0x34324241 95600978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz#define __DRI_IMAGE_FOURCC_XBGR8888 0x34324258 95700978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz#define __DRI_IMAGE_FOURCC_YUV410 0x39565559 95800978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz#define __DRI_IMAGE_FOURCC_YUV411 0x31315559 95900978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz#define __DRI_IMAGE_FOURCC_YUV420 0x32315559 96000978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz#define __DRI_IMAGE_FOURCC_YUV422 0x36315559 96100978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz#define __DRI_IMAGE_FOURCC_YUV444 0x34325559 96200978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz#define __DRI_IMAGE_FOURCC_NV12 0x3231564e 96300978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz#define __DRI_IMAGE_FOURCC_NV16 0x3631564e 96400978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz#define __DRI_IMAGE_FOURCC_YUYV 0x56595559 96500978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz 96600978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz 96700978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz/** 96800978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * Queryable on images created by createImageFromNames. 96900978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * 97000978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * RGB and RGBA are may be usable directly as images but its still 97100978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * recommended to call fromPlanar with plane == 0. 97200978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * 97300978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * Y_U_V, Y_UV and Y_XUXV all requires call to fromPlanar to create 97400978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * usable sub-images, sampling from images return raw YUV data and 97500978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * color conversion needs to be done in the shader. 97600978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * 97700978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * \since 5 97800978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz */ 97900978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz 98000978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz#define __DRI_IMAGE_COMPONENTS_RGB 0x3001 98100978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz#define __DRI_IMAGE_COMPONENTS_RGBA 0x3002 98200978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz#define __DRI_IMAGE_COMPONENTS_Y_U_V 0x3003 98300978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz#define __DRI_IMAGE_COMPONENTS_Y_UV 0x3004 98400978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz#define __DRI_IMAGE_COMPONENTS_Y_XUXV 0x3005 98500978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz 98600978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz 9875aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg/** 9885aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg * queryImage attributes 9895aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg */ 9905aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg 9915aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg#define __DRI_IMAGE_ATTRIB_STRIDE 0x2000 9925aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg#define __DRI_IMAGE_ATTRIB_HANDLE 0x2001 9935aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg#define __DRI_IMAGE_ATTRIB_NAME 0x2002 9948de5c355fa2bf0f30df2c7cf39aee01e793284bfJesse Barnes#define __DRI_IMAGE_ATTRIB_FORMAT 0x2003 /* available in versions 3+ */ 99593ebec87ed46978942464a6f08801ae06e86fa8bJakob Bornecrantz#define __DRI_IMAGE_ATTRIB_WIDTH 0x2004 /* available in versions 4+ */ 99644f066b9ffb7749e872c9cc44ab4d6e2973c2372Kristian Høgsberg#define __DRI_IMAGE_ATTRIB_HEIGHT 0x2005 99700978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz#define __DRI_IMAGE_ATTRIB_COMPONENTS 0x2006 /* available in versions 5+ */ 9985aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg 99979cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsbergtypedef struct __DRIimageRec __DRIimage; 100079cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsbergtypedef struct __DRIimageExtensionRec __DRIimageExtension; 100179cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsbergstruct __DRIimageExtensionRec { 100279cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg __DRIextension base; 100379cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg 10049ec0b2a45e18c045fd3dbcdf846fad7faf97494cKristian Høgsberg __DRIimage *(*createImageFromName)(__DRIscreen *screen, 100579cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg int width, int height, int format, 100679cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg int name, int pitch, 100779cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg void *loaderPrivate); 100879cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg 100979cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg __DRIimage *(*createImageFromRenderbuffer)(__DRIcontext *context, 101079cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg int renderbuffer, 101179cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg void *loaderPrivate); 101279cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg 101379cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg void (*destroyImage)(__DRIimage *image); 10145aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg 10155aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg __DRIimage *(*createImage)(__DRIscreen *screen, 10165aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg int width, int height, int format, 10175aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg unsigned int use, 10185aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg void *loaderPrivate); 10195aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg 10205aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg GLboolean (*queryImage)(__DRIimage *image, int attrib, int *value); 10215fbbd4c19fca6486050990893e8e8c1835ba0b4dBenjamin Franzke 10225fbbd4c19fca6486050990893e8e8c1835ba0b4dBenjamin Franzke /** 10235fbbd4c19fca6486050990893e8e8c1835ba0b4dBenjamin Franzke * The new __DRIimage will share the content with the old one, see dup(2). 10245fbbd4c19fca6486050990893e8e8c1835ba0b4dBenjamin Franzke */ 10255fbbd4c19fca6486050990893e8e8c1835ba0b4dBenjamin Franzke __DRIimage *(*dupImage)(__DRIimage *image, void *loaderPrivate); 1026221c678329fd1c073d5f8dcf387129cd426ecf07Kristian Høgsberg 1027221c678329fd1c073d5f8dcf387129cd426ecf07Kristian Høgsberg /** 1028221c678329fd1c073d5f8dcf387129cd426ecf07Kristian Høgsberg * Validate that a __DRIimage can be used a certain way. 1029221c678329fd1c073d5f8dcf387129cd426ecf07Kristian Høgsberg * 1030221c678329fd1c073d5f8dcf387129cd426ecf07Kristian Høgsberg * \since 2 1031221c678329fd1c073d5f8dcf387129cd426ecf07Kristian Høgsberg */ 1032221c678329fd1c073d5f8dcf387129cd426ecf07Kristian Høgsberg GLboolean (*validateUsage)(__DRIimage *image, unsigned int use); 10334fddb2ba21add1c1968330e5224ecead59da3995Kristian Høgsberg 10344fddb2ba21add1c1968330e5224ecead59da3995Kristian Høgsberg /** 103500978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * Unlike createImageFromName __DRI_IMAGE_FORMAT is not but instead 103600978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * __DRI_IMAGE_FOURCC and strides are in bytes not pixels. Stride is 103700978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * also per block and not per pixel (for non-RGB, see gallium blocks). 103800978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * 103900978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz * \since 5 104000978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz */ 104100978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz __DRIimage *(*createImageFromNames)(__DRIscreen *screen, 104200978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz int width, int height, int fourcc, 104300978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz int *names, int num_names, 104400978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz int *strides, int *offsets, 104500978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz void *loaderPrivate); 104600978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz 104700978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz /** 1048c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg * Create an image out of a sub-region of a parent image. This 1049c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg * entry point lets us create individual __DRIimages for different 1050c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg * planes in a planar buffer (typically yuv), for example. While a 1051c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg * sub-image shares the underlying buffer object with the parent 1052c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg * image and other sibling sub-images, the life times of parent and 1053c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg * sub-images are not dependent. Destroying the parent or a 1054c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg * sub-image doesn't affect other images. The underlying buffer 1055c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg * object is free when no __DRIimage remains that references it. 1056c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg * 1057c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg * Sub-images may overlap, but rendering to overlapping sub-images 1058c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg * is undefined. 1059c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg * 1060c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg * \since 5 1061c0298348089069716cfc1aee2b25d0857c8be450Kristian Høgsberg */ 106200978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz __DRIimage *(*fromPlanar)(__DRIimage *image, int plane, 106300978098794f723230a33cab1c1152686f1c4fa5Jakob Bornecrantz void *loaderPrivate); 106479cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg}; 106579cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg 10665aaa53e66cc49bf0d28ec53bdab4e3b7f714e5baKristian Høgsberg 106779cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg/** 106879cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * This extension must be implemented by the loader and passed to the 106979cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * driver at screen creation time. The EGLImage entry points in the 107079cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * various client APIs take opaque EGLImage handles and use this 107179cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * extension to map them to a __DRIimage. At version 1, this 107279cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * extensions allows mapping EGLImage pointers to __DRIimage pointers, 107379cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * but future versions could support other EGLImage-like, opaque types 107479cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg * with new lookup functions. 107579cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg */ 107679cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg#define __DRI_IMAGE_LOOKUP "DRI_IMAGE_LOOKUP" 107779cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg#define __DRI_IMAGE_LOOKUP_VERSION 1 107879cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg 107979cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsbergtypedef struct __DRIimageLookupExtensionRec __DRIimageLookupExtension; 108079cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsbergstruct __DRIimageLookupExtensionRec { 108179cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg __DRIextension base; 108279cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg 108317eace581d25a626a7d75d9d1205d012cbb14a6eKristian Høgsberg __DRIimage *(*lookupEGLImage)(__DRIscreen *screen, void *image, 108479cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg void *loaderPrivate); 108579cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg}; 108679cbcb663d738b424466219cf8a1221eac106a6fKristian Høgsberg 1087234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes/** 1088234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes * This extension allows for common DRI2 options 1089234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes */ 1090234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes#define __DRI2_CONFIG_QUERY "DRI_CONFIG_QUERY" 1091234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes#define __DRI2_CONFIG_QUERY_VERSION 1 1092234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes 1093234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnestypedef struct __DRI2configQueryExtensionRec __DRI2configQueryExtension; 1094234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnesstruct __DRI2configQueryExtensionRec { 1095234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes __DRIextension base; 1096234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes 1097234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes int (*configQueryb)(__DRIscreen *screen, const char *var, GLboolean *val); 1098234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes int (*configQueryi)(__DRIscreen *screen, const char *var, GLint *val); 1099234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes int (*configQueryf)(__DRIscreen *screen, const char *var, GLfloat *val); 1100234286c0f8b7d30ed49223c648d4c73c1a517ab3Jesse Barnes}; 1101a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick 1102a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick/** 1103a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick * Robust context driver extension. 1104a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick * 1105a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick * Existence of this extension means the driver can accept the 1106a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick * \c __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS flag and the 1107a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick * \c __DRI_CTX_ATTRIB_RESET_STRATEGY attribute in 1108a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick * \c __DRIdri2ExtensionRec::createContextAttribs. 1109a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick */ 1110a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick#define __DRI2_ROBUSTNESS "DRI_Robustness" 1111a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick#define __DRI2_ROBUSTNESS_VERSION 1 1112a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick 1113a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanicktypedef struct __DRIrobustnessExtensionRec __DRIrobustnessExtension; 1114a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanickstruct __DRIrobustnessExtensionRec { 1115a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick __DRIextension base; 1116a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick}; 1117a8724d85f8cb2f0fb73b9c6c1f268f9084c6d473Ian Romanick 111874d563cdfbfb07cc666d60dc909e90ddb9949cbbKeith Whitwell#endif 1119