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