dri.h revision 6747b715
11.45Slukem/************************************************************************** 21.11Scgd 31.1ScgdCopyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. 41.44SthorpejAll Rights Reserved. 51.10Smycroft 61.1ScgdPermission is hereby granted, free of charge, to any person obtaining a 71.1Scgdcopy of this software and associated documentation files (the 81.1Scgd"Software"), to deal in the Software without restriction, including 91.1Scgdwithout limitation the rights to use, copy, modify, merge, publish, 101.1Scgddistribute, sub license, and/or sell copies of the Software, and to 111.1Scgdpermit persons to whom the Software is furnished to do so, subject to 121.1Scgdthe following conditions: 131.1Scgd 141.1ScgdThe above copyright notice and this permission notice (including the 151.1Scgdnext paragraph) shall be included in all copies or substantial portions 161.1Scgdof the Software. 171.1Scgd 181.1ScgdTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 191.1ScgdOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 201.1ScgdMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 211.1ScgdIN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR 221.1ScgdANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 231.1ScgdTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 241.1ScgdSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 251.1Scgd 261.1Scgd**************************************************************************/ 271.1Scgd 281.1Scgd/* 291.1Scgd * Authors: 301.1Scgd * Jens Owen <jens@tungstengraphics.com> 311.1Scgd * 321.1Scgd */ 331.1Scgd 341.1Scgd/* Prototypes for DRI functions */ 351.44Sthorpej 361.1Scgd#ifndef _DRI_H_ 371.1Scgd 381.7Smycroft#include <pciaccess.h> 391.7Smycroft 401.7Smycroft#include "scrnintstr.h" 411.7Smycroft#include "xf86dri.h" 421.7Smycroft 431.7Smycrofttypedef int DRISyncType; 441.7Smycroft 451.7Smycroft#define DRI_NO_SYNC 0 461.10Smycroft#define DRI_2D_SYNC 1 471.10Smycroft#define DRI_3D_SYNC 2 481.10Smycroft 491.1Scgdtypedef int DRIContextType; 501.7Smycroft 511.7Smycrofttypedef struct _DRIContextPrivRec DRIContextPrivRec, *DRIContextPrivPtr; 521.1Scgd 531.7Smycrofttypedef enum _DRIContextFlags 541.7Smycroft{ 551.7Smycroft DRI_CONTEXT_2DONLY = 0x01, 561.7Smycroft DRI_CONTEXT_PRESERVED = 0x02, 571.7Smycroft DRI_CONTEXT_RESERVED = 0x04 /* DRI Only -- no kernel equivalent */ 581.7Smycroft} DRIContextFlags; 591.1Scgd 601.1Scgd#define DRI_NO_CONTEXT 0 611.1Scgd#define DRI_2D_CONTEXT 1 621.33Smycroft#define DRI_3D_CONTEXT 2 631.33Smycroft 641.33Smycrofttypedef int DRISwapMethod; 651.33Smycroft 661.33Smycroft#define DRI_HIDE_X_CONTEXT 0 671.33Smycroft#define DRI_SERVER_SWAP 1 681.33Smycroft#define DRI_KERNEL_SWAP 2 691.33Smycroft 701.33Smycrofttypedef int DRIWindowRequests; 711.33Smycroft 721.33Smycroft#define DRI_NO_WINDOWS 0 731.24Smycroft#define DRI_3D_WINDOWS_ONLY 1 741.43Slukem#define DRI_ALL_WINDOWS 2 751.43Slukem 761.43Slukem 771.18Smycrofttypedef void (*ClipNotifyPtr)( WindowPtr, int, int ); 781.33Smycrofttypedef void (*AdjustFramePtr)(int scrnIndex, int x, int y, int flags); 791.18Smycroft 801.33Smycroft 811.18Smycroft/* 821.18Smycroft * These functions can be wrapped by the DRI. Each of these have 831.21Scgd * generic default funcs (initialized in DRICreateInfoRec) and can be 841.33Smycroft * overridden by the driver in its [driver]DRIScreenInit function. 851.33Smycroft */ 861.33Smycrofttypedef struct { 871.33Smycroft ScreenWakeupHandlerProcPtr WakeupHandler; 881.43Slukem ScreenBlockHandlerProcPtr BlockHandler; 891.18Smycroft WindowExposuresProcPtr WindowExposures; 901.18Smycroft CopyWindowProcPtr CopyWindow; 911.10Smycroft ValidateTreeProcPtr ValidateTree; 921.25Schristos PostValidateTreeProcPtr PostValidateTree; 931.1Scgd ClipNotifyProcPtr ClipNotify; 941.25Schristos AdjustFramePtr AdjustFrame; 951.1Scgd} DRIWrappedFuncsRec, *DRIWrappedFuncsPtr; 961.25Schristos 971.1Scgd 981.24Smycroft/* 991.1Scgd * Prior to Xorg 6.8.99.8, the DRIInfoRec structure was implicitly versioned 1001.10Smycroft * by the XF86DRI_*_VERSION defines in xf86dristr.h. These numbers were also 1011.10Smycroft * being used to version the XFree86-DRI protocol. Bugs #3066 and #3163 1021.1Scgd * showed that this was inadequate. The DRIInfoRec structure is now versioned 1031.10Smycroft * by the DRIINFO_*_VERSION defines in this file. - ajax, 2005-05-18. 1041.18Smycroft * 1051.1Scgd * Revision history: 1061.39Smatt * 4.1.0 and earlier: DRIQueryVersion returns XF86DRI_*_VERSION. 1071.33Smycroft * 4.2.0: DRIQueryVersion begins returning DRIINFO_*_VERSION. 1081.24Smycroft * 5.0.0: frameBufferPhysicalAddress changed from CARD32 to pointer. 1091.21Scgd */ 1101.33Smycroft 1111.24Smycroft#define DRIINFO_MAJOR_VERSION 5 1121.1Scgd#define DRIINFO_MINOR_VERSION 4 1131.1Scgd#define DRIINFO_PATCH_VERSION 0 1141.8Smycroft 1151.10Smycrofttypedef unsigned long long (*DRITexOffsetStartProcPtr)(PixmapPtr pPix); 1161.28Smycrofttypedef void (*DRITexOffsetFinishProcPtr)(PixmapPtr pPix); 1171.28Smycroft 1181.1Scgdtypedef struct { 1191.28Smycroft /* driver call back functions 1201.1Scgd * 1211.25Schristos * New fields should be added at the end for backwards compatibility. 1221.1Scgd * Bump the DRIINFO patch number to indicate bugfixes. 1231.18Smycroft * Bump the DRIINFO minor number to indicate new fields. 1241.1Scgd * Bump the DRIINFO major number to indicate binary-incompatible changes. 1251.13Scgd */ 1261.10Smycroft Bool (*CreateContext)(ScreenPtr pScreen, 1271.41Smrg VisualPtr visual, 1281.10Smycroft drm_context_t hHWContext, 1291.41Smrg void* pVisualConfigPriv, 1301.1Scgd DRIContextType context); 1311.18Smycroft void (*DestroyContext)(ScreenPtr pScreen, 1321.1Scgd drm_context_t hHWContext, 1331.32Smycroft DRIContextType context); 1341.1Scgd void (*SwapContext)(ScreenPtr pScreen, 1351.10Smycroft DRISyncType syncType, 1361.4Sderaadt DRIContextType readContextType, 1371.4Sderaadt void* readContextStore, 1381.4Sderaadt DRIContextType writeContextType, 1391.28Smycroft void* writeContextStore); 1401.28Smycroft void (*InitBuffers)(WindowPtr pWin, 1411.28Smycroft RegionPtr prgn, 1421.28Smycroft CARD32 indx); 1431.28Smycroft void (*MoveBuffers)(WindowPtr pWin, 1441.10Smycroft DDXPointRec ptOldOrg, 1451.28Smycroft RegionPtr prgnSrc, 1461.28Smycroft CARD32 indx); 1471.28Smycroft void (*TransitionTo3d)(ScreenPtr pScreen); 1481.28Smycroft void (*TransitionTo2d)(ScreenPtr pScreen); 1491.28Smycroft 1501.28Smycroft void (*SetDrawableIndex)(WindowPtr pWin, CARD32 indx); 1511.28Smycroft Bool (*OpenFullScreen)(ScreenPtr pScreen); 1521.28Smycroft Bool (*CloseFullScreen)(ScreenPtr pScreen); 1531.28Smycroft 1541.10Smycroft /* wrapped functions */ 1551.28Smycroft DRIWrappedFuncsRec wrap; 1561.28Smycroft 1571.28Smycroft /* device info */ 1581.28Smycroft char* drmDriverName; 1591.28Smycroft char* clientDriverName; 1601.10Smycroft char* busIdString; 1611.28Smycroft int ddxDriverMajorVersion; 1621.28Smycroft int ddxDriverMinorVersion; 1631.32Smycroft int ddxDriverPatchVersion; 1641.28Smycroft pointer frameBufferPhysicalAddress; 1651.28Smycroft long frameBufferSize; 1661.28Smycroft long frameBufferStride; 1671.28Smycroft long SAREASize; 1681.28Smycroft int maxDrawableTableEntry; 1691.28Smycroft int ddxDrawableTableEntry; 1701.31Sperry long contextSize; 1711.28Smycroft DRISwapMethod driverSwapMethod; 1721.28Smycroft DRIWindowRequests bufferRequests; 1731.28Smycroft int devPrivateSize; 1741.28Smycroft void* devPrivate; 1751.31Sperry Bool createDummyCtx; 1761.33Smycroft Bool createDummyCtxPriv; 1771.28Smycroft 1781.28Smycroft /* New with DRI version 4.1.0 */ 1791.1Scgd void (*TransitionSingleToMulti3D)(ScreenPtr pScreen); 1801.28Smycroft void (*TransitionMultiToSingle3D)(ScreenPtr pScreen); 1811.45Slukem 1821.28Smycroft /* New with DRI version 5.1.0 */ 1831.36Smycroft void (*ClipNotify)(ScreenPtr pScreen, WindowPtr *ppWin, int num); 1841.45Slukem 1851.45Slukem /* New with DRI version 5.2.0 */ 1861.45Slukem Bool allocSarea; 1871.45Slukem Bool keepFDOpen; 1881.45Slukem 1891.45Slukem /* New with DRI version 5.3.0 */ 1901.45Slukem DRITexOffsetStartProcPtr texOffsetStart; 1911.45Slukem DRITexOffsetFinishProcPtr texOffsetFinish; 1921.45Slukem 1931.45Slukem /* New with DRI version 5.4.0 */ 1941.45Slukem int dontMapFrameBuffer; 1951.45Slukem drm_handle_t hFrameBuffer; /* Handle to framebuffer, either 1961.45Slukem * mapped by DDX driver or DRI */ 1971.45Slukem 1981.45Slukem} DRIInfoRec, *DRIInfoPtr; 1991.45Slukem 2001.45Slukem 2011.45Slukemextern _X_EXPORT Bool DRIOpenDRMMaster(ScrnInfoPtr pScrn, unsigned long sAreaSize, 2021.45Slukem const char *busID, 2031.45Slukem const char *drmDriverName); 2041.45Slukem 2051.45Slukemextern _X_EXPORT Bool DRIScreenInit(ScreenPtr pScreen, 2061.45Slukem DRIInfoPtr pDRIInfo, 2071.45Slukem int *pDRMFD); 2081.43Slukem 2091.45Slukemextern _X_EXPORT void DRICloseScreen(ScreenPtr pScreen); 2101.45Slukem 2111.45Slukemextern _X_EXPORT Bool DRIExtensionInit(void); 2121.45Slukem 2131.36Smycroftextern _X_EXPORT void DRIReset(void); 2141.36Smycroft 2151.36Smycroftextern _X_EXPORT Bool DRIQueryDirectRenderingCapable(ScreenPtr pScreen, 2161.42Slukem Bool *isCapable); 2171.40Sthorpej 2181.40Sthorpejextern _X_EXPORT Bool DRIOpenConnection(ScreenPtr pScreen, 2191.36Smycroft drm_handle_t * hSAREA, 2201.36Smycroft char **busIdString); 2211.45Slukem 2221.45Slukemextern _X_EXPORT Bool DRIAuthConnection(ScreenPtr pScreen, drm_magic_t magic); 2231.36Smycroft 2241.36Smycroftextern _X_EXPORT Bool DRICloseConnection(ScreenPtr pScreen); 2251.1Scgd 2261.33Smycroftextern _X_EXPORT Bool DRIGetClientDriverName(ScreenPtr pScreen, 2271.1Scgd int* ddxDriverMajorVersion, 2281.1Scgd int* ddxDriverMinorVersion, 2291.1Scgd int* ddxDriverPatchVersion, 2301.1Scgd char** clientDriverName); 2311.1Scgd 2321.1Scgdextern _X_EXPORT Bool DRICreateContext(ScreenPtr pScreen, 2331.1Scgd VisualPtr visual, 2341.1Scgd XID context, 2351.1Scgd drm_context_t * pHWContext); 2361.10Smycroft 2371.25Schristosextern _X_EXPORT Bool DRIDestroyContext(ScreenPtr pScreen, XID context); 2381.25Schristos 2391.1Scgdextern _X_EXPORT Bool DRIContextPrivDelete(pointer pResource, XID id); 2401.1Scgd 2411.25Schristosextern _X_EXPORT Bool DRICreateDrawable(ScreenPtr pScreen, 2421.1Scgd ClientPtr client, 2431.25Schristos DrawablePtr pDrawable, 2441.1Scgd drm_drawable_t * hHWDrawable); 2451.40Sthorpej 2461.1Scgdextern _X_EXPORT Bool DRIDestroyDrawable(ScreenPtr pScreen, 2471.1Scgd ClientPtr client, 2481.1Scgd DrawablePtr pDrawable); 2491.1Scgd 2501.1Scgdextern _X_EXPORT Bool DRIDrawablePrivDelete(pointer pResource, 2511.1Scgd XID id); 2521.1Scgd 2531.18Smycroftextern _X_EXPORT Bool DRIGetDrawableInfo(ScreenPtr pScreen, 2541.1Scgd DrawablePtr pDrawable, 2551.1Scgd unsigned int* indx, 2561.1Scgd unsigned int* stamp, 2571.1Scgd int* X, 2581.1Scgd int* Y, 2591.1Scgd int* W, 2601.1Scgd int* H, 2611.32Smycroft int* numClipRects, 2621.18Smycroft drm_clip_rect_t ** pClipRects, 2631.14Smycroft int* backX, 2641.18Smycroft int* backY, 2651.18Smycroft int* numBackClipRects, 2661.1Scgd drm_clip_rect_t ** pBackClipRects); 2671.32Smycroft 2681.32Smycroftextern _X_EXPORT Bool DRIGetDeviceInfo(ScreenPtr pScreen, 2691.32Smycroft drm_handle_t * hFrameBuffer, 2701.32Smycroft int* fbOrigin, 2711.32Smycroft int* fbSize, 2721.32Smycroft int* fbStride, 2731.32Smycroft int* devPrivateSize, 2741.32Smycroft void** pDevPrivate); 2751.32Smycroft 2761.32Smycroftextern _X_EXPORT DRIInfoPtr DRICreateInfoRec(void); 2771.32Smycroft 2781.32Smycroftextern _X_EXPORT void DRIDestroyInfoRec(DRIInfoPtr DRIInfo); 2791.32Smycroft 2801.1Scgdextern _X_EXPORT Bool DRIFinishScreenInit(ScreenPtr pScreen); 2811.1Scgd 2821.1Scgdextern _X_EXPORT void DRIWakeupHandler(pointer wakeupData, 2831.10Smycroft int result, 2841.1Scgd pointer pReadmask); 2851.1Scgd 2861.1Scgdextern _X_EXPORT void DRIBlockHandler(pointer blockData, 2871.1Scgd OSTimePtr pTimeout, 2881.1Scgd pointer pReadmask); 2891.32Smycroft 2901.32Smycroftextern _X_EXPORT void DRIDoWakeupHandler(int screenNum, 2911.1Scgd pointer wakeupData, 2921.1Scgd unsigned long result, 2931.1Scgd pointer pReadmask); 2941.1Scgd 2951.1Scgdextern _X_EXPORT void DRIDoBlockHandler(int screenNum, 2961.1Scgd pointer blockData, 2971.1Scgd pointer pTimeout, 2981.1Scgd pointer pReadmask); 2991.1Scgd 3001.1Scgdextern _X_EXPORT void DRISwapContext(int drmFD, 3011.15Smycroft void *oldctx, 3021.1Scgd void *newctx); 3031.1Scgd 3041.1Scgdextern _X_EXPORT void *DRIGetContextStore(DRIContextPrivPtr context); 3051.1Scgd 3061.1Scgdextern _X_EXPORT void DRIWindowExposures(WindowPtr pWin, 3071.1Scgd RegionPtr prgn, 3081.1Scgd RegionPtr bsreg); 3091.1Scgd 3101.10Smycroftextern _X_EXPORT Bool DRIDestroyWindow(WindowPtr pWin); 3111.10Smycroft 3121.1Scgdextern _X_EXPORT void DRICopyWindow(WindowPtr pWin, 3131.13Scgd DDXPointRec ptOldOrg, 3141.1Scgd RegionPtr prgnSrc); 3151.1Scgd 3161.27Smrgextern _X_EXPORT int DRIValidateTree(WindowPtr pParent, 3171.1Scgd WindowPtr pChild, 3181.1Scgd VTKind kind); 3191.18Smycroft 3201.1Scgdextern _X_EXPORT void DRIPostValidateTree(WindowPtr pParent, 3211.1Scgd WindowPtr pChild, 3221.1Scgd VTKind kind); 3231.6Shpeyerl 3241.6Shpeyerlextern _X_EXPORT void DRIClipNotify(WindowPtr pWin, 3251.6Shpeyerl int dx, 3261.6Shpeyerl int dy); 3271.6Shpeyerl 3281.14Smycroftextern _X_EXPORT CARD32 DRIGetDrawableIndex(WindowPtr pWin); 3291.6Shpeyerl 3301.6Shpeyerlextern _X_EXPORT void DRIPrintDrawableLock(ScreenPtr pScreen, char *msg); 3311.6Shpeyerl 3321.8Smycroftextern _X_EXPORT void DRILock(ScreenPtr pScreen, int flags); 3331.6Shpeyerl 3341.6Shpeyerlextern _X_EXPORT void DRIUnlock(ScreenPtr pScreen); 3351.6Shpeyerl 3361.18Smycroftextern _X_EXPORT DRIWrappedFuncsRec *DRIGetWrappedFuncs(ScreenPtr pScreen); 3371.18Smycroft 3381.6Shpeyerlextern _X_EXPORT void *DRIGetSAREAPrivate(ScreenPtr pScreen); 3391.6Shpeyerl 3401.6Shpeyerlextern _X_EXPORT unsigned int DRIGetDrawableStamp(ScreenPtr pScreen, 3411.6Shpeyerl CARD32 drawable_index); 3421.6Shpeyerl 3431.6Shpeyerlextern _X_EXPORT DRIContextPrivPtr DRICreateContextPriv(ScreenPtr pScreen, 3441.15Smycroft drm_context_t * pHWContext, 3451.1Scgd DRIContextFlags flags); 3461.33Smycroft 3471.32Smycroftextern _X_EXPORT DRIContextPrivPtr DRICreateContextPrivFromHandle(ScreenPtr pScreen, 3481.24Smycroft drm_context_t hHWContext, 3491.1Scgd DRIContextFlags flags); 3501.32Smycroft 3511.40Sthorpejextern _X_EXPORT Bool DRIDestroyContextPriv(DRIContextPrivPtr pDRIContextPriv); 3521.40Sthorpej 3531.28Smycroftextern _X_EXPORT drm_context_t DRIGetContext(ScreenPtr pScreen); 3541.40Sthorpej 3551.40Sthorpejextern _X_EXPORT void DRIQueryVersion(int *majorVersion, 3561.40Sthorpej int *minorVersion, 3571.40Sthorpej int *patchVersion); 3581.40Sthorpej 3591.40Sthorpejextern _X_EXPORT void DRIAdjustFrame(int scrnIndex, int x, int y, int flags); 3601.40Sthorpej 3611.40Sthorpejextern _X_EXPORT void DRIMoveBuffersHelper(ScreenPtr pScreen, 3621.40Sthorpej int dx, 3631.1Scgd int dy, 3641.1Scgd int *xdir, 3651.1Scgd int *ydir, 3661.1Scgd RegionPtr reg); 3671.33Smycroft 3681.1Scgdextern _X_EXPORT char *DRICreatePCIBusID(const struct pci_device *PciInfo); 3691.1Scgd 3701.1Scgdextern _X_EXPORT int drmInstallSIGIOHandler(int fd, void (*f)(int, void *, void *)); 3711.25Schristosextern _X_EXPORT int drmRemoveSIGIOHandler(int fd); 3721.25Schristosextern _X_EXPORT int DRIMasterFD(ScrnInfoPtr pScrn); 3731.25Schristos 3741.1Scgdextern _X_EXPORT void *DRIMasterSareaPointer(ScrnInfoPtr pScrn); 3751.25Schristos 3761.1Scgdextern _X_EXPORT drm_handle_t DRIMasterSareaHandle(ScrnInfoPtr pScrn); 3771.32Smycroft 3781.1Scgdextern _X_EXPORT void DRIGetTexOffsetFuncs(ScreenPtr pScreen, 3791.33Smycroft DRITexOffsetStartProcPtr *texOffsetStartFunc, 3801.1Scgd DRITexOffsetFinishProcPtr *texOffsetFinishFunc); 3811.1Scgd 3821.1Scgd#define _DRI_H_ 3831.1Scgd 3841.25Schristos#endif 3851.25Schristos