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