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