1*4882a593Smuzhiyun /************************************************************************** 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. 4*4882a593Smuzhiyun All Rights Reserved. 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun Permission is hereby granted, free of charge, to any person obtaining a 7*4882a593Smuzhiyun copy of this software and associated documentation files (the 8*4882a593Smuzhiyun "Software"), to deal in the Software without restriction, including 9*4882a593Smuzhiyun without limitation the rights to use, copy, modify, merge, publish, 10*4882a593Smuzhiyun distribute, sub license, and/or sell copies of the Software, and to 11*4882a593Smuzhiyun permit persons to whom the Software is furnished to do so, subject to 12*4882a593Smuzhiyun the following conditions: 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun The above copyright notice and this permission notice (including the 15*4882a593Smuzhiyun next paragraph) shall be included in all copies or substantial portions 16*4882a593Smuzhiyun of the Software. 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19*4882a593Smuzhiyun OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20*4882a593Smuzhiyun MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21*4882a593Smuzhiyun IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR 22*4882a593Smuzhiyun ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23*4882a593Smuzhiyun TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24*4882a593Smuzhiyun SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun **************************************************************************/ 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun /* 29*4882a593Smuzhiyun * Authors: 30*4882a593Smuzhiyun * Jens Owen <jens@tungstengraphics.com> 31*4882a593Smuzhiyun * 32*4882a593Smuzhiyun */ 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun /* Prototypes for DRI functions */ 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun #ifndef _DRI_H_ 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun #include <pciaccess.h> 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun #include "scrnintstr.h" 41*4882a593Smuzhiyun #include "xf86dri.h" 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun typedef int DRISyncType; 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun #define DRI_NO_SYNC 0 46*4882a593Smuzhiyun #define DRI_2D_SYNC 1 47*4882a593Smuzhiyun #define DRI_3D_SYNC 2 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun typedef int DRIContextType; 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun typedef struct _DRIContextPrivRec DRIContextPrivRec, *DRIContextPrivPtr; 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun typedef enum _DRIContextFlags { 54*4882a593Smuzhiyun DRI_CONTEXT_2DONLY = 0x01, 55*4882a593Smuzhiyun DRI_CONTEXT_PRESERVED = 0x02, 56*4882a593Smuzhiyun DRI_CONTEXT_RESERVED = 0x04 /* DRI Only -- no kernel equivalent */ 57*4882a593Smuzhiyun } DRIContextFlags; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun #define DRI_NO_CONTEXT 0 60*4882a593Smuzhiyun #define DRI_2D_CONTEXT 1 61*4882a593Smuzhiyun #define DRI_3D_CONTEXT 2 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun typedef int DRISwapMethod; 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun #define DRI_HIDE_X_CONTEXT 0 66*4882a593Smuzhiyun #define DRI_SERVER_SWAP 1 67*4882a593Smuzhiyun #define DRI_KERNEL_SWAP 2 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun typedef int DRIWindowRequests; 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun #define DRI_NO_WINDOWS 0 72*4882a593Smuzhiyun #define DRI_3D_WINDOWS_ONLY 1 73*4882a593Smuzhiyun #define DRI_ALL_WINDOWS 2 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun typedef void (*ClipNotifyPtr) (WindowPtr, int, int); 76*4882a593Smuzhiyun typedef void (*AdjustFramePtr) (ScrnInfoPtr pScrn, int x, int y); 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun /* 79*4882a593Smuzhiyun * These functions can be wrapped by the DRI. Each of these have 80*4882a593Smuzhiyun * generic default funcs (initialized in DRICreateInfoRec) and can be 81*4882a593Smuzhiyun * overridden by the driver in its [driver]DRIScreenInit function. 82*4882a593Smuzhiyun */ 83*4882a593Smuzhiyun typedef struct { 84*4882a593Smuzhiyun ScreenWakeupHandlerProcPtr WakeupHandler; 85*4882a593Smuzhiyun ScreenBlockHandlerProcPtr BlockHandler; 86*4882a593Smuzhiyun WindowExposuresProcPtr WindowExposures; 87*4882a593Smuzhiyun CopyWindowProcPtr CopyWindow; 88*4882a593Smuzhiyun ClipNotifyProcPtr ClipNotify; 89*4882a593Smuzhiyun AdjustFramePtr AdjustFrame; 90*4882a593Smuzhiyun } DRIWrappedFuncsRec, *DRIWrappedFuncsPtr; 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun /* 93*4882a593Smuzhiyun * Prior to Xorg 6.8.99.8, the DRIInfoRec structure was implicitly versioned 94*4882a593Smuzhiyun * by the XF86DRI_*_VERSION defines in xf86dristr.h. These numbers were also 95*4882a593Smuzhiyun * being used to version the XFree86-DRI protocol. Bugs #3066 and #3163 96*4882a593Smuzhiyun * showed that this was inadequate. The DRIInfoRec structure is now versioned 97*4882a593Smuzhiyun * by the DRIINFO_*_VERSION defines in this file. - ajax, 2005-05-18. 98*4882a593Smuzhiyun * 99*4882a593Smuzhiyun * Revision history: 100*4882a593Smuzhiyun * 4.1.0 and earlier: DRIQueryVersion returns XF86DRI_*_VERSION. 101*4882a593Smuzhiyun * 4.2.0: DRIQueryVersion begins returning DRIINFO_*_VERSION. 102*4882a593Smuzhiyun * 5.0.0: frameBufferPhysicalAddress changed from CARD32 to pointer. 103*4882a593Smuzhiyun */ 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun #define DRIINFO_MAJOR_VERSION 5 106*4882a593Smuzhiyun #define DRIINFO_MINOR_VERSION 4 107*4882a593Smuzhiyun #define DRIINFO_PATCH_VERSION 0 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun typedef unsigned long long (*DRITexOffsetStartProcPtr) (PixmapPtr pPix); 110*4882a593Smuzhiyun typedef void (*DRITexOffsetFinishProcPtr) (PixmapPtr pPix); 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun typedef struct { 113*4882a593Smuzhiyun /* driver call back functions 114*4882a593Smuzhiyun * 115*4882a593Smuzhiyun * New fields should be added at the end for backwards compatibility. 116*4882a593Smuzhiyun * Bump the DRIINFO patch number to indicate bugfixes. 117*4882a593Smuzhiyun * Bump the DRIINFO minor number to indicate new fields. 118*4882a593Smuzhiyun * Bump the DRIINFO major number to indicate binary-incompatible changes. 119*4882a593Smuzhiyun */ 120*4882a593Smuzhiyun Bool (*CreateContext) (ScreenPtr pScreen, 121*4882a593Smuzhiyun VisualPtr visual, 122*4882a593Smuzhiyun drm_context_t hHWContext, 123*4882a593Smuzhiyun void *pVisualConfigPriv, DRIContextType context); 124*4882a593Smuzhiyun void (*DestroyContext) (ScreenPtr pScreen, 125*4882a593Smuzhiyun drm_context_t hHWContext, DRIContextType context); 126*4882a593Smuzhiyun void (*SwapContext) (ScreenPtr pScreen, 127*4882a593Smuzhiyun DRISyncType syncType, 128*4882a593Smuzhiyun DRIContextType readContextType, 129*4882a593Smuzhiyun void *readContextStore, 130*4882a593Smuzhiyun DRIContextType writeContextType, 131*4882a593Smuzhiyun void *writeContextStore); 132*4882a593Smuzhiyun void (*InitBuffers) (WindowPtr pWin, RegionPtr prgn, CARD32 indx); 133*4882a593Smuzhiyun void (*MoveBuffers) (WindowPtr pWin, 134*4882a593Smuzhiyun DDXPointRec ptOldOrg, RegionPtr prgnSrc, CARD32 indx); 135*4882a593Smuzhiyun void (*TransitionTo3d) (ScreenPtr pScreen); 136*4882a593Smuzhiyun void (*TransitionTo2d) (ScreenPtr pScreen); 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun void (*SetDrawableIndex) (WindowPtr pWin, CARD32 indx); 139*4882a593Smuzhiyun Bool (*OpenFullScreen) (ScreenPtr pScreen); 140*4882a593Smuzhiyun Bool (*CloseFullScreen) (ScreenPtr pScreen); 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun /* wrapped functions */ 143*4882a593Smuzhiyun DRIWrappedFuncsRec wrap; 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun /* device info */ 146*4882a593Smuzhiyun char *drmDriverName; 147*4882a593Smuzhiyun char *clientDriverName; 148*4882a593Smuzhiyun char *busIdString; 149*4882a593Smuzhiyun int ddxDriverMajorVersion; 150*4882a593Smuzhiyun int ddxDriverMinorVersion; 151*4882a593Smuzhiyun int ddxDriverPatchVersion; 152*4882a593Smuzhiyun void *frameBufferPhysicalAddress; 153*4882a593Smuzhiyun long frameBufferSize; 154*4882a593Smuzhiyun long frameBufferStride; 155*4882a593Smuzhiyun long SAREASize; 156*4882a593Smuzhiyun int maxDrawableTableEntry; 157*4882a593Smuzhiyun int ddxDrawableTableEntry; 158*4882a593Smuzhiyun long contextSize; 159*4882a593Smuzhiyun DRISwapMethod driverSwapMethod; 160*4882a593Smuzhiyun DRIWindowRequests bufferRequests; 161*4882a593Smuzhiyun int devPrivateSize; 162*4882a593Smuzhiyun void *devPrivate; 163*4882a593Smuzhiyun Bool createDummyCtx; 164*4882a593Smuzhiyun Bool createDummyCtxPriv; 165*4882a593Smuzhiyun 166*4882a593Smuzhiyun /* New with DRI version 4.1.0 */ 167*4882a593Smuzhiyun void (*TransitionSingleToMulti3D) (ScreenPtr pScreen); 168*4882a593Smuzhiyun void (*TransitionMultiToSingle3D) (ScreenPtr pScreen); 169*4882a593Smuzhiyun 170*4882a593Smuzhiyun /* New with DRI version 5.1.0 */ 171*4882a593Smuzhiyun void (*ClipNotify) (ScreenPtr pScreen, WindowPtr *ppWin, int num); 172*4882a593Smuzhiyun 173*4882a593Smuzhiyun /* New with DRI version 5.2.0 */ 174*4882a593Smuzhiyun Bool allocSarea; 175*4882a593Smuzhiyun Bool keepFDOpen; 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun /* New with DRI version 5.3.0 */ 178*4882a593Smuzhiyun DRITexOffsetStartProcPtr texOffsetStart; 179*4882a593Smuzhiyun DRITexOffsetFinishProcPtr texOffsetFinish; 180*4882a593Smuzhiyun 181*4882a593Smuzhiyun /* New with DRI version 5.4.0 */ 182*4882a593Smuzhiyun int dontMapFrameBuffer; 183*4882a593Smuzhiyun drm_handle_t hFrameBuffer; /* Handle to framebuffer, either 184*4882a593Smuzhiyun * mapped by DDX driver or DRI */ 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun } DRIInfoRec, *DRIInfoPtr; 187*4882a593Smuzhiyun 188*4882a593Smuzhiyun extern _X_EXPORT Bool DRIOpenDRMMaster(ScrnInfoPtr pScrn, 189*4882a593Smuzhiyun unsigned long sAreaSize, 190*4882a593Smuzhiyun const char *busID, 191*4882a593Smuzhiyun const char *drmDriverName); 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun extern _X_EXPORT Bool DRIScreenInit(ScreenPtr pScreen, 194*4882a593Smuzhiyun DRIInfoPtr pDRIInfo, int *pDRMFD); 195*4882a593Smuzhiyun 196*4882a593Smuzhiyun extern _X_EXPORT void DRICloseScreen(ScreenPtr pScreen); 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun extern Bool DRIExtensionInit(void); 199*4882a593Smuzhiyun 200*4882a593Smuzhiyun extern _X_EXPORT void DRIReset(void); 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun extern _X_EXPORT Bool DRIQueryDirectRenderingCapable(ScreenPtr pScreen, 203*4882a593Smuzhiyun Bool *isCapable); 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun extern _X_EXPORT Bool DRIOpenConnection(ScreenPtr pScreen, 206*4882a593Smuzhiyun drm_handle_t * hSAREA, 207*4882a593Smuzhiyun char **busIdString); 208*4882a593Smuzhiyun 209*4882a593Smuzhiyun extern _X_EXPORT Bool DRIAuthConnection(ScreenPtr pScreen, drm_magic_t magic); 210*4882a593Smuzhiyun 211*4882a593Smuzhiyun extern _X_EXPORT Bool DRICloseConnection(ScreenPtr pScreen); 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun extern _X_EXPORT Bool DRIGetClientDriverName(ScreenPtr pScreen, 214*4882a593Smuzhiyun int *ddxDriverMajorVersion, 215*4882a593Smuzhiyun int *ddxDriverMinorVersion, 216*4882a593Smuzhiyun int *ddxDriverPatchVersion, 217*4882a593Smuzhiyun char **clientDriverName); 218*4882a593Smuzhiyun 219*4882a593Smuzhiyun extern _X_EXPORT Bool DRICreateContext(ScreenPtr pScreen, 220*4882a593Smuzhiyun VisualPtr visual, 221*4882a593Smuzhiyun XID context, drm_context_t * pHWContext); 222*4882a593Smuzhiyun 223*4882a593Smuzhiyun extern _X_EXPORT Bool DRIDestroyContext(ScreenPtr pScreen, XID context); 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun extern _X_EXPORT Bool DRIContextPrivDelete(void *pResource, XID id); 226*4882a593Smuzhiyun 227*4882a593Smuzhiyun extern _X_EXPORT Bool DRICreateDrawable(ScreenPtr pScreen, 228*4882a593Smuzhiyun ClientPtr client, 229*4882a593Smuzhiyun DrawablePtr pDrawable, 230*4882a593Smuzhiyun drm_drawable_t * hHWDrawable); 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun extern _X_EXPORT Bool DRIDestroyDrawable(ScreenPtr pScreen, 233*4882a593Smuzhiyun ClientPtr client, 234*4882a593Smuzhiyun DrawablePtr pDrawable); 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun extern _X_EXPORT Bool DRIDrawablePrivDelete(void *pResource, XID id); 237*4882a593Smuzhiyun 238*4882a593Smuzhiyun extern _X_EXPORT Bool DRIGetDrawableInfo(ScreenPtr pScreen, 239*4882a593Smuzhiyun DrawablePtr pDrawable, 240*4882a593Smuzhiyun unsigned int *indx, 241*4882a593Smuzhiyun unsigned int *stamp, 242*4882a593Smuzhiyun int *X, 243*4882a593Smuzhiyun int *Y, 244*4882a593Smuzhiyun int *W, 245*4882a593Smuzhiyun int *H, 246*4882a593Smuzhiyun int *numClipRects, 247*4882a593Smuzhiyun drm_clip_rect_t ** pClipRects, 248*4882a593Smuzhiyun int *backX, 249*4882a593Smuzhiyun int *backY, 250*4882a593Smuzhiyun int *numBackClipRects, 251*4882a593Smuzhiyun drm_clip_rect_t ** pBackClipRects); 252*4882a593Smuzhiyun 253*4882a593Smuzhiyun extern _X_EXPORT Bool DRIGetDeviceInfo(ScreenPtr pScreen, 254*4882a593Smuzhiyun drm_handle_t * hFrameBuffer, 255*4882a593Smuzhiyun int *fbOrigin, 256*4882a593Smuzhiyun int *fbSize, 257*4882a593Smuzhiyun int *fbStride, 258*4882a593Smuzhiyun int *devPrivateSize, void **pDevPrivate); 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun extern _X_EXPORT DRIInfoPtr DRICreateInfoRec(void); 261*4882a593Smuzhiyun 262*4882a593Smuzhiyun extern _X_EXPORT void DRIDestroyInfoRec(DRIInfoPtr DRIInfo); 263*4882a593Smuzhiyun 264*4882a593Smuzhiyun extern _X_EXPORT Bool DRIFinishScreenInit(ScreenPtr pScreen); 265*4882a593Smuzhiyun 266*4882a593Smuzhiyun extern _X_EXPORT void DRIWakeupHandler(void *wakeupData, int result); 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun extern _X_EXPORT void DRIBlockHandler(void *blockData, void *timeout); 269*4882a593Smuzhiyun 270*4882a593Smuzhiyun extern _X_EXPORT void DRIDoWakeupHandler(ScreenPtr pScreen, int result); 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun extern _X_EXPORT void DRIDoBlockHandler(ScreenPtr pScreen, void *timeout); 273*4882a593Smuzhiyun 274*4882a593Smuzhiyun extern _X_EXPORT void DRISwapContext(int drmFD, void *oldctx, void *newctx); 275*4882a593Smuzhiyun 276*4882a593Smuzhiyun extern _X_EXPORT void *DRIGetContextStore(DRIContextPrivPtr context); 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun extern _X_EXPORT void DRIWindowExposures(WindowPtr pWin, RegionPtr prgn); 279*4882a593Smuzhiyun 280*4882a593Smuzhiyun extern _X_EXPORT Bool DRIDestroyWindow(WindowPtr pWin); 281*4882a593Smuzhiyun 282*4882a593Smuzhiyun extern _X_EXPORT void DRICopyWindow(WindowPtr pWin, 283*4882a593Smuzhiyun DDXPointRec ptOldOrg, RegionPtr prgnSrc); 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun extern _X_EXPORT void DRIClipNotify(WindowPtr pWin, int dx, int dy); 286*4882a593Smuzhiyun 287*4882a593Smuzhiyun extern _X_EXPORT CARD32 DRIGetDrawableIndex(WindowPtr pWin); 288*4882a593Smuzhiyun 289*4882a593Smuzhiyun extern _X_EXPORT void DRIPrintDrawableLock(ScreenPtr pScreen, char *msg); 290*4882a593Smuzhiyun 291*4882a593Smuzhiyun extern _X_EXPORT void DRILock(ScreenPtr pScreen, int flags); 292*4882a593Smuzhiyun 293*4882a593Smuzhiyun extern _X_EXPORT void DRIUnlock(ScreenPtr pScreen); 294*4882a593Smuzhiyun 295*4882a593Smuzhiyun extern _X_EXPORT DRIWrappedFuncsRec *DRIGetWrappedFuncs(ScreenPtr pScreen); 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun extern _X_EXPORT void *DRIGetSAREAPrivate(ScreenPtr pScreen); 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun extern _X_EXPORT unsigned int DRIGetDrawableStamp(ScreenPtr pScreen, 300*4882a593Smuzhiyun CARD32 drawable_index); 301*4882a593Smuzhiyun 302*4882a593Smuzhiyun extern _X_EXPORT DRIContextPrivPtr DRICreateContextPriv(ScreenPtr pScreen, 303*4882a593Smuzhiyun drm_context_t * 304*4882a593Smuzhiyun pHWContext, 305*4882a593Smuzhiyun DRIContextFlags flags); 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun extern _X_EXPORT DRIContextPrivPtr DRICreateContextPrivFromHandle(ScreenPtr 308*4882a593Smuzhiyun pScreen, 309*4882a593Smuzhiyun drm_context_t 310*4882a593Smuzhiyun hHWContext, 311*4882a593Smuzhiyun DRIContextFlags 312*4882a593Smuzhiyun flags); 313*4882a593Smuzhiyun 314*4882a593Smuzhiyun extern _X_EXPORT Bool DRIDestroyContextPriv(DRIContextPrivPtr pDRIContextPriv); 315*4882a593Smuzhiyun 316*4882a593Smuzhiyun extern _X_EXPORT drm_context_t DRIGetContext(ScreenPtr pScreen); 317*4882a593Smuzhiyun 318*4882a593Smuzhiyun extern _X_EXPORT void DRIQueryVersion(int *majorVersion, 319*4882a593Smuzhiyun int *minorVersion, int *patchVersion); 320*4882a593Smuzhiyun 321*4882a593Smuzhiyun extern _X_EXPORT void DRIAdjustFrame(ScrnInfoPtr pScrn, int x, int y); 322*4882a593Smuzhiyun 323*4882a593Smuzhiyun extern _X_EXPORT void DRIMoveBuffersHelper(ScreenPtr pScreen, 324*4882a593Smuzhiyun int dx, 325*4882a593Smuzhiyun int dy, 326*4882a593Smuzhiyun int *xdir, int *ydir, RegionPtr reg); 327*4882a593Smuzhiyun 328*4882a593Smuzhiyun extern _X_EXPORT int DRIMasterFD(ScrnInfoPtr pScrn); 329*4882a593Smuzhiyun 330*4882a593Smuzhiyun extern _X_EXPORT void *DRIMasterSareaPointer(ScrnInfoPtr pScrn); 331*4882a593Smuzhiyun 332*4882a593Smuzhiyun extern _X_EXPORT drm_handle_t DRIMasterSareaHandle(ScrnInfoPtr pScrn); 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun extern _X_EXPORT void DRIGetTexOffsetFuncs(ScreenPtr pScreen, 335*4882a593Smuzhiyun DRITexOffsetStartProcPtr * 336*4882a593Smuzhiyun texOffsetStartFunc, 337*4882a593Smuzhiyun DRITexOffsetFinishProcPtr * 338*4882a593Smuzhiyun texOffsetFinishFunc); 339*4882a593Smuzhiyun 340*4882a593Smuzhiyun #define _DRI_H_ 341*4882a593Smuzhiyun 342*4882a593Smuzhiyun #endif 343