dri_interface.h revision f29f0ae8383888a6493b615edc3bab254cf6df39
1192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/* 2192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. 3192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * (C) Copyright IBM Corporation 2004 4192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * All Rights Reserved. 5192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 6192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Permission is hereby granted, free of charge, to any person obtaining a 7192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * copy of this software and associated documentation files (the "Software"), 8192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * to deal in the Software without restriction, including without limitation 9192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * on the rights to use, copy, modify, merge, publish, distribute, sub 10192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * license, and/or sell copies of the Software, and to permit persons to whom 11192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * the Software is furnished to do so, subject to the following conditions: 12192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 13192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * The above copyright notice and this permission notice (including the next 14192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * paragraph) shall be included in all copies or substantial portions of the 15192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Software. 16192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 17192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 20192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * THE COPYRIGHT HOLDERS AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 21192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 22192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 23192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * USE OR OTHER DEALINGS IN THE SOFTWARE. 24192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 25192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 26192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 27192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \file dri_interface.h 28192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 29192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * This file contains all the types and functions that define the interface 30192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * between a DRI driver and driver loader. Currently, the most common driver 31192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * loader is the XFree86 libGL.so. However, other loaders do exist, and in 32192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * the future the server-side libglx.a will also be a loader. 33192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 34192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \author Kevin E. Martin <kevin@precisioninsight.com> 35192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \author Ian Romanick <idr@us.ibm.com> 36192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 37192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 3874d563cdfbfb07cc666d60dc909e90ddb9949cbbKeith Whitwell#ifndef DRI_INTERFACE_H 3974d563cdfbfb07cc666d60dc909e90ddb9949cbbKeith Whitwell#define DRI_INTERFACE_H 4074d563cdfbfb07cc666d60dc909e90ddb9949cbbKeith Whitwell 41192c988c7360d026a6f345b21acc2cdf41977915Brian Paul#include <GL/internal/glcore.h> 42fabe2b9ba38e95bd21a35b265bfc403fa3cb2883Ian Romanick#include <drm.h> 43192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 44192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 45192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \name DRI interface structures 46192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 47192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * The following structures define the interface between the GLX client 48192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * side library and the DRI (direct rendering infrastructure). 49192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 50192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/*@{*/ 514a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsbergtypedef struct __DRIdisplayRec __DRIdisplay; 524a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsbergtypedef struct __DRIscreenRec __DRIscreen; 534a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsbergtypedef struct __DRIcontextRec __DRIcontext; 544a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsbergtypedef struct __DRIdrawableRec __DRIdrawable; 554a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsbergtypedef struct __DRIdriverRec __DRIdriver; 564a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsbergtypedef struct __DRIframebufferRec __DRIframebuffer; 574a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsbergtypedef struct __DRIversionRec __DRIversion; 584a22ae8d446855d839cc199df8eb1b057045cb88Kristian Høgsbergtypedef struct __DRIinterfaceMethodsRec __DRIinterfaceMethods; 59f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg 6078a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsbergtypedef struct __DRIextensionRec __DRIextension; 61ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsbergtypedef struct __DRIcopySubBufferExtensionRec __DRIcopySubBufferExtension; 62efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsbergtypedef struct __DRIswapControlExtensionRec __DRIswapControlExtension; 6378a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsbergtypedef struct __DRIallocateExtensionRec __DRIallocateExtension; 64a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsbergtypedef struct __DRIframeTrackingExtensionRec __DRIframeTrackingExtension; 65106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsbergtypedef struct __DRImediaStreamCounterExtensionRec __DRImediaStreamCounterExtension; 66f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsbergtypedef struct __DRItexOffsetExtensionRec __DRItexOffsetExtension; 67192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/*@}*/ 68192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 69192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 70192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 71f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg * Extension struct. Drivers 'inherit' from this struct by embedding 72f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg * it as the first element in the extension struct. The 73f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg * __DRIscreen::getExtensions entry point will return a list of these 74f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg * structs and the loader can use the extensions it knows about by 75f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg * casting it to a more specific extension and optionally advertising 76f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg * the GLX extension. See below for examples. 77f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg */ 78f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsbergstruct __DRIextensionRec { 79f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg const char *name; 80f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg}; 81f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg 82ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg/** 83f968f67e6214416f04b8875ce59a94a02f464c81Kristian Høgsberg * Used by drivers to indicate support for setting the read drawable. 84f968f67e6214416f04b8875ce59a94a02f464c81Kristian Høgsberg */ 85f968f67e6214416f04b8875ce59a94a02f464c81Kristian Høgsberg#define __DRI_READ_DRAWABLE "DRI_ReadDrawable" 86f968f67e6214416f04b8875ce59a94a02f464c81Kristian Høgsberg 87f968f67e6214416f04b8875ce59a94a02f464c81Kristian Høgsberg/** 88ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg * Used by drivers that implement the GLX_MESA_copy_sub_buffer extension. 89ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg */ 90ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg#define __DRI_COPY_SUB_BUFFER "DRI_CopySubBuffer" 91ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsbergstruct __DRIcopySubBufferExtensionRec { 92ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg __DRIextension base; 93ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg void (*copySubBuffer)(__DRIdrawable *drawable, int x, int y, int w, int h); 94ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg}; 95ac3e838fa748c8c8a6ffc04d1ab13da71f75f103Kristian Høgsberg 96efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg/** 97efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg * Used by drivers that implement the GLX_SGI_swap_control or 98efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg * GLX_MESA_swap_control extension. 99efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg */ 100efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg#define __DRI_SWAP_CONTROL "DRI_SwapControl" 101efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsbergstruct __DRIswapControlExtensionRec { 102efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg __DRIextension base; 103efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg void (*setSwapInterval)(__DRIdrawable *drawable, unsigned int inteval); 104efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg unsigned int (*getSwapInterval)(__DRIdrawable *drawable); 105efaf90b03e8b69e04909bce071f8ef6b65cc0e9dKristian Høgsberg}; 106f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg 107f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg/** 10878a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg * Used by drivers that implement the GLX_MESA_allocate_memory. 10978a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg */ 11078a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg#define __DRI_ALLOCATE "DRI_Allocate" 11178a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsbergstruct __DRIallocateExtensionRec { 11278a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg __DRIextension base; 11378a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg 11478a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg void *(*allocateMemory)(__DRIscreen *screen, GLsizei size, 11578a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg GLfloat readfreq, GLfloat writefreq, 11678a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg GLfloat priority); 11778a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg 11878a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg void (*freeMemory)(__DRIscreen *screen, GLvoid *pointer); 11978a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg 12078a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg GLuint (*memoryOffset)(__DRIscreen *screen, const GLvoid *pointer); 12178a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg}; 12278a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg 12378a6aa57a0155d72280dd91c05513c847bf76f3bKristian Høgsberg/** 124a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * Used by drivers that implement the GLX_MESA_swap_frame_usage extension. 125a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg */ 126a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg#define __DRI_FRAME_TRACKING "DRI_FrameTracking" 127a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsbergstruct __DRIframeTrackingExtensionRec { 128a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg __DRIextension base; 129a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg 130a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg /** 131a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * Enable or disable frame usage tracking. 132a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * 133a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * \since Internal API version 20030317. 134a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg */ 135a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg int (*frameTracking)(__DRIdrawable *drawable, GLboolean enable); 136a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg 137a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg /** 138a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * Retrieve frame usage information. 139a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * 140a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg * \since Internal API version 20030317. 141a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg */ 142a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg int (*queryFrameTracking)(__DRIdrawable *drawable, 143a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg int64_t * sbc, int64_t * missedFrames, 144a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg float * lastMissedUsage, float * usage); 145a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg}; 146a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg 147106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg 148106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg/** 149106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * Used by drivers that implement the GLX_SGI_video_sync extension. 150106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg */ 151106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg#define __DRI_MEDIA_STREAM_COUNTER "DRI_MediaStreamCounter" 152106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsbergstruct __DRImediaStreamCounterExtensionRec { 153106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg __DRIextension base; 154106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg 155106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg /** 156106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * Get the number of vertical refreshes since some point in time before 157106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * this function was first called (i.e., system start up). 158106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg */ 159106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg int (*getMSC)(__DRIscreen *screen, int64_t *msc); 160106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg 161106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg /** 162106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * Wait for the MSC to equal target_msc, or, if that has already passed, 163106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * the next time (MSC % divisor) is equal to remainder. If divisor is 164106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * zero, the function will return as soon as MSC is greater than or equal 165106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg * to target_msc. 166106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg */ 167106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg int (*waitForMSC)(__DRIdrawable *drawable, 168106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg int64_t target_msc, int64_t divisor, int64_t remainder, 169106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg int64_t * msc, int64_t * sbc); 170106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg}; 171106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg 172106a6f29bbdc71982afd629bdf89369cefd1459eKristian Høgsberg 173f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg#define __DRI_TEX_OFFSET "DRI_TexOffset" 174f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsbergstruct __DRItexOffsetExtensionRec { 175f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg __DRIextension base; 176f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg 177f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg /** 178f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg * Method to override base texture image with a driver specific 'offset'. 179f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg * The depth passed in allows e.g. to ignore the alpha channel of texture 180f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg * images where the non-alpha components don't occupy a whole texel. 181f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg * 182f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg * For GLX_EXT_texture_from_pixmap with AIGLX. 183f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg */ 184f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg void (*setTexOffset)(__DRIcontext *pDRICtx, GLint texname, 185f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg unsigned long long offset, GLint depth, GLuint pitch); 186f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg}; 187f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg 188f29f0ae8383888a6493b615edc3bab254cf6df39Kristian Høgsberg 189a7a0a2beb54dcb78d7e0ab64cf2f5a6ede8191a4Kristian Høgsberg/** 190b42152061c50e870dc2698ea1d860980ce1198b1Kristian Høgsberg * Macros for building symbol and strings. Standard CPP two step... 191b42152061c50e870dc2698ea1d860980ce1198b1Kristian Høgsberg */ 192b42152061c50e870dc2698ea1d860980ce1198b1Kristian Høgsberg 193b42152061c50e870dc2698ea1d860980ce1198b1Kristian Høgsberg#define __DRI_REAL_STRINGIFY(x) # x 194b42152061c50e870dc2698ea1d860980ce1198b1Kristian Høgsberg#define __DRI_STRINGIFY(x) __DRI_REAL_STRINGIFY(x) 195b42152061c50e870dc2698ea1d860980ce1198b1Kristian Høgsberg#define __DRI_REAL_MAKE_VERSION(name, version) name ## _ ## version 196b42152061c50e870dc2698ea1d860980ce1198b1Kristian Høgsberg#define __DRI_MAKE_VERSION(name, version) __DRI_REAL_MAKE_VERSION(name, version) 197b42152061c50e870dc2698ea1d860980ce1198b1Kristian Høgsberg 198b42152061c50e870dc2698ea1d860980ce1198b1Kristian Høgsberg#define __DRI_CREATE_NEW_SCREEN \ 199b42152061c50e870dc2698ea1d860980ce1198b1Kristian Høgsberg __DRI_MAKE_VERSION(__driCreateNewScreen, __DRI_INTERFACE_VERSION) 200b42152061c50e870dc2698ea1d860980ce1198b1Kristian Høgsberg 201b42152061c50e870dc2698ea1d860980ce1198b1Kristian Høgsberg#define __DRI_CREATE_NEW_SCREEN_STRING \ 202b42152061c50e870dc2698ea1d860980ce1198b1Kristian Høgsberg __DRI_STRINGIFY(__DRI_CREATE_NEW_SCREEN) 203b42152061c50e870dc2698ea1d860980ce1198b1Kristian Høgsberg 204b42152061c50e870dc2698ea1d860980ce1198b1Kristian Høgsberg/** 205192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \name Functions and data provided by the driver. 206192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 207192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/*@{*/ 208192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 209b42152061c50e870dc2698ea1d860980ce1198b1Kristian Høgsberg#define __DRI_INTERFACE_VERSION 20070105 210b42152061c50e870dc2698ea1d860980ce1198b1Kristian Høgsberg 211aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsbergtypedef void *(CREATENEWSCREENFUNC)(int scr, __DRIscreen *psc, 212c2bffec91a5b6ba72514c875b70dbc96ac97431dJon Smirl const __DRIversion * ddx_version, const __DRIversion * dri_version, 213c2bffec91a5b6ba72514c875b70dbc96ac97431dJon Smirl const __DRIversion * drm_version, const __DRIframebuffer * frame_buffer, 214c2bffec91a5b6ba72514c875b70dbc96ac97431dJon Smirl void * pSAREA, int fd, int internal_api_version, 2155f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick const __DRIinterfaceMethods * interface, 216c2bffec91a5b6ba72514c875b70dbc96ac97431dJon Smirl __GLcontextModes ** driver_modes); 217c2bffec91a5b6ba72514c875b70dbc96ac97431dJon Smirltypedef CREATENEWSCREENFUNC* PFNCREATENEWSCREENFUNC; 218b42152061c50e870dc2698ea1d860980ce1198b1Kristian Høgsbergextern CREATENEWSCREENFUNC __DRI_CREATE_NEW_SCREEN; 219b42152061c50e870dc2698ea1d860980ce1198b1Kristian Høgsberg 220192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 221192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 222192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 223192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * XML document describing the configuration options supported by the 224192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * driver. 225192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 226192c988c7360d026a6f345b21acc2cdf41977915Brian Paulextern const char __driConfigOptions[]; 227192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 228192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/*@}*/ 229192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 230192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 231192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 232192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Stored version of some component (i.e., server-side DRI module, kernel-side 233192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * DRM, etc.). 234192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 235192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \todo 236192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * There are several data structures that explicitly store a major version, 237192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * minor version, and patch level. These structures should be modified to 238192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * have a \c __DRIversionRec instead. 239192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 240192c988c7360d026a6f345b21acc2cdf41977915Brian Paulstruct __DRIversionRec { 241192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int major; /**< Major version number. */ 242192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int minor; /**< Minor version number. */ 243192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int patch; /**< Patch-level. */ 244192c988c7360d026a6f345b21acc2cdf41977915Brian Paul}; 245192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 2465f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2475f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanicktypedef void (*__DRIfuncPtr)(void); 2485f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2495f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanickstruct __DRIinterfaceMethodsRec { 2505f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 2515f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Create a list of \c __GLcontextModes structures. 2525f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 2535f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick __GLcontextModes * (*createContextModes)(unsigned count, 2545f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick size_t minimum_bytes_per_struct); 2555f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2565f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 2575f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Destroy a list of \c __GLcontextModes structures. 2585f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * 2595f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * \todo 2605f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Determine if the drivers actually need to call this. 2615f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 2625f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick void (*destroyContextModes)( __GLcontextModes * modes ); 2635f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2645f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2655f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 2665f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * \name Client/server protocol functions. 2675f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * 2685f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * These functions implement the DRI client/server protocol for 2695f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * context and drawable operations. Platforms that do not implement 2705f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * the wire protocol (e.g., EGL) will implement glorified no-op functions. 2715f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 2725f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /*@{*/ 2735f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2745f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 2755f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * This function is used to get information about the position, size, and 2765f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * clip rects of a drawable. 2775f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 2784ff95e78e19e5902352ea3759d32d9f013255f42Kristian Høgsberg GLboolean (* getDrawableInfo) ( __DRIdrawable *drawable, 279aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg unsigned int * index, unsigned int * stamp, 2805f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int * x, int * y, int * width, int * height, 2815f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int * numClipRects, drm_clip_rect_t ** pClipRects, 2825f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int * backX, int * backY, 2835f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int * numBackClipRects, drm_clip_rect_t ** pBackClipRects ); 2845f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /*@}*/ 2855f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2865f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2875f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 2885f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * \name Timing related functions. 2895f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 2905f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /*@{*/ 2915f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 2925f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Get the 64-bit unadjusted system time (UST). 2935f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 2945f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick int (*getUST)(int64_t * ust); 2955f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 2965f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /** 2975f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Get the media stream counter (MSC) rate. 2985f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * 2995f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * Matching the definition in GLX_OML_sync_control, this function returns 3005f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * the rate of the "media stream counter". In practical terms, this is 3015f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick * the frame refresh rate of the display. 3025f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick */ 303aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg GLboolean (*getMSCRate)(__DRIdrawable *draw, 304aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg int32_t * numerator, int32_t * denominator); 3055f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick /*@}*/ 306c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt 307c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt /** 308c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * Reports areas of the given drawable which have been modified by the 309c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * driver. 310c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * 311c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * \param drawable which the drawing was done to. 312c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * \param rects rectangles affected, with the drawable origin as the 313c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * origin. 314c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * \param x X offset of the drawable within the screen (used in the 315c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * front_buffer case) 316c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * \param y Y offset of the drawable within the screen. 317c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * \param front_buffer boolean flag for whether the drawing to the 318c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * drawable was actually done directly to the front buffer (instead 319c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt * of backing storage, for example) 320c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt */ 321aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg void (*reportDamage)(__DRIdrawable *draw, 322c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt int x, int y, 323c2b185cff82a6cdb723cda4e05ffe1a213a9de3eEric Anholt drm_clip_rect_t *rects, int num_rects, 324aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg GLboolean front_buffer); 3255f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick}; 3265f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 3275f1ba3e21b62cee1a4f900a2e6964728f3eeea9bIan Romanick 328192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 329192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Framebuffer information record. Used by libGL to communicate information 330192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * about the framebuffer to the driver's \c __driCreateNewScreen function. 331192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 332192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * In XFree86, most of this information is derrived from data returned by 333192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * calling \c XF86DRIGetDeviceInfo. 334192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 335192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \sa XF86DRIGetDeviceInfo __DRIdisplayRec::createNewScreen 336192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * __driUtilCreateNewScreen CallCreateNewScreen 337192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 338192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \bug This structure could be better named. 339192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 340192c988c7360d026a6f345b21acc2cdf41977915Brian Paulstruct __DRIframebufferRec { 341192c988c7360d026a6f345b21acc2cdf41977915Brian Paul unsigned char *base; /**< Framebuffer base address in the CPU's 342192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * address space. This value is calculated by 343192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * calling \c drmMap on the framebuffer handle 344192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * returned by \c XF86DRIGetDeviceInfo (or a 345192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * similar function). 346192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 347192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int size; /**< Framebuffer size, in bytes. */ 348192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int stride; /**< Number of bytes from one line to the next. */ 349192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int width; /**< Pixel width of the framebuffer. */ 350192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int height; /**< Pixel height of the framebuffer. */ 351192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int dev_priv_size; /**< Size of the driver's dev-priv structure. */ 352192c988c7360d026a6f345b21acc2cdf41977915Brian Paul void *dev_priv; /**< Pointer to the driver's dev-priv structure. */ 353192c988c7360d026a6f345b21acc2cdf41977915Brian Paul}; 354192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 355192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 356192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 357192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Screen dependent methods. This structure is initialized during the 358192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \c __DRIdisplayRec::createScreen call. 359192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 360192c988c7360d026a6f345b21acc2cdf41977915Brian Paulstruct __DRIscreenRec { 361192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 362192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Method to destroy the private DRI screen data. 363192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 3645987a03f994af2bb413d1cf984ab01aa095c0943Kristian Høgsberg void (*destroyScreen)(__DRIscreen *screen); 365192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 366192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 367f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg * Method to get screen extensions. 368f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg */ 369f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg const __DRIextension **(*getExtensions)(__DRIscreen *screen); 370f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg 371f616a263a25eda135800bea7d3a863c569b93e30Kristian Høgsberg /** 372192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Method to create the private DRI drawable data and initialize the 373192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * drawable dependent methods. 374192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 375aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg void *(*createNewDrawable)(__DRIscreen *screen, 376aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg const __GLcontextModes *modes, 3774ff95e78e19e5902352ea3759d32d9f013255f42Kristian Høgsberg __DRIdrawable *pdraw, 3784ff95e78e19e5902352ea3759d32d9f013255f42Kristian Høgsberg drm_drawable_t hwDrawable, 379192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int renderType, const int *attrs); 380192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 381192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 382192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Opaque pointer to private per screen direct rendering data. \c NULL 383192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * if direct rendering is not supported on this screen. Never 384192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * dereferenced in libGL. 385192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 386192c988c7360d026a6f345b21acc2cdf41977915Brian Paul void *private; 387192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 388192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 389192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Method to create the private DRI context data and initialize the 390192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * context dependent methods. 391192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 392192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \since Internal API version 20031201. 393192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 394aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg void * (*createNewContext)(__DRIscreen *screen, 395aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg const __GLcontextModes *modes, 396192c988c7360d026a6f345b21acc2cdf41977915Brian Paul int render_type, 397ecdb45cb29e3209287cc297081596126e955ff2bKristian Høgsberg __DRIcontext *shared, 3988ed5c7ca0572a09375bdfd411c3804456dac78d6Kristian Høgsberg drm_context_t hwContext, __DRIcontext *pctx); 399192c988c7360d026a6f345b21acc2cdf41977915Brian Paul}; 400192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 401192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 402192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Context dependent methods. This structure is initialized during the 403192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \c __DRIscreenRec::createContext call. 404192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 405192c988c7360d026a6f345b21acc2cdf41977915Brian Paulstruct __DRIcontextRec { 406192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 407192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Method to destroy the private DRI context data. 408192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 4095987a03f994af2bb413d1cf984ab01aa095c0943Kristian Høgsberg void (*destroyContext)(__DRIcontext *context); 410192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 411192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 412192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Opaque pointer to private per context direct rendering data. 413192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \c NULL if direct rendering is not supported on the display or 414192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * screen used to create this context. Never dereferenced in libGL. 415192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 416192c988c7360d026a6f345b21acc2cdf41977915Brian Paul void *private; 417192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 418192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 419192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Method to bind a DRI drawable to a DRI graphics context. 420192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 4211585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick * \since Internal API version 20050727. 422192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 4235987a03f994af2bb413d1cf984ab01aa095c0943Kristian Høgsberg GLboolean (*bindContext)(__DRIcontext *ctx, 4245987a03f994af2bb413d1cf984ab01aa095c0943Kristian Høgsberg __DRIdrawable *pdraw, 4255987a03f994af2bb413d1cf984ab01aa095c0943Kristian Høgsberg __DRIdrawable *pread); 426192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 427192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 428192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Method to unbind a DRI drawable from a DRI graphics context. 429192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * 4301585c234e0db4bfb7cd85c4111594f6da1582e6fIan Romanick * \since Internal API version 20050727. 431192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 432aceccda56b08338e217991e54607f1c9f18fc3e6Kristian Høgsberg GLboolean (*unbindContext)(__DRIcontext *ctx); 433192c988c7360d026a6f345b21acc2cdf41977915Brian Paul}; 434192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 435192c988c7360d026a6f345b21acc2cdf41977915Brian Paul/** 436192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Drawable dependent methods. This structure is initialized during the 437192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \c __DRIscreenRec::createDrawable call. \c createDrawable is not called 438192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * by libGL at this time. It's currently used via the dri_util.c utility code 439192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * instead. 440192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 441192c988c7360d026a6f345b21acc2cdf41977915Brian Paulstruct __DRIdrawableRec { 442192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 443192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Method to destroy the private DRI drawable data. 444192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 4455987a03f994af2bb413d1cf984ab01aa095c0943Kristian Høgsberg void (*destroyDrawable)(__DRIdrawable *drawable); 446192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 447192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 448192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Method to swap the front and back buffers. 449192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 4505987a03f994af2bb413d1cf984ab01aa095c0943Kristian Høgsberg void (*swapBuffers)(__DRIdrawable *drawable); 451192c988c7360d026a6f345b21acc2cdf41977915Brian Paul 452192c988c7360d026a6f345b21acc2cdf41977915Brian Paul /** 453192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * Opaque pointer to private per drawable direct rendering data. 454192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * \c NULL if direct rendering is not supported on the display or 455192c988c7360d026a6f345b21acc2cdf41977915Brian Paul * screen used to create this drawable. Never dereferenced in libGL. 456192c988c7360d026a6f345b21acc2cdf41977915Brian Paul */ 457192c988c7360d026a6f345b21acc2cdf41977915Brian Paul void *private; 458192c988c7360d026a6f345b21acc2cdf41977915Brian Paul}; 45974d563cdfbfb07cc666d60dc909e90ddb9949cbbKeith Whitwell 46074d563cdfbfb07cc666d60dc909e90ddb9949cbbKeith Whitwell#endif 461