dri_interface.h revision dbf87f23126cc869637575e9ea2cb58774efe888
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 */ 448e7599892f5dd2f85a74eccf9ff7a80dd277122bJon Turney#if !defined(__APPLE__) && !defined(__CYGWIN__) 45fabe2b9ba38e95bd21a35b265bfc403fa3cb2883Ian Romanick#include <drm.h> 4601ac4540f04d47b64aeead8984c92e39b436b5f9Jeremy Huddleston#else 4701ac4540f04d47b64aeead8984c92e39b436b5f9Jeremy Huddlestontypedef unsigned int drm_context_t; 4801ac4540f04d47b64aeead8984c92e39b436b5f9Jeremy Huddlestontypedef unsigned int drm_drawable_t; 4901ac4540f04d47b64aeead8984c92e39b436b5f9Jeremy Huddlestontypedef struct drm_clip_rect drm_clip_rect_t; 5001ac4540f04d47b64aeead8984c92e39b436b5f9Jeremy Huddleston#endif 51192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 52192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 53192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \name DRI interface structures 54192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 55192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * The following structures define the interface between the GLX client 56192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * side library and the DRI (direct rendering infrastructure). 57192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 58192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/*@{*/ 594a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsbergtypedef struct __DRIdisplayRec __DRIdisplay; 604a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsbergtypedef struct __DRIscreenRec __DRIscreen; 614a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsbergtypedef struct __DRIcontextRec __DRIcontext; 624a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsbergtypedef struct __DRIdrawableRec __DRIdrawable; 63e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergtypedef struct __DRIconfigRec __DRIconfig; 644a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsbergtypedef struct __DRIframebufferRec __DRIframebuffer; 654a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsbergtypedef struct __DRIversionRec __DRIversion; 66f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg 67e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergtypedef struct __DRIcoreExtensionRec __DRIcoreExtension; 6878a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsbergtypedef struct __DRIextensionRec __DRIextension; 69ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsbergtypedef struct __DRIcopySubBufferExtensionRec __DRIcopySubBufferExtension; 70efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsbergtypedef struct __DRIswapControlExtensionRec __DRIswapControlExtension; 7178a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsbergtypedef struct __DRIallocateExtensionRec __DRIallocateExtension; 72a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsbergtypedef struct __DRIframeTrackingExtensionRec __DRIframeTrackingExtension; 73106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsbergtypedef struct __DRImediaStreamCounterExtensionRec __DRImediaStreamCounterExtension; 74f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsbergtypedef struct __DRItexOffsetExtensionRec __DRItexOffsetExtension; 756d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsbergtypedef struct __DRItexBufferExtensionRec __DRItexBufferExtension; 76e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergtypedef struct __DRIlegacyExtensionRec __DRIlegacyExtension; 77280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzistypedef struct __DRIswrastExtensionRec __DRIswrastExtension; 78f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsbergtypedef struct __DRIbufferRec __DRIbuffer; 79f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsbergtypedef struct __DRIdri2ExtensionRec __DRIdri2Extension; 80f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsbergtypedef struct __DRIdri2LoaderExtensionRec __DRIdri2LoaderExtension; 8165562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihanetypedef struct __DRI2flushExtensionRec __DRI2flushExtension; 82f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 83192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/*@}*/ 84192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 85192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 86192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 87f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg * Extension struct. Drivers 'inherit' from this struct by embedding 88e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * it as the first element in the extension struct. 89ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * 90ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * We never break API in for a DRI extension. If we need to change 91ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * the way things work in a non-backwards compatible manner, we 92ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * introduce a new extension. During a transition period, we can 93ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * leave both the old and the new extension in the driver, which 94ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * allows us to move to the new interface without having to update the 95ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * loader(s) in lock step. 96ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * 97ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * However, we can add entry points to an extension over time as long 98ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * as we don't break the old ones. As we add entry points to an 99ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * extension, we increase the version number. The corresponding 100ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * #define can be used to guard code that accesses the new entry 101ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * points at compile time and the version field in the extension 102ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * struct can be used at run-time to determine how to use the 103ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg * extension. 104f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg */ 105f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsbergstruct __DRIextensionRec { 106f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg const char *name; 107ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg int version; 108f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg}; 109f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg 110ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg/** 111e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * The first set of extension are the screen extensions, returned by 112e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * __DRIcore::getExtensions(). This entry point will return a list of 113e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * extensions and the loader can use the ones it knows about by 114e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * casting them to more specific extensions and advertising any GLX 115e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * extensions the DRI extensions enables. 116e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg */ 117e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 118e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/** 119f968f67e6214416f04b8875ce59a94a02f464c81Kristian Høgsberg * Used by drivers to indicate support for setting the read drawable. 120f968f67e6214416f04b8875ce59a94a02f464c81Kristian Høgsberg */ 121f968f67e6214416f04b8875ce59a94a02f464c81Kristian Høgsberg#define __DRI_READ_DRAWABLE "DRI_ReadDrawable" 122ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg#define __DRI_READ_DRAWABLE_VERSION 1 123f968f67e6214416f04b8875ce59a94a02f464c81Kristian Høgsberg 124f968f67e6214416f04b8875ce59a94a02f464c81Kristian Høgsberg/** 125ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg * Used by drivers that implement the GLX_MESA_copy_sub_buffer extension. 126ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg */ 127ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg#define __DRI_COPY_SUB_BUFFER "DRI_CopySubBuffer" 128ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg#define __DRI_COPY_SUB_BUFFER_VERSION 1 129ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsbergstruct __DRIcopySubBufferExtensionRec { 130ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg __DRIextension base; 131ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg void (*copySubBuffer)(__DRIdrawable *drawable, int x, int y, int w, int h); 132ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg}; 133ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg 134efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg/** 135efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg * Used by drivers that implement the GLX_SGI_swap_control or 136efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg * GLX_MESA_swap_control extension. 137efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg */ 138efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg#define __DRI_SWAP_CONTROL "DRI_SwapControl" 139ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg#define __DRI_SWAP_CONTROL_VERSION 1 140efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsbergstruct __DRIswapControlExtensionRec { 141efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg __DRIextension base; 142efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg void (*setSwapInterval)(__DRIdrawable *drawable, unsigned int inteval); 143efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg unsigned int (*getSwapInterval)(__DRIdrawable *drawable); 144efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg}; 145f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg 146f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg/** 14778a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg * Used by drivers that implement the GLX_MESA_allocate_memory. 14878a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg */ 14978a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg#define __DRI_ALLOCATE "DRI_Allocate" 150ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg#define __DRI_ALLOCATE_VERSION 1 15178a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsbergstruct __DRIallocateExtensionRec { 15278a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg __DRIextension base; 15378a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg 15478a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg void *(*allocateMemory)(__DRIscreen *screen, GLsizei size, 15578a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg GLfloat readfreq, GLfloat writefreq, 15678a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg GLfloat priority); 15778a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg 15878a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg void (*freeMemory)(__DRIscreen *screen, GLvoid *pointer); 15978a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg 16078a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg GLuint (*memoryOffset)(__DRIscreen *screen, const GLvoid *pointer); 16178a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg}; 16278a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg 16378a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg/** 164a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * Used by drivers that implement the GLX_MESA_swap_frame_usage extension. 165a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg */ 166a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg#define __DRI_FRAME_TRACKING "DRI_FrameTracking" 167ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg#define __DRI_FRAME_TRACKING_VERSION 1 168a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsbergstruct __DRIframeTrackingExtensionRec { 169a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg __DRIextension base; 170a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg 171a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg /** 172a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * Enable or disable frame usage tracking. 173a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * 174a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * \since Internal API version 20030317. 175a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg */ 176a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg int (*frameTracking)(__DRIdrawable *drawable, GLboolean enable); 177a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg 178a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg /** 179a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * Retrieve frame usage information. 180a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * 181a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * \since Internal API version 20030317. 182a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg */ 183a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg int (*queryFrameTracking)(__DRIdrawable *drawable, 184a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg int64_t * sbc, int64_t * missedFrames, 185a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg float * lastMissedUsage, float * usage); 186a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg}; 187a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg 188106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg 189106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg/** 190106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * Used by drivers that implement the GLX_SGI_video_sync extension. 191106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg */ 192106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg#define __DRI_MEDIA_STREAM_COUNTER "DRI_MediaStreamCounter" 1936e8d21d72f35767e07081a8bee4323aaaf5e2aaeKristian Høgsberg#define __DRI_MEDIA_STREAM_COUNTER_VERSION 1 194106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsbergstruct __DRImediaStreamCounterExtensionRec { 195106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg __DRIextension base; 196106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg 197106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg /** 198106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * Wait for the MSC to equal target_msc, or, if that has already passed, 199106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * the next time (MSC % divisor) is equal to remainder. If divisor is 200106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * zero, the function will return as soon as MSC is greater than or equal 201106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * to target_msc. 202106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg */ 203106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg int (*waitForMSC)(__DRIdrawable *drawable, 204106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg int64_t target_msc, int64_t divisor, int64_t remainder, 205106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg int64_t * msc, int64_t * sbc); 20638fdb47d26055e19d50cd407266b56ed4317ae0aJesse Barnes 20738fdb47d26055e19d50cd407266b56ed4317ae0aJesse Barnes /** 20838fdb47d26055e19d50cd407266b56ed4317ae0aJesse Barnes * Get the number of vertical refreshes since some point in time before 20938fdb47d26055e19d50cd407266b56ed4317ae0aJesse Barnes * this function was first called (i.e., system start up). 21038fdb47d26055e19d50cd407266b56ed4317ae0aJesse Barnes */ 2116e8d21d72f35767e07081a8bee4323aaaf5e2aaeKristian Høgsberg int (*getDrawableMSC)(__DRIscreen *screen, __DRIdrawable *drawable, 21238fdb47d26055e19d50cd407266b56ed4317ae0aJesse Barnes int64_t *msc); 213106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg}; 214106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg 215106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg 216f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg#define __DRI_TEX_OFFSET "DRI_TexOffset" 217ccff0cb26378ce370fc8697a2a2ada138d2e119eKristian Høgsberg#define __DRI_TEX_OFFSET_VERSION 1 218f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsbergstruct __DRItexOffsetExtensionRec { 219f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg __DRIextension base; 220f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg 221f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg /** 222f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg * Method to override base texture image with a driver specific 'offset'. 223f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg * The depth passed in allows e.g. to ignore the alpha channel of texture 224f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg * images where the non-alpha components don't occupy a whole texel. 225f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg * 226f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg * For GLX_EXT_texture_from_pixmap with AIGLX. 227f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg */ 228f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg void (*setTexOffset)(__DRIcontext *pDRICtx, GLint texname, 229f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg unsigned long long offset, GLint depth, GLuint pitch); 230f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg}; 231f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg 232f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg 2336d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg#define __DRI_TEX_BUFFER "DRI_TexBuffer" 23466175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt#define __DRI_TEX_BUFFER_VERSION 2 2356d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsbergstruct __DRItexBufferExtensionRec { 2366d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg __DRIextension base; 2376d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg 2386d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg /** 239dcbe215c015c8dc48440f578023c2b9d12b934e4Kristian Høgsberg * Method to override base texture image with the contents of a 240dcbe215c015c8dc48440f578023c2b9d12b934e4Kristian Høgsberg * __DRIdrawable. 2416d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg * 24266175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt * For GLX_EXT_texture_from_pixmap with AIGLX. Deprecated in favor of 24366175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt * setTexBuffer2 in version 2 of this interface 2446d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg */ 2456d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg void (*setTexBuffer)(__DRIcontext *pDRICtx, 246dcbe215c015c8dc48440f578023c2b9d12b934e4Kristian Høgsberg GLint target, 247dcbe215c015c8dc48440f578023c2b9d12b934e4Kristian Høgsberg __DRIdrawable *pDraw); 24866175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt 24966175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt /** 25066175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt * Method to override base texture image with the contents of a 25166175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt * __DRIdrawable, including the required texture format attribute. 25266175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt * 25366175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt * For GLX_EXT_texture_from_pixmap with AIGLX. 25466175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt */ 25566175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt void (*setTexBuffer2)(__DRIcontext *pDRICtx, 25666175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt GLint target, 25766175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt GLint format, 25866175aac7609ad314f25fbdff0d3958af310dc24Eric Anholt __DRIdrawable *pDraw); 2596d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg}; 2606d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg 26165562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane/** 26265562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane * Used by drivers that implement DRI2 26365562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane */ 26465562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane#define __DRI2_FLUSH "DRI2_Flush" 26565562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane#define __DRI2_FLUSH_VERSION 1 26665562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihanestruct __DRI2flushExtensionRec { 26765562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane __DRIextension base; 26865562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane void (*flush)(__DRIdrawable *drawable); 26965562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane}; 27065562453fba69e862d5e3b381d18db9c40d9353cAlan Hourihane 2716d48779c7e5c9002d1bec4b1266ca05a474218efKristian Høgsberg 272a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg/** 273192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * XML document describing the configuration options supported by the 274192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * driver. 275192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 276192c988c7360d026a6f345b21acc2cdf41977915Brian Paulextern const char __driConfigOptions[]; 277192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 278192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/*@}*/ 279192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 2806cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg/** 2816cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * The following extensions describe loader features that the DRI 2826cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * driver can make use of. Some of these are mandatory, such as the 283e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * getDrawableInfo extension for DRI and the DRI Loader extensions for 2846cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * DRI2, while others are optional, and if present allow the driver to 2856cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * expose certain features. The loader pass in a NULL terminated 2866cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * array of these extensions to the driver in the createNewScreen 2876cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * constructor. 2886cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg */ 2895f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2906cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsbergtypedef struct __DRIgetDrawableInfoExtensionRec __DRIgetDrawableInfoExtension; 2916cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsbergtypedef struct __DRIsystemTimeExtensionRec __DRIsystemTimeExtension; 2926cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsbergtypedef struct __DRIdamageExtensionRec __DRIdamageExtension; 293e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergtypedef struct __DRIloaderExtensionRec __DRIloaderExtension; 294280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzistypedef struct __DRIswrastLoaderExtensionRec __DRIswrastLoaderExtension; 2955f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2965f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2976cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg/** 2986cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * Callback to getDrawableInfo protocol 2996cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg */ 3006cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg#define __DRI_GET_DRAWABLE_INFO "DRI_GetDrawableInfo" 3016cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg#define __DRI_GET_DRAWABLE_INFO_VERSION 1 3026cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsbergstruct __DRIgetDrawableInfoExtensionRec { 3036cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg __DRIextension base; 3045f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 3055f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 3065f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * This function is used to get information about the position, size, and 3075f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * clip rects of a drawable. 3085f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 3094ff95e78e19e5902352ea3759d32d9f013255f42Kristian Høgsberg GLboolean (* getDrawableInfo) ( __DRIdrawable *drawable, 310aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg unsigned int * index, unsigned int * stamp, 3115f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int * x, int * y, int * width, int * height, 3125f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int * numClipRects, drm_clip_rect_t ** pClipRects, 3135f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int * backX, int * backY, 314e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int * numBackClipRects, drm_clip_rect_t ** pBackClipRects, 315e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 3166cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg}; 3175f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 3186cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg/** 3196cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * Callback to get system time for media stream counter extensions. 3206cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg */ 3216cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg#define __DRI_SYSTEM_TIME "DRI_SystemTime" 3226cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg#define __DRI_SYSTEM_TIME_VERSION 1 3236cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsbergstruct __DRIsystemTimeExtensionRec { 3246cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg __DRIextension base; 3255f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 3265f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 3275f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Get the 64-bit unadjusted system time (UST). 3285f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 3295f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int (*getUST)(int64_t * ust); 3305f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 3315f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 3325f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Get the media stream counter (MSC) rate. 3335f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * 3345f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Matching the definition in GLX_OML_sync_control, this function returns 3355f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * the rate of the "media stream counter". In practical terms, this is 3365f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * the frame refresh rate of the display. 3375f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 338aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg GLboolean (*getMSCRate)(__DRIdrawable *draw, 339e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int32_t * numerator, int32_t * denominator, 340e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 3416cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg}; 3426cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg 3436cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg/** 3446cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg * Damage reporting 3456cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg */ 3466cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg#define __DRI_DAMAGE "DRI_Damage" 3476cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg#define __DRI_DAMAGE_VERSION 1 3486cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsbergstruct __DRIdamageExtensionRec { 3496cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg __DRIextension base; 350c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt 351c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt /** 352c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * Reports areas of the given drawable which have been modified by the 353c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * driver. 354c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * 355c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * \param drawable which the drawing was done to. 356c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * \param rects rectangles affected, with the drawable origin as the 357c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * origin. 358c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * \param x X offset of the drawable within the screen (used in the 359c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * front_buffer case) 360c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * \param y Y offset of the drawable within the screen. 361c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * \param front_buffer boolean flag for whether the drawing to the 362c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * drawable was actually done directly to the front buffer (instead 363c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * of backing storage, for example) 364e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * \param loaderPrivate the data passed in at createNewDrawable time 365c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt */ 366aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg void (*reportDamage)(__DRIdrawable *draw, 367c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt int x, int y, 368c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt drm_clip_rect_t *rects, int num_rects, 369e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg GLboolean front_buffer, 370e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 3716cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg}; 3726cb3f5c4d8618a14bb7ad1d9df10ed7e648a7b2bKristian Høgsberg 373280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis#define __DRI_SWRAST_IMAGE_OP_DRAW 1 374280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis#define __DRI_SWRAST_IMAGE_OP_CLEAR 2 375280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis#define __DRI_SWRAST_IMAGE_OP_SWAP 3 376280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 377280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis/** 378280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis * SWRast Loader extension. 379280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis */ 380280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis#define __DRI_SWRAST_LOADER "DRI_SWRastLoader" 381280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis#define __DRI_SWRAST_LOADER_VERSION 1 382280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzisstruct __DRIswrastLoaderExtensionRec { 383280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis __DRIextension base; 384280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 385280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis /* 386280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis * Drawable position and size 387280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis */ 388280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis void (*getDrawableInfo)(__DRIdrawable *drawable, 389280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis int *x, int *y, int *width, int *height, 390280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis void *loaderPrivate); 391280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 392280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis /** 393280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis * Put image to drawable 394280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis */ 395280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis void (*putImage)(__DRIdrawable *drawable, int op, 396280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis int x, int y, int width, int height, char *data, 397280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis void *loaderPrivate); 398280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 399280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis /** 400280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis * Get image from drawable 401280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis */ 402280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis void (*getImage)(__DRIdrawable *drawable, 403280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis int x, int y, int width, int height, char *data, 404280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis void *loaderPrivate); 405280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis}; 406280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 407e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/** 408e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * The remaining extensions describe driver extensions, immediately 409e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * available interfaces provided by the driver. To start using the 410e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * driver, dlsym() for the __DRI_DRIVER_EXTENSIONS symbol and look for 411e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * the extension you need in the array. 412e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg */ 413e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_DRIVER_EXTENSIONS "__driDriverExtensions" 414e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 415e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/** 416e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * Tokens for __DRIconfig attribs. A number of attributes defined by 417e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * GLX or EGL standards are not in the table, as they must be provided 418e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * by the loader. For example, FBConfig ID or visual ID, drawable type. 419e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg */ 420e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 421e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BUFFER_SIZE 1 422e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_LEVEL 2 423e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_RED_SIZE 3 424e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_GREEN_SIZE 4 425e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BLUE_SIZE 5 426e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_LUMINANCE_SIZE 6 427e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ALPHA_SIZE 7 428e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ALPHA_MASK_SIZE 8 429e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_DEPTH_SIZE 9 430e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_STENCIL_SIZE 10 431e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ACCUM_RED_SIZE 11 432e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ACCUM_GREEN_SIZE 12 433e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ACCUM_BLUE_SIZE 13 434e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ACCUM_ALPHA_SIZE 14 435e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_SAMPLE_BUFFERS 15 436e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_SAMPLES 16 437e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_RENDER_TYPE 17 438e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_CONFIG_CAVEAT 18 439e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_CONFORMANT 19 440e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_DOUBLE_BUFFER 20 441e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_STEREO 21 442e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_AUX_BUFFERS 22 443e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_TYPE 23 444e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_INDEX_VALUE 24 445e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_RED_VALUE 25 446e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_GREEN_VALUE 26 447e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_BLUE_VALUE 27 448e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_ALPHA_VALUE 28 449e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_FLOAT_MODE 29 450e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_RED_MASK 30 451e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_GREEN_MASK 31 452e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BLUE_MASK 32 453e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_ALPHA_MASK 33 454e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_MAX_PBUFFER_WIDTH 34 455e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_MAX_PBUFFER_HEIGHT 35 456e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_MAX_PBUFFER_PIXELS 36 457e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_OPTIMAL_PBUFFER_WIDTH 37 458e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_OPTIMAL_PBUFFER_HEIGHT 38 459e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_VISUAL_SELECT_GROUP 39 460e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_SWAP_METHOD 40 461e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_MAX_SWAP_INTERVAL 41 462e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_MIN_SWAP_INTERVAL 42 463e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BIND_TO_TEXTURE_RGB 43 464e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BIND_TO_TEXTURE_RGBA 44 465e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BIND_TO_MIPMAP_TEXTURE 45 466e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_BIND_TO_TEXTURE_TARGETS 46 467e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_YINVERTED 47 468e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 469e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/* __DRI_ATTRIB_RENDER_TYPE */ 470e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_RGBA_BIT 0x01 471e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_COLOR_INDEX_BIT 0x02 472e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_LUMINANCE_BIT 0x04 473e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 474e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/* __DRI_ATTRIB_CONFIG_CAVEAT */ 475e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_SLOW_BIT 0x01 476e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_NON_CONFORMANT_CONFIG 0x02 477e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 478e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/* __DRI_ATTRIB_TRANSPARENT_TYPE */ 479e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_RGB 0x00 480e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TRANSPARENT_INDEX 0x01 481e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 482e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/* __DRI_ATTRIB_BIND_TO_TEXTURE_TARGETS */ 483e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TEXTURE_1D_BIT 0x01 484e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TEXTURE_2D_BIT 0x02 485e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_ATTRIB_TEXTURE_RECTANGLE_BIT 0x04 486e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 487e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/** 488e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * This extension defines the core DRI functionality. 489e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg */ 490e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_CORE "DRI_Core" 491e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_CORE_VERSION 1 492e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 493e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergstruct __DRIcoreExtensionRec { 494e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIextension base; 495e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 496e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIscreen *(*createNewScreen)(int screen, int fd, 497e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned int sarea_handle, 498e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIextension **extensions, 499e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIconfig ***driverConfigs, 500e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 501e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 502e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void (*destroyScreen)(__DRIscreen *screen); 503e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 504e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIextension **(*getExtensions)(__DRIscreen *screen); 505e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 506e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int (*getConfigAttrib)(const __DRIconfig *config, 507e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned int attrib, 508e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned int *value); 509e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 510e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int (*indexConfigAttrib)(const __DRIconfig *config, int index, 511e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned int *attrib, unsigned int *value); 512e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 513e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen, 514e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIconfig *config, 515e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned int drawable_id, 516e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned int head, 517e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 518e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 519e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void (*destroyDrawable)(__DRIdrawable *drawable); 520e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 521e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void (*swapBuffers)(__DRIdrawable *drawable); 522e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 523e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIcontext *(*createNewContext)(__DRIscreen *screen, 524e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIconfig *config, 525e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIcontext *shared, 526e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 527e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 528e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int (*copyContext)(__DRIcontext *dest, 529e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIcontext *src, 530e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg unsigned long mask); 531e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 532e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void (*destroyContext)(__DRIcontext *context); 533e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 534e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int (*bindContext)(__DRIcontext *ctx, 535e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIdrawable *pdraw, 536e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIdrawable *pread); 537e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 538e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int (*unbindContext)(__DRIcontext *ctx); 539e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg}; 540e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 541e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg/** 542e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * Stored version of some component (i.e., server-side DRI module, kernel-side 543e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * DRM, etc.). 544e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * 545e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * \todo 546e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * There are several data structures that explicitly store a major version, 547e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * minor version, and patch level. These structures should be modified to 548e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * have a \c __DRIversionRec instead. 549e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg */ 550e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergstruct __DRIversionRec { 551e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int major; /**< Major version number. */ 552e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int minor; /**< Minor version number. */ 553e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int patch; /**< Patch-level. */ 5545f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick}; 5555f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 556192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 557192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Framebuffer information record. Used by libGL to communicate information 558192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * about the framebuffer to the driver's \c __driCreateNewScreen function. 559192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 560192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * In XFree86, most of this information is derrived from data returned by 561192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * calling \c XF86DRIGetDeviceInfo. 562192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 563192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \sa XF86DRIGetDeviceInfo __DRIdisplayRec::createNewScreen 564192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * __driUtilCreateNewScreen CallCreateNewScreen 565192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 566192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \bug This structure could be better named. 567192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 568192c988c7360d026a6f345b21acc2cdf41977915Brian Paulstruct __DRIframebufferRec { 569192c988c7360d026a6f345b21acc2cdf41977915Brian Paul unsigned char *base; /**< Framebuffer base address in the CPU's 570192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * address space. This value is calculated by 571192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * calling \c drmMap on the framebuffer handle 572192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * returned by \c XF86DRIGetDeviceInfo (or a 573192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * similar function). 574192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 575192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int size; /**< Framebuffer size, in bytes. */ 576192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int stride; /**< Number of bytes from one line to the next. */ 577192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int width; /**< Pixel width of the framebuffer. */ 578192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int height; /**< Pixel height of the framebuffer. */ 579192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int dev_priv_size; /**< Size of the driver's dev-priv structure. */ 580192c988c7360d026a6f345b21acc2cdf41977915Brian Paul void *dev_priv; /**< Pointer to the driver's dev-priv structure. */ 581192c988c7360d026a6f345b21acc2cdf41977915Brian Paul}; 582192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 583192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 584192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 585e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * This extension provides alternative screen, drawable and context 586e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * constructors for legacy DRI functionality. This is used in 587e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg * conjunction with the core extension. 588192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 589e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_LEGACY "DRI_Legacy" 590e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg#define __DRI_LEGACY_VERSION 1 591192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 592e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsbergstruct __DRIlegacyExtensionRec { 593e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIextension base; 594192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 595e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIscreen *(*createNewScreen)(int screen, 596e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIversion *ddx_version, 597e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIversion *dri_version, 598e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIversion *drm_version, 599e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIframebuffer *frame_buffer, 600e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *pSAREA, int fd, 601e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIextension **extensions, 602e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIconfig ***driver_configs, 603e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 604e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 605e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen, 606e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIconfig *config, 607e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg drm_drawable_t hwDrawable, 608e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int renderType, const int *attrs, 609e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 610e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg 611e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIcontext *(*createNewContext)(__DRIscreen *screen, 612e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg const __DRIconfig *config, 613e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg int render_type, 614e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg __DRIcontext *shared, 615e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg drm_context_t hwContext, 616e82dd8c6e1fa2fff5b960de26961080ba5e9651dKristian Høgsberg void *loaderPrivate); 617192c988c7360d026a6f345b21acc2cdf41977915Brian Paul}; 61874d563cdfbfb07cc666d60dc909e90ddb9949cbbKeith Whitwell 619280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis/** 620280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis * This extension provides alternative screen, drawable and context 621280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis * constructors for swrast DRI functionality. This is used in 622280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis * conjunction with the core extension. 623280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis */ 624280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis#define __DRI_SWRAST "DRI_SWRast" 625280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis#define __DRI_SWRAST_VERSION 1 626280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 627280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzisstruct __DRIswrastExtensionRec { 628280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis __DRIextension base; 629280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 630280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis __DRIscreen *(*createNewScreen)(int screen, 631280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis const __DRIextension **extensions, 632280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis const __DRIconfig ***driver_configs, 633280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis void *loaderPrivate); 634280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 635280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen, 636280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis const __DRIconfig *config, 637280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis void *loaderPrivate); 638280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis}; 639280bf89bd4a6bb7977abb00b88d59234d2c80844George Sapountzis 640f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg/** 641f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg * DRI2 Loader extension. 642f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg */ 643f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_FRONT_LEFT 0 644f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_BACK_LEFT 1 645f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_FRONT_RIGHT 2 646f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_BACK_RIGHT 3 647f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_DEPTH 4 648f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_STENCIL 5 649f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_BUFFER_ACCUM 6 650396711b840683809565507e47a4311e5b7503ef2Alan Hourihane#define __DRI_BUFFER_FAKE_FRONT_LEFT 7 651396711b840683809565507e47a4311e5b7503ef2Alan Hourihane#define __DRI_BUFFER_FAKE_FRONT_RIGHT 8 652dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick#define __DRI_BUFFER_DEPTH_STENCIL 9 /**< Only available with DRI2 1.1 */ 653f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 654f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsbergstruct __DRIbufferRec { 655f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg unsigned int attachment; 656f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg unsigned int name; 657f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg unsigned int pitch; 658f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg unsigned int cpp; 659f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg unsigned int flags; 660f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg}; 661f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 662f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_DRI2_LOADER "DRI_DRI2Loader" 663dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick#define __DRI_DRI2_LOADER_VERSION 3 664f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsbergstruct __DRIdri2LoaderExtensionRec { 665f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIextension base; 666f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 667f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIbuffer *(*getBuffers)(__DRIdrawable *driDrawable, 668f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg int *width, int *height, 669f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg unsigned int *attachments, int count, 670f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg int *out_count, void *loaderPrivate); 67182634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick 67282634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick /** 67382634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * Flush pending front-buffer rendering 67482634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * 67582634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * Any rendering that has been performed to the 67682634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * \c __DRI_BUFFER_FAKE_FRONT_LEFT will be flushed to the 67782634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * \c __DRI_BUFFER_FRONT_LEFT. 67882634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * 67982634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * \param driDrawable Drawable whose front-buffer is to be flushed 68082634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * \param loaderPrivate Loader's private data that was previously passed 68182634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick * into __DRIdri2ExtensionRec::createNewDrawable 68282634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick */ 68382634ee8df7328b9235abd8352d33b0b3d953600Ian Romanick void (*flushFrontBuffer)(__DRIdrawable *driDrawable, void *loaderPrivate); 684dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick 685dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick 686dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick /** 687dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * Get list of buffers from the server 688dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * 689dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * Gets a list of buffer for the specified set of attachments. Unlike 690dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \c ::getBuffers, this function takes a list of attachments paired with 691dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * opaque \c unsigned \c int value describing the format of the buffer. 692dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * It is the responsibility of the caller to know what the service that 693dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * allocates the buffers will expect to receive for the format. 694dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * 695dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \param driDrawable Drawable whose buffers are being queried. 696dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \param width Output where the width of the buffers is stored. 697dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \param height Output where the height of the buffers is stored. 698dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \param attachments List of pairs of attachment ID and opaque format 699dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * requested for the drawable. 700dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \param count Number of attachment / format pairs stored in 701dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \c attachments. 702dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * \param loaderPrivate Loader's private data that was previously passed 703dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick * into __DRIdri2ExtensionRec::createNewDrawable. 704dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick */ 705dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick __DRIbuffer *(*getBuffersWithFormat)(__DRIdrawable *driDrawable, 706dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick int *width, int *height, 707dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick unsigned int *attachments, int count, 708dbf87f23126cc869637575e9ea2cb58774efe888Ian Romanick int *out_count, void *loaderPrivate); 709f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg}; 710f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 711f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg/** 712f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg * This extension provides alternative screen, drawable and context 713f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg * constructors for DRI2. 714f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg */ 715f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_DRI2 "DRI_DRI2" 716f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg#define __DRI_DRI2_VERSION 1 717f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 718f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsbergstruct __DRIdri2ExtensionRec { 719f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIextension base; 720f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 721f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIscreen *(*createNewScreen)(int screen, int fd, 722f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg const __DRIextension **extensions, 723f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg const __DRIconfig ***driver_configs, 724f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg void *loaderPrivate); 725f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 726f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIdrawable *(*createNewDrawable)(__DRIscreen *screen, 727f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg const __DRIconfig *config, 728f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg void *loaderPrivate); 729f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 730f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIcontext *(*createNewContext)(__DRIscreen *screen, 731f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg const __DRIconfig *config, 732f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg __DRIcontext *shared, 733f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg void *loaderPrivate); 734f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 735f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg}; 736f56b569e9af356c11869ee49a4669bb01b75397eKristian Høgsberg 73774d563cdfbfb07cc666d60dc909e90ddb9949cbbKeith Whitwell#endif 738