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